@oh-just-another/react-ui 0.60.0 → 0.62.0
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/CHANGELOG.md +137 -0
- package/README.md +3 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/{color-palette.d.ts → color/color-palette.d.ts} +5 -0
- package/dist/color/color-palette.d.ts.map +1 -0
- package/dist/{color-palette.js → color/color-palette.js} +5 -0
- package/dist/color/color-palette.js.map +1 -0
- package/dist/color/color-swatch-picker.d.ts.map +1 -0
- package/dist/{color-swatch-picker.js → color/color-swatch-picker.js} +8 -17
- package/dist/color/color-swatch-picker.js.map +1 -0
- package/dist/{constants.d.ts → core/constants.d.ts} +70 -21
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/{constants.js → core/constants.js} +104 -16
- package/dist/core/constants.js.map +1 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/portal-container.d.ts.map +1 -0
- package/dist/core/portal-container.js.map +1 -0
- package/dist/core/use-fullscreen.d.ts +14 -0
- package/dist/core/use-fullscreen.d.ts.map +1 -0
- package/dist/core/use-fullscreen.js +38 -0
- package/dist/core/use-fullscreen.js.map +1 -0
- package/dist/core/use-quiet-gesture.d.ts +11 -0
- package/dist/core/use-quiet-gesture.d.ts.map +1 -0
- package/dist/core/use-quiet-gesture.js +61 -0
- package/dist/core/use-quiet-gesture.js.map +1 -0
- package/dist/core/use-quiet-viewport.d.ts +10 -0
- package/dist/core/use-quiet-viewport.d.ts.map +1 -0
- package/dist/core/use-quiet-viewport.js +40 -0
- package/dist/core/use-quiet-viewport.js.map +1 -0
- package/dist/index.d.ts +55 -50
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -50
- package/dist/index.js.map +1 -1
- package/dist/layout/diagram-bars.d.ts.map +1 -0
- package/dist/layout/diagram-bars.js.map +1 -0
- package/dist/layout/diagram-canvas.d.ts.map +1 -0
- package/dist/layout/diagram-canvas.js.map +1 -0
- package/dist/layout/diagram-root.d.ts.map +1 -0
- package/dist/{diagram-root.js → layout/diagram-root.js} +2 -2
- package/dist/layout/diagram-root.js.map +1 -0
- package/dist/{sidebar.d.ts → layout/sidebar.d.ts} +1 -0
- package/dist/layout/sidebar.d.ts.map +1 -0
- package/dist/layout/sidebar.js +38 -0
- package/dist/layout/sidebar.js.map +1 -0
- package/dist/layout/ui-layer.d.ts.map +1 -0
- package/dist/layout/ui-layer.js.map +1 -0
- package/dist/menus/command-palette.d.ts.map +1 -0
- package/dist/{command-palette.js → menus/command-palette.js} +3 -3
- package/dist/menus/command-palette.js.map +1 -0
- package/dist/menus/context-menu-controller.d.ts.map +1 -0
- package/dist/menus/context-menu-controller.js.map +1 -0
- package/dist/{context-menu.d.ts → menus/context-menu.d.ts} +12 -0
- package/dist/menus/context-menu.d.ts.map +1 -0
- package/dist/menus/context-menu.js +617 -0
- package/dist/menus/context-menu.js.map +1 -0
- package/dist/menus/link-drop-shape-menu.d.ts.map +1 -0
- package/dist/{link-drop-shape-menu.js → menus/link-drop-shape-menu.js} +4 -4
- package/dist/menus/link-drop-shape-menu.js.map +1 -0
- package/dist/{main-menu.d.ts → menus/main-menu.d.ts} +45 -2
- package/dist/menus/main-menu.d.ts.map +1 -0
- package/dist/menus/main-menu.js +260 -0
- package/dist/menus/main-menu.js.map +1 -0
- package/dist/overlays/file-drop-overlay.d.ts +15 -0
- package/dist/overlays/file-drop-overlay.d.ts.map +1 -0
- package/dist/overlays/file-drop-overlay.js +27 -0
- package/dist/overlays/file-drop-overlay.js.map +1 -0
- package/dist/overlays/frame-name-editor-overlay.d.ts.map +1 -0
- package/dist/{frame-name-editor-overlay.js → overlays/frame-name-editor-overlay.js} +1 -1
- package/dist/overlays/frame-name-editor-overlay.js.map +1 -0
- package/dist/overlays/help-button.d.ts.map +1 -0
- package/dist/{help-button.js → overlays/help-button.js} +3 -4
- package/dist/overlays/help-button.js.map +1 -0
- package/dist/overlays/help-dialog.d.ts.map +1 -0
- package/dist/{help-dialog.js → overlays/help-dialog.js} +4 -24
- package/dist/overlays/help-dialog.js.map +1 -0
- package/dist/overlays/link-badges.d.ts +14 -0
- package/dist/overlays/link-badges.d.ts.map +1 -0
- package/dist/overlays/link-badges.js +60 -0
- package/dist/overlays/link-badges.js.map +1 -0
- package/dist/overlays/link-caption-editor.d.ts.map +1 -0
- package/dist/{link-caption-editor.js → overlays/link-caption-editor.js} +3 -3
- package/dist/overlays/link-caption-editor.js.map +1 -0
- package/dist/overlays/link-hover-popup.d.ts.map +1 -0
- package/dist/{link-hover-popup.js → overlays/link-hover-popup.js} +5 -4
- package/dist/overlays/link-hover-popup.js.map +1 -0
- package/dist/overlays/merge-dialog.d.ts.map +1 -0
- package/dist/overlays/merge-dialog.js +39 -0
- package/dist/overlays/merge-dialog.js.map +1 -0
- package/dist/overlays/search-overlay.d.ts.map +1 -0
- package/dist/{search-overlay.js → overlays/search-overlay.js} +2 -2
- package/dist/overlays/search-overlay.js.map +1 -0
- package/dist/overlays/sticky-reactions.d.ts +2 -0
- package/dist/overlays/sticky-reactions.d.ts.map +1 -0
- package/dist/overlays/sticky-reactions.js +94 -0
- package/dist/overlays/sticky-reactions.js.map +1 -0
- package/dist/overlays/text-editor-overlay.d.ts.map +1 -0
- package/dist/{text-editor-overlay.js → overlays/text-editor-overlay.js} +37 -5
- package/dist/overlays/text-editor-overlay.js.map +1 -0
- package/dist/{comments-panel.d.ts → panels/comments-panel.d.ts} +4 -1
- package/dist/panels/comments-panel.d.ts.map +1 -0
- package/dist/panels/comments-panel.js +51 -0
- package/dist/panels/comments-panel.js.map +1 -0
- package/dist/panels/diff-panel.d.ts.map +1 -0
- package/dist/panels/diff-panel.js.map +1 -0
- package/dist/panels/drawing-panel.d.ts.map +1 -0
- package/dist/{drawing-panel.js → panels/drawing-panel.js} +3 -3
- package/dist/panels/drawing-panel.js.map +1 -0
- package/dist/panels/edge-style-panel.d.ts.map +1 -0
- package/dist/{edge-style-panel.js → panels/edge-style-panel.js} +1 -1
- package/dist/panels/edge-style-panel.js.map +1 -0
- package/dist/panels/frame-panel.d.ts.map +1 -0
- package/dist/{frame-panel.js → panels/frame-panel.js} +1 -1
- package/dist/panels/frame-panel.js.map +1 -0
- package/dist/{layer-panel.d.ts → panels/layer-panel.d.ts} +5 -1
- package/dist/panels/layer-panel.d.ts.map +1 -0
- package/dist/panels/layer-panel.js +52 -0
- package/dist/panels/layer-panel.js.map +1 -0
- package/dist/panels/library-panel.d.ts.map +1 -0
- package/dist/{library-panel.js → panels/library-panel.js} +4 -5
- package/dist/panels/library-panel.js.map +1 -0
- package/dist/panels/property-panel.d.ts.map +1 -0
- package/dist/panels/property-panel.js +1397 -0
- package/dist/panels/property-panel.js.map +1 -0
- package/dist/panels/selection-floating-panel.d.ts.map +1 -0
- package/dist/{selection-floating-panel.js → panels/selection-floating-panel.js} +24 -13
- package/dist/panels/selection-floating-panel.js.map +1 -0
- package/dist/panels/stats-panel.d.ts.map +1 -0
- package/dist/{stats-panel.js → panels/stats-panel.js} +1 -1
- package/dist/panels/stats-panel.js.map +1 -0
- package/dist/primitives/bottom-sheet.d.ts.map +1 -0
- package/dist/{bottom-sheet.js → primitives/bottom-sheet.js} +9 -22
- package/dist/primitives/bottom-sheet.js.map +1 -0
- package/dist/primitives/button-group.d.ts.map +1 -0
- package/dist/primitives/button-group.js.map +1 -0
- package/dist/primitives/css-var.d.ts +8 -0
- package/dist/primitives/css-var.d.ts.map +1 -0
- package/dist/primitives/css-var.js +11 -0
- package/dist/primitives/css-var.js.map +1 -0
- package/dist/primitives/float-panel.d.ts +35 -0
- package/dist/primitives/float-panel.d.ts.map +1 -0
- package/dist/primitives/float-panel.js +42 -0
- package/dist/primitives/float-panel.js.map +1 -0
- package/dist/primitives/icon-button.d.ts.map +1 -0
- package/dist/primitives/icon-button.js.map +1 -0
- package/dist/primitives/markdown.d.ts.map +1 -0
- package/dist/primitives/markdown.js.map +1 -0
- package/dist/primitives/modal.d.ts.map +1 -0
- package/dist/{modal.js → primitives/modal.js} +11 -9
- package/dist/primitives/modal.js.map +1 -0
- package/dist/{popover.d.ts → primitives/popover.d.ts} +1 -1
- package/dist/primitives/popover.d.ts.map +1 -0
- package/dist/{popover.js → primitives/popover.js} +7 -18
- package/dist/primitives/popover.js.map +1 -0
- package/dist/primitives/segmented-control.d.ts.map +1 -0
- package/dist/primitives/segmented-control.js.map +1 -0
- package/dist/primitives/slider.d.ts.map +1 -0
- package/dist/primitives/slider.js.map +1 -0
- package/dist/primitives/switch.d.ts +24 -0
- package/dist/primitives/switch.d.ts.map +1 -0
- package/dist/primitives/switch.js +17 -0
- package/dist/primitives/switch.js.map +1 -0
- package/dist/primitives/toast.d.ts.map +1 -0
- package/dist/{toast.js → primitives/toast.js} +12 -33
- package/dist/primitives/toast.js.map +1 -0
- package/dist/primitives/tooltip.d.ts.map +1 -0
- package/dist/{tooltip.js → primitives/tooltip.js} +3 -3
- package/dist/primitives/tooltip.js.map +1 -0
- package/dist/{palette.d.ts → toolbar/palette.d.ts} +6 -1
- package/dist/toolbar/palette.d.ts.map +1 -0
- package/dist/{palette.js → toolbar/palette.js} +39 -5
- package/dist/toolbar/palette.js.map +1 -0
- package/dist/{toolbar.d.ts → toolbar/toolbar.d.ts} +9 -0
- package/dist/toolbar/toolbar.d.ts.map +1 -0
- package/dist/{toolbar.js → toolbar/toolbar.js} +132 -62
- package/dist/toolbar/toolbar.js.map +1 -0
- package/dist/utils/format-time.d.ts.map +1 -0
- package/dist/utils/format-time.js.map +1 -0
- package/dist/utils/use-dismiss-timer.d.ts.map +1 -0
- package/dist/utils/use-dismiss-timer.js.map +1 -0
- package/dist/widgets/minimap.d.ts.map +1 -0
- package/dist/{minimap.js → widgets/minimap.js} +50 -36
- package/dist/widgets/minimap.js.map +1 -0
- package/dist/widgets/reset-to-content-button.d.ts +11 -0
- package/dist/widgets/reset-to-content-button.d.ts.map +1 -0
- package/dist/{reset-to-content-button.js → widgets/reset-to-content-button.js} +8 -9
- package/dist/widgets/reset-to-content-button.js.map +1 -0
- package/dist/widgets/versioning.d.ts.map +1 -0
- package/dist/{versioning.js → widgets/versioning.js} +4 -4
- package/dist/widgets/versioning.js.map +1 -0
- package/dist/widgets/zen-mode.d.ts.map +1 -0
- package/dist/widgets/zen-mode.js.map +1 -0
- package/package.json +9 -9
- package/src/styles.css +1622 -287
- package/dist/bottom-sheet.d.ts.map +0 -1
- package/dist/bottom-sheet.js.map +0 -1
- package/dist/button-group.d.ts.map +0 -1
- package/dist/button-group.js.map +0 -1
- package/dist/color-palette.d.ts.map +0 -1
- package/dist/color-palette.js.map +0 -1
- package/dist/color-swatch-picker.d.ts.map +0 -1
- package/dist/color-swatch-picker.js.map +0 -1
- package/dist/command-palette.d.ts.map +0 -1
- package/dist/command-palette.js.map +0 -1
- package/dist/comments-panel.d.ts.map +0 -1
- package/dist/comments-panel.js +0 -142
- package/dist/comments-panel.js.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/context-menu-controller.d.ts.map +0 -1
- package/dist/context-menu-controller.js.map +0 -1
- package/dist/context-menu.d.ts.map +0 -1
- package/dist/context-menu.js +0 -368
- package/dist/context-menu.js.map +0 -1
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js.map +0 -1
- package/dist/diagram-bars.d.ts.map +0 -1
- package/dist/diagram-bars.js.map +0 -1
- package/dist/diagram-canvas.d.ts.map +0 -1
- package/dist/diagram-canvas.js.map +0 -1
- package/dist/diagram-root.d.ts.map +0 -1
- package/dist/diagram-root.js.map +0 -1
- package/dist/diff-panel.d.ts.map +0 -1
- package/dist/diff-panel.js.map +0 -1
- package/dist/drawing-panel.d.ts.map +0 -1
- package/dist/drawing-panel.js.map +0 -1
- package/dist/edge-style-panel.d.ts.map +0 -1
- package/dist/edge-style-panel.js.map +0 -1
- package/dist/format-time.d.ts.map +0 -1
- package/dist/format-time.js.map +0 -1
- package/dist/frame-name-editor-overlay.d.ts.map +0 -1
- package/dist/frame-name-editor-overlay.js.map +0 -1
- package/dist/frame-panel.d.ts.map +0 -1
- package/dist/frame-panel.js.map +0 -1
- package/dist/help-button.d.ts.map +0 -1
- package/dist/help-button.js.map +0 -1
- package/dist/help-dialog.d.ts.map +0 -1
- package/dist/help-dialog.js.map +0 -1
- package/dist/hooks.d.ts.map +0 -1
- package/dist/hooks.js.map +0 -1
- package/dist/icon-button.d.ts.map +0 -1
- package/dist/icon-button.js.map +0 -1
- package/dist/layer-panel.d.ts.map +0 -1
- package/dist/layer-panel.js +0 -117
- package/dist/layer-panel.js.map +0 -1
- package/dist/library-panel.d.ts.map +0 -1
- package/dist/library-panel.js.map +0 -1
- package/dist/link-caption-editor.d.ts.map +0 -1
- package/dist/link-caption-editor.js.map +0 -1
- package/dist/link-drop-shape-menu.d.ts.map +0 -1
- package/dist/link-drop-shape-menu.js.map +0 -1
- package/dist/link-hover-popup.d.ts.map +0 -1
- package/dist/link-hover-popup.js.map +0 -1
- package/dist/main-menu.d.ts.map +0 -1
- package/dist/main-menu.js +0 -249
- package/dist/main-menu.js.map +0 -1
- package/dist/markdown.d.ts.map +0 -1
- package/dist/markdown.js.map +0 -1
- package/dist/merge-dialog.d.ts.map +0 -1
- package/dist/merge-dialog.js +0 -50
- package/dist/merge-dialog.js.map +0 -1
- package/dist/minimap.d.ts.map +0 -1
- package/dist/minimap.js.map +0 -1
- package/dist/modal.d.ts.map +0 -1
- package/dist/modal.js.map +0 -1
- package/dist/palette.d.ts.map +0 -1
- package/dist/palette.js.map +0 -1
- package/dist/popover.d.ts.map +0 -1
- package/dist/popover.js.map +0 -1
- package/dist/portal-container.d.ts.map +0 -1
- package/dist/portal-container.js.map +0 -1
- package/dist/property-panel.d.ts.map +0 -1
- package/dist/property-panel.js +0 -917
- package/dist/property-panel.js.map +0 -1
- package/dist/reset-to-content-button.d.ts +0 -10
- package/dist/reset-to-content-button.d.ts.map +0 -1
- package/dist/reset-to-content-button.js.map +0 -1
- package/dist/search-overlay.d.ts.map +0 -1
- package/dist/search-overlay.js.map +0 -1
- package/dist/segmented-control.d.ts.map +0 -1
- package/dist/segmented-control.js.map +0 -1
- package/dist/selection-floating-panel.d.ts.map +0 -1
- package/dist/selection-floating-panel.js.map +0 -1
- package/dist/sidebar.d.ts.map +0 -1
- package/dist/sidebar.js +0 -68
- package/dist/sidebar.js.map +0 -1
- package/dist/slider.d.ts.map +0 -1
- package/dist/slider.js.map +0 -1
- package/dist/stats-panel.d.ts.map +0 -1
- package/dist/stats-panel.js.map +0 -1
- package/dist/text-editor-overlay.d.ts.map +0 -1
- package/dist/text-editor-overlay.js.map +0 -1
- package/dist/toast.d.ts.map +0 -1
- package/dist/toast.js.map +0 -1
- package/dist/toolbar.d.ts.map +0 -1
- package/dist/toolbar.js.map +0 -1
- package/dist/tooltip.d.ts.map +0 -1
- package/dist/tooltip.js.map +0 -1
- package/dist/ui-layer.d.ts.map +0 -1
- package/dist/ui-layer.js.map +0 -1
- package/dist/use-dismiss-timer.d.ts.map +0 -1
- package/dist/use-dismiss-timer.js.map +0 -1
- package/dist/versioning.d.ts.map +0 -1
- package/dist/versioning.js.map +0 -1
- package/dist/zen-mode.d.ts.map +0 -1
- package/dist/zen-mode.js.map +0 -1
- /package/dist/{color-swatch-picker.d.ts → color/color-swatch-picker.d.ts} +0 -0
- /package/dist/{context.d.ts → core/context.d.ts} +0 -0
- /package/dist/{context.js → core/context.js} +0 -0
- /package/dist/{hooks.d.ts → core/hooks.d.ts} +0 -0
- /package/dist/{hooks.js → core/hooks.js} +0 -0
- /package/dist/{portal-container.d.ts → core/portal-container.d.ts} +0 -0
- /package/dist/{portal-container.js → core/portal-container.js} +0 -0
- /package/dist/{diagram-bars.d.ts → layout/diagram-bars.d.ts} +0 -0
- /package/dist/{diagram-bars.js → layout/diagram-bars.js} +0 -0
- /package/dist/{diagram-canvas.d.ts → layout/diagram-canvas.d.ts} +0 -0
- /package/dist/{diagram-canvas.js → layout/diagram-canvas.js} +0 -0
- /package/dist/{diagram-root.d.ts → layout/diagram-root.d.ts} +0 -0
- /package/dist/{ui-layer.d.ts → layout/ui-layer.d.ts} +0 -0
- /package/dist/{ui-layer.js → layout/ui-layer.js} +0 -0
- /package/dist/{command-palette.d.ts → menus/command-palette.d.ts} +0 -0
- /package/dist/{context-menu-controller.d.ts → menus/context-menu-controller.d.ts} +0 -0
- /package/dist/{context-menu-controller.js → menus/context-menu-controller.js} +0 -0
- /package/dist/{link-drop-shape-menu.d.ts → menus/link-drop-shape-menu.d.ts} +0 -0
- /package/dist/{frame-name-editor-overlay.d.ts → overlays/frame-name-editor-overlay.d.ts} +0 -0
- /package/dist/{help-button.d.ts → overlays/help-button.d.ts} +0 -0
- /package/dist/{help-dialog.d.ts → overlays/help-dialog.d.ts} +0 -0
- /package/dist/{link-caption-editor.d.ts → overlays/link-caption-editor.d.ts} +0 -0
- /package/dist/{link-hover-popup.d.ts → overlays/link-hover-popup.d.ts} +0 -0
- /package/dist/{merge-dialog.d.ts → overlays/merge-dialog.d.ts} +0 -0
- /package/dist/{search-overlay.d.ts → overlays/search-overlay.d.ts} +0 -0
- /package/dist/{text-editor-overlay.d.ts → overlays/text-editor-overlay.d.ts} +0 -0
- /package/dist/{diff-panel.d.ts → panels/diff-panel.d.ts} +0 -0
- /package/dist/{diff-panel.js → panels/diff-panel.js} +0 -0
- /package/dist/{drawing-panel.d.ts → panels/drawing-panel.d.ts} +0 -0
- /package/dist/{edge-style-panel.d.ts → panels/edge-style-panel.d.ts} +0 -0
- /package/dist/{frame-panel.d.ts → panels/frame-panel.d.ts} +0 -0
- /package/dist/{library-panel.d.ts → panels/library-panel.d.ts} +0 -0
- /package/dist/{property-panel.d.ts → panels/property-panel.d.ts} +0 -0
- /package/dist/{selection-floating-panel.d.ts → panels/selection-floating-panel.d.ts} +0 -0
- /package/dist/{stats-panel.d.ts → panels/stats-panel.d.ts} +0 -0
- /package/dist/{bottom-sheet.d.ts → primitives/bottom-sheet.d.ts} +0 -0
- /package/dist/{button-group.d.ts → primitives/button-group.d.ts} +0 -0
- /package/dist/{button-group.js → primitives/button-group.js} +0 -0
- /package/dist/{icon-button.d.ts → primitives/icon-button.d.ts} +0 -0
- /package/dist/{icon-button.js → primitives/icon-button.js} +0 -0
- /package/dist/{markdown.d.ts → primitives/markdown.d.ts} +0 -0
- /package/dist/{markdown.js → primitives/markdown.js} +0 -0
- /package/dist/{modal.d.ts → primitives/modal.d.ts} +0 -0
- /package/dist/{segmented-control.d.ts → primitives/segmented-control.d.ts} +0 -0
- /package/dist/{segmented-control.js → primitives/segmented-control.js} +0 -0
- /package/dist/{slider.d.ts → primitives/slider.d.ts} +0 -0
- /package/dist/{slider.js → primitives/slider.js} +0 -0
- /package/dist/{toast.d.ts → primitives/toast.d.ts} +0 -0
- /package/dist/{tooltip.d.ts → primitives/tooltip.d.ts} +0 -0
- /package/dist/{format-time.d.ts → utils/format-time.d.ts} +0 -0
- /package/dist/{format-time.js → utils/format-time.js} +0 -0
- /package/dist/{use-dismiss-timer.d.ts → utils/use-dismiss-timer.d.ts} +0 -0
- /package/dist/{use-dismiss-timer.js → utils/use-dismiss-timer.js} +0 -0
- /package/dist/{minimap.d.ts → widgets/minimap.d.ts} +0 -0
- /package/dist/{versioning.d.ts → widgets/versioning.d.ts} +0 -0
- /package/dist/{zen-mode.d.ts → widgets/zen-mode.d.ts} +0 -0
- /package/dist/{zen-mode.js → widgets/zen-mode.js} +0 -0
|
@@ -2,8 +2,8 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
2
2
|
import { useEffect, useReducer } from "react";
|
|
3
3
|
import { createPortal } from "react-dom";
|
|
4
4
|
import { defaultRegistry } from "@oh-just-another/templates";
|
|
5
|
-
import { useDiagramOptional } from "
|
|
6
|
-
import { usePortalContainer } from "
|
|
5
|
+
import { useDiagramOptional } from "../core/hooks.js";
|
|
6
|
+
import { usePortalContainer } from "../core/portal-container.js";
|
|
7
7
|
/**
|
|
8
8
|
* Shape picker shown after a link is dropped on empty canvas. The
|
|
9
9
|
* dropped link keeps a free end; picking a shape here creates it at the
|
|
@@ -48,14 +48,14 @@ export const LinkDropShapeMenu = () => {
|
|
|
48
48
|
const sx = (menu.world.x - v.pan.x) * v.zoom + hostRect.left;
|
|
49
49
|
const sy = (menu.world.y - v.pan.y) * v.zoom + hostRect.top;
|
|
50
50
|
const templates = defaultRegistry.byCategory("basic");
|
|
51
|
-
return createPortal(_jsxs(_Fragment, { children: [_jsx("div", { className: "du-link-drop-backdrop", style: { position: "fixed", inset: 0, zIndex:
|
|
51
|
+
return createPortal(_jsxs(_Fragment, { children: [_jsx("div", { className: "du-link-drop-backdrop", style: { position: "fixed", inset: 0, zIndex: "var(--du-z-popover)" }, onPointerDown: () => {
|
|
52
52
|
editor.dismissLinkDropMenu();
|
|
53
53
|
} }), _jsx("div", { className: "du-link-drop-menu", role: "menu", "aria-label": "Create shape", style: {
|
|
54
54
|
position: "fixed",
|
|
55
55
|
left: sx,
|
|
56
56
|
top: sy,
|
|
57
57
|
transform: "translate(-50%, -100%)",
|
|
58
|
-
zIndex:
|
|
58
|
+
zIndex: "calc(var(--du-z-popover) + 1)",
|
|
59
59
|
}, onPointerDown: (e) => {
|
|
60
60
|
e.stopPropagation();
|
|
61
61
|
}, children: templates.map((t) => (_jsx("button", { type: "button", className: "du-link-drop-item", title: t.name, "aria-label": `Create ${t.name}`, onClick: () => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-drop-shape-menu.js","sourceRoot":"","sources":["../../src/menus/link-drop-shape-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,21 @@ export interface MainMenuProps {
|
|
|
5
5
|
readonly trigger?: ReactNode;
|
|
6
6
|
readonly className?: string;
|
|
7
7
|
readonly style?: CSSProperties;
|
|
8
|
+
/** Accessible name + tooltip of the trigger button. Default `"Main menu"`. */
|
|
9
|
+
readonly ariaLabel?: string;
|
|
10
|
+
/** Class / style for the trigger button (default: flat icon button). */
|
|
11
|
+
readonly triggerClassName?: string;
|
|
12
|
+
readonly triggerStyle?: CSSProperties;
|
|
13
|
+
/**
|
|
14
|
+
* Where the panel opens relative to the trigger. `"bottom-start"`
|
|
15
|
+
* (default) hangs below, left-aligned; `"top-end"` rises above,
|
|
16
|
+
* right-aligned — for menus in a bottom bar.
|
|
17
|
+
*/
|
|
18
|
+
readonly placement?: "bottom-start" | "top-end";
|
|
8
19
|
}
|
|
9
20
|
export declare const MainMenu: {
|
|
10
|
-
({ children, trigger, className, style, }: MainMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
-
Item: ({ children, onClick, shortcut, disabled, active, icon }: MainMenuItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
({ children, trigger, className, style, ariaLabel, triggerClassName, triggerStyle, placement, }: MainMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
Item: ({ children, onClick, shortcut, disabled, active, icon, trailing, checked, keepOpen, }: MainMenuItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
23
|
ItemLink: ({ children, href, external }: MainMenuItemLinkProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
24
|
Separator: () => import("react/jsx-runtime").JSX.Element;
|
|
14
25
|
Group: ({ title, children }: {
|
|
@@ -35,6 +46,20 @@ export interface MainMenuItemProps {
|
|
|
35
46
|
* aligned across mixed icon / no-icon items.
|
|
36
47
|
*/
|
|
37
48
|
readonly icon?: ReactNode;
|
|
49
|
+
/** Trailing content on the right (non-interactive); rendered instead of `shortcut`. */
|
|
50
|
+
readonly trailing?: ReactNode;
|
|
51
|
+
/**
|
|
52
|
+
* On/off setting row: renders as `menuitemcheckbox` with a trailing
|
|
53
|
+
* switch that mirrors `checked`. The row itself is the control —
|
|
54
|
+
* `onClick` toggles the value — so the switch is decorative (nested
|
|
55
|
+
* buttons are invalid HTML). Implies `keepOpen`.
|
|
56
|
+
*/
|
|
57
|
+
readonly checked?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Keep the menu open after a click — for checkbox-style items (export
|
|
60
|
+
* content switches, etc.) where the user toggles several in a row.
|
|
61
|
+
*/
|
|
62
|
+
readonly keepOpen?: boolean;
|
|
38
63
|
}
|
|
39
64
|
export interface MainMenuItemLinkProps {
|
|
40
65
|
readonly children: ReactNode;
|
|
@@ -56,6 +81,24 @@ interface MainMenuToggleProps<T extends string> {
|
|
|
56
81
|
icon?: ReactNode;
|
|
57
82
|
}[];
|
|
58
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Nested submenu — opens a child panel to the right of the parent item
|
|
86
|
+
* on hover (with a small close-delay so a mouse moving diagonally toward
|
|
87
|
+
* the child doesn't accidentally collapse the panel). Also opens on
|
|
88
|
+
* click for touch / keyboard activation.
|
|
89
|
+
*
|
|
90
|
+
* Children are typically `MainMenu.Item`s. The submenu inherits the
|
|
91
|
+
* parent menu's `close()` context, so child item clicks collapse the
|
|
92
|
+
* whole menu chain.
|
|
93
|
+
*
|
|
94
|
+
* <MainMenu.Submenu icon={<Download/>} label="Export…">
|
|
95
|
+
* <MainMenu.Item onClick={exportPng}>PNG</MainMenu.Item>
|
|
96
|
+
* <MainMenu.Item onClick={exportSvg}>SVG</MainMenu.Item>
|
|
97
|
+
* </MainMenu.Submenu>
|
|
98
|
+
*
|
|
99
|
+
* Positioning is fixed to "right of trigger, top-aligned with the
|
|
100
|
+
* trigger row".
|
|
101
|
+
*/
|
|
59
102
|
export interface MainMenuSubmenuProps {
|
|
60
103
|
readonly children: ReactNode;
|
|
61
104
|
/** Trigger row label. Same render style as `MainMenu.Item`. */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-menu.d.ts","sourceRoot":"","sources":["../../src/menus/main-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AA0Hf,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;IACtC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CACjD;AAED,eAAO,MAAM,QAAQ;qGASlB,aAAa;kGAoKb,iBAAiB;6CAqC4B,qBAAqB;;iCAsBjC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,CAAA;KAAE;aAmB1D,CAAC,SAAS,MAAM,gCAAgC,mBAAmB,CAAC,CAAC,CAAC;mDAiFhC,oBAAoB;CAnNzE,CAAC;AASF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AA2CD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AA+BD;;;;;GAKG;AACH,UAAU,mBAAmB,CAAC,CAAC,SAAS,MAAM;IAC5C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;CAC5E;AAuDD;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, } from "react";
|
|
3
|
+
import { createPortal } from "react-dom";
|
|
4
|
+
import { Check, ChevronRight, Menu as MenuIcon } from "lucide-react";
|
|
5
|
+
import { Switch } from "../primitives/switch.js";
|
|
6
|
+
import { floatPanel } from "../primitives/float-panel.js";
|
|
7
|
+
import { cssPx } from "../primitives/css-var.js";
|
|
8
|
+
import { usePortalContainer } from "../core/portal-container.js";
|
|
9
|
+
import { MARK_ICON, MENU_VIEWPORT_PADDING_PX } from "../core/constants.js";
|
|
10
|
+
/** Pixel size for the trigger icon — matches the toolbar tool buttons. */
|
|
11
|
+
const TRIGGER_ICON_SIZE = 16;
|
|
12
|
+
const TRIGGER_ICON_STROKE = 1.75;
|
|
13
|
+
const Ctx = createContext(null);
|
|
14
|
+
/**
|
|
15
|
+
* Every open panel of one menu (root + nested), portaled to the portal
|
|
16
|
+
* container so they stack above the UI layer (`--du-z-popover`) — the
|
|
17
|
+
* click-outside handler treats a press inside any of them as "inside".
|
|
18
|
+
*/
|
|
19
|
+
const PanelsCtx = createContext(null);
|
|
20
|
+
const LevelCtx = createContext(null);
|
|
21
|
+
const SUBMENU_CLOSE_DELAY_MS = 120;
|
|
22
|
+
const MenuLevel = ({ children }) => {
|
|
23
|
+
const [openId, setOpenId] = useState(null);
|
|
24
|
+
const timer = useRef(null);
|
|
25
|
+
const cancelClose = useCallback(() => {
|
|
26
|
+
if (timer.current !== null) {
|
|
27
|
+
window.clearTimeout(timer.current);
|
|
28
|
+
timer.current = null;
|
|
29
|
+
}
|
|
30
|
+
}, []);
|
|
31
|
+
const closeSoon = useCallback(() => {
|
|
32
|
+
cancelClose();
|
|
33
|
+
timer.current = window.setTimeout(() => {
|
|
34
|
+
setOpenId(null);
|
|
35
|
+
timer.current = null;
|
|
36
|
+
}, SUBMENU_CLOSE_DELAY_MS);
|
|
37
|
+
}, [cancelClose]);
|
|
38
|
+
const scheduleClose = useCallback((id) => {
|
|
39
|
+
cancelClose();
|
|
40
|
+
timer.current = window.setTimeout(() => {
|
|
41
|
+
setOpenId((cur) => (cur === id ? null : cur));
|
|
42
|
+
timer.current = null;
|
|
43
|
+
}, SUBMENU_CLOSE_DELAY_MS);
|
|
44
|
+
}, [cancelClose]);
|
|
45
|
+
const open = useCallback((id) => {
|
|
46
|
+
cancelClose();
|
|
47
|
+
setOpenId(id);
|
|
48
|
+
}, [cancelClose]);
|
|
49
|
+
const toggle = useCallback((id) => {
|
|
50
|
+
cancelClose();
|
|
51
|
+
setOpenId((cur) => (cur === id ? null : id));
|
|
52
|
+
}, [cancelClose]);
|
|
53
|
+
useEffect(() => cancelClose, [cancelClose]);
|
|
54
|
+
const value = useMemo(() => ({ openId, open, toggle, scheduleClose, closeSoon, cancelClose }), [openId, open, toggle, scheduleClose, closeSoon, cancelClose]);
|
|
55
|
+
return _jsx(LevelCtx.Provider, { value: value, children: children });
|
|
56
|
+
};
|
|
57
|
+
const useMenuCtx = () => {
|
|
58
|
+
const ctx = useContext(Ctx);
|
|
59
|
+
return (ctx ?? {
|
|
60
|
+
close: () => {
|
|
61
|
+
/* no-op: fallback when used outside a MainMenu provider */
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
export const MainMenu = ({ children, trigger = _jsx(MenuIcon, { size: TRIGGER_ICON_SIZE, strokeWidth: TRIGGER_ICON_STROKE }), className, style, ariaLabel = "Main menu", triggerClassName, triggerStyle, placement = "bottom-start", }) => {
|
|
66
|
+
const [open, setOpen] = useState(false);
|
|
67
|
+
const ref = useRef(null);
|
|
68
|
+
const triggerRef = useRef(null);
|
|
69
|
+
const panelRef = useRef(null);
|
|
70
|
+
const panels = useRef(new Set()).current;
|
|
71
|
+
const portalContainer = usePortalContainer();
|
|
72
|
+
const menuId = useId();
|
|
73
|
+
// Float the panel off the trigger: clear the bar group's inset + border,
|
|
74
|
+
// then keep `--du-flyout-gap` between the bar and the panel; flip / shift
|
|
75
|
+
// inside the viewport like the context menu.
|
|
76
|
+
useLayoutEffect(() => {
|
|
77
|
+
const trigger = triggerRef.current;
|
|
78
|
+
const panel = panelRef.current;
|
|
79
|
+
if (!open || !trigger || !panel)
|
|
80
|
+
return undefined;
|
|
81
|
+
panels.add(panel);
|
|
82
|
+
const gap = cssPx(panel, "--du-pad-sm") + 1 + cssPx(panel, "--du-flyout-gap");
|
|
83
|
+
const stop = floatPanel(trigger, panel, {
|
|
84
|
+
placement,
|
|
85
|
+
gap,
|
|
86
|
+
padding: MENU_VIEWPORT_PADDING_PX,
|
|
87
|
+
strategy: "fixed",
|
|
88
|
+
clampHeight: true,
|
|
89
|
+
});
|
|
90
|
+
return () => {
|
|
91
|
+
stop();
|
|
92
|
+
panels.delete(panel);
|
|
93
|
+
};
|
|
94
|
+
}, [open, placement, panels]);
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
if (!open)
|
|
97
|
+
return undefined;
|
|
98
|
+
const onDown = (ev) => {
|
|
99
|
+
const t = ev.target;
|
|
100
|
+
if (ref.current?.contains(t))
|
|
101
|
+
return;
|
|
102
|
+
for (const panel of panels)
|
|
103
|
+
if (panel.contains(t))
|
|
104
|
+
return;
|
|
105
|
+
setOpen(false);
|
|
106
|
+
};
|
|
107
|
+
const onKey = (ev) => {
|
|
108
|
+
if (ev.key === "Escape")
|
|
109
|
+
setOpen(false);
|
|
110
|
+
};
|
|
111
|
+
// Listen on both `mousedown` and `pointerdown`. The canvas surface
|
|
112
|
+
// captures pointer events; `mousedown` still fires on the document,
|
|
113
|
+
// but for some touch / pen interactions only `pointerdown` does.
|
|
114
|
+
// Subscribing to both closes the menu reliably for every input type.
|
|
115
|
+
window.addEventListener("mousedown", onDown);
|
|
116
|
+
window.addEventListener("pointerdown", onDown);
|
|
117
|
+
window.addEventListener("keydown", onKey);
|
|
118
|
+
return () => {
|
|
119
|
+
window.removeEventListener("mousedown", onDown);
|
|
120
|
+
window.removeEventListener("pointerdown", onDown);
|
|
121
|
+
window.removeEventListener("keydown", onKey);
|
|
122
|
+
};
|
|
123
|
+
}, [open, panels]);
|
|
124
|
+
const close = useCallback(() => {
|
|
125
|
+
setOpen(false);
|
|
126
|
+
}, []);
|
|
127
|
+
const containerStyle = {
|
|
128
|
+
position: "relative",
|
|
129
|
+
display: "inline-flex",
|
|
130
|
+
...style,
|
|
131
|
+
};
|
|
132
|
+
const panelStyle = {
|
|
133
|
+
position: "fixed",
|
|
134
|
+
top: 0,
|
|
135
|
+
left: 0,
|
|
136
|
+
zIndex: "var(--du-z-popover)",
|
|
137
|
+
};
|
|
138
|
+
return (_jsxs("div", { ref: ref, className: className, style: containerStyle, children: [_jsx("button", { ref: triggerRef, type: "button", className: `${triggerClassName ?? "du-icon-button du-icon-button-flat"}${open ? " is-active" : ""}`, style: triggerStyle, "aria-haspopup": "menu", "aria-expanded": open, "aria-controls": menuId, "aria-label": ariaLabel, title: ariaLabel, onClick: () => {
|
|
139
|
+
setOpen((p) => !p);
|
|
140
|
+
}, children: trigger }), open
|
|
141
|
+
? createPortal(_jsx("div", { ref: panelRef, id: menuId, role: "menu", "aria-label": ariaLabel, className: "du-menu-panel", style: panelStyle, children: _jsx(Ctx.Provider, { value: { close }, children: _jsx(PanelsCtx.Provider, { value: panels, children: _jsx(MenuLevel, { children: children }) }) }) }), portalContainer)
|
|
142
|
+
: null] }));
|
|
143
|
+
};
|
|
144
|
+
/** Gutter content: check mark when active, else the icon (or nothing). */
|
|
145
|
+
const Gutter = ({ active, icon }) => (_jsx("span", { "aria-hidden": true, className: `du-menu-gutter${active ? " is-accent" : ""}`, children: active ? _jsx(Check, { ...MARK_ICON }) : (icon ?? "") }));
|
|
146
|
+
const Item = ({ children, onClick, shortcut, disabled, active, icon, trailing, checked, keepOpen, }) => {
|
|
147
|
+
const { close } = useMenuCtx();
|
|
148
|
+
const level = useContext(LevelCtx);
|
|
149
|
+
const isCheckbox = checked !== undefined;
|
|
150
|
+
return (_jsxs("button", { type: "button", role: isCheckbox ? "menuitemcheckbox" : "menuitem", "aria-checked": isCheckbox ? checked : undefined, disabled: disabled, onClick: () => {
|
|
151
|
+
if (disabled)
|
|
152
|
+
return;
|
|
153
|
+
onClick?.();
|
|
154
|
+
if (!keepOpen && !isCheckbox)
|
|
155
|
+
close();
|
|
156
|
+
}, onMouseEnter: () => level?.closeSoon(), className: "du-menu-row", children: [_jsxs("span", { className: "du-menu-row-main", children: [_jsx(Gutter, { active: active === true, icon: icon }), children] }), isCheckbox ? (_jsx(Switch, { checked: checked, presentational: true })) : ((trailing ?? (shortcut ? _jsx("span", { className: "du-menu-shortcut", children: shortcut }) : null)))] }));
|
|
157
|
+
};
|
|
158
|
+
const ItemLink = ({ children, href, external }) => {
|
|
159
|
+
const { close } = useMenuCtx();
|
|
160
|
+
return (_jsx("a", { role: "menuitem", href: href, target: external ? "_blank" : undefined, rel: external ? "noreferrer noopener" : undefined, onClick: close, className: "du-menu-row", style: { textDecoration: "none" }, children: _jsxs("span", { className: "du-menu-row-main", children: [_jsx(Gutter, {}), children] }) }));
|
|
161
|
+
};
|
|
162
|
+
const Separator = () => _jsx("hr", { className: "du-menu-sep" });
|
|
163
|
+
const Group = ({ title, children }) => (_jsxs("div", { children: [_jsx("div", { className: "du-menu-group-title", children: title }), children] }));
|
|
164
|
+
const Toggle = ({ value, onChange, options }) => {
|
|
165
|
+
return (_jsx("div", { role: "radiogroup", style: {
|
|
166
|
+
display: "flex",
|
|
167
|
+
margin: "var(--du-menu-sep) var(--du-menu-row-pad-x)",
|
|
168
|
+
background: "var(--menu-divider, #2a2a2a)",
|
|
169
|
+
borderRadius: 6,
|
|
170
|
+
padding: 2,
|
|
171
|
+
gap: 2,
|
|
172
|
+
}, children: options.map((opt) => {
|
|
173
|
+
const active = opt.value === value;
|
|
174
|
+
return (_jsx("button", { type: "button", role: "radio", "aria-checked": active, title: opt.label, "aria-label": opt.label, onClick: () => {
|
|
175
|
+
onChange(opt.value);
|
|
176
|
+
}, style: {
|
|
177
|
+
flex: 1,
|
|
178
|
+
display: "inline-flex",
|
|
179
|
+
alignItems: "center",
|
|
180
|
+
justifyContent: "center",
|
|
181
|
+
gap: 4,
|
|
182
|
+
minHeight: 26,
|
|
183
|
+
padding: "0 8px",
|
|
184
|
+
background: active ? "var(--menu-bg, #1a1a1a)" : "transparent",
|
|
185
|
+
color: active ? "var(--text, #ddd)" : "var(--muted, #888)",
|
|
186
|
+
border: "none",
|
|
187
|
+
borderRadius: 4,
|
|
188
|
+
cursor: "pointer",
|
|
189
|
+
fontSize: 12,
|
|
190
|
+
fontWeight: active ? 600 : 400,
|
|
191
|
+
boxShadow: active ? "0 1px 2px rgba(0, 0, 0, 0.15)" : "none",
|
|
192
|
+
transition: "background 0.12s ease, color 0.12s ease",
|
|
193
|
+
}, children: opt.icon ?? opt.label }, opt.value));
|
|
194
|
+
}) }));
|
|
195
|
+
};
|
|
196
|
+
const Submenu = ({ children, label, icon, disabled }) => {
|
|
197
|
+
const id = useId();
|
|
198
|
+
const level = useContext(LevelCtx);
|
|
199
|
+
const panels = useContext(PanelsCtx);
|
|
200
|
+
const portalContainer = usePortalContainer();
|
|
201
|
+
const open = level?.openId === id;
|
|
202
|
+
const rowRef = useRef(null);
|
|
203
|
+
const panelRef = useRef(null);
|
|
204
|
+
// Beside the row (left when the right side has no room), first child row
|
|
205
|
+
// aligned with this row: the cross-axis shift undoes the panel padding +
|
|
206
|
+
// border, the main-axis gap clears the parent column and adds
|
|
207
|
+
// `--du-submenu-gap`. Portaled like the root panel so it stacks above
|
|
208
|
+
// the UI layer and is never clipped by a scrolling parent.
|
|
209
|
+
useLayoutEffect(() => {
|
|
210
|
+
const row = rowRef.current;
|
|
211
|
+
const panel = panelRef.current;
|
|
212
|
+
if (!open || !row || !panel)
|
|
213
|
+
return undefined;
|
|
214
|
+
panels?.add(panel);
|
|
215
|
+
const align = cssPx(panel, "--du-menu-pad") + 1;
|
|
216
|
+
const stop = floatPanel(row, panel, {
|
|
217
|
+
placement: "right-start",
|
|
218
|
+
fallbackPlacements: ["left-start"],
|
|
219
|
+
gap: align + cssPx(panel, "--du-submenu-gap"),
|
|
220
|
+
crossAxis: -align,
|
|
221
|
+
padding: MENU_VIEWPORT_PADDING_PX,
|
|
222
|
+
strategy: "fixed",
|
|
223
|
+
clampHeight: true,
|
|
224
|
+
});
|
|
225
|
+
return () => {
|
|
226
|
+
stop();
|
|
227
|
+
panels?.delete(panel);
|
|
228
|
+
};
|
|
229
|
+
}, [open, panels]);
|
|
230
|
+
const panelStyle = {
|
|
231
|
+
position: "fixed",
|
|
232
|
+
top: 0,
|
|
233
|
+
left: 0,
|
|
234
|
+
zIndex: "calc(var(--du-z-popover) + 1)",
|
|
235
|
+
};
|
|
236
|
+
return (_jsxs(_Fragment, { children: [_jsxs("button", { ref: rowRef, type: "button", role: "menuitem", disabled: disabled, "aria-haspopup": "menu", "aria-expanded": open, onMouseEnter: () => {
|
|
237
|
+
if (disabled)
|
|
238
|
+
return;
|
|
239
|
+
level?.open(id);
|
|
240
|
+
}, onMouseLeave: () => {
|
|
241
|
+
level?.scheduleClose(id);
|
|
242
|
+
}, onClick: () => {
|
|
243
|
+
if (disabled)
|
|
244
|
+
return;
|
|
245
|
+
level?.toggle(id);
|
|
246
|
+
}, className: `du-menu-row${open ? " is-open" : ""}`, children: [_jsxs("span", { className: "du-menu-row-main", children: [_jsx(Gutter, { icon: icon }), label] }), _jsx("span", { className: "du-menu-shortcut", children: _jsx(ChevronRight, { ...MARK_ICON, "aria-hidden": true }) })] }), open
|
|
247
|
+
? createPortal(_jsx("div", { ref: panelRef, role: "menu", className: "du-menu-panel du-menu-submenu", style: panelStyle, onMouseEnter: () => {
|
|
248
|
+
level.cancelClose();
|
|
249
|
+
}, onMouseLeave: () => {
|
|
250
|
+
level.scheduleClose(id);
|
|
251
|
+
}, children: _jsx(MenuLevel, { children: children }) }), portalContainer)
|
|
252
|
+
: null] }));
|
|
253
|
+
};
|
|
254
|
+
MainMenu.Item = Item;
|
|
255
|
+
MainMenu.ItemLink = ItemLink;
|
|
256
|
+
MainMenu.Separator = Separator;
|
|
257
|
+
MainMenu.Group = Group;
|
|
258
|
+
MainMenu.Toggle = Toggle;
|
|
259
|
+
MainMenu.Submenu = Submenu;
|
|
260
|
+
//# sourceMappingURL=main-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-menu.js","sourceRoot":"","sources":["../../src/menus/main-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface FileDropOverlayProps {
|
|
2
|
+
/** Show while an OS file drag hovers the canvas. */
|
|
3
|
+
readonly active: boolean;
|
|
4
|
+
/** Big label under the drop glyph. Default `"DROP"`. */
|
|
5
|
+
readonly label?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Full-canvas hint shown while a file is dragged over the editor: a dashed
|
|
9
|
+
* frame and ONE card — a drop glyph with "DROP" on top, then a row per
|
|
10
|
+
* labelled file-drop handler (`editor.getFileDropHandlers()`) listing what
|
|
11
|
+
* the canvas accepts — images, video, whatever the host registered. Pointer-events
|
|
12
|
+
* none, so the drop still lands on the canvas handlers beneath.
|
|
13
|
+
*/
|
|
14
|
+
export declare const FileDropOverlay: ({ active, label }: FileDropOverlayProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
+
//# sourceMappingURL=file-drop-overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-drop-overlay.d.ts","sourceRoot":"","sources":["../../src/overlays/file-drop-overlay.tsx"],"names":[],"mappings":"AAuBA,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,mBAA4B,oBAAoB,mDAkC/E,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Braces, Download, File, FileText, Image as ImageIcon, LayoutDashboard, Film, } from "lucide-react";
|
|
3
|
+
import { useDiagramOptional } from "../core/hooks.js";
|
|
4
|
+
import { CONTROL_ICON, DROP_OVERLAY_ICON_SIZE, ICON_STROKE } from "../core/constants.js";
|
|
5
|
+
const KIND_ICON = {
|
|
6
|
+
image: _jsx(ImageIcon, { ...CONTROL_ICON, "aria-hidden": true }),
|
|
7
|
+
video: _jsx(Film, { ...CONTROL_ICON, "aria-hidden": true }),
|
|
8
|
+
scene: _jsx(LayoutDashboard, { ...CONTROL_ICON, "aria-hidden": true }),
|
|
9
|
+
text: _jsx(FileText, { ...CONTROL_ICON, "aria-hidden": true }),
|
|
10
|
+
data: _jsx(Braces, { ...CONTROL_ICON, "aria-hidden": true }),
|
|
11
|
+
file: _jsx(File, { ...CONTROL_ICON, "aria-hidden": true }),
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Full-canvas hint shown while a file is dragged over the editor: a dashed
|
|
15
|
+
* frame and ONE card — a drop glyph with "DROP" on top, then a row per
|
|
16
|
+
* labelled file-drop handler (`editor.getFileDropHandlers()`) listing what
|
|
17
|
+
* the canvas accepts — images, video, whatever the host registered. Pointer-events
|
|
18
|
+
* none, so the drop still lands on the canvas handlers beneath.
|
|
19
|
+
*/
|
|
20
|
+
export const FileDropOverlay = ({ active, label = "DROP" }) => {
|
|
21
|
+
const editor = useDiagramOptional();
|
|
22
|
+
if (!active)
|
|
23
|
+
return null;
|
|
24
|
+
const handlers = (editor?.getFileDropHandlers() ?? []).filter((h) => h.label !== undefined);
|
|
25
|
+
return (_jsx("div", { className: "du-drop-overlay", role: "status", "aria-live": "polite", "aria-label": `${label}: drop a file`, children: _jsx("div", { className: "du-drop-overlay-frame", children: _jsxs("div", { className: "du-drop-overlay-card", children: [_jsxs("div", { className: "du-drop-overlay-center", children: [_jsx(Download, { size: DROP_OVERLAY_ICON_SIZE, strokeWidth: ICON_STROKE, "aria-hidden": true }), _jsx("span", { className: "du-drop-overlay-label", children: label })] }), handlers.length > 0 ? (_jsx("ul", { className: "du-drop-overlay-types", "aria-label": "Accepted files", children: handlers.map((h) => (_jsxs("li", { className: "du-drop-type", children: [KIND_ICON[h.kind ?? "file"], _jsx("span", { className: "du-drop-type-label", children: h.label }), h.formats && h.formats.length > 0 ? (_jsx("span", { className: "du-drop-type-formats", children: h.formats.join(" · ") })) : null] }, h.id))) })) : null] }) }) }));
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=file-drop-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-drop-overlay.js","sourceRoot":"","sources":["../../src/overlays/file-drop-overlay.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,KAAK,IAAI,SAAS,EAClB,eAAe,EACf,IAAI,GACL,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEzF,MAAM,SAAS,GAAoC;IACjD,KAAK,EAAE,KAAC,SAAS,OAAK,YAAY,wBAAgB;IAClD,KAAK,EAAE,KAAC,IAAI,OAAK,YAAY,wBAAgB;IAC7C,KAAK,EAAE,KAAC,eAAe,OAAK,YAAY,wBAAgB;IACxD,IAAI,EAAE,KAAC,QAAQ,OAAK,YAAY,wBAAgB;IAChD,IAAI,EAAE,KAAC,MAAM,OAAK,YAAY,wBAAgB;IAC9C,IAAI,EAAE,KAAC,IAAI,OAAK,YAAY,wBAAgB;CAC7C,CAAC;AASF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAwB,EAAE,EAAE;IAClF,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC5F,OAAO,CACL,cACE,SAAS,EAAC,iBAAiB,EAC3B,IAAI,EAAC,QAAQ,eACH,QAAQ,gBACN,GAAG,KAAK,eAAe,YAEnC,cAAK,SAAS,EAAC,uBAAuB,YACpC,eAAK,SAAS,EAAC,sBAAsB,aACnC,eAAK,SAAS,EAAC,wBAAwB,aACrC,KAAC,QAAQ,IAAC,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,WAAW,wBAAgB,EAChF,eAAM,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAQ,IAClD,EACL,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACrB,aAAI,SAAS,EAAC,uBAAuB,gBAAY,gBAAgB,YAC9D,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,cAAe,SAAS,EAAC,cAAc,aACpC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,EAC5B,eAAM,SAAS,EAAC,oBAAoB,YAAE,CAAC,CAAC,KAAK,GAAQ,EACpD,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACnC,eAAM,SAAS,EAAC,sBAAsB,YAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAQ,CACtE,CAAC,CAAC,CAAC,IAAI,KALD,CAAC,CAAC,EAAE,CAMR,CACN,CAAC,GACC,CACN,CAAC,CAAC,CAAC,IAAI,IACJ,GACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-name-editor-overlay.d.ts","sourceRoot":"","sources":["../../src/overlays/frame-name-editor-overlay.tsx"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,sDAqFlC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useReducer, useRef } from "react";
|
|
3
3
|
import { getElement, isFrame, FRAME_HEADER_HEIGHT, FRAME_HEADER_PADDING_X, FRAME_HEADER_FONT_SIZE, } from "@oh-just-another/scene";
|
|
4
|
-
import { useDiagramOptional } from "
|
|
4
|
+
import { useDiagramOptional } from "../core/hooks.js";
|
|
5
5
|
/**
|
|
6
6
|
* Inline editor for a frame's header name. Unlike the in-canvas text
|
|
7
7
|
* editor (invisible sink + canvas-drawn caret), the frame label has no
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-name-editor-overlay.js","sourceRoot":"","sources":["../../src/overlays/frame-name-editor-overlay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-button.d.ts","sourceRoot":"","sources":["../../src/overlays/help-button.tsx"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC;CAC1F;AAED,eAAO,MAAM,UAAU,GAAI,kBAAkB,eAAe,4CA6B3D,CAAC"}
|
|
@@ -2,14 +2,13 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { HelpCircle } from "lucide-react";
|
|
4
4
|
import { HelpDialog } from "./help-dialog.js";
|
|
5
|
-
import { IconButton } from "
|
|
6
|
-
|
|
7
|
-
const HELP_ICON_STROKE = 1.75;
|
|
5
|
+
import { IconButton } from "../primitives/icon-button.js";
|
|
6
|
+
import { CONTROL_ICON } from "../core/constants.js";
|
|
8
7
|
export const HelpButton = ({ renderDialog }) => {
|
|
9
8
|
const [open, setOpen] = useState(false);
|
|
10
9
|
return (_jsxs(_Fragment, { children: [_jsx(IconButton, { label: "Help", onClick: () => {
|
|
11
10
|
setOpen(true);
|
|
12
|
-
}, children: _jsx(HelpCircle, {
|
|
11
|
+
}, children: _jsx(HelpCircle, { ...CONTROL_ICON }) }), renderDialog ? (renderDialog({
|
|
13
12
|
open,
|
|
14
13
|
onClose: () => {
|
|
15
14
|
setOpen(false);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-button.js","sourceRoot":"","sources":["../../src/overlays/help-button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAcpD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,YAAY,EAAmB,EAAE,EAAE;IAC9D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CACL,8BACE,KAAC,UAAU,IACT,KAAK,EAAC,MAAM,EACZ,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC,YAED,KAAC,UAAU,OAAK,YAAY,GAAI,GACrB,EACZ,YAAY,CAAC,CAAC,CAAC,CACd,YAAY,CAAC;gBACX,IAAI;gBACJ,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;aACF,CAAC,CACH,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,IACT,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC,GACD,CACH,IACA,CACJ,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-dialog.d.ts","sourceRoot":"","sources":["../../src/overlays/help-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoD,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAE5F,OAAO,EAML,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAIhC;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;CAC/C;AAiCD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,IAAI,KAAG,IAetD,CAAC;AA0BF,eAAO,MAAM,UAAU,GAAI,oDAMxB,eAAe,KAAG,YAAY,GAAG,IAiEnC,CAAC"}
|
|
@@ -2,8 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Fragment, useEffect, useMemo } from "react";
|
|
3
3
|
import { X } from "lucide-react";
|
|
4
4
|
import { defaultActionRegistry, formatHotkeyParts, isMac, } from "@oh-just-another/state";
|
|
5
|
-
import { HELP_DIALOG_MAX_WIDTH_PX } from "
|
|
6
|
-
import { Modal } from "
|
|
5
|
+
import { HELP_DIALOG_MAX_WIDTH_PX, CONTROL_ICON } from "../core/constants.js";
|
|
6
|
+
import { Modal } from "../primitives/modal.js";
|
|
7
7
|
const CATEGORY_TITLES = {
|
|
8
8
|
history: "History",
|
|
9
9
|
selection: "Selection",
|
|
@@ -113,31 +113,11 @@ export const HelpDialog = ({ registry = defaultActionRegistry, open, onClose, ti
|
|
|
113
113
|
}, [registry, extraSections]);
|
|
114
114
|
const modalStyle = {
|
|
115
115
|
maxWidth: HELP_DIALOG_MAX_WIDTH_PX,
|
|
116
|
-
width: "calc(100vw -
|
|
116
|
+
width: "calc(100vw - 2 * var(--du-modal-margin))",
|
|
117
117
|
display: "flex",
|
|
118
118
|
flexDirection: "column",
|
|
119
119
|
};
|
|
120
|
-
|
|
121
|
-
padding: "16px 20px",
|
|
122
|
-
borderBottom: "1px solid var(--du-ui-border)",
|
|
123
|
-
display: "flex",
|
|
124
|
-
alignItems: "center",
|
|
125
|
-
justifyContent: "space-between",
|
|
126
|
-
};
|
|
127
|
-
const bodyStyle = {
|
|
128
|
-
padding: "16px 20px 20px",
|
|
129
|
-
overflowY: "auto",
|
|
130
|
-
};
|
|
131
|
-
return (_jsx(Modal, { open: open, onClose: onClose, title: title, style: modalStyle, children: _jsxs("div", { children: [_jsxs("div", { style: headerStyle, children: [_jsx("h2", { style: { margin: 0, fontSize: 16, fontWeight: 600 }, children: title }), _jsxs("div", { style: { display: "flex", alignItems: "center", gap: 12 }, children: [_jsx("span", { className: "du-help-platform-badge", children: isMac ? "macOS" : "Win / Linux" }), _jsx("button", { type: "button", "aria-label": "Close help", onClick: onClose, style: {
|
|
132
|
-
background: "transparent",
|
|
133
|
-
border: "none",
|
|
134
|
-
color: "var(--du-text)",
|
|
135
|
-
cursor: "pointer",
|
|
136
|
-
display: "inline-flex",
|
|
137
|
-
alignItems: "center",
|
|
138
|
-
justifyContent: "center",
|
|
139
|
-
padding: 4,
|
|
140
|
-
}, children: _jsx(X, { size: 18, strokeWidth: 1.75 }) })] })] }), _jsx("div", { style: bodyStyle, children: _jsx("div", { className: "du-help-islands", children: sections.map((section) => (_jsxs("section", { className: "du-help-island", children: [_jsx("h3", { className: "du-help-island-title", children: section.title }), _jsx("div", { className: "du-help-island-rows", children: section.rows.map((row) => (_jsxs("div", { className: "du-help-row", children: [_jsx("span", { className: "du-help-row-label", children: row.label }), _jsx(ShortcutKeys, { combos: row.keys })] }, row.label))) })] }, section.title))) }) })] }) }));
|
|
120
|
+
return (_jsx(Modal, { open: open, onClose: onClose, title: title, style: modalStyle, children: _jsxs("div", { children: [_jsxs("div", { className: "du-modal-header", children: [_jsx("h2", { className: "du-modal-title", children: title }), _jsxs("div", { style: { display: "flex", alignItems: "center", gap: "var(--du-modal-gap)" }, children: [_jsx("span", { className: "du-help-platform-badge", children: isMac ? "macOS" : "Win / Linux" }), _jsx("button", { type: "button", "aria-label": "Close help", onClick: onClose, className: "du-modal-close", children: _jsx(X, { ...CONTROL_ICON }) })] })] }), _jsx("div", { className: "du-modal-body", children: _jsx("div", { className: "du-help-islands", children: sections.map((section) => (_jsxs("section", { className: "du-help-island", children: [_jsx("h3", { className: "du-help-island-title", children: section.title }), _jsx("div", { className: "du-help-island-rows", children: section.rows.map((row) => (_jsxs("div", { className: "du-help-row", children: [_jsx("span", { className: "du-help-row-label", children: row.label }), _jsx(ShortcutKeys, { combos: row.keys })] }, row.label))) })] }, section.title))) }) })] }) }));
|
|
141
121
|
};
|
|
142
122
|
/**
|
|
143
123
|
* Render N alternative key combinations joined with "or". Each key
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-dialog.js","sourceRoot":"","sources":["../../src/overlays/help-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent link badges. Every element carrying a (safe) `href` shows a
|
|
3
|
+
* small chip anchored to its top-right corner, so links are discoverable
|
|
4
|
+
* without hovering — the hover popup and Cmd/Ctrl-click remain the detail /
|
|
5
|
+
* open affordances. Clicking the badge opens the link via `editor.openLink`
|
|
6
|
+
* (scheme already validated by `elementLink`). Also shown in read-only mode:
|
|
7
|
+
* following links is a viewing feature, not an edit.
|
|
8
|
+
*
|
|
9
|
+
* Positions are computed from world bounds + viewport on every editor
|
|
10
|
+
* change, so badges track pan / zoom / move. Portaled to the overlay
|
|
11
|
+
* container like the hover popup.
|
|
12
|
+
*/
|
|
13
|
+
export declare const LinkBadges: () => import("react").ReactPortal | null;
|
|
14
|
+
//# sourceMappingURL=link-badges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-badges.d.ts","sourceRoot":"","sources":["../../src/overlays/link-badges.tsx"],"names":[],"mappings":"AASA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,0CAqDtB,CAAC"}
|