Skip to content

Changelog

DmfTheOne

Every released version of DmfTheOne, newest first.

CMS 16 releases latest 2.1.2RepositoryDocumentation

Changed

  • Add video tutorial to the repository

Fixed

  • 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

Added

  • 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

Changed

  • 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

Fixed

  • 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

Breaking

  • 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)

Added

  • 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)

Changed

  • 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

Changed

  • 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

Fixed

  • 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

Fixed

  • Fix column duplication function in the row component - ensure the cloned col is pushed correctly before returning

Added

  • 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

Changed

  • 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

Added

  • 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

Changed

  • Replace sw-checkbox-field with mt-checkbox, sw-icon with mt-icon throughout the config

Added

  • 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

Changed

  • 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

Fixed

  • 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

Changed

  • Update README with "how to use" instructions and usage description

Changed

  • Revise README content

Compatibility

  • Raise minimum Shopware requirement to >=6.7.0 in composer.json

Changed

  • 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

Fixed

  • Remove stray console.log debug statement from toggleSettings

Changed

  • 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

Added

  • 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