Changed
Add video tutorial to the repository
Changelog
Every released version of DmfTheOne, newest first.
Add video tutorial to the repository
Fix malformed SVG path data in buy-box-wrapper clip-path (missing closing z command and stray characters caused the mask to not render)
Restore full shape-form6 clip-path coordinates that were previously truncated with a placeholder ellipsis
Apply the same corrections in the PWA TheOneClipPaths.vue component and the static buy-box-wrapper.svg asset
Switch Ollama provider to OpenAI-compatible API format (/v1/chat/completions) so any OpenAI-compatible server (local Ollama, remote vLLM, LM Studio, etc.) can be used as a second provider
Add optional fire-and-forget AI usage logging service - configurable endpoint and secret in plugin settings
Add static SVG mask assets and placeholder image committed directly to the repository so they are available without an upload step on first install
Add isTreeExpanded state with MutationObserver to track modal visibility and auto-expand the row tree for new elements
Cache system-config lookups (CSS library, placeholder media ID, template list) to avoid redundant API calls across multiple element instances
Add rowDrafts map to the row component so in-progress edits are held locally until saved
Update config labels and help texts to reflect the new OpenAI-compatible provider name instead of "Ollama (Local)"
Improve placeholder media detection to check by filename before uploading, preventing duplicate uploads on repeated plugin boots
Fix inner-row preview positioning in the admin editor
Update documentation extensively
Fix PlaceholderMediaService not respecting an already-existing upload - now checks the config key first, then filename
Remove hot-module-replacement entry point from storefront/src/main.js to prevent stale module issues in production builds
Replace separate col.items.value and col.rows.value arrays with a single unified col.children.value array - each child has type: 'item' or type: 'row'; all saved DB templates must use the new format (no migration compatibility layer)
Remove OpenAI/ChatGPT as an AI provider - only Anthropic and Ollama (OpenAI-compatible) are supported
Rename storefront template sub-directory from flat element/ to element/the-one-widgets/ to reduce namespace collisions
Replace subRow boolean prop on row/col components with isNested and a structured path object (outerRow, outerCol, innerRow, innerCol, subRowIndex)
Add AI assistant tab to the element config with text input, voice input (SpeechRecognition API), image upload support (Anthropic only), one-step undo, and edit mode for modifying existing layouts
Add AI provider backend (AiParserController, AiPromptBuilder, AiContextBuilder, AiSlotProcessor, AiProviderClient) supporting Anthropic (Claude) and Ollama
Add plugin settings page (config.xml) with configurable AI provider, model, API key, Ollama URL, rate limit, prompt caching toggle, output validation, and custom utility classes
Add per-user rate limiting for AI requests (configurable, default 20/hour) using the Symfony cache component
Add template gallery with save, load, update, and delete actions via an action-modal component
Add masking system - apply clip-path shapes or SVG masks to any row, col, or item via a dedicated mask tab; support custom-uploaded mask images
Add the-one-media-picker shared component wrapping sw-media-upload-v2 and a modal for reuse across col image items and the mask tab
Add CSS library selector (Bootstrap / Tailwind) with configurable custom utility classes editor and validation
Add PWA Vue components (TheOneElement, TheOneCol, TheOneRow, TheOneItem, TheOneLinkedItem, TheOneClipPaths) for framework-agnostic template storage and preview
Add AI layout template presets for banners, sliders, cards, and accordions
Add use-the-one-state.js composable providing reactive shared state via Vue provide/inject (theOneState)
Add use-tree-operations.js, use-ai-assistant.js, use-ai-image.js, use-template-gallery.js composables to split config logic into focused units
Add slim-for-ai.js utility to compact element structure before sending to the AI, reducing token usage
Add SpeechRecognitionService for voice-driven AI prompts
Add TheOneSanitizeExtension Twig extension to sanitize custom CSS before output (blocks </style> injection)
Add SystemConfigSubscriber to auto-upload the placeholder image on plugin activation
Add PlaceholderMediaService for managing the placeholder media entity
Add TheOneCmsElementResolver data resolver for server-side element resolution
Add cms-element-the-one-macros.html.twig with shared Twig macros (getClass, dynamicStyles, applyMask) replacing duplicated inline logic
Add cms-element-the-one-col.html.twig storefront partial for rendering col children
Render inline SVG <clipPath> definitions once per element in {% block element_the_one_clip_paths %} for mask shapes that rely on SVG clip-path IDs
Add unit tests for AiSlotProcessor (PHP) and layout.js / slim-for-ai.js (Node)
Rewrite defaults/index.js from 444 lines to ~142 using factory functions (sv(), createStyles(), createRow(), createOuterCol(), etc.)
Replace old dual-mode row/ and col/ components with four focused components: outer-row, outer-col, inner-row, inner-col registered as the-one-row and the-one-col
Move repeated helper functions from component methods into composables and utils to eliminate prop drilling and code duplication
Migrate storefront macros (getClass, dynamicStyles) from inline per-template Twig blocks to shared cms-element-the-one-macros.html.twig
Refactor migration files: rename Migration20250709180000 to Migration1740000000 for correct ordering; add Migration1747440000 for the unique-template-name constraint
Remove bundled Splide slider code (JS plugin, SCSS, webpack config, storefront snippets, and twig template) and declare dmf/sw6-plugin-splide-slider as a Composer dependency instead, making the slider a proper external dependency
Add splide-slider-navigation-wrapper class to the slider navigation container div to allow targeted CSS styling and remove padding for boxed and small-width sections
Fix column duplication function in the row component - ensure the cloned col is pushed correctly before returning
Add "Advanced" tab to the element config containing a custom CSS editor
Output custom CSS in a <style> block in the storefront template
Add breadcrumb rendering method to the row component for orientation inside deeply nested structures
Add visual highlight (active class) to the parent container when item settings are opened
Add column duplication: copy a col with all its content and styles via a duplicate button in the row toolbar
Replace sw-tabs with mt-tabs across all config components for Shopware 6.7 compatibility
Add the-one-tab-active-item mixin to track the active tab state reactively
Rename tab components from guppy-cms-* to the-one-cms-* to align with the plugin namespace
Add twig blocks to all tab sub-components for extensibility
Replace sw-checkbox-field with mt-checkbox, sw-icon with mt-icon throughout the config
Add Shopware CMS sidebar accordion entry for the-one blocks via a sw-cms-detail override
Add unique elementId prop passed to col and settings sub-components so DOM queries are scoped to the current element instance, fixing bugs when multiple elements are open simultaneously
Add column width options (col-1 through col-12, tablet, desktop) as computed select options in the settings component
Replace old togglePreview DOM manipulation with addFullWidth - consolidates full-width preview logic into the row component
Reset the item-type select box after adding a new item
Fix item settings toggle to query within the element's own DOM subtree instead of globally, preventing cross-element interference
Fix addElement guard to return early if no item type is selected, preventing empty item creation
Fix new item default value from null to empty string for text fields
Fix headlineTag and headlineTagStyle defaults to empty string (were null)
Rename migration class from Migration20250709180000 to Migration2147483646 for deterministic ordering
Update README with "how to use" instructions and usage description
Revise README content
Raise minimum Shopware requirement to >=6.7.0 in composer.json
Replace togglePreview DOM approach with addFullWidth toggling - selected col preview expands to full width, others collapse to zero width, with active state indicator on the trigger button
Remove addFullWidth from the col component and consolidate into the row component
Add position field as a select box instead of a free-text input
Add snippets for col and row labels
Reset the item-type select box to the first option after adding a new item
Remove stray console.log debug statement from toggleSettings
Add more admin snippets (en-GB and de-DE) for settings, style, and navigation tabs
Remove debug dump() call from the storefront item template
Adjust config layout and field grouping in the settings tab
Initial plugin release: CMS block and element "The One" for Shopware 6
Admin config with row, col, and item management (text field, textarea, media upload, button, link, icon)
Style tab with size, spacing, color, alignment, and masking settings per row, col, and item
Navigation tab for slider settings
Splide slider integration in storefront (init JS plugin, SCSS, twig template)
Template save/load system with the_one_template database table, REST API controller, and admin gallery UI
KebabCaseFilter Twig extension
Storefront block and element twig templates including linked-item and item partials
Plugin config, routes, services, and migration for initial DB schema