@aglyn/besigner-ui 1.0.0-beta.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +7 -0
- package/package.json +73 -0
- package/src/besigner.d.ts +88 -0
- package/src/besigner.js +89 -0
- package/src/besigner.js.map +1 -0
- package/src/index.d.ts +17 -0
- package/src/index.js +18 -0
- package/src/index.js.map +1 -0
- package/src/lib/box-styler/box-styler.d.ts +57 -0
- package/src/lib/box-styler/box-styler.js +240 -0
- package/src/lib/box-styler/box-styler.js.map +1 -0
- package/src/lib/box-styler/components/box-diagram.d.ts +89 -0
- package/src/lib/box-styler/components/box-diagram.js +661 -0
- package/src/lib/box-styler/components/box-diagram.js.map +1 -0
- package/src/lib/box-styler/components/legend.d.ts +56 -0
- package/src/lib/box-styler/components/legend.js +130 -0
- package/src/lib/box-styler/components/legend.js.map +1 -0
- package/src/lib/box-styler/components/spacing-editor.d.ts +55 -0
- package/src/lib/box-styler/components/spacing-editor.js +347 -0
- package/src/lib/box-styler/components/spacing-editor.js.map +1 -0
- package/src/lib/box-styler/constants.d.ts +17 -0
- package/src/lib/box-styler/constants.js +30 -0
- package/src/lib/box-styler/constants.js.map +1 -0
- package/src/lib/box-styler/index.d.ts +2 -0
- package/src/lib/box-styler/index.js +4 -0
- package/src/lib/box-styler/index.js.map +1 -0
- package/src/lib/box-styler/region-fills.d.ts +107 -0
- package/src/lib/box-styler/region-fills.js +139 -0
- package/src/lib/box-styler/region-fills.js.map +1 -0
- package/src/lib/box-styler/spacing-value.d.ts +104 -0
- package/src/lib/box-styler/spacing-value.js +223 -0
- package/src/lib/box-styler/spacing-value.js.map +1 -0
- package/src/lib/box-styler/types.d.ts +29 -0
- package/src/lib/box-styler/types.js +18 -0
- package/src/lib/box-styler/types.js.map +1 -0
- package/src/lib/components/accordion-list.component.d.ts +50 -0
- package/src/lib/components/accordion-list.component.js +228 -0
- package/src/lib/components/accordion-list.component.js.map +1 -0
- package/src/lib/components/add-controls.component.d.ts +22 -0
- package/src/lib/components/add-controls.component.js +50 -0
- package/src/lib/components/add-controls.component.js.map +1 -0
- package/src/lib/components/app-bar-breadcrumbs.component.d.ts +29 -0
- package/src/lib/components/app-bar-breadcrumbs.component.js +279 -0
- package/src/lib/components/app-bar-breadcrumbs.component.js.map +1 -0
- package/src/lib/components/app-bar-primary.component.d.ts +21 -0
- package/src/lib/components/app-bar-primary.component.js +108 -0
- package/src/lib/components/app-bar-primary.component.js.map +1 -0
- package/src/lib/components/app-bar-secondary.component.d.ts +21 -0
- package/src/lib/components/app-bar-secondary.component.js +94 -0
- package/src/lib/components/app-bar-secondary.component.js.map +1 -0
- package/src/lib/components/aside-panel.component.d.ts +23 -0
- package/src/lib/components/aside-panel.component.js +505 -0
- package/src/lib/components/aside-panel.component.js.map +1 -0
- package/src/lib/components/besigner-conflict-alert.component.d.ts +36 -0
- package/src/lib/components/besigner-conflict-alert.component.js +51 -0
- package/src/lib/components/besigner-conflict-alert.component.js.map +1 -0
- package/src/lib/components/besigner-dnd-context.component.d.ts +32 -0
- package/src/lib/components/besigner-dnd-context.component.js +75 -0
- package/src/lib/components/besigner-dnd-context.component.js.map +1 -0
- package/src/lib/components/besigner-draft-alert.component.d.ts +70 -0
- package/src/lib/components/besigner-draft-alert.component.js +155 -0
- package/src/lib/components/besigner-draft-alert.component.js.map +1 -0
- package/src/lib/components/besigner-root-provider.component.d.ts +33 -0
- package/src/lib/components/besigner-root-provider.component.js +68 -0
- package/src/lib/components/besigner-root-provider.component.js.map +1 -0
- package/src/lib/components/binding-preview-controls.component.d.ts +28 -0
- package/src/lib/components/binding-preview-controls.component.js +63 -0
- package/src/lib/components/binding-preview-controls.component.js.map +1 -0
- package/src/lib/components/closeable-drawer.component.d.ts +32 -0
- package/src/lib/components/closeable-drawer.component.js +134 -0
- package/src/lib/components/closeable-drawer.component.js.map +1 -0
- package/src/lib/components/component-accordion-list.d.ts +28 -0
- package/src/lib/components/component-accordion-list.js +205 -0
- package/src/lib/components/component-accordion-list.js.map +1 -0
- package/src/lib/components/component-icon.component.d.ts +32 -0
- package/src/lib/components/component-icon.component.js +51 -0
- package/src/lib/components/component-icon.component.js.map +1 -0
- package/src/lib/components/component-picker.d.ts +27 -0
- package/src/lib/components/component-picker.js +368 -0
- package/src/lib/components/component-picker.js.map +1 -0
- package/src/lib/components/components-grid-list.component.d.ts +31 -0
- package/src/lib/components/components-grid-list.component.js +162 -0
- package/src/lib/components/components-grid-list.component.js.map +1 -0
- package/src/lib/components/custom-css-form.component.d.ts +115 -0
- package/src/lib/components/custom-css-form.component.js +699 -0
- package/src/lib/components/custom-css-form.component.js.map +1 -0
- package/src/lib/components/device-preview-controls.component.d.ts +22 -0
- package/src/lib/components/device-preview-controls.component.js +150 -0
- package/src/lib/components/device-preview-controls.component.js.map +1 -0
- package/src/lib/components/dnd/canvas-drop-indicator.d.ts +20 -0
- package/src/lib/components/dnd/canvas-drop-indicator.js +61 -0
- package/src/lib/components/dnd/canvas-drop-indicator.js.map +1 -0
- package/src/lib/components/dnd/draggable-droppable.d.ts +31 -0
- package/src/lib/components/dnd/draggable-droppable.js +383 -0
- package/src/lib/components/dnd/draggable-droppable.js.map +1 -0
- package/src/lib/components/dnd/draggable.d.ts +42 -0
- package/src/lib/components/dnd/draggable.js +66 -0
- package/src/lib/components/dnd/draggable.js.map +1 -0
- package/src/lib/components/dnd/drop-indicator.d.ts +31 -0
- package/src/lib/components/dnd/drop-indicator.js +139 -0
- package/src/lib/components/dnd/drop-indicator.js.map +1 -0
- package/src/lib/components/dnd/droppable.d.ts +43 -0
- package/src/lib/components/dnd/droppable.js +63 -0
- package/src/lib/components/dnd/droppable.js.map +1 -0
- package/src/lib/components/element-card.component.d.ts +23 -0
- package/src/lib/components/element-card.component.js +49 -0
- package/src/lib/components/element-card.component.js.map +1 -0
- package/src/lib/components/element-classes-field.component.d.ts +41 -0
- package/src/lib/components/element-classes-field.component.js +140 -0
- package/src/lib/components/element-classes-field.component.js.map +1 -0
- package/src/lib/components/element-detail-overlay.component.d.ts +55 -0
- package/src/lib/components/element-detail-overlay.component.js +157 -0
- package/src/lib/components/element-detail-overlay.component.js.map +1 -0
- package/src/lib/components/element-detail.component.d.ts +56 -0
- package/src/lib/components/element-detail.component.js +171 -0
- package/src/lib/components/element-detail.component.js.map +1 -0
- package/src/lib/components/element-info-details.component.d.ts +18 -0
- package/src/lib/components/element-info-details.component.js +169 -0
- package/src/lib/components/element-info-details.component.js.map +1 -0
- package/src/lib/components/element-interactions-form.component.d.ts +21 -0
- package/src/lib/components/element-interactions-form.component.js +199 -0
- package/src/lib/components/element-interactions-form.component.js.map +1 -0
- package/src/lib/components/element-preview.component.d.ts +75 -0
- package/src/lib/components/element-preview.component.js +346 -0
- package/src/lib/components/element-preview.component.js.map +1 -0
- package/src/lib/components/element-props-form.component.d.ts +565 -0
- package/src/lib/components/element-props-form.component.js +2392 -0
- package/src/lib/components/element-props-form.component.js.map +1 -0
- package/src/lib/components/element-styles-form-template.component.d.ts +27 -0
- package/src/lib/components/element-styles-form-template.component.js +89 -0
- package/src/lib/components/element-styles-form-template.component.js.map +1 -0
- package/src/lib/components/element-styles-form.component.d.ts +52 -0
- package/src/lib/components/element-styles-form.component.js +1350 -0
- package/src/lib/components/element-styles-form.component.js.map +1 -0
- package/src/lib/components/empty-document-slot.d.ts +39 -0
- package/src/lib/components/empty-document-slot.js +121 -0
- package/src/lib/components/empty-document-slot.js.map +1 -0
- package/src/lib/components/empty-results.d.ts +22 -0
- package/src/lib/components/empty-results.js +131 -0
- package/src/lib/components/empty-results.js.map +1 -0
- package/src/lib/components/history-controls.component.d.ts +21 -0
- package/src/lib/components/history-controls.component.js +67 -0
- package/src/lib/components/history-controls.component.js.map +1 -0
- package/src/lib/components/inline-markdown-editor.component.d.ts +17 -0
- package/src/lib/components/inline-markdown-editor.component.js +220 -0
- package/src/lib/components/inline-markdown-editor.component.js.map +1 -0
- package/src/lib/components/inline-text-editor.component.d.ts +48 -0
- package/src/lib/components/inline-text-editor.component.js +905 -0
- package/src/lib/components/inline-text-editor.component.js.map +1 -0
- package/src/lib/components/insert-token-menu.component.d.ts +86 -0
- package/src/lib/components/insert-token-menu.component.js +232 -0
- package/src/lib/components/insert-token-menu.component.js.map +1 -0
- package/src/lib/components/instance-attr-overrides.component.d.ts +50 -0
- package/src/lib/components/instance-attr-overrides.component.js +298 -0
- package/src/lib/components/instance-attr-overrides.component.js.map +1 -0
- package/src/lib/components/interact-controls.component.d.ts +22 -0
- package/src/lib/components/interact-controls.component.js +74 -0
- package/src/lib/components/interact-controls.component.js.map +1 -0
- package/src/lib/components/markdown-attribute-field.component.d.ts +40 -0
- package/src/lib/components/markdown-attribute-field.component.js +103 -0
- package/src/lib/components/markdown-attribute-field.component.js.map +1 -0
- package/src/lib/components/node-card.d.ts +24 -0
- package/src/lib/components/node-card.js +86 -0
- package/src/lib/components/node-card.js.map +1 -0
- package/src/lib/components/node-context-menu.d.ts +25 -0
- package/src/lib/components/node-context-menu.js +558 -0
- package/src/lib/components/node-context-menu.js.map +1 -0
- package/src/lib/components/node-leaf.d.ts +39 -0
- package/src/lib/components/node-leaf.js +628 -0
- package/src/lib/components/node-leaf.js.map +1 -0
- package/src/lib/components/node-outline.d.ts +24 -0
- package/src/lib/components/node-outline.js +156 -0
- package/src/lib/components/node-outline.js.map +1 -0
- package/src/lib/components/node-overlay.d.ts +23 -0
- package/src/lib/components/node-overlay.js +299 -0
- package/src/lib/components/node-overlay.js.map +1 -0
- package/src/lib/components/node-quick-actions.d.ts +24 -0
- package/src/lib/components/node-quick-actions.js +284 -0
- package/src/lib/components/node-quick-actions.js.map +1 -0
- package/src/lib/components/node-tree-view.d.ts +106 -0
- package/src/lib/components/node-tree-view.js +820 -0
- package/src/lib/components/node-tree-view.js.map +1 -0
- package/src/lib/components/panel-controls.component.d.ts +22 -0
- package/src/lib/components/panel-controls.component.js +76 -0
- package/src/lib/components/panel-controls.component.js.map +1 -0
- package/src/lib/components/picker-search-field.d.ts +38 -0
- package/src/lib/components/picker-search-field.js +79 -0
- package/src/lib/components/picker-search-field.js.map +1 -0
- package/src/lib/components/plugin-settings-field.component.d.ts +38 -0
- package/src/lib/components/plugin-settings-field.component.js +264 -0
- package/src/lib/components/plugin-settings-field.component.js.map +1 -0
- package/src/lib/components/properties-dialog.component.d.ts +22 -0
- package/src/lib/components/properties-dialog.component.js +40 -0
- package/src/lib/components/properties-dialog.component.js.map +1 -0
- package/src/lib/components/property-binding-field.component.d.ts +142 -0
- package/src/lib/components/property-binding-field.component.js +325 -0
- package/src/lib/components/property-binding-field.component.js.map +1 -0
- package/src/lib/components/property-values-form.component.d.ts +43 -0
- package/src/lib/components/property-values-form.component.js +223 -0
- package/src/lib/components/property-values-form.component.js.map +1 -0
- package/src/lib/components/scheme-preview-controls.component.d.ts +26 -0
- package/src/lib/components/scheme-preview-controls.component.js +56 -0
- package/src/lib/components/scheme-preview-controls.component.js.map +1 -0
- package/src/lib/components/screen-link-field.component.d.ts +118 -0
- package/src/lib/components/screen-link-field.component.js +282 -0
- package/src/lib/components/screen-link-field.component.js.map +1 -0
- package/src/lib/components/site-theme-color-tokens-provider.component.d.ts +33 -0
- package/src/lib/components/site-theme-color-tokens-provider.component.js +53 -0
- package/src/lib/components/site-theme-color-tokens-provider.component.js.map +1 -0
- package/src/lib/components/subtree-json-dialog.component.d.ts +46 -0
- package/src/lib/components/subtree-json-dialog.component.js +125 -0
- package/src/lib/components/subtree-json-dialog.component.js.map +1 -0
- package/src/lib/components/token-pill.component.d.ts +51 -0
- package/src/lib/components/token-pill.component.js +164 -0
- package/src/lib/components/token-pill.component.js.map +1 -0
- package/src/lib/components/token-text-field.component.d.ts +146 -0
- package/src/lib/components/token-text-field.component.js +603 -0
- package/src/lib/components/token-text-field.component.js.map +1 -0
- package/src/lib/components/tree/tree-list.d.ts +6 -0
- package/src/lib/components/tree/tree-list.js +108 -0
- package/src/lib/components/tree/tree-list.js.map +1 -0
- package/src/lib/components/viewport-canvas.component.d.ts +23 -0
- package/src/lib/components/viewport-canvas.component.js +128 -0
- package/src/lib/components/viewport-canvas.component.js.map +1 -0
- package/src/lib/components/viewport-frame.component.d.ts +47 -0
- package/src/lib/components/viewport-frame.component.js +332 -0
- package/src/lib/components/viewport-frame.component.js.map +1 -0
- package/src/lib/components/viewport-root.component.d.ts +22 -0
- package/src/lib/components/viewport-root.component.js +112 -0
- package/src/lib/components/viewport-root.component.js.map +1 -0
- package/src/lib/components/viewport-zoom-controls.d.ts +29 -0
- package/src/lib/components/viewport-zoom-controls.js +147 -0
- package/src/lib/components/viewport-zoom-controls.js.map +1 -0
- package/src/lib/components/workspace-editor.component.d.ts +23 -0
- package/src/lib/components/workspace-editor.component.js +191 -0
- package/src/lib/components/workspace-editor.component.js.map +1 -0
- package/src/lib/components/workspace-panel.component.d.ts +28 -0
- package/src/lib/components/workspace-panel.component.js +147 -0
- package/src/lib/components/workspace-panel.component.js.map +1 -0
- package/src/lib/constants/sample-data.d.ts +18 -0
- package/src/lib/constants/sample-data.js +106 -0
- package/src/lib/constants/sample-data.js.map +1 -0
- package/src/lib/constants/shared.d.ts +17 -0
- package/src/lib/constants/shared.js +18 -0
- package/src/lib/constants/shared.js.map +1 -0
- package/src/lib/contexts/besigner-app-context.d.ts +30 -0
- package/src/lib/contexts/besigner-app-context.js +41 -0
- package/src/lib/contexts/besigner-app-context.js.map +1 -0
- package/src/lib/contexts/binding-picker-context.d.ts +78 -0
- package/src/lib/contexts/binding-picker-context.js +21 -0
- package/src/lib/contexts/binding-picker-context.js.map +1 -0
- package/src/lib/contexts/canvas-host-tokens-context.d.ts +49 -0
- package/src/lib/contexts/canvas-host-tokens-context.js +63 -0
- package/src/lib/contexts/canvas-host-tokens-context.js.map +1 -0
- package/src/lib/contexts/canvas-reveal-context.d.ts +32 -0
- package/src/lib/contexts/canvas-reveal-context.js +34 -0
- package/src/lib/contexts/canvas-reveal-context.js.map +1 -0
- package/src/lib/contexts/component-promotion-context.d.ts +89 -0
- package/src/lib/contexts/component-promotion-context.js +21 -0
- package/src/lib/contexts/component-promotion-context.js.map +1 -0
- package/src/lib/contexts/components-drawer-context.provider.d.ts +32 -0
- package/src/lib/contexts/components-drawer-context.provider.js +80 -0
- package/src/lib/contexts/components-drawer-context.provider.js.map +1 -0
- package/src/lib/contexts/element-drawer-context.d.ts +1005 -0
- package/src/lib/contexts/element-drawer-context.js +45 -0
- package/src/lib/contexts/element-drawer-context.js.map +1 -0
- package/src/lib/contexts/inspected-selection.d.ts +32 -0
- package/src/lib/contexts/inspected-selection.js +38 -0
- package/src/lib/contexts/inspected-selection.js.map +1 -0
- package/src/lib/contexts/inspector-extras-context.d.ts +56 -0
- package/src/lib/contexts/inspector-extras-context.js +35 -0
- package/src/lib/contexts/inspector-extras-context.js.map +1 -0
- package/src/lib/contexts/interactions-context.d.ts +99 -0
- package/src/lib/contexts/interactions-context.js +22 -0
- package/src/lib/contexts/interactions-context.js.map +1 -0
- package/src/lib/contexts/layout-chrome-context.d.ts +37 -0
- package/src/lib/contexts/layout-chrome-context.js +75 -0
- package/src/lib/contexts/layout-chrome-context.js.map +1 -0
- package/src/lib/contexts/media-asset-facts-context.d.ts +74 -0
- package/src/lib/contexts/media-asset-facts-context.js +27 -0
- package/src/lib/contexts/media-asset-facts-context.js.map +1 -0
- package/src/lib/contexts/media-picker-context.d.ts +88 -0
- package/src/lib/contexts/media-picker-context.js +21 -0
- package/src/lib/contexts/media-picker-context.js.map +1 -0
- package/src/lib/contexts/rendered-canvas-elements.d.ts +42 -0
- package/src/lib/contexts/rendered-canvas-elements.js +79 -0
- package/src/lib/contexts/rendered-canvas-elements.js.map +1 -0
- package/src/lib/contexts/repeat-record-context.d.ts +38 -0
- package/src/lib/contexts/repeat-record-context.js +21 -0
- package/src/lib/contexts/repeat-record-context.js.map +1 -0
- package/src/lib/contexts/repeat-rows-context.d.ts +53 -0
- package/src/lib/contexts/repeat-rows-context.js +38 -0
- package/src/lib/contexts/repeat-rows-context.js.map +1 -0
- package/src/lib/contexts/toolbar-extras-context.d.ts +31 -0
- package/src/lib/contexts/toolbar-extras-context.js +33 -0
- package/src/lib/contexts/toolbar-extras-context.js.map +1 -0
- package/src/lib/drafts/besigner-draft-store.d.ts +110 -0
- package/src/lib/drafts/besigner-draft-store.js +125 -0
- package/src/lib/drafts/besigner-draft-store.js.map +1 -0
- package/src/lib/drafts/besigner-server-draft.d.ts +130 -0
- package/src/lib/drafts/besigner-server-draft.js +211 -0
- package/src/lib/drafts/besigner-server-draft.js.map +1 -0
- package/src/lib/form-fields/components/shared/inline-form-control.d.ts +32 -0
- package/src/lib/form-fields/components/shared/inline-form-control.js +85 -0
- package/src/lib/form-fields/components/shared/inline-form-control.js.map +1 -0
- package/src/lib/form-fields/components/shared/toggle-button-form-control.d.ts +33 -0
- package/src/lib/form-fields/components/shared/toggle-button-form-control.js +83 -0
- package/src/lib/form-fields/components/shared/toggle-button-form-control.js.map +1 -0
- package/src/lib/form-fields/form-fields.d.ts +20 -0
- package/src/lib/form-fields/form-fields.js +21 -0
- package/src/lib/form-fields/form-fields.js.map +1 -0
- package/src/lib/form-fields/index.d.ts +1 -0
- package/src/lib/form-fields/index.js +3 -0
- package/src/lib/form-fields/index.js.map +1 -0
- package/src/lib/hooks/use-add-element-drawer-callback.d.ts +28 -0
- package/src/lib/hooks/use-add-element-drawer-callback.js +112 -0
- package/src/lib/hooks/use-add-element-drawer-callback.js.map +1 -0
- package/src/lib/hooks/use-aglyn-besigner-flag.d.ts +23 -0
- package/src/lib/hooks/use-aglyn-besigner-flag.js +47 -0
- package/src/lib/hooks/use-aglyn-besigner-flag.js.map +1 -0
- package/src/lib/hooks/use-aglyn-besigner-panel-value.d.ts +23 -0
- package/src/lib/hooks/use-aglyn-besigner-panel-value.js +54 -0
- package/src/lib/hooks/use-aglyn-besigner-panel-value.js.map +1 -0
- package/src/lib/hooks/use-aglyn-besigner-panel.d.ts +23 -0
- package/src/lib/hooks/use-aglyn-besigner-panel.js +47 -0
- package/src/lib/hooks/use-aglyn-besigner-panel.js.map +1 -0
- package/src/lib/hooks/use-anchored-rect.d.ts +68 -0
- package/src/lib/hooks/use-anchored-rect.js +131 -0
- package/src/lib/hooks/use-anchored-rect.js.map +1 -0
- package/src/lib/hooks/use-besigner-app-context.d.ts +18 -0
- package/src/lib/hooks/use-besigner-app-context.js +19 -0
- package/src/lib/hooks/use-besigner-app-context.js.map +1 -0
- package/src/lib/hooks/use-besigner-document.d.ts +309 -0
- package/src/lib/hooks/use-besigner-document.js +500 -0
- package/src/lib/hooks/use-besigner-document.js.map +1 -0
- package/src/lib/hooks/use-besigner-draft.d.ts +209 -0
- package/src/lib/hooks/use-besigner-draft.js +429 -0
- package/src/lib/hooks/use-besigner-draft.js.map +1 -0
- package/src/lib/hooks/use-clipboard-callbacks.d.ts +29 -0
- package/src/lib/hooks/use-clipboard-callbacks.js +82 -0
- package/src/lib/hooks/use-clipboard-callbacks.js.map +1 -0
- package/src/lib/hooks/use-clipboard-shortcuts.d.ts +52 -0
- package/src/lib/hooks/use-clipboard-shortcuts.js +102 -0
- package/src/lib/hooks/use-clipboard-shortcuts.js.map +1 -0
- package/src/lib/hooks/use-component-propagation-notice.d.ts +96 -0
- package/src/lib/hooks/use-component-propagation-notice.js +177 -0
- package/src/lib/hooks/use-component-propagation-notice.js.map +1 -0
- package/src/lib/hooks/use-debounced-commit.d.ts +43 -0
- package/src/lib/hooks/use-debounced-commit.js +88 -0
- package/src/lib/hooks/use-debounced-commit.js.map +1 -0
- package/src/lib/hooks/use-delete-element-callback.d.ts +24 -0
- package/src/lib/hooks/use-delete-element-callback.js +82 -0
- package/src/lib/hooks/use-delete-element-callback.js.map +1 -0
- package/src/lib/hooks/use-detail-hover-intent.d.ts +76 -0
- package/src/lib/hooks/use-detail-hover-intent.js +123 -0
- package/src/lib/hooks/use-detail-hover-intent.js.map +1 -0
- package/src/lib/hooks/use-document-repair-callbacks.d.ts +50 -0
- package/src/lib/hooks/use-document-repair-callbacks.js +237 -0
- package/src/lib/hooks/use-document-repair-callbacks.js.map +1 -0
- package/src/lib/hooks/use-insert-token-options.d.ts +52 -0
- package/src/lib/hooks/use-insert-token-options.js +230 -0
- package/src/lib/hooks/use-insert-token-options.js.map +1 -0
- package/src/lib/hooks/use-leaf-drag.d.ts +24 -0
- package/src/lib/hooks/use-leaf-drag.js +28 -0
- package/src/lib/hooks/use-leaf-drag.js.map +1 -0
- package/src/lib/hooks/use-leaf-drop.d.ts +31 -0
- package/src/lib/hooks/use-leaf-drop.js +43 -0
- package/src/lib/hooks/use-leaf-drop.js.map +1 -0
- package/src/lib/hooks/use-markdown-media-picker.d.ts +63 -0
- package/src/lib/hooks/use-markdown-media-picker.js +110 -0
- package/src/lib/hooks/use-markdown-media-picker.js.map +1 -0
- package/src/lib/hooks/use-media-asset-facts-overlay.d.ts +43 -0
- package/src/lib/hooks/use-media-asset-facts-overlay.js +133 -0
- package/src/lib/hooks/use-media-asset-facts-overlay.js.map +1 -0
- package/src/lib/hooks/use-move-node-callbacks.d.ts +22 -0
- package/src/lib/hooks/use-move-node-callbacks.js +57 -0
- package/src/lib/hooks/use-move-node-callbacks.js.map +1 -0
- package/src/lib/hooks/use-node-with-host-tokens.d.ts +42 -0
- package/src/lib/hooks/use-node-with-host-tokens.js +59 -0
- package/src/lib/hooks/use-node-with-host-tokens.js.map +1 -0
- package/src/lib/hooks/use-picker-filter.d.ts +61 -0
- package/src/lib/hooks/use-picker-filter.js +122 -0
- package/src/lib/hooks/use-picker-filter.js.map +1 -0
- package/src/lib/hooks/use-repeat-preview.d.ts +64 -0
- package/src/lib/hooks/use-repeat-preview.js +214 -0
- package/src/lib/hooks/use-repeat-preview.js.map +1 -0
- package/src/lib/hooks/use-repeat-sources.d.ts +17 -0
- package/src/lib/hooks/use-repeat-sources.js +41 -0
- package/src/lib/hooks/use-repeat-sources.js.map +1 -0
- package/src/lib/hooks/use-visible-component-categories.d.ts +37 -0
- package/src/lib/hooks/use-visible-component-categories.js +79 -0
- package/src/lib/hooks/use-visible-component-categories.js.map +1 -0
- package/src/lib/utils/active-host-theme.d.ts +28 -0
- package/src/lib/utils/active-host-theme.js +77 -0
- package/src/lib/utils/active-host-theme.js.map +1 -0
- package/src/lib/utils/attr-target.d.ts +170 -0
- package/src/lib/utils/attr-target.js +229 -0
- package/src/lib/utils/attr-target.js.map +1 -0
- package/src/lib/utils/attribute-field-value.d.ts +21 -0
- package/src/lib/utils/attribute-field-value.js +28 -0
- package/src/lib/utils/attribute-field-value.js.map +1 -0
- package/src/lib/utils/canvas-context-menu.d.ts +28 -0
- package/src/lib/utils/canvas-context-menu.js +56 -0
- package/src/lib/utils/canvas-context-menu.js.map +1 -0
- package/src/lib/utils/canvas-reveal.d.ts +115 -0
- package/src/lib/utils/canvas-reveal.js +165 -0
- package/src/lib/utils/canvas-reveal.js.map +1 -0
- package/src/lib/utils/describe-element.d.ts +72 -0
- package/src/lib/utils/describe-element.js +159 -0
- package/src/lib/utils/describe-element.js.map +1 -0
- package/src/lib/utils/device-preview-styles.d.ts +89 -0
- package/src/lib/utils/device-preview-styles.js +228 -0
- package/src/lib/utils/device-preview-styles.js.map +1 -0
- package/src/lib/utils/docs-help.d.ts +22 -0
- package/src/lib/utils/docs-help.generated.d.ts +47 -0
- package/src/lib/utils/docs-help.generated.js +229 -0
- package/src/lib/utils/docs-help.generated.js.map +1 -0
- package/src/lib/utils/docs-help.js +37 -0
- package/src/lib/utils/docs-help.js.map +1 -0
- package/src/lib/utils/held-answers-store.d.ts +59 -0
- package/src/lib/utils/held-answers-store.js +94 -0
- package/src/lib/utils/held-answers-store.js.map +1 -0
- package/src/lib/utils/in-place-edit-surface.d.ts +118 -0
- package/src/lib/utils/in-place-edit-surface.js +164 -0
- package/src/lib/utils/in-place-edit-surface.js.map +1 -0
- package/src/lib/utils/inline-markdown-edit.store.d.ts +71 -0
- package/src/lib/utils/inline-markdown-edit.store.js +90 -0
- package/src/lib/utils/inline-markdown-edit.store.js.map +1 -0
- package/src/lib/utils/inline-text-edit.store.d.ts +85 -0
- package/src/lib/utils/inline-text-edit.store.js +78 -0
- package/src/lib/utils/inline-text-edit.store.js.map +1 -0
- package/src/lib/utils/instance-leaf-hit.d.ts +39 -0
- package/src/lib/utils/instance-leaf-hit.js +56 -0
- package/src/lib/utils/instance-leaf-hit.js.map +1 -0
- package/src/lib/utils/muted-classes.d.ts +76 -0
- package/src/lib/utils/muted-classes.js +108 -0
- package/src/lib/utils/muted-classes.js.map +1 -0
- package/src/lib/utils/muted-styles.d.ts +125 -0
- package/src/lib/utils/muted-styles.js +193 -0
- package/src/lib/utils/muted-styles.js.map +1 -0
- package/src/lib/utils/numeric-text-value.d.ts +42 -0
- package/src/lib/utils/numeric-text-value.js +47 -0
- package/src/lib/utils/numeric-text-value.js.map +1 -0
- package/src/lib/utils/preset-interactions.d.ts +37 -0
- package/src/lib/utils/preset-interactions.js +87 -0
- package/src/lib/utils/preset-interactions.js.map +1 -0
- package/src/lib/utils/publish-failure-message.d.ts +35 -0
- package/src/lib/utils/publish-failure-message.js +51 -0
- package/src/lib/utils/publish-failure-message.js.map +1 -0
- package/src/lib/utils/rank-picker-results.d.ts +45 -0
- package/src/lib/utils/rank-picker-results.js +136 -0
- package/src/lib/utils/rank-picker-results.js.map +1 -0
- package/src/lib/utils/responsive-sx.d.ts +65 -0
- package/src/lib/utils/responsive-sx.js +129 -0
- package/src/lib/utils/responsive-sx.js.map +1 -0
- package/src/lib/utils/rich-text-commands.d.ts +28 -0
- package/src/lib/utils/rich-text-commands.js +43 -0
- package/src/lib/utils/rich-text-commands.js.map +1 -0
- package/src/lib/utils/sanitize-rich-text.d.ts +52 -0
- package/src/lib/utils/sanitize-rich-text.js +173 -0
- package/src/lib/utils/sanitize-rich-text.js.map +1 -0
- package/src/lib/utils/state-sx.d.ts +255 -0
- package/src/lib/utils/state-sx.js +338 -0
- package/src/lib/utils/state-sx.js.map +1 -0
- package/src/lib/utils/style-field-groups.d.ts +136 -0
- package/src/lib/utils/style-field-groups.js +874 -0
- package/src/lib/utils/style-field-groups.js.map +1 -0
- package/src/lib/utils/style-field-search.d.ts +84 -0
- package/src/lib/utils/style-field-search.js +505 -0
- package/src/lib/utils/style-field-search.js.map +1 -0
- package/src/lib/utils/style-target.d.ts +69 -0
- package/src/lib/utils/style-target.js +203 -0
- package/src/lib/utils/style-target.js.map +1 -0
- package/src/lib/utils/theme-scale-options.d.ts +169 -0
- package/src/lib/utils/theme-scale-options.js +702 -0
- package/src/lib/utils/theme-scale-options.js.map +1 -0
- package/src/lib/utils/token-editable-dom.d.ts +82 -0
- package/src/lib/utils/token-editable-dom.js +280 -0
- package/src/lib/utils/token-editable-dom.js.map +1 -0
- package/src/lib/utils/token-segments.d.ts +111 -0
- package/src/lib/utils/token-segments.js +246 -0
- package/src/lib/utils/token-segments.js.map +1 -0
- package/src/lib/utils/visibility-styles.d.ts +38 -0
- package/src/lib/utils/visibility-styles.js +54 -0
- package/src/lib/utils/visibility-styles.js.map +1 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ import { useCallback, useEffect, useRef, useState } from "react";
|
|
17
|
+
/**
|
|
18
|
+
* How long the panel survives the pointer leaving, in ms.
|
|
19
|
+
*
|
|
20
|
+
* This is the forgiving path from the card to the panel: the two are
|
|
21
|
+
* separated by a gap, so travelling to a link inside the panel means
|
|
22
|
+
* leaving the card first. Dismissing on `mouseleave` is what makes a
|
|
23
|
+
* floating detail impossible to click — the content moves or vanishes on the
|
|
24
|
+
* way to it. Long enough to cross a gap diagonally, short enough that it
|
|
25
|
+
* does not linger once you have moved on.
|
|
26
|
+
*/ export const DETAIL_CLOSE_DELAY_MS = 260;
|
|
27
|
+
/**
|
|
28
|
+
* Hover-with-intent for a floating detail panel (AGL-2486).
|
|
29
|
+
*
|
|
30
|
+
* Three behaviours, and every one of them exists because the naive version
|
|
31
|
+
* is unusable:
|
|
32
|
+
*
|
|
33
|
+
* - **A pin beats the pointer.** Once clicked, moving across other cards
|
|
34
|
+
* does not swap the content out from under you. Without this, everything
|
|
35
|
+
* inside the panel — Learn more, the attribute list — is unreachable,
|
|
36
|
+
* because reaching for it changes what it says.
|
|
37
|
+
* - **Closing is delayed.** See {@link DETAIL_CLOSE_DELAY_MS}.
|
|
38
|
+
* - **Only one is ever open**, because there is one piece of state, not one
|
|
39
|
+
* per card.
|
|
40
|
+
*/ export function useDetailHoverIntent() {
|
|
41
|
+
const [hovered, setHovered] = useState(null);
|
|
42
|
+
const [pinned, setPinned] = useState(null);
|
|
43
|
+
const [suspended, setSuspended] = useState(false);
|
|
44
|
+
const timer = useRef(null);
|
|
45
|
+
const cancel = useCallback(()=>{
|
|
46
|
+
if (timer.current) {
|
|
47
|
+
clearTimeout(timer.current);
|
|
48
|
+
timer.current = null;
|
|
49
|
+
}
|
|
50
|
+
}, []);
|
|
51
|
+
// A pending close must not fire into an unmounted tree.
|
|
52
|
+
useEffect(()=>cancel, [
|
|
53
|
+
cancel
|
|
54
|
+
]);
|
|
55
|
+
const open = useCallback((item, anchor)=>{
|
|
56
|
+
if (suspended) return;
|
|
57
|
+
cancel();
|
|
58
|
+
setHovered({
|
|
59
|
+
item,
|
|
60
|
+
anchor
|
|
61
|
+
});
|
|
62
|
+
}, [
|
|
63
|
+
cancel,
|
|
64
|
+
suspended
|
|
65
|
+
]);
|
|
66
|
+
const scheduleClose = useCallback(()=>{
|
|
67
|
+
cancel();
|
|
68
|
+
timer.current = setTimeout(()=>setHovered(null), DETAIL_CLOSE_DELAY_MS);
|
|
69
|
+
}, [
|
|
70
|
+
cancel
|
|
71
|
+
]);
|
|
72
|
+
const keepOpen = useCallback(()=>cancel(), [
|
|
73
|
+
cancel
|
|
74
|
+
]);
|
|
75
|
+
const togglePin = useCallback((item, anchor)=>{
|
|
76
|
+
if (suspended) return;
|
|
77
|
+
cancel();
|
|
78
|
+
setPinned((prev)=>{
|
|
79
|
+
var _prev_item;
|
|
80
|
+
return prev && ((_prev_item = prev.item) == null ? void 0 : _prev_item.$id) === (item == null ? void 0 : item.$id) ? null : {
|
|
81
|
+
item,
|
|
82
|
+
anchor
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
setHovered({
|
|
86
|
+
item,
|
|
87
|
+
anchor
|
|
88
|
+
});
|
|
89
|
+
}, [
|
|
90
|
+
cancel,
|
|
91
|
+
suspended
|
|
92
|
+
]);
|
|
93
|
+
const dismiss = useCallback(()=>{
|
|
94
|
+
cancel();
|
|
95
|
+
setPinned(null);
|
|
96
|
+
setHovered(null);
|
|
97
|
+
}, [
|
|
98
|
+
cancel
|
|
99
|
+
]);
|
|
100
|
+
const suspend = useCallback(()=>{
|
|
101
|
+
cancel();
|
|
102
|
+
setSuspended(true);
|
|
103
|
+
setPinned(null);
|
|
104
|
+
setHovered(null);
|
|
105
|
+
}, [
|
|
106
|
+
cancel
|
|
107
|
+
]);
|
|
108
|
+
const resume = useCallback(()=>setSuspended(false), []);
|
|
109
|
+
return {
|
|
110
|
+
active: suspended ? null : pinned != null ? pinned : hovered,
|
|
111
|
+
isPinned: Boolean(pinned),
|
|
112
|
+
open,
|
|
113
|
+
scheduleClose,
|
|
114
|
+
keepOpen,
|
|
115
|
+
togglePin,
|
|
116
|
+
dismiss,
|
|
117
|
+
suspend,
|
|
118
|
+
resume
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export default useDetailHoverIntent;
|
|
122
|
+
|
|
123
|
+
//# sourceMappingURL=use-detail-hover-intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/besigner/feature/designer/src/lib/hooks/use-detail-hover-intent.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\n/**\n * How long the panel survives the pointer leaving, in ms.\n *\n * This is the forgiving path from the card to the panel: the two are\n * separated by a gap, so travelling to a link inside the panel means\n * leaving the card first. Dismissing on `mouseleave` is what makes a\n * floating detail impossible to click — the content moves or vanishes on the\n * way to it. Long enough to cross a gap diagonally, short enough that it\n * does not linger once you have moved on.\n */\nexport const DETAIL_CLOSE_DELAY_MS = 260\n\nexport interface DetailTarget<T> {\n item: T\n anchor: HTMLElement\n}\n\nexport interface HoverIntent<T> {\n /** What the surface should describe: the pin wins over the pointer. */\n active: DetailTarget<T> | null\n /** True while held open by a click rather than by the pointer. */\n isPinned: boolean\n /** Pointer entered a card. */\n open: (item: T, anchor: HTMLElement) => void\n /** Pointer left a card, or left the floating panel. */\n scheduleClose: () => void\n /** Pointer entered the floating panel — cancels a pending close. */\n keepOpen: () => void\n /** Click a card: holds it open, or releases it if it was already held. */\n togglePin: (item: T, anchor: HTMLElement) => void\n /** Dismiss explicitly (close button, Escape, outside click). */\n dismiss: () => void\n /**\n * Dismiss AND stop responding to the pointer until {@link resume}.\n *\n * For a drag: the panel floats over the canvas, which is where the element\n * is being dropped, so it has to leave the drop path the moment the drag\n * starts — not on drop. Suspending rather than just dismissing is the\n * other half: a drag crosses other cards on its way out, and each of those\n * would otherwise re-open it mid-flight.\n */\n suspend: () => void\n resume: () => void\n}\n\n/**\n * Hover-with-intent for a floating detail panel (AGL-2486).\n *\n * Three behaviours, and every one of them exists because the naive version\n * is unusable:\n *\n * - **A pin beats the pointer.** Once clicked, moving across other cards\n * does not swap the content out from under you. Without this, everything\n * inside the panel — Learn more, the attribute list — is unreachable,\n * because reaching for it changes what it says.\n * - **Closing is delayed.** See {@link DETAIL_CLOSE_DELAY_MS}.\n * - **Only one is ever open**, because there is one piece of state, not one\n * per card.\n */\nexport function useDetailHoverIntent<T extends { $id?: string }>(): HoverIntent<T> {\n const [hovered, setHovered] = useState<DetailTarget<T> | null>(null)\n const [pinned, setPinned] = useState<DetailTarget<T> | null>(null)\n const [suspended, setSuspended] = useState(false)\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const cancel = useCallback(() => {\n if (timer.current) {\n clearTimeout(timer.current)\n timer.current = null\n }\n }, [])\n\n // A pending close must not fire into an unmounted tree.\n useEffect(() => cancel, [cancel])\n\n const open = useCallback(\n (item: T, anchor: HTMLElement) => {\n if (suspended) return\n cancel()\n setHovered({ item, anchor })\n },\n [cancel, suspended],\n )\n\n const scheduleClose = useCallback(() => {\n cancel()\n timer.current = setTimeout(() => setHovered(null), DETAIL_CLOSE_DELAY_MS)\n }, [cancel])\n\n const keepOpen = useCallback(() => cancel(), [cancel])\n\n const togglePin = useCallback((item: T, anchor: HTMLElement) => {\n if (suspended) return\n cancel()\n setPinned((prev) => (prev && prev.item?.$id === item?.$id ? null : { item, anchor }))\n setHovered({ item, anchor })\n }, [cancel, suspended])\n\n const dismiss = useCallback(() => {\n cancel()\n setPinned(null)\n setHovered(null)\n }, [cancel])\n\n const suspend = useCallback(() => {\n cancel()\n setSuspended(true)\n setPinned(null)\n setHovered(null)\n }, [cancel])\n\n const resume = useCallback(() => setSuspended(false), [])\n\n return {\n active: suspended ? null : pinned ?? hovered,\n isPinned: Boolean(pinned),\n open,\n scheduleClose,\n keepOpen,\n togglePin,\n dismiss,\n suspend,\n resume,\n }\n}\n\nexport default useDetailHoverIntent\n"],"names":["useCallback","useEffect","useRef","useState","DETAIL_CLOSE_DELAY_MS","useDetailHoverIntent","hovered","setHovered","pinned","setPinned","suspended","setSuspended","timer","cancel","current","clearTimeout","open","item","anchor","scheduleClose","setTimeout","keepOpen","togglePin","prev","$id","dismiss","suspend","resume","active","isPinned","Boolean"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAEhE;;;;;;;;;CASC,GACD,OAAO,MAAMC,wBAAwB,IAAG;AAmCxC;;;;;;;;;;;;;CAaC,GACD,OAAO,SAASC;IACd,MAAM,CAACC,SAASC,WAAW,GAAGJ,SAAiC;IAC/D,MAAM,CAACK,QAAQC,UAAU,GAAGN,SAAiC;IAC7D,MAAM,CAACO,WAAWC,aAAa,GAAGR,SAAS;IAC3C,MAAMS,QAAQV,OAA6C;IAE3D,MAAMW,SAASb,YAAY;QACzB,IAAIY,MAAME,OAAO,EAAE;YACjBC,aAAaH,MAAME,OAAO;YAC1BF,MAAME,OAAO,GAAG;QAClB;IACF,GAAG,EAAE;IAEL,wDAAwD;IACxDb,UAAU,IAAMY,QAAQ;QAACA;KAAO;IAEhC,MAAMG,OAAOhB,YACX,CAACiB,MAASC;QACR,IAAIR,WAAW;QACfG;QACAN,WAAW;YAAEU;YAAMC;QAAO;IAC5B,GACA;QAACL;QAAQH;KAAU;IAGrB,MAAMS,gBAAgBnB,YAAY;QAChCa;QACAD,MAAME,OAAO,GAAGM,WAAW,IAAMb,WAAW,OAAOH;IACrD,GAAG;QAACS;KAAO;IAEX,MAAMQ,WAAWrB,YAAY,IAAMa,UAAU;QAACA;KAAO;IAErD,MAAMS,YAAYtB,YAAY,CAACiB,MAASC;QACtC,IAAIR,WAAW;QACfG;QACAJ,UAAU,CAACc;gBAAkBA;mBAARA,QAAQA,EAAAA,aAAAA,KAAKN,IAAI,qBAATM,WAAWC,GAAG,OAAKP,wBAAAA,KAAMO,GAAG,IAAG,OAAO;gBAAEP;gBAAMC;YAAO;;QAClFX,WAAW;YAAEU;YAAMC;QAAO;IAC5B,GAAG;QAACL;QAAQH;KAAU;IAEtB,MAAMe,UAAUzB,YAAY;QAC1Ba;QACAJ,UAAU;QACVF,WAAW;IACb,GAAG;QAACM;KAAO;IAEX,MAAMa,UAAU1B,YAAY;QAC1Ba;QACAF,aAAa;QACbF,UAAU;QACVF,WAAW;IACb,GAAG;QAACM;KAAO;IAEX,MAAMc,SAAS3B,YAAY,IAAMW,aAAa,QAAQ,EAAE;IAExD,OAAO;QACLiB,QAAQlB,YAAY,OAAOF,iBAAAA,SAAUF;QACrCuB,UAAUC,QAAQtB;QAClBQ;QACAG;QACAE;QACAC;QACAG;QACAC;QACAC;IACF;AACF;AAEA,eAAetB,qBAAoB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* `Edit ▸ Repair page` — strip what the canvas cannot render and keep
|
|
19
|
+
* everything that still works (AGL-2555).
|
|
20
|
+
*
|
|
21
|
+
* ⚠️ Never silent. The repair is computed first and shown to the author as a
|
|
22
|
+
* list of what it would remove, move and relink; nothing is written until
|
|
23
|
+
* they accept it. A quiet repair that deletes content is worse than the
|
|
24
|
+
* corruption it is treating, because the author never learns which of their
|
|
25
|
+
* work is gone.
|
|
26
|
+
*
|
|
27
|
+
* A sound document says so and writes nothing at all — an author who runs
|
|
28
|
+
* this on a hunch should get an answer, not an undo entry.
|
|
29
|
+
*/
|
|
30
|
+
export declare function useRepairDocumentCallback(
|
|
31
|
+
/** What this editor edits — 'page' on a screen, 'document' elsewhere. */
|
|
32
|
+
noun?: string): () => Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* `Edit ▸ Clear canvas` — empty the document without touching the screen
|
|
35
|
+
* (AGL-2554).
|
|
36
|
+
*
|
|
37
|
+
* The screen record, its SEO fields, the layout binding, the parent and
|
|
38
|
+
* slug, the id and the version history all stay. Deleting the screen and
|
|
39
|
+
* recreating it is what an author had to do instead, and that throws every
|
|
40
|
+
* one of those away — and pushes a fresh screen back through the window
|
|
41
|
+
* where a blank page is briefly live.
|
|
42
|
+
*
|
|
43
|
+
* Works on a document the hierarchy cannot render, which is the case that
|
|
44
|
+
* needs it most: `'Invalid node'` rows are not selectable, so Delete Element
|
|
45
|
+
* cannot reach them, and Add Element only appends.
|
|
46
|
+
*/
|
|
47
|
+
export declare function useClearCanvasCallback(
|
|
48
|
+
/** What this editor edits — 'page' on a screen, 'document' elsewhere. */
|
|
49
|
+
noun?: string): () => Promise<void>;
|
|
50
|
+
export default useRepairDocumentCallback;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
import { canvas, clearCanvasNodes, components, repairCanvasNodes } from "@aglyn/aglyn";
|
|
18
|
+
import * as Besigner from "@aglyn/besigner";
|
|
19
|
+
import { useConfirmationContext } from "@aglyn/shared-ui-jsx";
|
|
20
|
+
import Alert from "@mui/material/Alert";
|
|
21
|
+
import Box from "@mui/material/Box";
|
|
22
|
+
import Typography from "@mui/material/Typography";
|
|
23
|
+
import { useCallback } from "react";
|
|
24
|
+
/**
|
|
25
|
+
* Replaces the whole node map as ONE undoable step, without the foreign-node
|
|
26
|
+
* overlay `applyNodes` carries.
|
|
27
|
+
*
|
|
28
|
+
* That overlay is the interesting part. `applyNodes` re-applies every node a
|
|
29
|
+
* peer has touched (`withForeignNodes(map, 0)`) because the maps IT serves —
|
|
30
|
+
* a raw-JSON paste, a per-browser draft the crash net offers back — were
|
|
31
|
+
* composed without any knowledge of the peer's later work, and publishing
|
|
32
|
+
* them would roll that work back under this session's id (AGL-2486).
|
|
33
|
+
*
|
|
34
|
+
* Neither caller here is composed elsewhere. Both read the LIVE map at click
|
|
35
|
+
* time and hand back a transformation of it, so there is no staleness for
|
|
36
|
+
* the overlay to protect against — and applying it would be actively wrong:
|
|
37
|
+
* a repair would have the peer's copy of the very nodes it just removed put
|
|
38
|
+
* straight back, and a clear would be left holding whatever the peer had
|
|
39
|
+
* touched, parented to elements that no longer exist. Which is the orphan
|
|
40
|
+
* shape AGL-1363 is about.
|
|
41
|
+
*
|
|
42
|
+
* A clear DOES discard a co-editor's work, and nothing here pretends
|
|
43
|
+
* otherwise — {@link useClearCanvasCallback} says so in the dialog when
|
|
44
|
+
* there is a peer to lose.
|
|
45
|
+
*/ function replaceDocument(nodes) {
|
|
46
|
+
canvas.saveHistory();
|
|
47
|
+
canvas.setNodes(nodes);
|
|
48
|
+
Besigner.focus.clearFocusStatus();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Whether the component registry is populated enough to be trusted about
|
|
52
|
+
* what an element type IS.
|
|
53
|
+
*
|
|
54
|
+
* An empty registry answers "unknown" for every component in the document,
|
|
55
|
+
* and a repair that believed it would delete all of it — the same shape as a
|
|
56
|
+
* stubbed resolver making every capacity ceiling read zero. So the check is
|
|
57
|
+
* simply not offered until there is something to check against.
|
|
58
|
+
*/ function componentResolver() {
|
|
59
|
+
var _components_factories;
|
|
60
|
+
if (!Object.keys((_components_factories = components.factories) != null ? _components_factories : {}).length) return undefined;
|
|
61
|
+
return (componentId)=>Boolean(components.getFactory(componentId));
|
|
62
|
+
}
|
|
63
|
+
/** Groups findings for the preview, most consequential first. */ function summarize(result) {
|
|
64
|
+
const removed = result.findings.filter((f)=>f.action === 'removed');
|
|
65
|
+
const moved = result.findings.filter((f)=>f.action === 'reparented');
|
|
66
|
+
const linked = result.findings.filter((f)=>f.action === 'unlinked' || f.action === 'relisted');
|
|
67
|
+
return {
|
|
68
|
+
removed,
|
|
69
|
+
moved,
|
|
70
|
+
linked
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function FindingList({ title, findings }) {
|
|
74
|
+
if (!findings.length) return null;
|
|
75
|
+
return /*#__PURE__*/ _jsxs(Box, {
|
|
76
|
+
sx: {
|
|
77
|
+
mt: 2
|
|
78
|
+
},
|
|
79
|
+
children: [
|
|
80
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
81
|
+
variant: "subtitle2",
|
|
82
|
+
children: title
|
|
83
|
+
}),
|
|
84
|
+
/*#__PURE__*/ _jsxs(Box, {
|
|
85
|
+
component: "ul",
|
|
86
|
+
sx: {
|
|
87
|
+
m: 0,
|
|
88
|
+
pl: 3
|
|
89
|
+
},
|
|
90
|
+
children: [
|
|
91
|
+
findings.slice(0, 12).map((finding, index)=>{
|
|
92
|
+
var _finding_label;
|
|
93
|
+
return /*#__PURE__*/ _jsxs(Typography, {
|
|
94
|
+
component: "li",
|
|
95
|
+
variant: "body2",
|
|
96
|
+
children: [
|
|
97
|
+
/*#__PURE__*/ _jsx("strong", {
|
|
98
|
+
children: (_finding_label = finding.label) != null ? _finding_label : finding.nodeId
|
|
99
|
+
}),
|
|
100
|
+
' — ',
|
|
101
|
+
finding.detail
|
|
102
|
+
]
|
|
103
|
+
}, `${finding.nodeId}-${index}`);
|
|
104
|
+
}),
|
|
105
|
+
findings.length > 12 ? /*#__PURE__*/ _jsx(Typography, {
|
|
106
|
+
component: "li",
|
|
107
|
+
variant: "body2",
|
|
108
|
+
color: "text.secondary",
|
|
109
|
+
children: `and ${findings.length - 12} more`
|
|
110
|
+
}) : null
|
|
111
|
+
]
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* `Edit ▸ Repair page` — strip what the canvas cannot render and keep
|
|
118
|
+
* everything that still works (AGL-2555).
|
|
119
|
+
*
|
|
120
|
+
* ⚠️ Never silent. The repair is computed first and shown to the author as a
|
|
121
|
+
* list of what it would remove, move and relink; nothing is written until
|
|
122
|
+
* they accept it. A quiet repair that deletes content is worse than the
|
|
123
|
+
* corruption it is treating, because the author never learns which of their
|
|
124
|
+
* work is gone.
|
|
125
|
+
*
|
|
126
|
+
* A sound document says so and writes nothing at all — an author who runs
|
|
127
|
+
* this on a hunch should get an answer, not an undo entry.
|
|
128
|
+
*/ export function useRepairDocumentCallback(/** What this editor edits — 'page' on a screen, 'document' elsewhere. */ noun = 'document') {
|
|
129
|
+
const { confirm } = useConfirmationContext();
|
|
130
|
+
return useCallback(async ()=>{
|
|
131
|
+
const current = canvas.toJSON().nodes;
|
|
132
|
+
const result = repairCanvasNodes(current, {
|
|
133
|
+
isKnownComponent: componentResolver()
|
|
134
|
+
});
|
|
135
|
+
if (result.healthy) {
|
|
136
|
+
await confirm({
|
|
137
|
+
title: 'Nothing to repair',
|
|
138
|
+
description: `Every element is intact and connected to the ${noun}. Nothing was changed.`,
|
|
139
|
+
confirmationText: 'Close',
|
|
140
|
+
cancellationButtonProps: {
|
|
141
|
+
sx: {
|
|
142
|
+
display: 'none'
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}).catch(()=>{});
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const { removed, moved, linked } = summarize(result);
|
|
149
|
+
return confirm({
|
|
150
|
+
title: `Repair ${noun}`,
|
|
151
|
+
description: /*#__PURE__*/ _jsxs(Box, {
|
|
152
|
+
children: [
|
|
153
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
154
|
+
variant: "body2",
|
|
155
|
+
children: `This ${noun} has ${result.findings.length} problem${result.findings.length === 1 ? '' : 's'}. ${result.kept} element${result.kept === 1 ? '' : 's'} will be kept.`
|
|
156
|
+
}),
|
|
157
|
+
removed.length ? /*#__PURE__*/ _jsx(Alert, {
|
|
158
|
+
severity: "warning",
|
|
159
|
+
sx: {
|
|
160
|
+
mt: 2
|
|
161
|
+
},
|
|
162
|
+
children: `${removed.length} element${removed.length === 1 ? ' will be' : 's will be'} removed. This cannot be recovered after you save, though Undo will step back before it.`
|
|
163
|
+
}) : null,
|
|
164
|
+
/*#__PURE__*/ _jsx(FindingList, {
|
|
165
|
+
title: "Removed",
|
|
166
|
+
findings: removed
|
|
167
|
+
}),
|
|
168
|
+
/*#__PURE__*/ _jsx(FindingList, {
|
|
169
|
+
title: "Moved to the top level",
|
|
170
|
+
findings: moved
|
|
171
|
+
}),
|
|
172
|
+
/*#__PURE__*/ _jsx(FindingList, {
|
|
173
|
+
title: "Reconnected",
|
|
174
|
+
findings: linked
|
|
175
|
+
})
|
|
176
|
+
]
|
|
177
|
+
}),
|
|
178
|
+
confirmationText: 'Repair',
|
|
179
|
+
confirmationButtonProps: {
|
|
180
|
+
color: removed.length ? 'error' : 'primary'
|
|
181
|
+
}
|
|
182
|
+
}).then(()=>replaceDocument(result.nodes)).catch(()=>{});
|
|
183
|
+
}, [
|
|
184
|
+
confirm,
|
|
185
|
+
noun
|
|
186
|
+
]);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* `Edit ▸ Clear canvas` — empty the document without touching the screen
|
|
190
|
+
* (AGL-2554).
|
|
191
|
+
*
|
|
192
|
+
* The screen record, its SEO fields, the layout binding, the parent and
|
|
193
|
+
* slug, the id and the version history all stay. Deleting the screen and
|
|
194
|
+
* recreating it is what an author had to do instead, and that throws every
|
|
195
|
+
* one of those away — and pushes a fresh screen back through the window
|
|
196
|
+
* where a blank page is briefly live.
|
|
197
|
+
*
|
|
198
|
+
* Works on a document the hierarchy cannot render, which is the case that
|
|
199
|
+
* needs it most: `'Invalid node'` rows are not selectable, so Delete Element
|
|
200
|
+
* cannot reach them, and Add Element only appends.
|
|
201
|
+
*/ export function useClearCanvasCallback(/** What this editor edits — 'page' on a screen, 'document' elsewhere. */ noun = 'document') {
|
|
202
|
+
const { confirm } = useConfirmationContext();
|
|
203
|
+
return useCallback(()=>{
|
|
204
|
+
const remote = canvas.hasRemoteEdits;
|
|
205
|
+
return confirm({
|
|
206
|
+
title: 'Clear canvas?',
|
|
207
|
+
description: /*#__PURE__*/ _jsxs(Box, {
|
|
208
|
+
children: [
|
|
209
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
210
|
+
variant: "body2",
|
|
211
|
+
children: `Every element will be removed. The ${noun} itself — its settings, its address and its version history — is not affected, and Undo steps back.`
|
|
212
|
+
}),
|
|
213
|
+
remote ? /*#__PURE__*/ _jsx(Alert, {
|
|
214
|
+
severity: "warning",
|
|
215
|
+
sx: {
|
|
216
|
+
mt: 2
|
|
217
|
+
},
|
|
218
|
+
children: `Someone else has edited this ${noun} since you opened it. Clearing removes their work too.`
|
|
219
|
+
}) : null
|
|
220
|
+
]
|
|
221
|
+
}),
|
|
222
|
+
confirmationText: 'Clear canvas',
|
|
223
|
+
confirmationButtonProps: {
|
|
224
|
+
color: 'error'
|
|
225
|
+
}
|
|
226
|
+
}).then(()=>{
|
|
227
|
+
const current = canvas.toJSON().nodes;
|
|
228
|
+
replaceDocument(clearCanvasNodes(current));
|
|
229
|
+
}).catch(()=>{});
|
|
230
|
+
}, [
|
|
231
|
+
confirm,
|
|
232
|
+
noun
|
|
233
|
+
]);
|
|
234
|
+
}
|
|
235
|
+
export default useRepairDocumentCallback;
|
|
236
|
+
|
|
237
|
+
//# sourceMappingURL=use-document-repair-callbacks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/besigner/feature/designer/src/lib/hooks/use-document-repair-callbacks.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type * as Aglyn from '@aglyn/aglyn'\nimport {\n canvas,\n clearCanvasNodes,\n components,\n repairCanvasNodes,\n} from '@aglyn/aglyn'\nimport * as Besigner from '@aglyn/besigner'\nimport { useConfirmationContext } from '@aglyn/shared-ui-jsx'\nimport Alert from '@mui/material/Alert'\nimport Box from '@mui/material/Box'\nimport Typography from '@mui/material/Typography'\nimport { useCallback } from 'react'\n\n/**\n * Replaces the whole node map as ONE undoable step, without the foreign-node\n * overlay `applyNodes` carries.\n *\n * That overlay is the interesting part. `applyNodes` re-applies every node a\n * peer has touched (`withForeignNodes(map, 0)`) because the maps IT serves —\n * a raw-JSON paste, a per-browser draft the crash net offers back — were\n * composed without any knowledge of the peer's later work, and publishing\n * them would roll that work back under this session's id (AGL-2486).\n *\n * Neither caller here is composed elsewhere. Both read the LIVE map at click\n * time and hand back a transformation of it, so there is no staleness for\n * the overlay to protect against — and applying it would be actively wrong:\n * a repair would have the peer's copy of the very nodes it just removed put\n * straight back, and a clear would be left holding whatever the peer had\n * touched, parented to elements that no longer exist. Which is the orphan\n * shape AGL-1363 is about.\n *\n * A clear DOES discard a co-editor's work, and nothing here pretends\n * otherwise — {@link useClearCanvasCallback} says so in the dialog when\n * there is a peer to lose.\n */\nfunction replaceDocument(nodes: Record<string, any>): void {\n canvas.saveHistory()\n canvas.setNodes(nodes as never)\n Besigner.focus.clearFocusStatus()\n}\n\n/**\n * Whether the component registry is populated enough to be trusted about\n * what an element type IS.\n *\n * An empty registry answers \"unknown\" for every component in the document,\n * and a repair that believed it would delete all of it — the same shape as a\n * stubbed resolver making every capacity ceiling read zero. So the check is\n * simply not offered until there is something to check against.\n */\nfunction componentResolver():\n | ((componentId: string) => boolean)\n | undefined {\n if (!Object.keys(components.factories ?? {}).length) return undefined\n return (componentId: string) =>\n Boolean(components.getFactory(componentId as never))\n}\n\n/** Groups findings for the preview, most consequential first. */\nfunction summarize(result: Aglyn.CanvasRepairResult) {\n const removed = result.findings.filter((f) => f.action === 'removed')\n const moved = result.findings.filter((f) => f.action === 'reparented')\n const linked = result.findings.filter(\n (f) => f.action === 'unlinked' || f.action === 'relisted',\n )\n return { removed, moved, linked }\n}\n\nfunction FindingList({\n title,\n findings,\n}: {\n title: string\n findings: Aglyn.CanvasRepairFinding[]\n}) {\n if (!findings.length) return null\n return (\n <Box sx={{ mt: 2 }}>\n <Typography variant=\"subtitle2\">{title}</Typography>\n <Box component=\"ul\" sx={{ m: 0, pl: 3 }}>\n {/* Capped: a badly damaged document can carry dozens, and a dialog\n the author has to scroll to reach its own buttons is one they\n will dismiss without reading. */}\n {findings.slice(0, 12).map((finding, index) => (\n <Typography\n component=\"li\"\n variant=\"body2\"\n key={`${finding.nodeId}-${index}`}\n >\n <strong>{finding.label ?? finding.nodeId}</strong>\n {' — '}\n {finding.detail}\n </Typography>\n ))}\n {findings.length > 12 ? (\n <Typography component=\"li\" variant=\"body2\" color=\"text.secondary\">\n {`and ${findings.length - 12} more`}\n </Typography>\n ) : null}\n </Box>\n </Box>\n )\n}\n\n/**\n * `Edit ▸ Repair page` — strip what the canvas cannot render and keep\n * everything that still works (AGL-2555).\n *\n * ⚠️ Never silent. The repair is computed first and shown to the author as a\n * list of what it would remove, move and relink; nothing is written until\n * they accept it. A quiet repair that deletes content is worse than the\n * corruption it is treating, because the author never learns which of their\n * work is gone.\n *\n * A sound document says so and writes nothing at all — an author who runs\n * this on a hunch should get an answer, not an undo entry.\n */\nexport function useRepairDocumentCallback(\n /** What this editor edits — 'page' on a screen, 'document' elsewhere. */\n noun = 'document',\n): () => Promise<void> {\n const { confirm } = useConfirmationContext()\n\n return useCallback(async () => {\n const current = canvas.toJSON().nodes as Record<string, any>\n const result = repairCanvasNodes(current, {\n isKnownComponent: componentResolver(),\n })\n\n if (result.healthy) {\n await confirm({\n title: 'Nothing to repair',\n description: `Every element is intact and connected to the ${noun}. Nothing was changed.`,\n confirmationText: 'Close',\n cancellationButtonProps: { sx: { display: 'none' } },\n }).catch(() => {})\n return\n }\n\n const { removed, moved, linked } = summarize(result)\n return confirm({\n title: `Repair ${noun}`,\n description: (\n <Box>\n <Typography variant=\"body2\">\n {`This ${noun} has ${result.findings.length} problem${\n result.findings.length === 1 ? '' : 's'\n }. ${result.kept} element${\n result.kept === 1 ? '' : 's'\n } will be kept.`}\n </Typography>\n {removed.length ? (\n <Alert severity=\"warning\" sx={{ mt: 2 }}>\n {`${removed.length} element${\n removed.length === 1 ? ' will be' : 's will be'\n } removed. This cannot be recovered after you save, though Undo will step back before it.`}\n </Alert>\n ) : null}\n <FindingList title=\"Removed\" findings={removed} />\n <FindingList title=\"Moved to the top level\" findings={moved} />\n <FindingList title=\"Reconnected\" findings={linked} />\n </Box>\n ),\n confirmationText: 'Repair',\n confirmationButtonProps: { color: removed.length ? 'error' : 'primary' },\n })\n .then(() => replaceDocument(result.nodes))\n .catch(() => {})\n }, [confirm, noun])\n}\n\n/**\n * `Edit ▸ Clear canvas` — empty the document without touching the screen\n * (AGL-2554).\n *\n * The screen record, its SEO fields, the layout binding, the parent and\n * slug, the id and the version history all stay. Deleting the screen and\n * recreating it is what an author had to do instead, and that throws every\n * one of those away — and pushes a fresh screen back through the window\n * where a blank page is briefly live.\n *\n * Works on a document the hierarchy cannot render, which is the case that\n * needs it most: `'Invalid node'` rows are not selectable, so Delete Element\n * cannot reach them, and Add Element only appends.\n */\nexport function useClearCanvasCallback(\n /** What this editor edits — 'page' on a screen, 'document' elsewhere. */\n noun = 'document',\n): () => Promise<void> {\n const { confirm } = useConfirmationContext()\n\n return useCallback(() => {\n const remote = canvas.hasRemoteEdits\n return confirm({\n title: 'Clear canvas?',\n description: (\n <Box>\n <Typography variant=\"body2\">\n {`Every element will be removed. The ${noun} itself — its settings, its address and its version history — is not affected, and Undo steps back.`}\n </Typography>\n {remote ? (\n <Alert severity=\"warning\" sx={{ mt: 2 }}>\n {`Someone else has edited this ${noun} since you opened it. Clearing removes their work too.`}\n </Alert>\n ) : null}\n </Box>\n ),\n confirmationText: 'Clear canvas',\n confirmationButtonProps: { color: 'error' },\n })\n .then(() => {\n const current = canvas.toJSON().nodes as Record<string, any>\n replaceDocument(clearCanvasNodes(current))\n })\n .catch(() => {})\n }, [confirm, noun])\n}\n\nexport default useRepairDocumentCallback\n"],"names":["canvas","clearCanvasNodes","components","repairCanvasNodes","Besigner","useConfirmationContext","Alert","Box","Typography","useCallback","replaceDocument","nodes","saveHistory","setNodes","focus","clearFocusStatus","componentResolver","Object","keys","factories","length","undefined","componentId","Boolean","getFactory","summarize","result","removed","findings","filter","f","action","moved","linked","FindingList","title","sx","mt","variant","component","m","pl","slice","map","finding","index","strong","label","nodeId","detail","color","useRepairDocumentCallback","noun","confirm","current","toJSON","isKnownComponent","healthy","description","confirmationText","cancellationButtonProps","display","catch","kept","severity","confirmationButtonProps","then","useClearCanvasCallback","remote","hasRemoteEdits"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import type * as Aglyn from '@aglyn/aglyn';
|
|
18
|
+
import { type BindingOption } from '../contexts/binding-picker-context';
|
|
19
|
+
import type { TokenLabelContext } from '../utils/token-segments';
|
|
20
|
+
export interface InsertTokenOptionsResult {
|
|
21
|
+
/**
|
|
22
|
+
* The full grouped picker list (AGL-583): host bindings first (AGL-100),
|
|
23
|
+
* then the data-placeholder catalogs. Entry/Collection stay browsable
|
|
24
|
+
* even out of context — with a hint saying where they resolve — while
|
|
25
|
+
* the Dataset item group only appears inside a resolvable repeatable.
|
|
26
|
+
*/
|
|
27
|
+
options: BindingOption[];
|
|
28
|
+
/** Display-name resolution inputs for pill rendering (AGL-586). */
|
|
29
|
+
labelContext: TokenLabelContext;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A component's or layout's own declared props as picker options (AGL-1335).
|
|
33
|
+
* A free-text field offers every one; a field with no text box is handed only
|
|
34
|
+
* the properties it can be bound to (see `withPropertyBinding`).
|
|
35
|
+
*
|
|
36
|
+
* Names are filtered by the SAME pattern the graft requires, so a picker can
|
|
37
|
+
* never offer a token that would not substitute.
|
|
38
|
+
*/
|
|
39
|
+
export declare function componentPropBindingOptions(componentProps: readonly Aglyn.ReusableComponentProp[] | undefined | null, owner?: 'component' | 'layout'): BindingOption[];
|
|
40
|
+
/** The picker's second line for a property: what a page that sets nothing gets. */
|
|
41
|
+
export declare function componentPropDefaultPreview(prop: Aglyn.ReusableComponentProp): string;
|
|
42
|
+
/**
|
|
43
|
+
* Assembles the insert-picker options for a canvas node from ITS context
|
|
44
|
+
* (AGL-583, extracted for AGL-586 so the attributes panel and the inline
|
|
45
|
+
* text editor share one walk): the ancestor chain is scanned for a
|
|
46
|
+
* repeatable container (dataset-item tokens need its model fields) and for
|
|
47
|
+
* a Collection entries block (entry tokens resolve right there, not only
|
|
48
|
+
* on entry pages). `repeatDataset` persists a dataset id OR a legacy
|
|
49
|
+
* display name — either resolves against the entity picker options.
|
|
50
|
+
*/
|
|
51
|
+
export declare function useInsertTokenOptions(node?: Aglyn.NodeSchema<any> | null): InsertTokenOptionsResult;
|
|
52
|
+
export default useInsertTokenOptions;
|