Releases: craftile/editor
@craftile/types@1.0.4
Patch Changes
36f9a37Thanks @eldomagan! - Fix block insert/move/re-enable landing in the wrong DOM slot when preceded by disabled siblings. Disabled blocks are excluded from the preview DOM but still occupy a slot in the data tree, so positioning by raw data-tree index produced an off-by-N error. The editor now resolves sibling refs (afterId/beforeId) from the full engine state, skipping disabled blocks, and ships them inUpdatesEvent.changes.positions. The preview client uses these refs to anchor inserts and moves, so DOM order matches data-tree intent regardless of disabled siblings.
@craftile/preview-client@1.0.4
@craftile/preview-client@1.0.4
@craftile/preview-client-html@1.0.4
Patch Changes
36f9a37Thanks @eldomagan! - Fix block insert/move/re-enable landing in the wrong DOM slot when preceded by disabled siblings. Disabled blocks are excluded from the preview DOM but still occupy a slot in the data tree, so positioning by raw data-tree index produced an off-by-N error. The editor now resolves sibling refs (afterId/beforeId) from the full engine state, skipping disabled blocks, and ships them inUpdatesEvent.changes.positions. The preview client uses these refs to anchor inserts and moves, so DOM order matches data-tree intent regardless of disabled siblings.
@craftile/plugin-static-blocks-renderer@1.0.4
@craftile/plugin-static-blocks-renderer@1.0.4
@craftile/plugin-common-properties@1.0.4
Patch Changes
3bf7da6Thanks @eldomagan! - Fix Select field dropdown getting clipped when the field is rendered inside anoverflow: hiddenancestor (e.g. anAccordion.ItemContentfor grouped properties).Select.Positionernow teleports to.__craftileso the dropdown escapes the clipping ancestor.
@craftile/messenger@1.0.4
@craftile/messenger@1.0.4
@craftile/event-bus@1.0.4
@craftile/event-bus@1.0.4
@craftile/editor@1.0.4
Patch Changes
-
fde8f70Thanks @eldomagan! - Constrain dynamic block children to a single contiguous slot. A parent's dynamic children (children withoutstatic: true) must now form one uninterrupted run. Once the user places a dynamic block in a particular gap relative to the parent's static children, further dynamic blocks have to land in that same gap. Insertion between two adjacent static siblings is rejected outright. The rule is enforced inInsertBlockCommand,InsertBlockFromPresetCommand, andMoveBlockCommandwith validate before mutate semantics, so a rejected operation leaves the page untouched (no orphaned blocks inpage.blocks, no preset subtree leak, no event emitted). The same check drives the editor UI: disallowed+buttons in the layers panel, the right click context menu's insert and move items, and the popover's allowed schemas all hide or disable on slot violations. Engine throws are caught at the popover, drag end, paste after, and context menu call sites and surfaced as error toasts. -
0bbabc3Thanks @eldomagan! - Fix child reorders corrupting the preview iframe when the parent is rendered as multiple DOM instances (e.g., blocks with arepeated: trueancestor). When the moved block lives in a repeated context, source and target parent IDs are now included inchanges.updatedso preview clients skip the optimistic single-element DOM move and rely on the html-effects refresh to keep every rendered instance in sync. Non-repeated layouts continue to use the optimistic move and feel instant. -
36f9a37Thanks @eldomagan! - Fix block insert/move/re-enable landing in the wrong DOM slot when preceded by disabled siblings. Disabled blocks are excluded from the preview DOM but still occupy a slot in the data tree, so positioning by raw data-tree index produced an off-by-N error. The editor now resolves sibling refs (afterId/beforeId) from the full engine state, skipping disabled blocks, and ships them inUpdatesEvent.changes.positions. The preview client uses these refs to anchor inserts and moves, so DOM order matches data-tree intent regardless of disabled siblings. -
feac71eThanks @eldomagan! - Fix responsive property switcher dropdown opening at wrong position. TheSelect.Positioneris now teleported to.__craftileso Floating UI computes coordinates against the editor root instead of the in-tree absolute container, which caused the dropdown to open at the viewport top-left. -
8d843efThanks @eldomagan! - Fix the selection toolbar staying visible (and snapping to the top-left of the canvas) after deleting the selected block from the layer panel or context menu. The editor now listens to the engine'sblock:removeevent and clears the UI selection when the removed block was selected, so every delete path (layers panel, context menu, future plugin/keyboard removals) properly tears down the toolbar and the preview client's selection observers. -
8222a1cThanks @eldomagan! - Persist user-saved custom devices to localStorage so they survive page reloads. ThesavedCustomDevicesarray onDevicesManagerwas previously reset to[]on every editor construction; it now restores fromlocalStorageunder the keycraftile-editor:custom-devicesand writes through on add / remove. Loaded entries are shape-validated (id, label, width, optional icon). -
7d6f2ebThanks @eldomagan! - Redesign toast notifications with stacked, decreasing-width layout matching the Ark UI docs aesthetic. The previous implementation wrapped Ark UI'sToast.Rootin a styled<div>, which prevented the--x / --y / --scale / --z-index / --height / --opacityCSS variables (set by the toast machine) from taking effect, so multiple toasts didn't visually stack. Styles now live directly onToast.Root, enabling the smooth translate/scale transitions when toasts enter, swap positions, or close. Type theming switches to filled colored surfaces forsuccess/warning/errorand a clean white surface forinfo, with a single--toast-bg / --toast-fg / --toast-bordervariable pattern. -
Updated dependencies [
fde8f70,36f9a37]:- @craftile/core@1.0.4
- @craftile/types@1.0.4
- @craftile/event-bus@1.0.4
- @craftile/messenger@1.0.4
@craftile/core@1.0.4
Patch Changes
-
fde8f70Thanks @eldomagan! - Constrain dynamic block children to a single contiguous slot. A parent's dynamic children (children withoutstatic: true) must now form one uninterrupted run. Once the user places a dynamic block in a particular gap relative to the parent's static children, further dynamic blocks have to land in that same gap. Insertion between two adjacent static siblings is rejected outright. The rule is enforced inInsertBlockCommand,InsertBlockFromPresetCommand, andMoveBlockCommandwith validate before mutate semantics, so a rejected operation leaves the page untouched (no orphaned blocks inpage.blocks, no preset subtree leak, no event emitted). The same check drives the editor UI: disallowed+buttons in the layers panel, the right click context menu's insert and move items, and the popover's allowed schemas all hide or disable on slot violations. Engine throws are caught at the popover, drag end, paste after, and context menu call sites and surfaced as error toasts. -
Updated dependencies [
36f9a37]:- @craftile/types@1.0.4
- @craftile/event-bus@1.0.4
@craftile/types@1.0.3
@craftile/types@1.0.3