@formicoidea/labre-core 0.41.0 → 0.43.1
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 +384 -0
- package/dist/_pkgs/affine-block-bookmark/bookmark-block.js +2 -2
- package/dist/_pkgs/affine-block-data-view/configs/tooltips.js +1 -1
- package/dist/_pkgs/affine-block-database/configs/tooltips.js +1 -1
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-text-block.js +4 -2
- package/dist/_pkgs/affine-block-edgeless-text/edgeless-toolbar/config.js +7 -1
- package/dist/_pkgs/affine-block-embed/common/iframe-sandbox.d.ts +39 -0
- package/dist/_pkgs/affine-block-embed/common/iframe-sandbox.js +39 -0
- package/dist/_pkgs/affine-block-embed/embed-figma-block/embed-figma-block.js +4 -1
- package/dist/_pkgs/affine-block-embed/embed-github-block/embed-github-block.js +2 -1
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/components/embed-iframe-error-card.d.ts +14 -1
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/components/embed-iframe-error-card.js +21 -2
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/consts.js +2 -0
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/embed-iframe-block.d.ts +2 -1
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/embed-iframe-block.js +41 -11
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/types.d.ts +16 -0
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/types.js +17 -1
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/utils.d.ts +8 -0
- package/dist/_pkgs/affine-block-embed/embed-iframe-block/utils.js +19 -0
- package/dist/_pkgs/affine-block-embed/embed-loom-block/embed-loom-block.js +4 -1
- package/dist/_pkgs/affine-block-embed/embed-youtube-block/embed-youtube-block.js +4 -1
- package/dist/_pkgs/affine-block-embed/index.d.ts +1 -0
- package/dist/_pkgs/affine-block-embed/index.js +1 -0
- package/dist/_pkgs/affine-block-embed/translations.d.ts +8 -0
- package/dist/_pkgs/affine-block-embed/translations.js +28 -0
- package/dist/_pkgs/affine-block-embed-doc/embed-linked-doc-block/embed-linked-doc-block.js +4 -2
- package/dist/_pkgs/affine-block-embed-doc/embed-synced-doc-block/embed-synced-doc-block.js +2 -2
- package/dist/_pkgs/affine-block-frame/frame-manager.js +6 -3
- package/dist/_pkgs/affine-block-frame/frame-tool.js +1 -1
- package/dist/_pkgs/affine-block-frame/frame-toolbar.js +6 -1
- package/dist/_pkgs/affine-block-list/list-keymap.js +7 -0
- package/dist/_pkgs/affine-block-list/utils/get-list-icon.js +3 -1
- package/dist/_pkgs/affine-block-note/configs/tooltips.js +1 -1
- package/dist/_pkgs/affine-block-note/note-keymap.js +7 -1
- package/dist/_pkgs/affine-block-paragraph/paragraph-keymap.js +7 -1
- package/dist/_pkgs/affine-block-root/adapters/html.js +2 -2
- package/dist/_pkgs/affine-block-root/commands/copy-link-commands.d.ts +2 -0
- package/dist/_pkgs/affine-block-root/commands/copy-link-commands.js +155 -0
- package/dist/_pkgs/affine-block-root/commands/pivot-commands.js +1 -8
- package/dist/_pkgs/affine-block-root/commands/tag-commands.js +1 -8
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.d.ts +9 -0
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-keyboard.js +51 -0
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.d.ts +22 -0
- package/dist/_pkgs/affine-block-root/edgeless/edgeless-root-block.js +46 -0
- package/dist/_pkgs/affine-block-root/edgeless/utils/pinch-zoom.d.ts +21 -0
- package/dist/_pkgs/affine-block-root/edgeless/utils/pinch-zoom.js +24 -0
- package/dist/_pkgs/affine-block-root/edgeless/utils/query.js +8 -0
- package/dist/_pkgs/affine-block-root/index.d.ts +1 -0
- package/dist/_pkgs/affine-block-root/index.js +1 -0
- package/dist/_pkgs/affine-block-root/keyboard/keymap.js +1 -16
- package/dist/_pkgs/affine-block-root/view.js +2 -0
- package/dist/_pkgs/affine-block-surface/element-model/index.d.ts +21 -3
- package/dist/_pkgs/affine-block-surface/element-model/index.js +14 -2
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/command.d.ts +23 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/command.js +89 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/index.d.ts +7 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/index.js +5 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/render.d.ts +41 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/render.js +70 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/svg-context.d.ts +49 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/svg-context.js +257 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/tagged-path.d.ts +16 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/tagged-path.js +24 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/toolbar.d.ts +24 -0
- package/dist/_pkgs/affine-block-surface/extensions/export-svg/toolbar.js +66 -0
- package/dist/_pkgs/affine-block-surface/extensions/index.d.ts +4 -0
- package/dist/_pkgs/affine-block-surface/extensions/index.js +4 -0
- package/dist/_pkgs/affine-block-surface/extensions/interchange-import.d.ts +66 -4
- package/dist/_pkgs/affine-block-surface/extensions/interchange-import.js +253 -11
- package/dist/_pkgs/affine-block-surface/extensions/interchange.d.ts +18 -0
- package/dist/_pkgs/affine-block-surface/extensions/legend-toolbar.d.ts +81 -0
- package/dist/_pkgs/affine-block-surface/extensions/legend-toolbar.js +81 -0
- package/dist/_pkgs/affine-block-surface/extensions/legend.d.ts +144 -0
- package/dist/_pkgs/affine-block-surface/extensions/legend.js +495 -0
- package/dist/_pkgs/affine-block-surface/extensions/morph-toolbar.js +4 -0
- package/dist/_pkgs/affine-block-surface/extensions/reading-widget.d.ts +17 -3
- package/dist/_pkgs/affine-block-surface/extensions/reading-widget.js +35 -13
- package/dist/_pkgs/affine-block-surface/extensions/reading.d.ts +61 -1
- package/dist/_pkgs/affine-block-surface/extensions/reading.js +85 -39
- package/dist/_pkgs/affine-block-surface/extensions/record-action.d.ts +66 -0
- package/dist/_pkgs/affine-block-surface/extensions/record-action.js +145 -0
- package/dist/_pkgs/affine-block-surface/extensions/svg-sketch-translations.d.ts +3 -0
- package/dist/_pkgs/affine-block-surface/extensions/svg-sketch-translations.js +23 -0
- package/dist/_pkgs/affine-block-surface/extensions/svg-sketch.d.ts +1 -1
- package/dist/_pkgs/affine-block-surface/extensions/svg-sketch.js +12 -4
- package/dist/_pkgs/affine-block-surface/extensions/validation.d.ts +253 -28
- package/dist/_pkgs/affine-block-surface/extensions/validation.js +489 -41
- package/dist/_pkgs/affine-block-surface/framework-background/background-view.d.ts +115 -0
- package/dist/_pkgs/affine-block-surface/framework-background/background-view.js +185 -0
- package/dist/_pkgs/affine-block-surface/framework-background/fit.d.ts +36 -0
- package/dist/_pkgs/affine-block-surface/framework-background/fit.js +30 -0
- package/dist/_pkgs/affine-block-surface/framework-background/index.d.ts +2 -0
- package/dist/_pkgs/affine-block-surface/framework-background/index.js +2 -0
- package/dist/_pkgs/affine-block-surface/framework-background/labels.d.ts +16 -1
- package/dist/_pkgs/affine-block-surface/framework-background/labels.js +31 -21
- package/dist/_pkgs/affine-block-surface/framework-background/renderer.js +29 -5
- package/dist/_pkgs/affine-block-surface/framework-background/stacking.d.ts +6 -4
- package/dist/_pkgs/affine-block-surface/framework-background/stacking.js +56 -8
- package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.d.ts +12 -0
- package/dist/_pkgs/affine-block-surface/renderer/canvas-renderer.js +15 -0
- package/dist/_pkgs/affine-block-surface/renderer/element-highlight-overlay.js +2 -7
- package/dist/_pkgs/affine-block-surface/view.js +8 -1
- package/dist/_pkgs/affine-block-surface-ref/configs/slash-menu.js +1 -1
- package/dist/_pkgs/affine-block-surface-ref/configs/tooltips.js +2 -2
- package/dist/_pkgs/affine-components/color-picker/button.d.ts +56 -1
- package/dist/_pkgs/affine-components/color-picker/button.js +168 -23
- package/dist/_pkgs/affine-components/color-picker/framework-palette.d.ts +106 -0
- package/dist/_pkgs/affine-components/color-picker/framework-palette.js +177 -0
- package/dist/_pkgs/affine-components/color-picker/index.d.ts +2 -0
- package/dist/_pkgs/affine-components/color-picker/index.js +2 -0
- package/dist/_pkgs/affine-components/color-picker/palette-carousel.d.ts +85 -0
- package/dist/_pkgs/affine-components/color-picker/palette-carousel.js +445 -0
- package/dist/_pkgs/affine-components/color-picker/styles.js +1 -1
- package/dist/_pkgs/affine-components/context-menu/button.js +3 -1
- package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.d.ts +31 -1
- package/dist/_pkgs/affine-components/edgeless-shape-color-picker/color-picker.js +189 -63
- package/dist/_pkgs/affine-components/icons/ai.js +3 -3
- package/dist/_pkgs/affine-components/icons/list.js +7 -1
- package/dist/_pkgs/affine-components/resource/resource.js +29 -16
- package/dist/_pkgs/affine-components/size-dropdown-menu/dropdown-menu.js +6 -1
- package/dist/_pkgs/affine-components/toolbar/index.d.ts +1 -1
- package/dist/_pkgs/affine-components/toolbar/index.js +1 -1
- package/dist/_pkgs/affine-components/toolbar/menu-button.d.ts +7 -0
- package/dist/_pkgs/affine-components/toolbar/menu-button.js +30 -0
- package/dist/_pkgs/affine-components/toolbar/picker-menu.d.ts +16 -1
- package/dist/_pkgs/affine-components/toolbar/picker-menu.js +2 -2
- package/dist/_pkgs/affine-components/toolbar/toolbar.d.ts +1 -0
- package/dist/_pkgs/affine-components/toolbar/toolbar.js +67 -0
- package/dist/_pkgs/affine-components/translations.d.ts +8 -0
- package/dist/_pkgs/affine-components/translations.js +17 -0
- package/dist/_pkgs/affine-foundation/view.js +2 -1
- package/dist/_pkgs/affine-fragment-frame-panel/card/frame-card-title-editor.js +1 -1
- package/dist/_pkgs/affine-fragment-frame-panel/card/frame-card.js +1 -1
- package/dist/_pkgs/affine-gfx-brush/element-renderer.js +2 -2
- package/dist/_pkgs/affine-gfx-brush/toolbar/components/eraser/icons.js +1 -1
- package/dist/_pkgs/affine-gfx-brush/toolbar/configs/brush.js +6 -1
- package/dist/_pkgs/affine-gfx-brush/toolbar/configs/highlighter.js +6 -1
- package/dist/_pkgs/affine-gfx-connector/connector-manager.d.ts +9 -1
- package/dist/_pkgs/affine-gfx-connector/connector-manager.js +61 -0
- package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.d.ts +11 -2
- package/dist/_pkgs/affine-gfx-connector/direction/direction-reveal.js +11 -2
- package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.d.ts +7 -1
- package/dist/_pkgs/affine-gfx-connector/element-renderer/connector-dom/index.js +87 -17
- package/dist/_pkgs/affine-gfx-connector/element-renderer/index.js +78 -17
- package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.d.ts +24 -2
- package/dist/_pkgs/affine-gfx-connector/element-renderer/utils.js +31 -8
- package/dist/_pkgs/affine-gfx-connector/text/edgeless-connector-label-editor.d.ts +124 -3
- package/dist/_pkgs/affine-gfx-connector/text/edgeless-connector-label-editor.js +219 -56
- package/dist/_pkgs/affine-gfx-connector/text/text.d.ts +13 -4
- package/dist/_pkgs/affine-gfx-connector/text/text.js +13 -44
- package/dist/_pkgs/affine-gfx-connector/toolbar/config.d.ts +56 -0
- package/dist/_pkgs/affine-gfx-connector/toolbar/config.js +94 -10
- package/dist/_pkgs/affine-gfx-connector/toolbar/hollow-endpoint-icons.d.ts +8 -0
- package/dist/_pkgs/affine-gfx-connector/toolbar/hollow-endpoint-icons.js +118 -0
- package/dist/_pkgs/affine-gfx-connector/translations.d.ts +3 -0
- package/dist/_pkgs/affine-gfx-connector/translations.js +23 -0
- package/dist/_pkgs/affine-gfx-connector/view/view.d.ts +37 -1
- package/dist/_pkgs/affine-gfx-connector/view/view.js +97 -8
- package/dist/_pkgs/affine-gfx-group/command/group-api.js +1 -1
- package/dist/_pkgs/affine-gfx-group/store.js +0 -2
- package/dist/_pkgs/affine-gfx-group/translations.d.ts +9 -10
- package/dist/_pkgs/affine-gfx-group/translations.js +9 -13
- package/dist/_pkgs/affine-gfx-mindmap/indicator-overlay/index.js +6 -2
- package/dist/_pkgs/affine-gfx-mindmap/templates/index.js +1 -1
- package/dist/_pkgs/affine-gfx-mindmap/toolbar/basket-elements.js +1 -1
- package/dist/_pkgs/affine-gfx-mindmap/toolbar/config.js +4 -2
- package/dist/_pkgs/affine-gfx-mindmap/toolbar/utils/import-mindmap.js +2 -2
- package/dist/_pkgs/affine-gfx-mindmap/translations.d.ts +7 -1
- package/dist/_pkgs/affine-gfx-mindmap/translations.js +11 -1
- package/dist/_pkgs/affine-gfx-shape/element-renderer/highlighter.js +2 -2
- package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.d.ts +6 -0
- package/dist/_pkgs/affine-gfx-shape/overlay/polygon-drawing-overlay.js +30 -1
- package/dist/_pkgs/affine-gfx-shape/polygon-tool.d.ts +20 -1
- package/dist/_pkgs/affine-gfx-shape/polygon-tool.js +9 -1
- package/dist/_pkgs/affine-gfx-shape/toolbar/config.js +10 -3
- package/dist/_pkgs/affine-gfx-shape/toolbar/palette-color-action.js +11 -1
- package/dist/_pkgs/affine-gfx-shape/translations.d.ts +7 -0
- package/dist/_pkgs/affine-gfx-shape/translations.js +11 -0
- package/dist/_pkgs/affine-gfx-template/builtin/other.js +14 -8
- package/dist/_pkgs/affine-gfx-template/snapshot-from-action.js +32 -119
- package/dist/_pkgs/affine-gfx-template/toolbar/template-loading.js +1 -1
- package/dist/_pkgs/affine-gfx-template/toolbar/template-type.d.ts +1 -1
- package/dist/_pkgs/affine-gfx-template/translations.d.ts +5 -0
- package/dist/_pkgs/affine-gfx-template/translations.js +38 -0
- package/dist/_pkgs/affine-gfx-text/dblclick-add-edgeless-text.d.ts +13 -1
- package/dist/_pkgs/affine-gfx-text/dblclick-add-edgeless-text.js +19 -4
- package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.d.ts +41 -0
- package/dist/_pkgs/affine-gfx-text/edgeless-text-editor.js +60 -4
- package/dist/_pkgs/affine-gfx-text/toolbar/actions.d.ts +8 -1
- package/dist/_pkgs/affine-gfx-text/toolbar/actions.js +14 -2
- package/dist/_pkgs/affine-gfx-text/translations.d.ts +9 -0
- package/dist/_pkgs/affine-gfx-text/translations.js +14 -1
- package/dist/_pkgs/affine-inline-latex/latex-node/latex-editor-menu.js +2 -1
- package/dist/_pkgs/affine-inline-preset/markdown.js +5 -1
- package/dist/_pkgs/affine-model/consts/connector.d.ts +28 -2
- package/dist/_pkgs/affine-model/consts/connector.js +26 -0
- package/dist/_pkgs/affine-model/consts/text.d.ts +15 -2
- package/dist/_pkgs/affine-model/consts/text.js +25 -1
- package/dist/_pkgs/affine-model/elements/bpmn/pool.js +1 -1
- package/dist/_pkgs/affine-model/elements/brush/brush.js +1 -1
- package/dist/_pkgs/affine-model/elements/c4/board.js +1 -1
- package/dist/_pkgs/affine-model/elements/c4/boundary.js +1 -1
- package/dist/_pkgs/affine-model/elements/connector/connector.d.ts +135 -0
- package/dist/_pkgs/affine-model/elements/connector/connector.js +246 -5
- package/dist/_pkgs/affine-model/elements/connector/end-label.d.ts +83 -0
- package/dist/_pkgs/affine-model/elements/connector/end-label.js +119 -0
- package/dist/_pkgs/affine-model/elements/connector/index.d.ts +1 -0
- package/dist/_pkgs/affine-model/elements/connector/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/context-map/context-map.js +1 -1
- package/dist/_pkgs/affine-model/elements/core-domain/core-domain.d.ts +28 -0
- package/dist/_pkgs/affine-model/elements/core-domain/core-domain.js +129 -2
- package/dist/_pkgs/affine-model/elements/cynefin/cynefin.d.ts +8 -0
- package/dist/_pkgs/affine-model/elements/cynefin/cynefin.js +45 -2
- package/dist/_pkgs/affine-model/elements/edgy/board.js +1 -1
- package/dist/_pkgs/affine-model/elements/edgy/facets.js +1 -1
- package/dist/_pkgs/affine-model/elements/estuarine/estuarine.d.ts +6 -0
- package/dist/_pkgs/affine-model/elements/estuarine/estuarine.js +36 -2
- package/dist/_pkgs/affine-model/elements/event-storming/event-storming.d.ts +18 -7
- package/dist/_pkgs/affine-model/elements/event-storming/event-storming.js +23 -8
- package/dist/_pkgs/affine-model/elements/framework-background/background.d.ts +16 -0
- package/dist/_pkgs/affine-model/elements/framework-background/background.js +18 -0
- package/dist/_pkgs/affine-model/elements/highlighter/highlighter.js +1 -1
- package/dist/_pkgs/affine-model/elements/index.d.ts +8 -0
- package/dist/_pkgs/affine-model/elements/index.js +1 -0
- package/dist/_pkgs/affine-model/elements/shape/shape.js +1 -1
- package/dist/_pkgs/affine-model/elements/text/text.js +1 -1
- package/dist/_pkgs/affine-model/elements/uml/band.d.ts +39 -0
- package/dist/_pkgs/affine-model/elements/uml/band.js +31 -0
- package/dist/_pkgs/affine-model/elements/uml/diagram.d.ts +158 -0
- package/dist/_pkgs/affine-model/elements/uml/diagram.js +229 -0
- package/dist/_pkgs/affine-model/elements/uml/fragment.d.ts +161 -0
- package/dist/_pkgs/affine-model/elements/uml/fragment.js +205 -0
- package/dist/_pkgs/affine-model/elements/uml/index.d.ts +8 -0
- package/dist/_pkgs/affine-model/elements/uml/index.js +8 -0
- package/dist/_pkgs/affine-model/elements/uml/lifeline.d.ts +77 -0
- package/dist/_pkgs/affine-model/elements/uml/lifeline.js +89 -0
- package/dist/_pkgs/affine-model/elements/uml/node.d.ts +142 -0
- package/dist/_pkgs/affine-model/elements/uml/node.js +190 -0
- package/dist/_pkgs/affine-model/elements/uml/partition.d.ts +106 -0
- package/dist/_pkgs/affine-model/elements/uml/partition.js +172 -0
- package/dist/_pkgs/affine-model/elements/uml/region.d.ts +75 -0
- package/dist/_pkgs/affine-model/elements/uml/region.js +150 -0
- package/dist/_pkgs/affine-model/elements/uml/subject.d.ts +37 -0
- package/dist/_pkgs/affine-model/elements/uml/subject.js +108 -0
- package/dist/_pkgs/affine-model/elements/wardley/wardley.js +1 -1
- package/dist/_pkgs/affine-shared/services/embed-iframe/embed-iframe-config.d.ts +1 -0
- package/dist/_pkgs/affine-shared/services/font-loader/config.d.ts +18 -0
- package/dist/_pkgs/affine-shared/services/font-loader/config.js +82 -50
- package/dist/_pkgs/affine-shared/services/pivot-materiality-publisher.js +1 -9
- package/dist/_pkgs/affine-shared/services/telemetry-service/document-damage-watcher.d.ts +53 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/document-damage-watcher.js +95 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/index.js +1 -0
- package/dist/_pkgs/affine-shared/services/telemetry-service/lifecycle.d.ts +26 -1
- package/dist/_pkgs/affine-shared/services/telemetry-service/telemetry-service.d.ts +2 -2
- package/dist/_pkgs/affine-shared/services/theme-service.d.ts +19 -0
- package/dist/_pkgs/affine-shared/services/theme-service.js +24 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/command-action.d.ts +34 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/command-action.js +63 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/services/toolbar-service/index.js +1 -0
- package/dist/_pkgs/affine-shared/services/translation-service/chrome.d.ts +97 -7
- package/dist/_pkgs/affine-shared/services/translation-service/chrome.js +178 -7
- package/dist/_pkgs/affine-shared/styles/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/styles/index.js +1 -0
- package/dist/_pkgs/affine-shared/styles/motion.d.ts +14 -0
- package/dist/_pkgs/affine-shared/styles/motion.js +38 -0
- package/dist/_pkgs/affine-shared/utils/event.d.ts +10 -0
- package/dist/_pkgs/affine-shared/utils/event.js +20 -0
- package/dist/_pkgs/affine-shared/utils/file/filesys.d.ts +16 -0
- package/dist/_pkgs/affine-shared/utils/file/filesys.js +25 -0
- package/dist/_pkgs/affine-shared/utils/index.d.ts +1 -0
- package/dist/_pkgs/affine-shared/utils/index.js +1 -0
- package/dist/_pkgs/affine-shared/utils/link-preview-refresh.d.ts +12 -0
- package/dist/_pkgs/affine-shared/utils/link-preview-refresh.js +13 -0
- package/dist/_pkgs/affine-widget-edgeless-dragging-area/edgeless-dragging-area-rect.js +2 -2
- package/dist/_pkgs/affine-widget-edgeless-selected-rect/utils.js +5 -1
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.d.ts +12 -4
- package/dist/_pkgs/affine-widget-edgeless-toolbar/catalogue/artefact-catalogue-widget.js +27 -4
- package/dist/_pkgs/affine-widget-edgeless-toolbar/config/types.d.ts +15 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/config/utils.d.ts +1 -1
- package/dist/_pkgs/affine-widget-edgeless-toolbar/config/utils.js +7 -2
- package/dist/_pkgs/affine-widget-edgeless-toolbar/create-popper.js +13 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/index.d.ts +2 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/index.js +2 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.d.ts +80 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/command-menu.js +270 -81
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/senior-menu-selection.d.ts +15 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/menu/senior-menu-selection.js +15 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/panel/font-family-panel.d.ts +18 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/panel/font-family-panel.js +52 -6
- package/dist/_pkgs/affine-widget-edgeless-toolbar/panel/font-weight-and-style-panel.js +8 -1
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-ghost-overlay.d.ts +42 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-ghost-overlay.js +100 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-placement-tool.d.ts +100 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/artefact-placement-tool.js +274 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/index.d.ts +3 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/index.js +3 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/translate-created.d.ts +25 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/placement/translate-created.js +67 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/translations.d.ts +6 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/translations.js +10 -0
- package/dist/_pkgs/affine-widget-edgeless-toolbar/view.js +5 -0
- package/dist/_pkgs/affine-widget-frame-title/edgeless-frame-title-editor.js +2 -1
- package/dist/_pkgs/affine-widget-slash-menu/translations.d.ts +16 -0
- package/dist/_pkgs/affine-widget-slash-menu/translations.js +23 -1
- package/dist/_pkgs/affine-widget-toolbar/utils.js +57 -14
- package/dist/_pkgs/data-view/core/detail/field.js +2 -1
- package/dist/_pkgs/data-view/core/filter/literal/define.js +3 -1
- package/dist/_pkgs/data-view/core/group-by/renderer/boolean-group.js +1 -1
- package/dist/_pkgs/data-view/property-presets/checkbox/cell-renderer.js +8 -2
- package/dist/_pkgs/data-view/view-presets/kanban/pc/cell.js +1 -1
- package/dist/_pkgs/data-view/view-presets/kanban/pc/controller/drag.js +2 -1
- package/dist/_pkgs/data-view/view-presets/table/pc/controller/drag.js +2 -1
- package/dist/_pkgs/data-view/view-presets/table/pc/controller/selection.js +1 -1
- package/dist/_pkgs/data-view/view-presets/table/pc/header/vertical-indicator.js +2 -1
- package/dist/_pkgs/data-view/view-presets/table/pc/row/row-select-checkbox.js +3 -1
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/drag.js +2 -1
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/controller/selection.js +1 -1
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/group/top/header/vertical-indicator.js +2 -1
- package/dist/_pkgs/data-view/view-presets/table/pc-virtual/row/row-header.js +3 -1
- package/dist/_pkgs/global/gfx/xywh.js +7 -0
- package/dist/_pkgs/std/extension/command-registry.d.ts +158 -1
- package/dist/_pkgs/std/extension/command-registry.js +22 -0
- package/dist/_pkgs/std/gfx/index.d.ts +1 -1
- package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.d.ts +12 -0
- package/dist/_pkgs/std/gfx/interactivity/gfx-view-event-handler.js +20 -1
- package/dist/_pkgs/std/gfx/interactivity/manager.d.ts +10 -0
- package/dist/_pkgs/std/gfx/interactivity/manager.js +12 -0
- package/dist/_pkgs/std/gfx/model/surface/element-model.js +12 -7
- package/dist/_pkgs/std/gfx/model/surface/role.d.ts +10 -5
- package/dist/_pkgs/std/gfx/model/surface/surface-model.d.ts +56 -0
- package/dist/_pkgs/std/gfx/model/surface/surface-model.js +84 -3
- package/dist/_pkgs/std/gfx/view/view.d.ts +11 -2
- package/dist/_pkgs/std/gfx/view/view.js +16 -2
- package/dist/commands.d.ts +6 -0
- package/dist/commands.js +10 -2
- package/dist/frameworks.d.ts +9 -0
- package/dist/frameworks.js +19 -0
- package/dist/translations.js +21 -0
- package/package.json +13 -4
- package/dist/_pkgs/affine-gfx-group/group-watcher.d.ts +0 -1
- package/dist/_pkgs/affine-gfx-group/group-watcher.js +0 -20
|
@@ -53,18 +53,19 @@ import { FrameworkBackgroundElementModel } from '../framework-background/index.j
|
|
|
53
53
|
* have. The v2 note lives here so the day lanes land, the reason they were not
|
|
54
54
|
* here is on the record.
|
|
55
55
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* grows sideways all morning as events are remembered, and locking its
|
|
61
|
-
* proportion would fight the hand.
|
|
56
|
+
* It is created 3200 × 1400 — a Big Picture is WIDE, because the timeline is
|
|
57
|
+
* the point — and freely resizable in both directions: the roll grows sideways
|
|
58
|
+
* all morning as events are remembered, and locking its proportion would fight
|
|
59
|
+
* the hand.
|
|
62
60
|
*/
|
|
63
61
|
let EventStormingBoardElementModel = (() => {
|
|
64
62
|
let _classSuper = FrameworkBackgroundElementModel;
|
|
65
63
|
let _resizeEnabled_decorators;
|
|
66
64
|
let _resizeEnabled_initializers = [];
|
|
67
65
|
let _resizeEnabled_extraInitializers = [];
|
|
66
|
+
let _timeAxisTitle_decorators;
|
|
67
|
+
let _timeAxisTitle_initializers = [];
|
|
68
|
+
let _timeAxisTitle_extraInitializers = [];
|
|
68
69
|
let _rotate_decorators;
|
|
69
70
|
let _rotate_initializers = [];
|
|
70
71
|
let _rotate_extraInitializers = [];
|
|
@@ -75,9 +76,11 @@ let EventStormingBoardElementModel = (() => {
|
|
|
75
76
|
static {
|
|
76
77
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
77
78
|
_resizeEnabled_decorators = [field(true)];
|
|
79
|
+
_timeAxisTitle_decorators = [field()];
|
|
78
80
|
_rotate_decorators = [field(0)];
|
|
79
|
-
_xywh_decorators = [field()];
|
|
81
|
+
_xywh_decorators = [field('[0,0,0,0]')];
|
|
80
82
|
__esDecorate(this, null, _resizeEnabled_decorators, { kind: "accessor", name: "resizeEnabled", static: false, private: false, access: { has: obj => "resizeEnabled" in obj, get: obj => obj.resizeEnabled, set: (obj, value) => { obj.resizeEnabled = value; } }, metadata: _metadata }, _resizeEnabled_initializers, _resizeEnabled_extraInitializers);
|
|
83
|
+
__esDecorate(this, null, _timeAxisTitle_decorators, { kind: "accessor", name: "timeAxisTitle", static: false, private: false, access: { has: obj => "timeAxisTitle" in obj, get: obj => obj.timeAxisTitle, set: (obj, value) => { obj.timeAxisTitle = value; } }, metadata: _metadata }, _timeAxisTitle_initializers, _timeAxisTitle_extraInitializers);
|
|
81
84
|
__esDecorate(this, null, _rotate_decorators, { kind: "accessor", name: "rotate", static: false, private: false, access: { has: obj => "rotate" in obj, get: obj => obj.rotate, set: (obj, value) => { obj.rotate = value; } }, metadata: _metadata }, _rotate_initializers, _rotate_extraInitializers);
|
|
82
85
|
__esDecorate(this, null, _xywh_decorators, { kind: "accessor", name: "xywh", static: false, private: false, access: { has: obj => "xywh" in obj, get: obj => obj.xywh, set: (obj, value) => { obj.xywh = value; } }, metadata: _metadata }, _xywh_initializers, _xywh_extraInitializers);
|
|
83
86
|
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -88,7 +91,19 @@ let EventStormingBoardElementModel = (() => {
|
|
|
88
91
|
#resizeEnabled_accessor_storage = __runInitializers(this, _resizeEnabled_initializers, true);
|
|
89
92
|
get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
|
|
90
93
|
set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
|
|
91
|
-
#
|
|
94
|
+
#timeAxisTitle_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _timeAxisTitle_initializers, undefined));
|
|
95
|
+
/**
|
|
96
|
+
* The word written under the time arrow, when the user has renamed it.
|
|
97
|
+
*
|
|
98
|
+
* ADDITIVE and OPTIONAL, on the Wardley pattern: defaulted to `undefined` it
|
|
99
|
+
* stays absent from the Y.Map until something assigns it, so a board stormed
|
|
100
|
+
* before this change carries no such key and is byte-identical to one stormed
|
|
101
|
+
* after. Absent is also what lets the declaration fall through to its i18n
|
|
102
|
+
* key — a hard default here would put the board in English forever.
|
|
103
|
+
*/
|
|
104
|
+
get timeAxisTitle() { return this.#timeAxisTitle_accessor_storage; }
|
|
105
|
+
set timeAxisTitle(value) { this.#timeAxisTitle_accessor_storage = value; }
|
|
106
|
+
#rotate_accessor_storage = (__runInitializers(this, _timeAxisTitle_extraInitializers), __runInitializers(this, _rotate_initializers, 0));
|
|
92
107
|
get rotate() { return this.#rotate_accessor_storage; }
|
|
93
108
|
set rotate(value) { this.#rotate_accessor_storage = value; }
|
|
94
109
|
#xywh_accessor_storage = (__runInitializers(this, _rotate_extraInitializers), __runInitializers(this, _xywh_initializers, '[0,0,3200,1400]'));
|
|
@@ -36,6 +36,22 @@ export declare abstract class FrameworkBackgroundElementModel<Props extends Base
|
|
|
36
36
|
*/
|
|
37
37
|
get connectable(): boolean;
|
|
38
38
|
containsBound(bounds: Bound): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* A marquee takes a board only when it takes the WHOLE board.
|
|
41
|
+
*
|
|
42
|
+
* Box selection keeps every element whose bound overlaps the rectangle the
|
|
43
|
+
* pointer drew, which for a board means any rectangle drawn on its sheet —
|
|
44
|
+
* the author lassoing three classes inside a frame got the frame too, and a
|
|
45
|
+
* drag started on the empty sheet selected the sheet itself. That is the
|
|
46
|
+
* interior answering a gesture R9 reserves for the border and the bands
|
|
47
|
+
* (`includesPoint`), through a different door.
|
|
48
|
+
*
|
|
49
|
+
* The native `affine:frame` block already draws the line here: it joins a
|
|
50
|
+
* box selection only when the box contains it. Same rule, same reason.
|
|
51
|
+
* Consulted by the default `GfxElementModelView.onBoxSelected`; a view that
|
|
52
|
+
* overrides that hook without calling it makes its own decision.
|
|
53
|
+
*/
|
|
54
|
+
boxSelectable(box: Bound): boolean;
|
|
39
55
|
getLineIntersections(start: IVec, end: IVec): import("../../../global/gfx/index.js").PointLocation[] | null;
|
|
40
56
|
getNearestPoint(point: IVec): IVec;
|
|
41
57
|
/**
|
|
@@ -29,6 +29,24 @@ export class FrameworkBackgroundElementModel extends GfxPrimitiveElementModel {
|
|
|
29
29
|
const points = getPointsFromBoundWithRotation(this);
|
|
30
30
|
return points.some(point => bounds.containsPoint(point));
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* A marquee takes a board only when it takes the WHOLE board.
|
|
34
|
+
*
|
|
35
|
+
* Box selection keeps every element whose bound overlaps the rectangle the
|
|
36
|
+
* pointer drew, which for a board means any rectangle drawn on its sheet —
|
|
37
|
+
* the author lassoing three classes inside a frame got the frame too, and a
|
|
38
|
+
* drag started on the empty sheet selected the sheet itself. That is the
|
|
39
|
+
* interior answering a gesture R9 reserves for the border and the bands
|
|
40
|
+
* (`includesPoint`), through a different door.
|
|
41
|
+
*
|
|
42
|
+
* The native `affine:frame` block already draws the line here: it joins a
|
|
43
|
+
* box selection only when the box contains it. Same rule, same reason.
|
|
44
|
+
* Consulted by the default `GfxElementModelView.onBoxSelected`; a view that
|
|
45
|
+
* overrides that hook without calling it makes its own decision.
|
|
46
|
+
*/
|
|
47
|
+
boxSelectable(box) {
|
|
48
|
+
return box.contains(this.elementBound);
|
|
49
|
+
}
|
|
32
50
|
getLineIntersections(start, end) {
|
|
33
51
|
const points = getPointsFromBoundWithRotation(this);
|
|
34
52
|
return linePolygonIntersects(start, end, points);
|
|
@@ -110,7 +110,7 @@ let HighlighterElementModel = (() => {
|
|
|
110
110
|
...(instance.points[i][2] !== undefined ? [instance.points[i][2]] : []),
|
|
111
111
|
]),
|
|
112
112
|
};
|
|
113
|
-
}), field()];
|
|
113
|
+
}), field('[0,0,0,0]')];
|
|
114
114
|
__esDecorate(this, null, _color_decorators, { kind: "accessor", name: "color", static: false, private: false, access: { has: obj => "color" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);
|
|
115
115
|
__esDecorate(this, null, _lineWidth_decorators, { kind: "accessor", name: "lineWidth", static: false, private: false, access: { has: obj => "lineWidth" in obj, get: obj => obj.lineWidth, set: (obj, value) => { obj.lineWidth = value; } }, metadata: _metadata }, _lineWidth_initializers, _lineWidth_extraInitializers);
|
|
116
116
|
__esDecorate(this, null, _points_decorators, { kind: "accessor", name: "points", static: false, private: false, access: { has: obj => "points" in obj, get: obj => obj.points, set: (obj, value) => { obj.points = value; } }, metadata: _metadata }, _points_initializers, _points_extraInitializers);
|
|
@@ -14,6 +14,7 @@ import type { HighlighterElementModel } from './highlighter/index.js';
|
|
|
14
14
|
import type { MindmapElementModel } from './mindmap/index.js';
|
|
15
15
|
import type { ShapeElementModel } from './shape/index.js';
|
|
16
16
|
import type { TextElementModel } from './text/index.js';
|
|
17
|
+
import type { UmlDiagramElementModel, UmlFragmentElementModel, UmlNodeElementModel, UmlPartitionElementModel, UmlRegionElementModel, UmlSubjectElementModel } from './uml/index.js';
|
|
17
18
|
import type { WardleyBackgroundElementModel, WardleyNodeElementModel } from './wardley/index.js';
|
|
18
19
|
export * from './bpmn/index.js';
|
|
19
20
|
export * from './brush/index.js';
|
|
@@ -31,6 +32,7 @@ export * from './highlighter/index.js';
|
|
|
31
32
|
export * from './mindmap/index.js';
|
|
32
33
|
export * from './shape/index.js';
|
|
33
34
|
export * from './text/index.js';
|
|
35
|
+
export * from './uml/index.js';
|
|
34
36
|
export * from './wardley/index.js';
|
|
35
37
|
export type SurfaceElementModelMap = {
|
|
36
38
|
bpmnNode: BpmnNodeElementModel;
|
|
@@ -55,6 +57,12 @@ export type SurfaceElementModelMap = {
|
|
|
55
57
|
coreDomain: CoreDomainChartElementModel;
|
|
56
58
|
contextMap: ContextMapBoardElementModel;
|
|
57
59
|
eventStorming: EventStormingBoardElementModel;
|
|
60
|
+
umlNode: UmlNodeElementModel;
|
|
61
|
+
umlDiagram: UmlDiagramElementModel;
|
|
62
|
+
umlSubject: UmlSubjectElementModel;
|
|
63
|
+
umlPartition: UmlPartitionElementModel;
|
|
64
|
+
umlRegion: UmlRegionElementModel;
|
|
65
|
+
umlFragment: UmlFragmentElementModel;
|
|
58
66
|
};
|
|
59
67
|
export type SurfaceTextModelMap = {
|
|
60
68
|
text: TextElementModel;
|
|
@@ -164,7 +164,7 @@ let ShapeElementModel = (() => {
|
|
|
164
164
|
_isClosed_decorators = [field()];
|
|
165
165
|
_smoothFlags_decorators = [field(null)];
|
|
166
166
|
_controlPoints_decorators = [field()];
|
|
167
|
-
_xywh_decorators = [field()];
|
|
167
|
+
_xywh_decorators = [field('[0,0,0,0]')];
|
|
168
168
|
__esDecorate(this, null, _color_decorators, { kind: "accessor", name: "color", static: false, private: false, access: { has: obj => "color" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);
|
|
169
169
|
__esDecorate(this, null, _fillColor_decorators, { kind: "accessor", name: "fillColor", static: false, private: false, access: { has: obj => "fillColor" in obj, get: obj => obj.fillColor, set: (obj, value) => { obj.fillColor = value; } }, metadata: _metadata }, _fillColor_initializers, _fillColor_extraInitializers);
|
|
170
170
|
__esDecorate(this, null, _filled_decorators, { kind: "accessor", name: "filled", static: false, private: false, access: { has: obj => "filled" in obj, get: obj => obj.filled, set: (obj, value) => { obj.filled = value; } }, metadata: _metadata }, _filled_initializers, _filled_extraInitializers);
|
|
@@ -81,7 +81,7 @@ let TextElementModel = (() => {
|
|
|
81
81
|
_rotate_decorators = [field(0)];
|
|
82
82
|
_text_decorators = [field()];
|
|
83
83
|
_textAlign_decorators = [field()];
|
|
84
|
-
_xywh_decorators = [field()];
|
|
84
|
+
_xywh_decorators = [field('[0,0,0,0]')];
|
|
85
85
|
__esDecorate(this, null, _color_decorators, { kind: "accessor", name: "color", static: false, private: false, access: { has: obj => "color" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);
|
|
86
86
|
__esDecorate(this, null, _fontFamily_decorators, { kind: "accessor", name: "fontFamily", static: false, private: false, access: { has: obj => "fontFamily" in obj, get: obj => obj.fontFamily, set: (obj, value) => { obj.fontFamily = value; } }, metadata: _metadata }, _fontFamily_initializers, _fontFamily_extraInitializers);
|
|
87
87
|
__esDecorate(this, null, _fontSize_decorators, { kind: "accessor", name: "fontSize", static: false, private: false, access: { has: obj => "fontSize" in obj, get: obj => obj.fontSize, set: (obj, value) => { obj.fontSize = value; } }, metadata: _metadata }, _fontSize_initializers, _fontSize_extraInitializers);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The NAME BAND carve-out, shared by the UML backgrounds that wear one.
|
|
3
|
+
*
|
|
4
|
+
* A framework background is picked by its BORDER and nothing else (issue #194),
|
|
5
|
+
* which is what keeps a transparent frame from stealing the clicks meant for
|
|
6
|
+
* what it is drawn round. Every frame that writes its name in a STRIP of its
|
|
7
|
+
* own then has to carve that strip back in, or the words are unreachable: a
|
|
8
|
+
* single click on them would select nothing at all.
|
|
9
|
+
*
|
|
10
|
+
* `UmlDiagramElementModel.includesPoint` was the first to do it and states the
|
|
11
|
+
* argument in full. This module is the same arithmetic, lifted out when the
|
|
12
|
+
* activity PARTITION (§15.6.4) and the state-machine REGION (§14.2.4) each
|
|
13
|
+
* arrived wanting it — and wanting it on two different edges, the partition's
|
|
14
|
+
* band following its own `orientation`. Three inline copies of a rotation
|
|
15
|
+
* unwind is three places for one of them to be fixed.
|
|
16
|
+
*
|
|
17
|
+
* The diagram frame keeps its own copy: it is a RED ZONE file whose hit test is
|
|
18
|
+
* pinned by a spec written against it, and rewriting a shipped carve-out to
|
|
19
|
+
* share code with a new one buys nothing a reader can see.
|
|
20
|
+
*/
|
|
21
|
+
/** What a band test needs of an element: its box and its rotation. */
|
|
22
|
+
export interface UmlBandGeometry {
|
|
23
|
+
deserializedXYWH: readonly number[];
|
|
24
|
+
rotate?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Whether a CANVAS point lies in the leading band of an element — the strip
|
|
28
|
+
* along its top edge (`'top'`) or along its left edge (`'left'`).
|
|
29
|
+
*
|
|
30
|
+
* The band is axis-aligned INSIDE the element, never on the canvas, so the
|
|
31
|
+
* element rotation is undone about the centre before anything is measured:
|
|
32
|
+
* without that the strip would stay pinned to the top of the screen while the
|
|
33
|
+
* name it is meant to pick turned away with the frame.
|
|
34
|
+
*
|
|
35
|
+
* Clamped to an element smaller than its own band, which is the degenerate case
|
|
36
|
+
* a renderer clamps too: an unclamped strip would hang off a squashed frame and
|
|
37
|
+
* pick it from empty canvas.
|
|
38
|
+
*/
|
|
39
|
+
export declare function umlInNameBand(model: UmlBandGeometry, side: 'top' | 'left', band: number, x: number, y: number): boolean;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { rotatePoint } from '../../../global/gfx/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a CANVAS point lies in the leading band of an element — the strip
|
|
4
|
+
* along its top edge (`'top'`) or along its left edge (`'left'`).
|
|
5
|
+
*
|
|
6
|
+
* The band is axis-aligned INSIDE the element, never on the canvas, so the
|
|
7
|
+
* element rotation is undone about the centre before anything is measured:
|
|
8
|
+
* without that the strip would stay pinned to the top of the screen while the
|
|
9
|
+
* name it is meant to pick turned away with the frame.
|
|
10
|
+
*
|
|
11
|
+
* Clamped to an element smaller than its own band, which is the degenerate case
|
|
12
|
+
* a renderer clamps too: an unclamped strip would hang off a squashed frame and
|
|
13
|
+
* pick it from empty canvas.
|
|
14
|
+
*/
|
|
15
|
+
export function umlInNameBand(model, side, band, x, y) {
|
|
16
|
+
const [ex, ey, w, h] = model.deserializedXYWH;
|
|
17
|
+
if (!(w > 0) || !(h > 0) || !(band > 0))
|
|
18
|
+
return false;
|
|
19
|
+
// Element-local coordinates, undoing the element rotation about its centre.
|
|
20
|
+
let lx = x - ex;
|
|
21
|
+
let ly = y - ey;
|
|
22
|
+
const rotate = model.rotate ?? 0;
|
|
23
|
+
if (rotate) {
|
|
24
|
+
const [ux, uy] = rotatePoint([x, y], [ex + w / 2, ey + h / 2], -rotate);
|
|
25
|
+
lx = ux - ex;
|
|
26
|
+
ly = uy - ey;
|
|
27
|
+
}
|
|
28
|
+
if (lx < 0 || lx > w || ly < 0 || ly > h)
|
|
29
|
+
return false;
|
|
30
|
+
return side === 'top' ? ly <= Math.min(band, h) : lx <= Math.min(band, w);
|
|
31
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import type { SerializedXYWH } from '../../../global/gfx/index.js';
|
|
2
|
+
import type { PointTestOptions } from '../../../std/gfx/index.js';
|
|
3
|
+
import type { FrameworkBackgroundProps } from '../framework-background/index.js';
|
|
4
|
+
import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Height of the diagram frame's heading band — the strip across the top of the
|
|
7
|
+
* frame the `<kind> <name>` tag is written in, in model units.
|
|
8
|
+
*
|
|
9
|
+
* Declared HERE, in the model, and re-exported by `@labre/affine-gfx-uml`
|
|
10
|
+
* rather than the other way round, for the reason `C4_BOARD_TITLE_BAND_HEIGHT`
|
|
11
|
+
* is: the frame's own hit test needs it (a diagram is clickable by its heading
|
|
12
|
+
* band as well as by its border), and `affine-model` cannot reach into
|
|
13
|
+
* `affine-block-surface` where the declaration is resolved. One number, owned
|
|
14
|
+
* by the layer that both the declaration and the hit test can read.
|
|
15
|
+
*
|
|
16
|
+
* It is the frame's TOP MARGIN — the inset the drawing gives up so the heading
|
|
17
|
+
* has somewhere to be written — so the strip that is painted, the strip that is
|
|
18
|
+
* picked and the strip that opens the rename are one number rather than three.
|
|
19
|
+
*
|
|
20
|
+
* 44 is the height of the cut-corner tag UML 2.5.1 Annex A draws the heading
|
|
21
|
+
* in: a 20-unit label with the rest as breathing room above and below.
|
|
22
|
+
* Changing it moves the heading, so it is a visual decision and not a hit-test
|
|
23
|
+
* one.
|
|
24
|
+
*/
|
|
25
|
+
export declare const UML_FRAME_BAND_HEIGHT = 44;
|
|
26
|
+
/**
|
|
27
|
+
* Which kind of UML diagram this frame draws — the DECLARED fact, as opposed to
|
|
28
|
+
* the name, which is free text and says whatever its author wants it to.
|
|
29
|
+
*
|
|
30
|
+
* ## Where the values come from
|
|
31
|
+
*
|
|
32
|
+
* UML 2.5.1 Annex A gives the normative frame kind names, each with the
|
|
33
|
+
* abbreviation that may be written in its place:
|
|
34
|
+
*
|
|
35
|
+
* - `activity` / `act`;
|
|
36
|
+
* - `class` — the one kind Annex A gives NO abbreviation for, so the word
|
|
37
|
+
* itself is the tag;
|
|
38
|
+
* - `component` / `cmp`;
|
|
39
|
+
* - `deployment` / `dep`;
|
|
40
|
+
* - `interaction` / `sd`;
|
|
41
|
+
* - `package` / `pkg`;
|
|
42
|
+
* - `state machine` / `stm`;
|
|
43
|
+
* - `use case` / `uc`.
|
|
44
|
+
*
|
|
45
|
+
* `obj` is NOT in that list. Annex A has no frame kind for the object diagram —
|
|
46
|
+
* the standard treats it as a class diagram showing instances — but every tool
|
|
47
|
+
* that draws one tags it `obj`, and an architect reading the sheet expects to
|
|
48
|
+
* see it. So `obj` is kept as a TOOL CONVENTION, recorded as such here so that
|
|
49
|
+
* nobody later "fixes" it against the spec without knowing it was a choice.
|
|
50
|
+
*
|
|
51
|
+
* ## Widening this union is additive
|
|
52
|
+
*
|
|
53
|
+
* Phase 1 shipped the first four kinds below; phase 2 APPENDED `cmp` and `dep`,
|
|
54
|
+
* the two structural frames of §11.6.4 and §19.2.4, then `act` and `stm`, the
|
|
55
|
+
* two behaviour frames of §15.2.4 and §14.2.4; phase 3 appends `sd`. Each
|
|
56
|
+
* arrives as a new VALUE of the existing `kind`
|
|
57
|
+
* string field — no new field, no schema change, no migration and no backfill.
|
|
58
|
+
* The same promise `C4NodeKind` and `BpmnNodeKind` already make.
|
|
59
|
+
*
|
|
60
|
+
* Appended, never reordered: the union is read as a set of strings by every
|
|
61
|
+
* consumer, and a document only ever stores one of them, so the ORDER below is a
|
|
62
|
+
* reading aid. Keeping it chronological is what lets a reviewer see at a glance
|
|
63
|
+
* which build a value arrived in.
|
|
64
|
+
*
|
|
65
|
+
* A value a client has never seen reads back as the string it is, and
|
|
66
|
+
* {@link UmlDiagramElementModel.heading} writes it verbatim, so a document
|
|
67
|
+
* created by a newer build still shows its own heading on an older one.
|
|
68
|
+
*/
|
|
69
|
+
export type UmlDiagramKind = 'class' | 'pkg' | 'obj' | 'uc' | 'cmp' | 'dep' | 'act' | 'stm' | 'sd';
|
|
70
|
+
/**
|
|
71
|
+
* The word written in the heading tag, per kind.
|
|
72
|
+
*
|
|
73
|
+
* A table rather than the raw value so that a kind whose stored discriminant
|
|
74
|
+
* and whose printed tag ever diverge has one place to say so. Today they are
|
|
75
|
+
* the same four strings, and that is worth stating rather than assuming.
|
|
76
|
+
*
|
|
77
|
+
* `Partial` on purpose: a frame read off a document carries whatever string was
|
|
78
|
+
* written there, including a kind from a later phase this build has never heard
|
|
79
|
+
* of. Typing the lookup as total would make {@link
|
|
80
|
+
* UmlDiagramElementModel.heading}'s `?? this.kind` fallback look like dead
|
|
81
|
+
* defensive code, when it is the whole of the append-only promise.
|
|
82
|
+
*/
|
|
83
|
+
export declare const UML_DIAGRAM_KIND_TAG: Partial<Record<UmlDiagramKind, string>>;
|
|
84
|
+
export type UmlDiagramProps = FrameworkBackgroundProps & {
|
|
85
|
+
/** The diagram name, written in the heading tag — edited inline on dblclick. */
|
|
86
|
+
name?: string;
|
|
87
|
+
/** Which kind of UML diagram this frame draws. */
|
|
88
|
+
kind?: UmlDiagramKind;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* The UML diagram frame: the sheet one diagram is drawn on — a class diagram, a
|
|
92
|
+
* package diagram, an object diagram, a use case diagram, a component diagram, a
|
|
93
|
+
* deployment diagram. A framework
|
|
94
|
+
* background like every other one in the library: the user drops nodes on top
|
|
95
|
+
* of it, and a connector never snaps to it.
|
|
96
|
+
*
|
|
97
|
+
* It carries a NAME and a KIND, and the two are written together in the
|
|
98
|
+
* cut-corner tag at its top left, exactly as UML 2.5.1 Annex A draws it. That
|
|
99
|
+
* shared frame notation is the whole reason UML ships as ONE framework with a
|
|
100
|
+
* kind on the board rather than one framework per diagram family (ADR 0017):
|
|
101
|
+
* the kinds share a sheet and a heading, and they mix on it.
|
|
102
|
+
*
|
|
103
|
+
* What it LOOKS like is declared, not coded: see `UML_DIAGRAM_BACKGROUND` in
|
|
104
|
+
* `@labre/affine-gfx-uml`.
|
|
105
|
+
*/
|
|
106
|
+
export declare class UmlDiagramElementModel extends FrameworkBackgroundElementModel<UmlDiagramProps> {
|
|
107
|
+
get type(): string;
|
|
108
|
+
accessor name: string;
|
|
109
|
+
/**
|
|
110
|
+
* Which kind of diagram this frame draws — REQUIRED, unlike the C4 board's
|
|
111
|
+
* `level`, which is optional.
|
|
112
|
+
*
|
|
113
|
+
* The difference is what the field is for. A C4 board's level is a claim
|
|
114
|
+
* about the model an author may decline to make, so an absent one means "a
|
|
115
|
+
* free sketch". A UML frame's kind is part of its NOTATION: Annex A's heading
|
|
116
|
+
* is `<kind> <name>`, and a frame with no kind has no heading to draw. So it
|
|
117
|
+
* has a default, and `class` is the one — the diagram an architect reaches
|
|
118
|
+
* for first, and the only kind Annex A gives no abbreviation for.
|
|
119
|
+
*/
|
|
120
|
+
accessor kind: UmlDiagramKind;
|
|
121
|
+
accessor resizeEnabled: boolean;
|
|
122
|
+
accessor rotate: number;
|
|
123
|
+
accessor xywh: SerializedXYWH;
|
|
124
|
+
/**
|
|
125
|
+
* The heading written in the cut-corner tag: `<kind> <name>`.
|
|
126
|
+
*
|
|
127
|
+
* DERIVED, not stored. Nothing here reaches the document: the two halves are
|
|
128
|
+
* `kind` and `name`, and a rename edits `name` alone — so there is one place
|
|
129
|
+
* a heading can be changed from, and nothing to keep in step with it.
|
|
130
|
+
*
|
|
131
|
+
* A kind this client does not know — a phase-2 value on a phase-1 build — is
|
|
132
|
+
* written VERBATIM rather than dropped or replaced by the default. The tag
|
|
133
|
+
* table is a spelling aid, not a gate: a newer document still shows its own
|
|
134
|
+
* heading here, which is the visible half of the append-only promise
|
|
135
|
+
* {@link UmlDiagramKind} makes.
|
|
136
|
+
*/
|
|
137
|
+
get heading(): string;
|
|
138
|
+
/**
|
|
139
|
+
* A frame is picked by its BORDER — and by its HEADING BAND, the one carve-out
|
|
140
|
+
* it keeps.
|
|
141
|
+
*
|
|
142
|
+
* The same carve-out a C4 board makes, for the same reason and by the same
|
|
143
|
+
* arithmetic: the band is the only part of the sheet that is the SHEET rather
|
|
144
|
+
* than the diagram drawn on it. The heading is written there, nothing is ever
|
|
145
|
+
* dropped there by convention, and the drawing below is where the work goes —
|
|
146
|
+
* so a click there belongs to whatever node is under the pointer.
|
|
147
|
+
*
|
|
148
|
+
* Without this the heading would be unreachable, backgrounds being picked by
|
|
149
|
+
* their border band alone: the only thing left answering would be the view's
|
|
150
|
+
* double-click zone, which is the tight box of the DRAWN glyphs, and a single
|
|
151
|
+
* click on the heading would select nothing at all.
|
|
152
|
+
*
|
|
153
|
+
* The band is the top margin, full width — one number
|
|
154
|
+
* ({@link UML_FRAME_BAND_HEIGHT}), read from here by the framework
|
|
155
|
+
* declaration, so what is painted is what is selectable.
|
|
156
|
+
*/
|
|
157
|
+
includesPoint(x: number, y: number, options?: PointTestOptions): boolean;
|
|
158
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import { rotatePoint } from '../../../global/gfx/index.js';
|
|
36
|
+
import { field } from '../../../std/gfx/index.js';
|
|
37
|
+
import { FrameworkBackgroundElementModel } from '../framework-background/index.js';
|
|
38
|
+
/**
|
|
39
|
+
* Height of the diagram frame's heading band — the strip across the top of the
|
|
40
|
+
* frame the `<kind> <name>` tag is written in, in model units.
|
|
41
|
+
*
|
|
42
|
+
* Declared HERE, in the model, and re-exported by `@labre/affine-gfx-uml`
|
|
43
|
+
* rather than the other way round, for the reason `C4_BOARD_TITLE_BAND_HEIGHT`
|
|
44
|
+
* is: the frame's own hit test needs it (a diagram is clickable by its heading
|
|
45
|
+
* band as well as by its border), and `affine-model` cannot reach into
|
|
46
|
+
* `affine-block-surface` where the declaration is resolved. One number, owned
|
|
47
|
+
* by the layer that both the declaration and the hit test can read.
|
|
48
|
+
*
|
|
49
|
+
* It is the frame's TOP MARGIN — the inset the drawing gives up so the heading
|
|
50
|
+
* has somewhere to be written — so the strip that is painted, the strip that is
|
|
51
|
+
* picked and the strip that opens the rename are one number rather than three.
|
|
52
|
+
*
|
|
53
|
+
* 44 is the height of the cut-corner tag UML 2.5.1 Annex A draws the heading
|
|
54
|
+
* in: a 20-unit label with the rest as breathing room above and below.
|
|
55
|
+
* Changing it moves the heading, so it is a visual decision and not a hit-test
|
|
56
|
+
* one.
|
|
57
|
+
*/
|
|
58
|
+
export const UML_FRAME_BAND_HEIGHT = 44;
|
|
59
|
+
/**
|
|
60
|
+
* The word written in the heading tag, per kind.
|
|
61
|
+
*
|
|
62
|
+
* A table rather than the raw value so that a kind whose stored discriminant
|
|
63
|
+
* and whose printed tag ever diverge has one place to say so. Today they are
|
|
64
|
+
* the same four strings, and that is worth stating rather than assuming.
|
|
65
|
+
*
|
|
66
|
+
* `Partial` on purpose: a frame read off a document carries whatever string was
|
|
67
|
+
* written there, including a kind from a later phase this build has never heard
|
|
68
|
+
* of. Typing the lookup as total would make {@link
|
|
69
|
+
* UmlDiagramElementModel.heading}'s `?? this.kind` fallback look like dead
|
|
70
|
+
* defensive code, when it is the whole of the append-only promise.
|
|
71
|
+
*/
|
|
72
|
+
export const UML_DIAGRAM_KIND_TAG = {
|
|
73
|
+
class: 'class',
|
|
74
|
+
pkg: 'pkg',
|
|
75
|
+
obj: 'obj',
|
|
76
|
+
uc: 'uc',
|
|
77
|
+
// Both are Annex A's own abbreviations, written exactly as the Annex writes
|
|
78
|
+
// them — `cmp` for the component diagram, `dep` for the deployment diagram.
|
|
79
|
+
cmp: 'cmp',
|
|
80
|
+
dep: 'dep',
|
|
81
|
+
// Annex A's own abbreviations again — `act` for the activity diagram, `stm`
|
|
82
|
+
// for the state machine diagram. `stm` is the one tag in the table that is
|
|
83
|
+
// NOT the kind spelled out: Annex A's frame kind is the two words `state
|
|
84
|
+
// machine`, and `stm` is the abbreviation it gives in their place.
|
|
85
|
+
act: 'act',
|
|
86
|
+
stm: 'stm',
|
|
87
|
+
// Annex A's abbreviation for the interaction frame, and the third tag in the
|
|
88
|
+
// table that is not the kind spelled out: the frame kind is `interaction`.
|
|
89
|
+
sd: 'sd',
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* The UML diagram frame: the sheet one diagram is drawn on — a class diagram, a
|
|
93
|
+
* package diagram, an object diagram, a use case diagram, a component diagram, a
|
|
94
|
+
* deployment diagram. A framework
|
|
95
|
+
* background like every other one in the library: the user drops nodes on top
|
|
96
|
+
* of it, and a connector never snaps to it.
|
|
97
|
+
*
|
|
98
|
+
* It carries a NAME and a KIND, and the two are written together in the
|
|
99
|
+
* cut-corner tag at its top left, exactly as UML 2.5.1 Annex A draws it. That
|
|
100
|
+
* shared frame notation is the whole reason UML ships as ONE framework with a
|
|
101
|
+
* kind on the board rather than one framework per diagram family (ADR 0017):
|
|
102
|
+
* the kinds share a sheet and a heading, and they mix on it.
|
|
103
|
+
*
|
|
104
|
+
* What it LOOKS like is declared, not coded: see `UML_DIAGRAM_BACKGROUND` in
|
|
105
|
+
* `@labre/affine-gfx-uml`.
|
|
106
|
+
*/
|
|
107
|
+
let UmlDiagramElementModel = (() => {
|
|
108
|
+
let _classSuper = FrameworkBackgroundElementModel;
|
|
109
|
+
let _name_decorators;
|
|
110
|
+
let _name_initializers = [];
|
|
111
|
+
let _name_extraInitializers = [];
|
|
112
|
+
let _kind_decorators;
|
|
113
|
+
let _kind_initializers = [];
|
|
114
|
+
let _kind_extraInitializers = [];
|
|
115
|
+
let _resizeEnabled_decorators;
|
|
116
|
+
let _resizeEnabled_initializers = [];
|
|
117
|
+
let _resizeEnabled_extraInitializers = [];
|
|
118
|
+
let _rotate_decorators;
|
|
119
|
+
let _rotate_initializers = [];
|
|
120
|
+
let _rotate_extraInitializers = [];
|
|
121
|
+
let _xywh_decorators;
|
|
122
|
+
let _xywh_initializers = [];
|
|
123
|
+
let _xywh_extraInitializers = [];
|
|
124
|
+
return class UmlDiagramElementModel extends _classSuper {
|
|
125
|
+
static {
|
|
126
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
127
|
+
_name_decorators = [field('Diagram')];
|
|
128
|
+
_kind_decorators = [field('class')];
|
|
129
|
+
_resizeEnabled_decorators = [field(true)];
|
|
130
|
+
_rotate_decorators = [field(0)];
|
|
131
|
+
_xywh_decorators = [field()];
|
|
132
|
+
__esDecorate(this, null, _name_decorators, { kind: "accessor", name: "name", static: false, private: false, access: { has: obj => "name" in obj, get: obj => obj.name, set: (obj, value) => { obj.name = value; } }, metadata: _metadata }, _name_initializers, _name_extraInitializers);
|
|
133
|
+
__esDecorate(this, null, _kind_decorators, { kind: "accessor", name: "kind", static: false, private: false, access: { has: obj => "kind" in obj, get: obj => obj.kind, set: (obj, value) => { obj.kind = value; } }, metadata: _metadata }, _kind_initializers, _kind_extraInitializers);
|
|
134
|
+
__esDecorate(this, null, _resizeEnabled_decorators, { kind: "accessor", name: "resizeEnabled", static: false, private: false, access: { has: obj => "resizeEnabled" in obj, get: obj => obj.resizeEnabled, set: (obj, value) => { obj.resizeEnabled = value; } }, metadata: _metadata }, _resizeEnabled_initializers, _resizeEnabled_extraInitializers);
|
|
135
|
+
__esDecorate(this, null, _rotate_decorators, { kind: "accessor", name: "rotate", static: false, private: false, access: { has: obj => "rotate" in obj, get: obj => obj.rotate, set: (obj, value) => { obj.rotate = value; } }, metadata: _metadata }, _rotate_initializers, _rotate_extraInitializers);
|
|
136
|
+
__esDecorate(this, null, _xywh_decorators, { kind: "accessor", name: "xywh", static: false, private: false, access: { has: obj => "xywh" in obj, get: obj => obj.xywh, set: (obj, value) => { obj.xywh = value; } }, metadata: _metadata }, _xywh_initializers, _xywh_extraInitializers);
|
|
137
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
138
|
+
}
|
|
139
|
+
get type() {
|
|
140
|
+
return 'umlDiagram';
|
|
141
|
+
}
|
|
142
|
+
#name_accessor_storage = __runInitializers(this, _name_initializers, 'Diagram');
|
|
143
|
+
get name() { return this.#name_accessor_storage; }
|
|
144
|
+
set name(value) { this.#name_accessor_storage = value; }
|
|
145
|
+
#kind_accessor_storage = (__runInitializers(this, _name_extraInitializers), __runInitializers(this, _kind_initializers, 'class'));
|
|
146
|
+
/**
|
|
147
|
+
* Which kind of diagram this frame draws — REQUIRED, unlike the C4 board's
|
|
148
|
+
* `level`, which is optional.
|
|
149
|
+
*
|
|
150
|
+
* The difference is what the field is for. A C4 board's level is a claim
|
|
151
|
+
* about the model an author may decline to make, so an absent one means "a
|
|
152
|
+
* free sketch". A UML frame's kind is part of its NOTATION: Annex A's heading
|
|
153
|
+
* is `<kind> <name>`, and a frame with no kind has no heading to draw. So it
|
|
154
|
+
* has a default, and `class` is the one — the diagram an architect reaches
|
|
155
|
+
* for first, and the only kind Annex A gives no abbreviation for.
|
|
156
|
+
*/
|
|
157
|
+
get kind() { return this.#kind_accessor_storage; }
|
|
158
|
+
set kind(value) { this.#kind_accessor_storage = value; }
|
|
159
|
+
#resizeEnabled_accessor_storage = (__runInitializers(this, _kind_extraInitializers), __runInitializers(this, _resizeEnabled_initializers, true));
|
|
160
|
+
get resizeEnabled() { return this.#resizeEnabled_accessor_storage; }
|
|
161
|
+
set resizeEnabled(value) { this.#resizeEnabled_accessor_storage = value; }
|
|
162
|
+
#rotate_accessor_storage = (__runInitializers(this, _resizeEnabled_extraInitializers), __runInitializers(this, _rotate_initializers, 0));
|
|
163
|
+
get rotate() { return this.#rotate_accessor_storage; }
|
|
164
|
+
set rotate(value) { this.#rotate_accessor_storage = value; }
|
|
165
|
+
#xywh_accessor_storage = (__runInitializers(this, _rotate_extraInitializers), __runInitializers(this, _xywh_initializers, '[0,0,1400,900]'));
|
|
166
|
+
get xywh() { return this.#xywh_accessor_storage; }
|
|
167
|
+
set xywh(value) { this.#xywh_accessor_storage = value; }
|
|
168
|
+
/**
|
|
169
|
+
* The heading written in the cut-corner tag: `<kind> <name>`.
|
|
170
|
+
*
|
|
171
|
+
* DERIVED, not stored. Nothing here reaches the document: the two halves are
|
|
172
|
+
* `kind` and `name`, and a rename edits `name` alone — so there is one place
|
|
173
|
+
* a heading can be changed from, and nothing to keep in step with it.
|
|
174
|
+
*
|
|
175
|
+
* A kind this client does not know — a phase-2 value on a phase-1 build — is
|
|
176
|
+
* written VERBATIM rather than dropped or replaced by the default. The tag
|
|
177
|
+
* table is a spelling aid, not a gate: a newer document still shows its own
|
|
178
|
+
* heading here, which is the visible half of the append-only promise
|
|
179
|
+
* {@link UmlDiagramKind} makes.
|
|
180
|
+
*/
|
|
181
|
+
get heading() {
|
|
182
|
+
return `${UML_DIAGRAM_KIND_TAG[this.kind] ?? this.kind} ${this.name}`.trim();
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* A frame is picked by its BORDER — and by its HEADING BAND, the one carve-out
|
|
186
|
+
* it keeps.
|
|
187
|
+
*
|
|
188
|
+
* The same carve-out a C4 board makes, for the same reason and by the same
|
|
189
|
+
* arithmetic: the band is the only part of the sheet that is the SHEET rather
|
|
190
|
+
* than the diagram drawn on it. The heading is written there, nothing is ever
|
|
191
|
+
* dropped there by convention, and the drawing below is where the work goes —
|
|
192
|
+
* so a click there belongs to whatever node is under the pointer.
|
|
193
|
+
*
|
|
194
|
+
* Without this the heading would be unreachable, backgrounds being picked by
|
|
195
|
+
* their border band alone: the only thing left answering would be the view's
|
|
196
|
+
* double-click zone, which is the tight box of the DRAWN glyphs, and a single
|
|
197
|
+
* click on the heading would select nothing at all.
|
|
198
|
+
*
|
|
199
|
+
* The band is the top margin, full width — one number
|
|
200
|
+
* ({@link UML_FRAME_BAND_HEIGHT}), read from here by the framework
|
|
201
|
+
* declaration, so what is painted is what is selectable.
|
|
202
|
+
*/
|
|
203
|
+
includesPoint(x, y, options) {
|
|
204
|
+
if (super.includesPoint(x, y, options))
|
|
205
|
+
return true;
|
|
206
|
+
const [ex, ey, w, h] = this.deserializedXYWH;
|
|
207
|
+
// Element-local coordinates, undoing the element rotation about its centre
|
|
208
|
+
// — the band is axis-aligned inside the frame, not on the canvas.
|
|
209
|
+
let lx = x - ex;
|
|
210
|
+
let ly = y - ey;
|
|
211
|
+
const rotate = this.rotate ?? 0;
|
|
212
|
+
if (rotate) {
|
|
213
|
+
const [ux, uy] = rotatePoint([x, y], [ex + w / 2, ey + h / 2], -rotate);
|
|
214
|
+
lx = ux - ex;
|
|
215
|
+
ly = uy - ey;
|
|
216
|
+
}
|
|
217
|
+
if (lx < 0 || lx > w || ly < 0)
|
|
218
|
+
return false;
|
|
219
|
+
// Clamped to a frame shorter than its own heading — the degenerate case the
|
|
220
|
+
// renderer clamps too.
|
|
221
|
+
return ly <= Math.min(UML_FRAME_BAND_HEIGHT, h);
|
|
222
|
+
}
|
|
223
|
+
constructor() {
|
|
224
|
+
super(...arguments);
|
|
225
|
+
__runInitializers(this, _xywh_extraInitializers);
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
})();
|
|
229
|
+
export { UmlDiagramElementModel };
|