@k2b/ui 0.2.0 → 0.3.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/dist/browser/actions/Button.js +11 -2
- package/dist/browser/actions/Button.js.map +1 -1
- package/dist/browser/actions/Disclosure.js +11 -8
- package/dist/browser/actions/Disclosure.js.map +1 -1
- package/dist/browser/actions/Dropdown.js +4 -1
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +16 -2
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/SplitButton.js +69 -22
- package/dist/browser/actions/SplitButton.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js +3 -7
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/Tabs.js +132 -47
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/actions/index.js +1 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +751 -423
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatContextPopup.js +123 -0
- package/dist/browser/chat/ChatContextPopup.js.map +1 -0
- package/dist/browser/chat/ChatPrimitives.js +141 -78
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/ChatTasks.js +112 -0
- package/dist/browser/chat/ChatTasks.js.map +1 -0
- package/dist/browser/chat/ChatTimeline.js +31 -14
- package/dist/browser/chat/ChatTimeline.js.map +1 -1
- package/dist/browser/chat/chat-behavior.js +0 -5
- package/dist/browser/chat/chat-behavior.js.map +1 -1
- package/dist/browser/chat/composer-document.js +55 -0
- package/dist/browser/chat/composer-document.js.map +1 -0
- package/dist/browser/chat/index.js +6 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/chat/types.js.map +1 -1
- package/dist/browser/content/Chart.js +148 -239
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +324 -0
- package/dist/browser/content/ChartExplorer.js.map +1 -0
- package/dist/browser/content/ChartExplorerControls.js +153 -0
- package/dist/browser/content/ChartExplorerControls.js.map +1 -0
- package/dist/browser/content/ChartFilterControls.js +200 -0
- package/dist/browser/content/ChartFilterControls.js.map +1 -0
- package/dist/browser/content/ChartSnapshotView.js +113 -0
- package/dist/browser/content/ChartSnapshotView.js.map +1 -0
- package/dist/browser/content/DataTable.js +48 -32
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/FileBrowser.js +3 -0
- package/dist/browser/content/FileBrowser.js.map +1 -1
- package/dist/browser/content/FileGrid.js +93 -0
- package/dist/browser/content/FileGrid.js.map +1 -0
- package/dist/browser/content/FileTree.js +2 -2
- package/dist/browser/content/FileTree.js.map +1 -1
- package/dist/browser/content/FileView.js +507 -162
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/MarkdownView.js +6 -0
- package/dist/browser/content/MarkdownView.js.map +1 -1
- package/dist/browser/content/PdfPreview.js +107 -90
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/chart-cursor.js +33 -0
- package/dist/browser/content/chart-cursor.js.map +1 -0
- package/dist/browser/content/chart-explorer.js +147 -0
- package/dist/browser/content/chart-explorer.js.map +1 -0
- package/dist/browser/content/chart-inspection.js +447 -0
- package/dist/browser/content/chart-inspection.js.map +1 -0
- package/dist/browser/content/chart-line-gaps.js +53 -0
- package/dist/browser/content/chart-line-gaps.js.map +1 -0
- package/dist/browser/content/chart-map-viewport.js +5 -1
- package/dist/browser/content/chart-map-viewport.js.map +1 -1
- package/dist/browser/content/chart-snapshot.js +63 -0
- package/dist/browser/content/chart-snapshot.js.map +1 -0
- package/dist/browser/content/chart-state-timeline.js +32 -4
- package/dist/browser/content/chart-state-timeline.js.map +1 -1
- package/dist/browser/content/chart-svg.js +54 -0
- package/dist/browser/content/chart-svg.js.map +1 -0
- package/dist/browser/content/collection-selection.js +109 -0
- package/dist/browser/content/collection-selection.js.map +1 -0
- package/dist/browser/content/delimited-preferences.js +21 -0
- package/dist/browser/content/delimited-preferences.js.map +1 -0
- package/dist/browser/content/file-tree.js.map +1 -1
- package/dist/browser/content/file-view-preview.js +11 -7
- package/dist/browser/content/file-view-preview.js.map +1 -1
- package/dist/browser/content/index.js +9 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/feedback/InlineGuidance.js +17 -3
- package/dist/browser/feedback/InlineGuidance.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js +81 -7
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/prompts.js +6 -0
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/feedback/toast.js +29 -6
- package/dist/browser/feedback/toast.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js +3 -2
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +7 -1
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js +61 -37
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/intl/Format.js +89 -16
- package/dist/browser/intl/Format.js.map +1 -1
- package/dist/browser/intl/index.js.map +1 -1
- package/dist/browser/intl/messages.js +130 -2
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +712 -624
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js +95 -0
- package/dist/browser/layout/BottomSheet.js.map +1 -0
- package/dist/browser/layout/DetailPanel.js +56 -44
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/Navigation.js +278 -0
- package/dist/browser/layout/Navigation.js.map +1 -0
- package/dist/browser/layout/PanelDialog.js +219 -71
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/ScrollArea.js +21 -1
- package/dist/browser/layout/ScrollArea.js.map +1 -1
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SidebarItemPreview.js +183 -0
- package/dist/browser/layout/SidebarItemPreview.js.map +1 -0
- package/dist/browser/layout/app-workspace-controller.js +3 -0
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/index.js +3 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js +23 -0
- package/dist/browser/layout/navigation-model.js.map +1 -0
- package/dist/browser/layout/scroll-fade.js +100 -0
- package/dist/browser/layout/scroll-fade.js.map +1 -0
- package/dist/browser/surfaces/DescriptionList.js.map +1 -1
- package/dist/browser/surfaces/StatusBadge.js +2 -1
- package/dist/browser/surfaces/StatusBadge.js.map +1 -1
- package/dist/fonts/ibm-plex-mono-cyrillic-400-italic-4aded3f2f2a7d27d.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-400-normal-7635422bd10ddbbc.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-500-normal-1d89462e86cb8e87.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-600-normal-2b05a8695c7f9f4a.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-italic-a0b3b8cbe5a516e7.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-normal-f8c22ec1804bd696.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-ext-500-normal-3febe5c7f22e4b07.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-cyrillic-ext-600-normal-83109cdd4f8665b4.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-400-italic-0840095faae86403.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-400-normal-08949f728dc52d52.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-500-normal-01d285447409c8a5.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-600-normal-0d1f0b8d0722224e.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-ext-400-italic-1b07eee6df7d26b3.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-ext-400-normal-6bc0f226a5b7884a.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-ext-500-normal-6bb06407c97584b0.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-latin-ext-600-normal-32057cf50dd14bdb.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-vietnamese-400-italic-a6bab38af4f9c761.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-vietnamese-400-normal-62632b6375305e70.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-vietnamese-500-normal-781633d95de88040.woff2 +0 -0
- package/dist/fonts/ibm-plex-mono-vietnamese-600-normal-51b74d53e106ba8a.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-400-italic-e8731a7e2b00fc4f.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-400-normal-69afad88a0740b6e.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-500-normal-200be3a2a6b1789f.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-600-normal-730becc6f005c18c.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-700-normal-40540598b4c9eb2c.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-italic-4ffb25726a7ce4cc.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-normal-e2580ad78906551e.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-ext-500-normal-08578d906af6d986.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-ext-600-normal-d60d3d0b182753d5.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-cyrillic-ext-700-normal-d07dd53642480097.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-greek-400-italic-1bc10b01688ba9fa.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-greek-400-normal-02296067bc904d2a.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-greek-500-normal-8cb6e20b4dbbaa5f.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-greek-600-normal-0a9ebd9019415ee9.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-greek-700-normal-c949641d10a3bebc.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-400-italic-6de912e531b6c980.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-400-normal-3b646991d30055a9.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-500-normal-0717336fb31fcdcd.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-600-normal-8960851d691c054e.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-700-normal-42e7b0c143c19df9.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-ext-400-italic-c5c00e8a32022dfe.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-ext-400-normal-c93d2a12aaa280f6.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-ext-500-normal-2846035d85100f84.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-ext-600-normal-b25dfd4f979e442a.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-latin-ext-700-normal-92f0392bd74fa395.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-vietnamese-400-italic-675d4bace127bffb.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-vietnamese-400-normal-771538f7f26551bd.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-vietnamese-500-normal-85ba3d9c2488a813.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-vietnamese-600-normal-5d34b803637befe3.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-vietnamese-700-normal-b79d0c4b68b85007.woff2 +0 -0
- package/dist/plex.css +1 -1
- package/dist/ssr/actions/Button.js +11 -2
- package/dist/ssr/actions/Button.js.map +1 -1
- package/dist/ssr/actions/Disclosure.js +2 -2
- package/dist/ssr/actions/Disclosure.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +4 -1
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +16 -2
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/SplitButton.js +69 -22
- package/dist/ssr/actions/SplitButton.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js +3 -7
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/Tabs.js +58 -11
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/actions/index.js +1 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +366 -134
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatContextPopup.js +86 -0
- package/dist/ssr/chat/ChatContextPopup.js.map +1 -0
- package/dist/ssr/chat/ChatPrimitives.js +49 -11
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/ChatTasks.js +48 -0
- package/dist/ssr/chat/ChatTasks.js.map +1 -0
- package/dist/ssr/chat/ChatTimeline.js +14 -4
- package/dist/ssr/chat/ChatTimeline.js.map +1 -1
- package/dist/ssr/chat/chat-behavior.js +0 -5
- package/dist/ssr/chat/chat-behavior.js.map +1 -1
- package/dist/ssr/chat/composer-document.js +55 -0
- package/dist/ssr/chat/composer-document.js.map +1 -0
- package/dist/ssr/chat/index.js +6 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/chat/types.js.map +1 -1
- package/dist/ssr/content/Chart.js +121 -219
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +257 -0
- package/dist/ssr/content/ChartExplorer.js.map +1 -0
- package/dist/ssr/content/ChartExplorerControls.js +105 -0
- package/dist/ssr/content/ChartExplorerControls.js.map +1 -0
- package/dist/ssr/content/ChartFilterControls.js +139 -0
- package/dist/ssr/content/ChartFilterControls.js.map +1 -0
- package/dist/ssr/content/ChartSnapshotView.js +57 -0
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -0
- package/dist/ssr/content/DataTable.js +13 -9
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/FileBrowser.js +3 -0
- package/dist/ssr/content/FileBrowser.js.map +1 -1
- package/dist/ssr/content/FileGrid.js +38 -0
- package/dist/ssr/content/FileGrid.js.map +1 -0
- package/dist/ssr/content/FileTree.js +2 -2
- package/dist/ssr/content/FileTree.js.map +1 -1
- package/dist/ssr/content/FileView.js +352 -75
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/MarkdownView.js +6 -0
- package/dist/ssr/content/MarkdownView.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js +37 -24
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/chart-cursor.js +33 -0
- package/dist/ssr/content/chart-cursor.js.map +1 -0
- package/dist/ssr/content/chart-explorer.js +147 -0
- package/dist/ssr/content/chart-explorer.js.map +1 -0
- package/dist/ssr/content/chart-inspection.js +447 -0
- package/dist/ssr/content/chart-inspection.js.map +1 -0
- package/dist/ssr/content/chart-line-gaps.js +53 -0
- package/dist/ssr/content/chart-line-gaps.js.map +1 -0
- package/dist/ssr/content/chart-map-viewport.js +5 -1
- package/dist/ssr/content/chart-map-viewport.js.map +1 -1
- package/dist/ssr/content/chart-snapshot.js +63 -0
- package/dist/ssr/content/chart-snapshot.js.map +1 -0
- package/dist/ssr/content/chart-state-timeline.js +32 -4
- package/dist/ssr/content/chart-state-timeline.js.map +1 -1
- package/dist/ssr/content/chart-svg.js +54 -0
- package/dist/ssr/content/chart-svg.js.map +1 -0
- package/dist/ssr/content/collection-selection.js +109 -0
- package/dist/ssr/content/collection-selection.js.map +1 -0
- package/dist/ssr/content/delimited-preferences.js +21 -0
- package/dist/ssr/content/delimited-preferences.js.map +1 -0
- package/dist/ssr/content/file-tree.js.map +1 -1
- package/dist/ssr/content/file-view-preview.js +11 -7
- package/dist/ssr/content/file-view-preview.js.map +1 -1
- package/dist/ssr/content/index.js +9 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/feedback/InlineGuidance.js +17 -3
- package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js +81 -7
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +6 -0
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/feedback/toast.js +29 -6
- package/dist/ssr/feedback/toast.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +3 -3
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +19 -11
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/intl/Format.js +61 -0
- package/dist/ssr/intl/Format.js.map +1 -1
- package/dist/ssr/intl/index.js.map +1 -1
- package/dist/ssr/intl/messages.js +130 -2
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +368 -275
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js +43 -0
- package/dist/ssr/layout/BottomSheet.js.map +1 -0
- package/dist/ssr/layout/DetailPanel.js +11 -4
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +181 -0
- package/dist/ssr/layout/Navigation.js.map +1 -0
- package/dist/ssr/layout/PanelDialog.js +111 -26
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/ScrollArea.js +16 -1
- package/dist/ssr/layout/ScrollArea.js.map +1 -1
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SidebarItemPreview.js +133 -0
- package/dist/ssr/layout/SidebarItemPreview.js.map +1 -0
- package/dist/ssr/layout/app-workspace-controller.js +3 -0
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/index.js +3 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js +23 -0
- package/dist/ssr/layout/navigation-model.js.map +1 -0
- package/dist/ssr/layout/scroll-fade.js +100 -0
- package/dist/ssr/layout/scroll-fade.js.map +1 -0
- package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
- package/dist/ssr/surfaces/StatusBadge.js +2 -1
- package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tabler.css +1 -1
- package/dist/types/actions/Button.d.ts +4 -0
- package/dist/types/actions/Disclosure.d.ts +1 -0
- package/dist/types/actions/FilterChip.d.ts +4 -0
- package/dist/types/actions/SplitButton.d.ts +6 -0
- package/dist/types/actions/SpotlightSearch.d.ts +0 -4
- package/dist/types/actions/Tabs.d.ts +4 -0
- package/dist/types/actions/index.d.ts +1 -1
- package/dist/types/chat/ChatComposer.d.ts +20 -2
- package/dist/types/chat/ChatContextPopup.d.ts +6 -0
- package/dist/types/chat/ChatPrimitives.d.ts +4 -0
- package/dist/types/chat/ChatTasks.d.ts +15 -0
- package/dist/types/chat/ChatTimeline.d.ts +2 -0
- package/dist/types/chat/chat-behavior.d.ts +0 -3
- package/dist/types/chat/composer-document.d.ts +14 -0
- package/dist/types/chat/index.d.ts +8 -1
- package/dist/types/chat/types.d.ts +7 -0
- package/dist/types/content/Chart.d.ts +42 -23
- package/dist/types/content/ChartExplorer.d.ts +34 -0
- package/dist/types/content/ChartExplorerControls.d.ts +10 -0
- package/dist/types/content/ChartFilterControls.d.ts +21 -0
- package/dist/types/content/ChartSnapshotView.d.ts +11 -0
- package/dist/types/content/DataTable.d.ts +4 -0
- package/dist/types/content/FileBrowser.d.ts +1 -0
- package/dist/types/content/FileGrid.d.ts +21 -0
- package/dist/types/content/FileView.d.ts +20 -0
- package/dist/types/content/PdfPreview.d.ts +8 -1
- package/dist/types/content/chart-cursor.d.ts +15 -0
- package/dist/types/content/chart-explorer.d.ts +48 -0
- package/dist/types/content/chart-inspection.d.ts +40 -0
- package/dist/types/content/chart-line-gaps.d.ts +5 -0
- package/dist/types/content/chart-map-viewport.d.ts +1 -1
- package/dist/types/content/chart-snapshot.d.ts +26 -0
- package/dist/types/content/chart-svg.d.ts +21 -0
- package/dist/types/content/collection-selection.d.ts +24 -0
- package/dist/types/content/delimited-preferences.d.ts +11 -0
- package/dist/types/content/file-tree.d.ts +2 -0
- package/dist/types/content/file-view-preview.d.ts +4 -1
- package/dist/types/content/index.d.ts +15 -1
- package/dist/types/feedback/InlineGuidance.d.ts +1 -0
- package/dist/types/feedback/dialog-core.d.ts +11 -0
- package/dist/types/feedback/prompts.d.ts +2 -0
- package/dist/types/feedback/toast.d.ts +7 -1
- package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -1
- package/dist/types/intl/Format.d.ts +9 -0
- package/dist/types/intl/index.d.ts +1 -1
- package/dist/types/intl/messages.d.ts +31 -1
- package/dist/types/layout/AppWorkspace.d.ts +35 -18
- package/dist/types/layout/BottomSheet.d.ts +23 -0
- package/dist/types/layout/DetailPanel.d.ts +1 -0
- package/dist/types/layout/Navigation.d.ts +8 -0
- package/dist/types/layout/PanelDialog.d.ts +14 -1
- package/dist/types/layout/ScrollArea.d.ts +4 -0
- package/dist/types/layout/Settings.d.ts +1 -1
- package/dist/types/layout/SidebarItemPreview.d.ts +11 -0
- package/dist/types/layout/index.d.ts +4 -1
- package/dist/types/layout/navigation-model.d.ts +48 -0
- package/dist/types/layout/scroll-fade.d.ts +3 -0
- package/dist/types/surfaces/DescriptionList.d.ts +1 -1
- package/dist/types/surfaces/StatusBadge.d.ts +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["splitProps","ScrollArea","props","local","elementProps","className","class","trim","_$ssrElement","_$mergeProps","data-scroll-
|
|
1
|
+
{"version":3,"names":["splitProps","createScrollFade","ScrollArea","props","local","elementProps","body","scrollFade","className","class","trim","_$ssrElement","_$mergeProps","data-scroll-fade-axis","orientation","data-viewport-size","viewportSize","data-orientation","data-scroll-fade-mode","undefined","data-scroll-preserve","scrollPreserveKey","_$escape","children"],"sources":["layout/ScrollArea.tsx"],"sourcesContent":["import { type JSX, splitProps } from \"solid-js\";\nimport { createScrollFade } from \"./scroll-fade\";\n\nexport type ScrollAreaProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\"> & {\n children: JSX.Element;\n scrollFade?: boolean;\n /** Stable compact catalog height, clamped to 60% of the dynamic viewport. */\n viewportSize?: \"compact\";\n orientation?: \"vertical\" | \"horizontal\";\n scrollPreserveKey?: string | false;\n class?: string;\n};\n\nexport function ScrollArea(props: ScrollAreaProps): JSX.Element {\n const [local, elementProps] = splitProps(props, [\"children\", \"scrollPreserveKey\", \"class\", \"scrollFade\", \"orientation\", \"viewportSize\", \"ref\"]);\n let body!: HTMLDivElement;\n createScrollFade(\n () => body,\n () => local.scrollFade !== false,\n );\n const className = () => local.class?.trim();\n\n return (\n <div\n {...elementProps}\n ref={(el) => {\n body = el;\n if (typeof local.ref === \"function\") local.ref(el);\n }}\n data-scroll-fade-axis={local.orientation ?? \"vertical\"}\n data-viewport-size={local.viewportSize}\n data-orientation={local.orientation ?? \"vertical\"}\n data-scroll-fade-mode={local.scrollFade !== false ? \"both\" : undefined}\n class={className() ? `k2b-scroll-area ${className()}` : \"k2b-scroll-area\"}\n data-scroll-preserve={local.scrollPreserveKey || undefined}\n >\n {local.children}\n </div>\n );\n}\n\nexport default ScrollArea;\n"],"mappings":";;;AAAA,SAAmBA,UAAU,QAAQ,UAAU;AAC/C,SAASC,gBAAgB,QAAQ,eAAe;AAYhD,OAAO,SAASC,UAAUA,CAACC,KAAsB,EAAe;EAC9D,MAAM,CAACC,KAAK,EAAEC,YAAY,CAAC,GAAGL,UAAU,CAACG,KAAK,EAAE,CAAC,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;EAC/I,IAAIG,IAAqB;EACzBL,gBAAgB,CACd,MAAMK,IAAI,EACV,MAAMF,KAAK,CAACG,UAAU,KAAK,KAC7B,CAAC;EACD,MAAMC,SAAS,GAAGA,CAAA,KAAMJ,KAAK,CAACK,KAAK,EAAEC,IAAI,CAAC,CAAC;EAE3C,OAAAC,YAAA,QAAAC,YAAA,CAEQP,YAAY;IAAA,6BAAAQ,CAAA;MAAA,OAKOT,KAAK,CAACU,WAAW,IAAI,UAAU;IAAA;IAAA,0BAAAC,CAAA;MAAA,OAClCX,KAAK,CAACY,YAAY;IAAA;IAAA,wBAAAC,CAAA;MAAA,OACpBb,KAAK,CAACU,WAAW,IAAI,UAAU;IAAA;IAAA,6BAAAI,CAAA;MAAA,OAC1Bd,KAAK,CAACG,UAAU,KAAK,KAAK,GAAG,MAAM,GAAGY,SAAS;IAAA;IAAA,aAAAV,CAAA;MAAA,OAC/DD,SAAS,CAAC,CAAC,GAAG,mBAAmBA,SAAS,CAAC,CAAC,EAAE,GAAG,iBAAiB;IAAA;IAAA,4BAAAY,CAAA;MAAA,OACnDhB,KAAK,CAACiB,iBAAiB,IAAIF,SAAS;IAAA;EAAA,IAAAG,QAAA,CAEzDlB,KAAK,CAACmB,QAAQ;AAGrB;AAEA,eAAerB,UAAU","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["children","createMemo","createUniqueId","Show","Button","useUiMessages","read","value","SettingsPage","props","_$ssr","_tmpl$4","class","_$escape","_$ssrStyle","style","_$createComponent","when","icon","_tmpl$5","_$ssrAttribute","title","subtitle","_tmpl$","actions","_tmpl$2","scrollPreserveKey","footer","_tmpl$3","SettingsSection","headingId","_tmpl$7","_tmpl$6","SETTINGS_GROUP_ACTION","Symbol","SettingsGroupAction","kind","collectSettingsGroupActions","Array","isArray","flatMap","collectSettingsGroupContent","SettingsGroup","resolved","action","content","_tmpl$8","description","slot","_tmpl$9","Action","sameSettingValue","left","right","JSON","stringify","readSettingsError","response","fallback","data","json","catch","message","fields","errors","SettingsField","messages","id","descriptionId","errorId","describedBy","error","control","_tmpl$1","label","changed","undefined","_tmpl$0","unsaved","_tmpl$10","SettingsActions","changeCount","loading","disabled","Boolean","disableWithoutChanges","saveDisabled","_tmpl$12","variant","onClick","onDiscard","discard","saveVariant","loadingLabel","saving","onSave","_tmpl$11","saveLabel","saveChanges","SettingsSaveBar","_tmpl$13","unsavedChangeLabel","count","SettingsPanelFooter","_tmpl$15","noUnsavedChanges","_tmpl$14","_$mergeProps"],"sources":["layout/Settings.tsx"],"sourcesContent":["import { children, createMemo, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button, type ButtonVariant } from \"../actions/Button\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { useUiMessages } from \"../intl/messages\";\n\nconst read = <T,>(value: MaybeAccessor<T>): T => (typeof value === \"function\" ? (value as () => T)() : value);\n\nexport type SettingsPageProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n footer?: JSX.Element;\n scrollPreserveKey?: string;\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nexport function SettingsPage(props: SettingsPageProps): JSX.Element {\n return (\n <section class={`k2b-settings-page${props.class ? ` ${props.class}` : \"\"}`} style={props.style}>\n <header class=\"k2b-settings-page__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-page__heading\">\n <h1>{props.title}</h1>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-page__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-page__body\" data-scroll-preserve={props.scrollPreserveKey}>\n {props.children}\n </div>\n <Show when={props.footer}>\n <footer class=\"k2b-settings-page__footer\">{props.footer}</footer>\n </Show>\n </section>\n );\n}\n\nexport type SettingsSectionProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\n/**\n * A full-page settings group. Dialogs keep using PanelDialog.Section; this\n * component owns the quieter, observability-style paper used on admin pages.\n */\nexport function SettingsSection(props: SettingsSectionProps): JSX.Element {\n const headingId = `k2b-settings-section-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-section${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-section__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-section__heading\">\n <h2 id={headingId}>{props.title}</h2>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-section__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-section__body\">{props.children}</div>\n </section>\n );\n}\n\nconst SETTINGS_GROUP_ACTION = Symbol(\"SettingsGroup.Action\");\n\nexport type SettingsGroupProps = {\n title: JSX.Element;\n description?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\nexport type SettingsGroupActionProps = {\n children: JSX.Element;\n};\n\ntype SettingsGroupActionDefinition = {\n readonly kind: typeof SETTINGS_GROUP_ACTION;\n readonly props: SettingsGroupActionProps;\n};\n\ntype SettingsGroupComponent = ((props: SettingsGroupProps) => JSX.Element) & {\n Action: (props: SettingsGroupActionProps) => JSX.Element;\n};\n\nconst SettingsGroupAction = (props: SettingsGroupActionProps): JSX.Element =>\n ({ kind: SETTINGS_GROUP_ACTION, props }) satisfies SettingsGroupActionDefinition as unknown as JSX.Element;\n\nconst collectSettingsGroupActions = (value: unknown): SettingsGroupActionDefinition[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupActions);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION\n ? [value as SettingsGroupActionDefinition]\n : [];\n};\n\nconst collectSettingsGroupContent = (value: unknown): JSX.Element[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupContent);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION ? [] : [value as JSX.Element];\n};\n\nexport const SettingsGroup = ((props: SettingsGroupProps): JSX.Element => {\n const resolved = children(() => props.children);\n const action = createMemo(() => collectSettingsGroupActions(resolved())[0]);\n const content = createMemo(() => collectSettingsGroupContent(resolved()));\n const headingId = `k2b-settings-group-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-group${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-group__header\">\n <div class=\"k2b-settings-group__heading\">\n <h3 id={headingId}>{props.title}</h3>\n <Show when={props.description}>\n <p>{props.description}</p>\n </Show>\n </div>\n <Show when={action()}>{(slot) => <div class=\"k2b-settings-group__action\">{slot().props.children}</div>}</Show>\n </header>\n <div class=\"k2b-settings-group__body\">{content()}</div>\n </section>\n );\n}) as SettingsGroupComponent;\n\nSettingsGroup.Action = SettingsGroupAction;\n\nexport const sameSettingValue = (left: unknown, right: unknown): boolean => JSON.stringify(left) === JSON.stringify(right);\n\nexport const readSettingsError = async (\n response: Response,\n fallback: string,\n): Promise<{ message: string; fields: Record<string, string> }> => {\n const data = (await response.json().catch(() => null)) as {\n message?: string;\n errors?: Record<string, string>;\n } | null;\n return { message: data?.message ?? fallback, fields: data?.errors ?? {} };\n};\n\nexport type SettingsFieldProps = {\n label: string;\n description: string;\n error: MaybeAccessor<string | undefined>;\n changed?: MaybeAccessor<boolean>;\n children: JSX.Element | ((control: SettingsFieldControlProps) => JSX.Element);\n class?: string;\n};\n\nexport type SettingsFieldControlProps = {\n describedBy: () => string;\n};\n\nexport function SettingsField(props: SettingsFieldProps): JSX.Element {\n const messages = useUiMessages();\n const id = createUniqueId();\n const descriptionId = `k2b-settings-field-${id}-description`;\n const errorId = `k2b-settings-field-${id}-error`;\n const describedBy = () => (read(props.error) ? `${descriptionId} ${errorId}` : descriptionId);\n const control = () =>\n typeof props.children === \"function\"\n ? (props.children as (control: SettingsFieldControlProps) => JSX.Element)({ describedBy })\n : props.children;\n return (\n <div class={`k2b-settings-field ${props.class ?? \"\"}`}>\n <div class=\"k2b-settings-field__copy\">\n <div class=\"k2b-settings-field__heading\">\n <strong>{props.label}</strong>\n <Show when={props.changed !== undefined && read(props.changed)}>\n <span>{messages().unsaved}</span>\n </Show>\n </div>\n <p id={descriptionId}>{props.description}</p>\n </div>\n {control()}\n <Show when={read(props.error)}>\n {(error) => (\n <p id={errorId} class=\"k2b-settings-field__error\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" /> {error()}\n </p>\n )}\n </Show>\n </div>\n );\n}\n\nexport type SettingsSaveBarProps = {\n changeCount: MaybeAccessor<number>;\n loading: MaybeAccessor<boolean>;\n saveDisabled?: MaybeAccessor<boolean>;\n onDiscard: () => void;\n onSave: () => void;\n saveLabel?: string;\n saveVariant?: ButtonVariant;\n class?: string;\n};\n\nconst SettingsActions = (\n props: SettingsSaveBarProps & {\n disableWithoutChanges?: boolean;\n },\n): JSX.Element => {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n const loading = () => read(props.loading);\n const disabled = () => loading() || Boolean(props.disableWithoutChanges && changeCount() === 0);\n const saveDisabled = () => disabled() || Boolean(props.saveDisabled !== undefined && read(props.saveDisabled));\n return (\n <div class=\"k2b-settings-actions\">\n <Button variant=\"secondary\" disabled={disabled()} onClick={props.onDiscard}>\n {messages().discard}\n </Button>\n <Button\n variant={props.saveVariant ?? \"primary\"}\n loading={loading()}\n loadingLabel={messages().saving}\n disabled={saveDisabled()}\n onClick={props.onSave}\n >\n <i class=\"ti ti-device-floppy\" aria-hidden=\"true\" />\n {props.saveLabel ?? messages().saveChanges}\n </Button>\n </div>\n );\n};\n\nexport function SettingsSaveBar(props: SettingsSaveBarProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <Show when={changeCount() > 0}>\n <div class={`k2b-settings-save-bar ${props.class ?? \"\"}`}>\n <p role=\"status\" aria-live=\"polite\">\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </p>\n <SettingsActions {...props} />\n </div>\n </Show>\n );\n}\n\nexport type SettingsPanelFooterProps = SettingsSaveBarProps;\n\nexport function SettingsPanelFooter(props: SettingsPanelFooterProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <>\n <p class=\"k2b-settings-panel-footer__status\" role=\"status\" aria-live=\"polite\">\n <Show when={changeCount() > 0} fallback={messages().noUnsavedChanges}>\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </Show>\n </p>\n <SettingsActions {...props} disableWithoutChanges />\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,QAAQ,EAAEC,UAAU,EAAEC,cAAc,EAAYC,IAAI,QAAQ,UAAU;AAC/E,SAASC,MAAM,QAA4B,mBAAmB;AAE9D,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,MAAMC,IAAI,GAAQC,KAAuB,IAAS,OAAOA,KAAK,KAAK,UAAU,GAAIA,KAAK,CAAa,CAAC,GAAGA,KAAM;AAc7G,OAAO,SAASC,YAAYA,CAACC,KAAwB,EAAe;EAClE,OAAAC,KAAA,CAAAC,OAAA,EACkB,oBAAoBF,KAAK,CAACG,KAAK,GAAG,IAAAC,QAAA,CAAIJ,KAAK,CAACG,KAAK,SAAE,GAAG,EAAE,EAAE,EAAAE,UAAA,CAASL,KAAK,CAACM,KAAK,GAAAF,QAAA,CAAAG,iBAAA,CAEzFb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAER,KAAK,CAACS,IAAI;IAAA;IAAAlB,QAAA,EAAIkB,IAAI,IAAAR,KAAA,CAAAS,OAAA,EAAAC,cAAA,UAAAP,QAAA,CAAeK,IAAI,CAAC,CAAC;EAAuB,KAAAL,QAAA,CAEnEJ,KAAK,CAACY,KAAK,GAAAR,QAAA,CAAAG,iBAAA,CACfb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAER,KAAK,CAACa,QAAQ;IAAA;IAAA,IAAAtB,SAAA;MAAA,OAAAU,KAAA,CAAAa,MAAA,EAAAV,QAAA,CACpBJ,KAAK,CAACa,QAAQ;IAAA;EAAA,KAAAT,QAAA,CAAAG,iBAAA,CAGrBb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAER,KAAK,CAACe,OAAO;IAAA;IAAA,IAAAxB,SAAA;MAAA,OAAAU,KAAA,CAAAe,OAAA,EAAAZ,QAAA,CACkBJ,KAAK,CAACe,OAAO;IAAA;EAAA,KAAAJ,cAAA,yBAAAP,QAAA,CAGCJ,KAAK,CAACiB,iBAAiB,iBAAAb,QAAA,CAC/EJ,KAAK,CAACT,QAAQ,GAAAa,QAAA,CAAAG,iBAAA,CAEhBb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAER,KAAK,CAACkB,MAAM;IAAA;IAAA,IAAA3B,SAAA;MAAA,OAAAU,KAAA,CAAAkB,OAAA,EAAAf,QAAA,CACqBJ,KAAK,CAACkB,MAAM;IAAA;EAAA;AAI/D;AAWA;AACA;AACA;AACA;AACA,OAAO,SAASE,eAAeA,CAACpB,KAA2B,EAAe;EACxE,MAAMqB,SAAS,GAAG,wBAAwB5B,cAAc,CAAC,CAAC,EAAE;EAC5D,OAAAQ,KAAA,CAAAqB,OAAA,EACkB,uBAAuBtB,KAAK,CAACG,KAAK,GAAG,IAAAC,QAAA,CAAIJ,KAAK,CAACG,KAAK,SAAE,GAAG,EAAE,EAAE,EAAAQ,cAAA,oBAAAP,QAAA,CAAmBiB,SAAS,iBAAAjB,QAAA,CAAAG,iBAAA,CAEpGb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAER,KAAK,CAACS,IAAI;IAAA;IAAAlB,QAAA,EAAIkB,IAAI,IAAAR,KAAA,CAAAS,OAAA,EAAAC,cAAA,UAAAP,QAAA,CAAeK,IAAI,CAAC,CAAC;EAAuB,KAAAE,cAAA,OAAAP,QAAA,CAEhEiB,SAAS,iBAAAjB,QAAA,CAAGJ,KAAK,CAACY,KAAK,GAAAR,QAAA,CAAAG,iBAAA,CAC9Bb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAER,KAAK,CAACa,QAAQ;IAAA;IAAA,IAAAtB,SAAA;MAAA,OAAAU,KAAA,CAAAa,MAAA,EAAAV,QAAA,CACpBJ,KAAK,CAACa,QAAQ;IAAA;EAAA,KAAAT,QAAA,CAAAG,iBAAA,CAGrBb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAER,KAAK,CAACe,OAAO;IAAA;IAAA,IAAAxB,SAAA;MAAA,OAAAU,KAAA,CAAAsB,OAAA,EAAAnB,QAAA,CACqBJ,KAAK,CAACe,OAAO;IAAA;EAAA,KAAAX,QAAA,CAGpBJ,KAAK,CAACT,QAAQ;AAG7D;AAEA,MAAMiC,qBAAqB,GAAGC,MAAM,CAAC,sBAAsB,CAAC;AAsB5D,MAAMC,mBAAmB,GAAI1B,KAA+B,KACzD;EAAE2B,IAAI,EAAEH,qBAAqB;EAAExB;AAAM,CAAC,CAAmE;AAE5G,MAAM4B,2BAA2B,GAAI9B,KAAc,IAAsC;EACvF,IAAI+B,KAAK,CAACC,OAAO,CAAChC,KAAK,CAAC,EAAE,OAAOA,KAAK,CAACiC,OAAO,CAACH,2BAA2B,CAAC;EAC3E,OAAO9B,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAKA,KAAK,CAAwB6B,IAAI,KAAKH,qBAAqB,GACrG,CAAC1B,KAAK,CAAkC,GACxC,EAAE;AACR,CAAC;AAED,MAAMkC,2BAA2B,GAAIlC,KAAc,IAAoB;EACrE,IAAI+B,KAAK,CAACC,OAAO,CAAChC,KAAK,CAAC,EAAE,OAAOA,KAAK,CAACiC,OAAO,CAACC,2BAA2B,CAAC;EAC3E,OAAOlC,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAKA,KAAK,CAAwB6B,IAAI,KAAKH,qBAAqB,GAAG,EAAE,GAAG,CAAC1B,KAAK,CAAgB;AACzI,CAAC;AAED,OAAO,MAAMmC,aAAa,GAAKjC,KAAyB,IAAkB;EACxE,MAAMkC,QAAQ,GAAG3C,QAAQ,CAAC,MAAMS,KAAK,CAACT,QAAQ,CAAC;EAC/C,MAAM4C,MAAM,GAAG3C,UAAU,CAAC,MAAMoC,2BAA2B,CAACM,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3E,MAAME,OAAO,GAAG5C,UAAU,CAAC,MAAMwC,2BAA2B,CAACE,QAAQ,CAAC,CAAC,CAAC,CAAC;EACzE,MAAMb,SAAS,GAAG,sBAAsB5B,cAAc,CAAC,CAAC,EAAE;EAC1D,OAAAQ,KAAA,CAAAoC,OAAA,EACkB,qBAAqBrC,KAAK,CAACG,KAAK,GAAG,IAAAC,QAAA,CAAIJ,KAAK,CAACG,KAAK,SAAE,GAAG,EAAE,EAAE,EAAAQ,cAAA,oBAAAP,QAAA,CAAmBiB,SAAS,iBAAAV,cAAA,OAAAP,QAAA,CAGzFiB,SAAS,iBAAAjB,QAAA,CAAGJ,KAAK,CAACY,KAAK,GAAAR,QAAA,CAAAG,iBAAA,CAC9Bb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAER,KAAK,CAACsC,WAAW;IAAA;IAAA,IAAA/C,SAAA;MAAA,OAAAU,KAAA,CAAAa,MAAA,EAAAV,QAAA,CACvBJ,KAAK,CAACsC,WAAW;IAAA;EAAA,KAAAlC,QAAA,CAAAG,iBAAA,CAGxBb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAE2B,MAAM,CAAC,CAAC;IAAA;IAAA5C,QAAA,EAAIgD,IAAI,IAAAtC,KAAA,CAAAuC,OAAA,EAAApC,QAAA,CAA8CmC,IAAI,CAAC,CAAC,CAACvC,KAAK,CAACT,QAAQ;EAAO,KAAAa,QAAA,CAEjEgC,OAAO,CAAC,CAAC;AAGtD,CAA4B;AAE5BH,aAAa,CAACQ,MAAM,GAAGf,mBAAmB;AAE1C,OAAO,MAAMgB,gBAAgB,GAAGA,CAACC,IAAa,EAAEC,KAAc,KAAcC,IAAI,CAACC,SAAS,CAACH,IAAI,CAAC,KAAKE,IAAI,CAACC,SAAS,CAACF,KAAK,CAAC;AAE1H,OAAO,MAAMG,iBAAiB,GAAG,MAAAA,CAC/BC,QAAkB,EAClBC,QAAgB,KACiD;EACjE,MAAMC,IAAI,GAAI,MAAMF,QAAQ,CAACG,IAAI,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,IAAI,CAG5C;EACR,OAAO;IAAEC,OAAO,EAAEH,IAAI,EAAEG,OAAO,IAAIJ,QAAQ;IAAEK,MAAM,EAAEJ,IAAI,EAAEK,MAAM,IAAI,CAAC;EAAE,CAAC;AAC3E,CAAC;AAeD,OAAO,SAASC,aAAaA,CAACxD,KAAyB,EAAe;EACpE,MAAMyD,QAAQ,GAAG7D,aAAa,CAAC,CAAC;EAChC,MAAM8D,EAAE,GAAGjE,cAAc,CAAC,CAAC;EAC3B,MAAMkE,aAAa,GAAG,sBAAsBD,EAAE,cAAc;EAC5D,MAAME,OAAO,GAAG,sBAAsBF,EAAE,QAAQ;EAChD,MAAMG,WAAW,GAAGA,CAAA,KAAOhE,IAAI,CAACG,KAAK,CAAC8D,KAAK,CAAC,GAAG,GAAGH,aAAa,IAAIC,OAAO,EAAE,GAAGD,aAAc;EAC7F,MAAMI,OAAO,GAAGA,CAAA,KACd,OAAO/D,KAAK,CAACT,QAAQ,KAAK,UAAU,GAC/BS,KAAK,CAACT,QAAQ,CAAyD;IAAEsE;EAAY,CAAC,CAAC,GACxF7D,KAAK,CAACT,QAAQ;EACpB,OAAAU,KAAA,CAAA+D,OAAA,EACc,sBAAA5D,QAAA,CAAsBJ,KAAK,CAACG,KAAK,IAAI,EAAE,SAAE,EAAAC,QAAA,CAGtCJ,KAAK,CAACiE,KAAK,GAAA7D,QAAA,CAAAG,iBAAA,CACnBb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAER,KAAK,CAACkE,OAAO,KAAKC,SAAS,IAAItE,IAAI,CAACG,KAAK,CAACkE,OAAO,CAAC;IAAA;IAAA,IAAA3E,SAAA;MAAA,OAAAU,KAAA,CAAAmE,OAAA,EAAAhE,QAAA,CACrDqD,QAAQ,CAAC,CAAC,CAACY,OAAO;IAAA;EAAA,KAAA1D,cAAA,OAAAP,QAAA,CAGtBuD,aAAa,iBAAAvD,QAAA,CAAGJ,KAAK,CAACsC,WAAW,GAAAlC,QAAA,CAEzC2D,OAAO,CAAC,CAAC,GAAA3D,QAAA,CAAAG,iBAAA,CACTb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAEX,IAAI,CAACG,KAAK,CAAC8D,KAAK,CAAC;IAAA;IAAAvE,QAAA,EACzBuE,KAAK,IAAA7D,KAAA,CAAAqE,QAAA,EAAA3D,cAAA,OAAAP,QAAA,CACEwD,OAAO,iBAAAxD,QAAA,CACyC0D,KAAK,CAAC,CAAC;EAE/D;AAIT;AAaA,MAAMS,eAAe,GACnBvE,KAEC,IACe;EAChB,MAAMyD,QAAQ,GAAG7D,aAAa,CAAC,CAAC;EAChC,MAAM4E,WAAW,GAAGA,CAAA,KAAM3E,IAAI,CAACG,KAAK,CAACwE,WAAW,CAAC;EACjD,MAAMC,OAAO,GAAGA,CAAA,KAAM5E,IAAI,CAACG,KAAK,CAACyE,OAAO,CAAC;EACzC,MAAMC,QAAQ,GAAGA,CAAA,KAAMD,OAAO,CAAC,CAAC,IAAIE,OAAO,CAAC3E,KAAK,CAAC4E,qBAAqB,IAAIJ,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC;EAC/F,MAAMK,YAAY,GAAGA,CAAA,KAAMH,QAAQ,CAAC,CAAC,IAAIC,OAAO,CAAC3E,KAAK,CAAC6E,YAAY,KAAKV,SAAS,IAAItE,IAAI,CAACG,KAAK,CAAC6E,YAAY,CAAC,CAAC;EAC9G,OAAA5E,KAAA,CAAA6E,QAAA,EAAA1E,QAAA,CAAAG,iBAAA,CAEKZ,MAAM;IAACoF,OAAO;IAAA,IAAaL,QAAQA,CAAA;MAAA,OAAEA,QAAQ,CAAC,CAAC;IAAA;IAAA,IAAEM,OAAOA,CAAA;MAAA,OAAEhF,KAAK,CAACiF,SAAS;IAAA;IAAA,IAAA1F,SAAA;MAAA,OACvEkE,QAAQ,CAAC,CAAC,CAACyB,OAAO;IAAA;EAAA,KAAA9E,QAAA,CAAAG,iBAAA,CAEpBZ,MAAM;IAAA,IACLoF,OAAOA,CAAA;MAAA,OAAE/E,KAAK,CAACmF,WAAW,IAAI,SAAS;IAAA;IAAA,IACvCV,OAAOA,CAAA;MAAA,OAAEA,OAAO,CAAC,CAAC;IAAA;IAAA,IAClBW,YAAYA,CAAA;MAAA,OAAE3B,QAAQ,CAAC,CAAC,CAAC4B,MAAM;IAAA;IAAA,IAC/BX,QAAQA,CAAA;MAAA,OAAEG,YAAY,CAAC,CAAC;IAAA;IAAA,IACxBG,OAAOA,CAAA;MAAA,OAAEhF,KAAK,CAACsF,MAAM;IAAA;IAAA,IAAA/F,SAAA;MAAA,QAAAU,KAAA,CAAAsF,QAAA,GAGpBvF,KAAK,CAACwF,SAAS,IAAI/B,QAAQ,CAAC,CAAC,CAACgC,WAAW;IAAA;EAAA;AAIlD,CAAC;AAED,OAAO,SAASC,eAAeA,CAAC1F,KAA2B,EAAe;EACxE,MAAMyD,QAAQ,GAAG7D,aAAa,CAAC,CAAC;EAChC,MAAM4E,WAAW,GAAGA,CAAA,KAAM3E,IAAI,CAACG,KAAK,CAACwE,WAAW,CAAC;EACjD,OAAAjE,iBAAA,CACGb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAEgE,WAAW,CAAC,CAAC,GAAG,CAAC;IAAA;IAAA,IAAAjF,SAAA;MAAA,OAAAU,KAAA,CAAA0F,QAAA,EACf,yBAAAvF,QAAA,CAAyBJ,KAAK,CAACG,KAAK,IAAI,EAAE,SAAE,EAAAC,QAAA,CAE3CoE,WAAW,CAAC,CAAC,GAAApE,QAAA,CAAYqD,QAAQ,CAAC,CAAC,CAACmC,kBAAkB,CAAC;QAAEC,KAAK,EAAErB,WAAW,CAAC;MAAE,CAAC,CAAC,GAAApE,QAAA,CAAAG,iBAAA,CAE1FgE,eAAe,EAAKvE,KAAK;IAAA;EAAA;AAIlC;AAIA,OAAO,SAAS8F,mBAAmBA,CAAC9F,KAA+B,EAAe;EAChF,MAAMyD,QAAQ,GAAG7D,aAAa,CAAC,CAAC;EAChC,MAAM4E,WAAW,GAAGA,CAAA,KAAM3E,IAAI,CAACG,KAAK,CAACwE,WAAW,CAAC;EACjD,QAAAvE,KAAA,CAAA8F,QAAA,EAAA3F,QAAA,CAAAG,iBAAA,CAGOb,IAAI;IAAA,IAACc,IAAIA,CAAA;MAAA,OAAEgE,WAAW,CAAC,CAAC,GAAG,CAAC;IAAA;IAAA,IAAEvB,QAAQA,CAAA;MAAA,OAAEQ,QAAQ,CAAC,CAAC,CAACuC,gBAAgB;IAAA;IAAA,IAAAzG,SAAA;MAAA,QAAAU,KAAA,CAAAgG,QAAA,EAAA7F,QAAA,CACzDoE,WAAW,CAAC,CAAC,SAAYf,QAAQ,CAAC,CAAC,CAACmC,kBAAkB,CAAC;QAAEC,KAAK,EAAErB,WAAW,CAAC;MAAE,CAAC,CAAC;IAAA;EAAA,MAAAjE,iBAAA,CAG5FgE,eAAe,EAAA2B,YAAA,CAAKlG,KAAK;IAAE4E,qBAAqB;EAAA;AAGvD","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["children","createMemo","createUniqueId","Show","Button","useUiMessages","read","value","SettingsPage","props","_$ssr","_tmpl$4","class","_$escape","_$ssrStyle","style","_$createComponent","when","icon","_tmpl$5","_$ssrAttribute","title","subtitle","_tmpl$","actions","_tmpl$2","scrollPreserveKey","footer","_tmpl$3","SettingsSection","headingId","_tmpl$7","_tmpl$6","SETTINGS_GROUP_ACTION","Symbol","SettingsGroupAction","kind","collectSettingsGroupActions","Array","isArray","flatMap","collectSettingsGroupContent","SettingsGroup","resolved","action","content","_tmpl$8","description","slot","_tmpl$9","Action","sameSettingValue","left","right","JSON","stringify","readSettingsError","response","fallback","data","json","catch","message","fields","errors","SettingsField","messages","id","descriptionId","errorId","describedBy","error","control","_tmpl$1","label","changed","undefined","_tmpl$0","unsaved","_tmpl$10","SettingsActions","changeCount","loading","disabled","Boolean","disableWithoutChanges","saveDisabled","_tmpl$12","variant","onClick","onDiscard","discard","saveVariant","loadingLabel","saving","onSave","_tmpl$11","saveLabel","saveChanges","SettingsSaveBar","_tmpl$13","unsavedChangeLabel","count","SettingsPanelFooter","_tmpl$15","noUnsavedChanges","_tmpl$14","_$mergeProps"],"sources":["layout/Settings.tsx"],"sourcesContent":["import { children, createMemo, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button, type ButtonVariant } from \"../actions/Button\";\nimport type { MaybeAccessor } from \"../inputs/field-contract\";\nimport { useUiMessages } from \"../intl/messages\";\n\nconst read = <T,>(value: MaybeAccessor<T>): T => (typeof value === \"function\" ? (value as () => T)() : value);\n\nexport type SettingsPageProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n footer?: JSX.Element;\n scrollPreserveKey?: string;\n class?: string;\n style?: JSX.CSSProperties | string;\n};\n\nexport function SettingsPage(props: SettingsPageProps): JSX.Element {\n return (\n <section class={`k2b-settings-page${props.class ? ` ${props.class}` : \"\"}`} style={props.style}>\n <header class=\"k2b-settings-page__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-page__heading\">\n <h1>{props.title}</h1>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-page__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-page__body\" data-scroll-preserve={props.scrollPreserveKey}>\n {props.children}\n </div>\n <Show when={props.footer}>\n <footer class=\"k2b-settings-page__footer\">{props.footer}</footer>\n </Show>\n </section>\n );\n}\n\nexport type SettingsSectionProps = {\n title: JSX.Element;\n subtitle?: JSX.Element;\n icon?: string;\n actions?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\n/**\n * A full-page settings group. Dialogs keep using PanelDialog.Section; this\n * component owns the quieter, observability-style paper used on admin pages.\n */\nexport function SettingsSection(props: SettingsSectionProps): JSX.Element {\n const headingId = `k2b-settings-section-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-section${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-section__header\">\n <Show when={props.icon}>{(icon) => <i class={icon()} aria-hidden=\"true\" />}</Show>\n <div class=\"k2b-settings-section__heading\">\n <h2 id={headingId}>{props.title}</h2>\n <Show when={props.subtitle}>\n <p>{props.subtitle}</p>\n </Show>\n </div>\n <Show when={props.actions}>\n <div class=\"k2b-settings-section__actions\">{props.actions}</div>\n </Show>\n </header>\n <div class=\"k2b-settings-section__body\">{props.children}</div>\n </section>\n );\n}\n\nconst SETTINGS_GROUP_ACTION = Symbol(\"SettingsGroup.Action\");\n\nexport type SettingsGroupProps = {\n title: JSX.Element;\n description?: JSX.Element;\n children: JSX.Element;\n class?: string;\n};\n\nexport type SettingsGroupActionProps = {\n children: JSX.Element;\n};\n\ntype SettingsGroupActionDefinition = {\n readonly kind: typeof SETTINGS_GROUP_ACTION;\n readonly props: SettingsGroupActionProps;\n};\n\ntype SettingsGroupComponent = ((props: SettingsGroupProps) => JSX.Element) & {\n Action: (props: SettingsGroupActionProps) => JSX.Element;\n};\n\nconst SettingsGroupAction = (props: SettingsGroupActionProps): JSX.Element =>\n ({ kind: SETTINGS_GROUP_ACTION, props }) satisfies SettingsGroupActionDefinition as unknown as JSX.Element;\n\nconst collectSettingsGroupActions = (value: unknown): SettingsGroupActionDefinition[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupActions);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION\n ? [value as SettingsGroupActionDefinition]\n : [];\n};\n\nconst collectSettingsGroupContent = (value: unknown): JSX.Element[] => {\n if (Array.isArray(value)) return value.flatMap(collectSettingsGroupContent);\n return value && typeof value === \"object\" && (value as { kind?: unknown }).kind === SETTINGS_GROUP_ACTION ? [] : [value as JSX.Element];\n};\n\nexport const SettingsGroup = ((props: SettingsGroupProps): JSX.Element => {\n const resolved = children(() => props.children);\n const action = createMemo(() => collectSettingsGroupActions(resolved())[0]);\n const content = createMemo(() => collectSettingsGroupContent(resolved()));\n const headingId = `k2b-settings-group-${createUniqueId()}`;\n return (\n <section class={`k2b-settings-group${props.class ? ` ${props.class}` : \"\"}`} aria-labelledby={headingId}>\n <header class=\"k2b-settings-group__header\">\n <div class=\"k2b-settings-group__heading\">\n <h3 id={headingId}>{props.title}</h3>\n <Show when={props.description}>\n <p>{props.description}</p>\n </Show>\n </div>\n <Show when={action()}>{(slot) => <div class=\"k2b-settings-group__action\">{slot().props.children}</div>}</Show>\n </header>\n <div class=\"k2b-settings-group__body\">{content()}</div>\n </section>\n );\n}) as SettingsGroupComponent;\n\nSettingsGroup.Action = SettingsGroupAction;\n\nexport const sameSettingValue = (left: unknown, right: unknown): boolean => JSON.stringify(left) === JSON.stringify(right);\n\nexport const readSettingsError = async (\n response: Pick<Response, \"json\">,\n fallback: string,\n): Promise<{ message: string; fields: Record<string, string> }> => {\n const data = (await response.json().catch(() => null)) as {\n message?: string;\n errors?: Record<string, string>;\n } | null;\n return { message: data?.message ?? fallback, fields: data?.errors ?? {} };\n};\n\nexport type SettingsFieldProps = {\n label: string;\n description: string;\n error: MaybeAccessor<string | undefined>;\n changed?: MaybeAccessor<boolean>;\n children: JSX.Element | ((control: SettingsFieldControlProps) => JSX.Element);\n class?: string;\n};\n\nexport type SettingsFieldControlProps = {\n describedBy: () => string;\n};\n\nexport function SettingsField(props: SettingsFieldProps): JSX.Element {\n const messages = useUiMessages();\n const id = createUniqueId();\n const descriptionId = `k2b-settings-field-${id}-description`;\n const errorId = `k2b-settings-field-${id}-error`;\n const describedBy = () => (read(props.error) ? `${descriptionId} ${errorId}` : descriptionId);\n const control = () =>\n typeof props.children === \"function\"\n ? (props.children as (control: SettingsFieldControlProps) => JSX.Element)({ describedBy })\n : props.children;\n return (\n <div class={`k2b-settings-field ${props.class ?? \"\"}`}>\n <div class=\"k2b-settings-field__copy\">\n <div class=\"k2b-settings-field__heading\">\n <strong>{props.label}</strong>\n <Show when={props.changed !== undefined && read(props.changed)}>\n <span>{messages().unsaved}</span>\n </Show>\n </div>\n <p id={descriptionId}>{props.description}</p>\n </div>\n {control()}\n <Show when={read(props.error)}>\n {(error) => (\n <p id={errorId} class=\"k2b-settings-field__error\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" /> {error()}\n </p>\n )}\n </Show>\n </div>\n );\n}\n\nexport type SettingsSaveBarProps = {\n changeCount: MaybeAccessor<number>;\n loading: MaybeAccessor<boolean>;\n saveDisabled?: MaybeAccessor<boolean>;\n onDiscard: () => void;\n onSave: () => void;\n saveLabel?: string;\n saveVariant?: ButtonVariant;\n class?: string;\n};\n\nconst SettingsActions = (\n props: SettingsSaveBarProps & {\n disableWithoutChanges?: boolean;\n },\n): JSX.Element => {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n const loading = () => read(props.loading);\n const disabled = () => loading() || Boolean(props.disableWithoutChanges && changeCount() === 0);\n const saveDisabled = () => disabled() || Boolean(props.saveDisabled !== undefined && read(props.saveDisabled));\n return (\n <div class=\"k2b-settings-actions\">\n <Button variant=\"secondary\" disabled={disabled()} onClick={props.onDiscard}>\n {messages().discard}\n </Button>\n <Button\n variant={props.saveVariant ?? \"primary\"}\n loading={loading()}\n loadingLabel={messages().saving}\n disabled={saveDisabled()}\n onClick={props.onSave}\n >\n <i class=\"ti ti-device-floppy\" aria-hidden=\"true\" />\n {props.saveLabel ?? messages().saveChanges}\n </Button>\n </div>\n );\n};\n\nexport function SettingsSaveBar(props: SettingsSaveBarProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <Show when={changeCount() > 0}>\n <div class={`k2b-settings-save-bar ${props.class ?? \"\"}`}>\n <p role=\"status\" aria-live=\"polite\">\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </p>\n <SettingsActions {...props} />\n </div>\n </Show>\n );\n}\n\nexport type SettingsPanelFooterProps = SettingsSaveBarProps;\n\nexport function SettingsPanelFooter(props: SettingsPanelFooterProps): JSX.Element {\n const messages = useUiMessages();\n const changeCount = () => read(props.changeCount);\n return (\n <>\n <p class=\"k2b-settings-panel-footer__status\" role=\"status\" aria-live=\"polite\">\n <Show when={changeCount() > 0} fallback={messages().noUnsavedChanges}>\n <strong>{changeCount()}</strong> {messages().unsavedChangeLabel({ count: changeCount() })}\n </Show>\n </p>\n <SettingsActions {...props} disableWithoutChanges />\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
2
|
+
import { ssr as _$ssr } from "solid-js/web";
|
|
3
|
+
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
4
|
+
import { escape as _$escape } from "solid-js/web";
|
|
5
|
+
var _tmpl$ = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action k2b-app-workspace__sidebar-preview-trigger\" data-visibility=\"hover\"", " aria-haspopup=\"dialog\"", "><i", " aria-hidden=\"true\"></i></button>"],
|
|
6
|
+
_tmpl$2 = ["<div", " popover=\"auto\" role=\"dialog\"", " tabindex=\"-1\" class=\"k2b-app-workspace__sidebar-preview\">", "</div>"];
|
|
7
|
+
import { ScrollArea } from "./ScrollArea";
|
|
8
|
+
import { createSignal, createUniqueId, onCleanup, onMount } from "solid-js";
|
|
9
|
+
import { positionTooltipSurface } from "../feedback/tooltip-position";
|
|
10
|
+
|
|
11
|
+
/** A non-modal, interactive row preview. Native popover owns light dismissal. */
|
|
12
|
+
export function SidebarItemPreview(props) {
|
|
13
|
+
const id = `sidebar-preview-${createUniqueId()}`;
|
|
14
|
+
const [open, setOpen] = createSignal(false);
|
|
15
|
+
let button;
|
|
16
|
+
let panel;
|
|
17
|
+
let row = null;
|
|
18
|
+
let main = null;
|
|
19
|
+
let timer;
|
|
20
|
+
let pinned = false;
|
|
21
|
+
let dismissed = false;
|
|
22
|
+
const clear = () => {
|
|
23
|
+
clearTimeout(timer);
|
|
24
|
+
timer = undefined;
|
|
25
|
+
};
|
|
26
|
+
const close = () => {
|
|
27
|
+
clear();
|
|
28
|
+
panel.hidePopover();
|
|
29
|
+
};
|
|
30
|
+
const position = () => {
|
|
31
|
+
const target = row ?? button;
|
|
32
|
+
positionTooltipSurface(panel, target, "right");
|
|
33
|
+
if (props.align === "end") {
|
|
34
|
+
const height = panel.getBoundingClientRect().height;
|
|
35
|
+
const bottom = target.getBoundingClientRect().bottom;
|
|
36
|
+
panel.style.top = `${Math.round(Math.max(8, Math.min(bottom - height, window.innerHeight - height - 8)))}px`;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const show = () => {
|
|
40
|
+
clear();
|
|
41
|
+
if (dismissed || open()) return;
|
|
42
|
+
panel.showPopover();
|
|
43
|
+
position();
|
|
44
|
+
};
|
|
45
|
+
const enter = () => {
|
|
46
|
+
clear();
|
|
47
|
+
if (!dismissed && !open()) timer = setTimeout(show, 250);
|
|
48
|
+
};
|
|
49
|
+
const leave = () => {
|
|
50
|
+
clear();
|
|
51
|
+
dismissed = false;
|
|
52
|
+
if (!pinned) timer = setTimeout(() => {
|
|
53
|
+
if (!panel.contains(document.activeElement) && !row?.contains(document.activeElement)) close();
|
|
54
|
+
}, 180);
|
|
55
|
+
};
|
|
56
|
+
const dismiss = () => {
|
|
57
|
+
const restore = panel.contains(document.activeElement);
|
|
58
|
+
dismissed = true;
|
|
59
|
+
close();
|
|
60
|
+
if (restore) (main ?? button).focus();
|
|
61
|
+
};
|
|
62
|
+
const toggle = () => {
|
|
63
|
+
clear();
|
|
64
|
+
if (open() && pinned) {
|
|
65
|
+
dismiss();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
dismissed = false;
|
|
69
|
+
pinned = true;
|
|
70
|
+
show();
|
|
71
|
+
panel.focus();
|
|
72
|
+
};
|
|
73
|
+
onMount(() => {
|
|
74
|
+
row = button.closest(".k2b-app-workspace__sidebar-item");
|
|
75
|
+
if (props.trigger === "row") {
|
|
76
|
+
main = row?.querySelector(":scope > button.k2b-app-workspace__sidebar-item-main") ?? null;
|
|
77
|
+
main?.setAttribute("aria-label", props.label);
|
|
78
|
+
main?.setAttribute("aria-haspopup", "dialog");
|
|
79
|
+
main?.setAttribute("aria-controls", id);
|
|
80
|
+
main?.setAttribute("aria-expanded", "false");
|
|
81
|
+
main?.addEventListener("click", toggle);
|
|
82
|
+
}
|
|
83
|
+
const pointerEnter = event => {
|
|
84
|
+
if (event.pointerType === "mouse") enter();
|
|
85
|
+
};
|
|
86
|
+
const focusOut = event => {
|
|
87
|
+
const next = event.relatedTarget;
|
|
88
|
+
if (next instanceof Node && (panel.contains(next) || row?.contains(next))) return;
|
|
89
|
+
pinned = false;
|
|
90
|
+
leave();
|
|
91
|
+
};
|
|
92
|
+
const escape = event => {
|
|
93
|
+
if (event.key !== "Escape" || !open()) return;
|
|
94
|
+
dismiss();
|
|
95
|
+
};
|
|
96
|
+
const reposition = () => {
|
|
97
|
+
if (open()) position();
|
|
98
|
+
};
|
|
99
|
+
row?.addEventListener("pointerenter", pointerEnter);
|
|
100
|
+
row?.addEventListener("pointerleave", leave);
|
|
101
|
+
row?.addEventListener("focusin", enter);
|
|
102
|
+
row?.addEventListener("focusout", focusOut);
|
|
103
|
+
panel.addEventListener("focusout", focusOut);
|
|
104
|
+
document.addEventListener("keydown", escape);
|
|
105
|
+
window.addEventListener("resize", reposition);
|
|
106
|
+
window.addEventListener("scroll", reposition, true);
|
|
107
|
+
const observer = new ResizeObserver(reposition);
|
|
108
|
+
observer.observe(panel);
|
|
109
|
+
onCleanup(() => {
|
|
110
|
+
clear();
|
|
111
|
+
observer.disconnect();
|
|
112
|
+
main?.removeEventListener("click", toggle);
|
|
113
|
+
row?.removeEventListener("pointerenter", pointerEnter);
|
|
114
|
+
row?.removeEventListener("pointerleave", leave);
|
|
115
|
+
row?.removeEventListener("focusin", enter);
|
|
116
|
+
row?.removeEventListener("focusout", focusOut);
|
|
117
|
+
panel.removeEventListener("focusout", focusOut);
|
|
118
|
+
document.removeEventListener("keydown", escape);
|
|
119
|
+
window.removeEventListener("resize", reposition);
|
|
120
|
+
window.removeEventListener("scroll", reposition, true);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
return [_$ssr(_tmpl$, _$ssrAttribute("aria-label", _$escape(props.label, true), false), _$ssrAttribute("aria-expanded", _$escape(open(), true), false) + _$ssrAttribute("aria-controls", _$escape(id, true), false) + _$ssrAttribute("data-row-trigger", props.trigger === "row" ? "true" : _$escape(undefined, true), false), _$ssrAttribute("class", props.trigger === "row" ? "ti ti-chevron-right" : "ti ti-info-circle", false)), _$ssr(_tmpl$2, _$ssrAttribute("id", _$escape(id, true), false), _$ssrAttribute("aria-label", _$escape(props.label, true), false), _$escape(_$createComponent(ScrollArea, {
|
|
124
|
+
get viewportSize() {
|
|
125
|
+
return props.viewportSize;
|
|
126
|
+
},
|
|
127
|
+
"class": "k2b-app-workspace__sidebar-preview-body",
|
|
128
|
+
get children() {
|
|
129
|
+
return typeof props.children === "function" ? props.children(dismiss) : props.children;
|
|
130
|
+
}
|
|
131
|
+
})))];
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=SidebarItemPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ScrollArea","createSignal","createUniqueId","onCleanup","onMount","positionTooltipSurface","SidebarItemPreview","props","id","open","setOpen","button","panel","row","main","timer","pinned","dismissed","clear","clearTimeout","undefined","close","hidePopover","position","target","align","height","getBoundingClientRect","bottom","style","top","Math","round","max","min","window","innerHeight","show","showPopover","enter","setTimeout","leave","contains","document","activeElement","dismiss","restore","focus","toggle","closest","trigger","querySelector","setAttribute","label","addEventListener","pointerEnter","event","pointerType","focusOut","next","relatedTarget","Node","escape","key","reposition","observer","ResizeObserver","observe","disconnect","removeEventListener","_$ssr","_tmpl$","_$ssrAttribute","_$escape","_tmpl$2","_$createComponent","viewportSize","children"],"sources":["layout/SidebarItemPreview.tsx"],"sourcesContent":["import { ScrollArea, type ScrollAreaProps } from \"./ScrollArea\";\nimport { createSignal, createUniqueId, type JSX, onCleanup, onMount } from \"solid-js\";\nimport { positionTooltipSurface } from \"../feedback/tooltip-position\";\n\n/** A non-modal, interactive row preview. Native popover owns light dismissal. */\nexport function SidebarItemPreview(props: { label: string; children: JSX.Element | ((close: () => void) => JSX.Element); trigger?: \"action\" | \"row\"; align?: \"center\" | \"end\"; viewportSize?: ScrollAreaProps[\"viewportSize\"]; onOpenChange?: (open: boolean) => void }) {\n const id = `sidebar-preview-${createUniqueId()}`;\n const [open, setOpen] = createSignal(false);\n let button!: HTMLButtonElement;\n let panel!: HTMLDivElement;\n let row: HTMLElement | null = null;\n let main: HTMLButtonElement | null = null;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let pinned = false;\n let dismissed = false;\n const clear = () => { clearTimeout(timer); timer = undefined; };\n const close = () => { clear(); panel.hidePopover(); };\n const position = () => {\n const target = row ?? button;\n positionTooltipSurface(panel, target, \"right\");\n if (props.align === \"end\") {\n const height = panel.getBoundingClientRect().height;\n const bottom = target.getBoundingClientRect().bottom;\n panel.style.top = `${Math.round(Math.max(8, Math.min(bottom - height, window.innerHeight - height - 8)))}px`;\n }\n };\n const show = () => {\n clear();\n if (dismissed || open()) return;\n panel.showPopover();\n position();\n };\n const enter = () => { clear(); if (!dismissed && !open()) timer = setTimeout(show, 250); };\n const leave = () => {\n clear();\n dismissed = false;\n if (!pinned) timer = setTimeout(() => {\n if (!panel.contains(document.activeElement) && !row?.contains(document.activeElement)) close();\n }, 180);\n };\n const dismiss = () => {\n const restore = panel.contains(document.activeElement);\n dismissed = true;\n close();\n if (restore) (main ?? button).focus();\n };\n const toggle = () => {\n clear();\n if (open() && pinned) { dismiss(); return; }\n dismissed = false; pinned = true; show(); panel.focus();\n };\n onMount(() => {\n row = button.closest<HTMLElement>(\".k2b-app-workspace__sidebar-item\");\n if (props.trigger === \"row\") {\n main = row?.querySelector<HTMLButtonElement>(\":scope > button.k2b-app-workspace__sidebar-item-main\") ?? null;\n main?.setAttribute(\"aria-label\", props.label);\n main?.setAttribute(\"aria-haspopup\", \"dialog\");\n main?.setAttribute(\"aria-controls\", id);\n main?.setAttribute(\"aria-expanded\", \"false\");\n main?.addEventListener(\"click\", toggle);\n }\n const pointerEnter = (event: PointerEvent) => { if (event.pointerType === \"mouse\") enter(); };\n const focusOut = (event: FocusEvent) => {\n const next = event.relatedTarget;\n if (next instanceof Node && (panel.contains(next) || row?.contains(next))) return;\n pinned = false;\n leave();\n };\n const escape = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !open()) return;\n dismiss();\n };\n const reposition = () => { if (open()) position(); };\n row?.addEventListener(\"pointerenter\", pointerEnter);\n row?.addEventListener(\"pointerleave\", leave);\n row?.addEventListener(\"focusin\", enter);\n row?.addEventListener(\"focusout\", focusOut);\n panel.addEventListener(\"focusout\", focusOut);\n document.addEventListener(\"keydown\", escape);\n window.addEventListener(\"resize\", reposition);\n window.addEventListener(\"scroll\", reposition, true);\n const observer = new ResizeObserver(reposition);\n observer.observe(panel);\n onCleanup(() => {\n clear(); observer.disconnect();\n main?.removeEventListener(\"click\", toggle);\n row?.removeEventListener(\"pointerenter\", pointerEnter);\n row?.removeEventListener(\"pointerleave\", leave);\n row?.removeEventListener(\"focusin\", enter);\n row?.removeEventListener(\"focusout\", focusOut);\n panel.removeEventListener(\"focusout\", focusOut);\n document.removeEventListener(\"keydown\", escape);\n window.removeEventListener(\"resize\", reposition);\n window.removeEventListener(\"scroll\", reposition, true);\n });\n });\n return <>\n <button ref={button} type=\"button\" class=\"k2b-app-workspace__sidebar-item-action k2b-app-workspace__sidebar-preview-trigger\"\n data-visibility=\"hover\" aria-label={props.label} aria-haspopup=\"dialog\" aria-expanded={open()} aria-controls={id}\n data-row-trigger={props.trigger === \"row\" ? \"true\" : undefined}\n onClick={toggle}><i class={props.trigger === \"row\" ? \"ti ti-chevron-right\" : \"ti ti-info-circle\"} aria-hidden=\"true\" /></button>\n <div ref={panel} id={id} popover=\"auto\" role=\"dialog\" aria-label={props.label} tabIndex={-1}\n class=\"k2b-app-workspace__sidebar-preview\" onPointerEnter={clear} onPointerLeave={leave}\n onToggle={(event) => { const visible = event.newState === \"open\"; setOpen(visible); main?.setAttribute(\"aria-expanded\", String(visible)); props.onOpenChange?.(visible); if (!visible) pinned = false; }}>\n <ScrollArea viewportSize={props.viewportSize} class=\"k2b-app-workspace__sidebar-preview-body\">\n {typeof props.children === \"function\" ? props.children(dismiss) : props.children}\n </ScrollArea>\n </div>\n </>;\n}\n"],"mappings":";;;;;;AAAA,SAASA,UAAU,QAA8B,cAAc;AAC/D,SAASC,YAAY,EAAEC,cAAc,EAAYC,SAAS,EAAEC,OAAO,QAAQ,UAAU;AACrF,SAASC,sBAAsB,QAAQ,8BAA8B;;AAErE;AACA,OAAO,SAASC,kBAAkBA,CAACC,KAAoO,EAAE;EACvQ,MAAMC,EAAE,GAAG,mBAAmBN,cAAc,CAAC,CAAC,EAAE;EAChD,MAAM,CAACO,IAAI,EAAEC,OAAO,CAAC,GAAGT,YAAY,CAAC,KAAK,CAAC;EAC3C,IAAIU,MAA0B;EAC9B,IAAIC,KAAsB;EAC1B,IAAIC,GAAuB,GAAG,IAAI;EAClC,IAAIC,IAA8B,GAAG,IAAI;EACzC,IAAIC,KAAgD;EACpD,IAAIC,MAAM,GAAG,KAAK;EAClB,IAAIC,SAAS,GAAG,KAAK;EACrB,MAAMC,KAAK,GAAGA,CAAA,KAAM;IAAEC,YAAY,CAACJ,KAAK,CAAC;IAAEA,KAAK,GAAGK,SAAS;EAAE,CAAC;EAC/D,MAAMC,KAAK,GAAGA,CAAA,KAAM;IAAEH,KAAK,CAAC,CAAC;IAAEN,KAAK,CAACU,WAAW,CAAC,CAAC;EAAE,CAAC;EACrD,MAAMC,QAAQ,GAAGA,CAAA,KAAM;IACrB,MAAMC,MAAM,GAAGX,GAAG,IAAIF,MAAM;IAC5BN,sBAAsB,CAACO,KAAK,EAAEY,MAAM,EAAE,OAAO,CAAC;IAC9C,IAAIjB,KAAK,CAACkB,KAAK,KAAK,KAAK,EAAE;MACzB,MAAMC,MAAM,GAAGd,KAAK,CAACe,qBAAqB,CAAC,CAAC,CAACD,MAAM;MACnD,MAAME,MAAM,GAAGJ,MAAM,CAACG,qBAAqB,CAAC,CAAC,CAACC,MAAM;MACpDhB,KAAK,CAACiB,KAAK,CAACC,GAAG,GAAG,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEF,IAAI,CAACG,GAAG,CAACN,MAAM,GAAGF,MAAM,EAAES,MAAM,CAACC,WAAW,GAAGV,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;IAC9G;EACF,CAAC;EACD,MAAMW,IAAI,GAAGA,CAAA,KAAM;IACjBnB,KAAK,CAAC,CAAC;IACP,IAAID,SAAS,IAAIR,IAAI,CAAC,CAAC,EAAE;IACzBG,KAAK,CAAC0B,WAAW,CAAC,CAAC;IACnBf,QAAQ,CAAC,CAAC;EACZ,CAAC;EACD,MAAMgB,KAAK,GAAGA,CAAA,KAAM;IAAErB,KAAK,CAAC,CAAC;IAAE,IAAI,CAACD,SAAS,IAAI,CAACR,IAAI,CAAC,CAAC,EAAEM,KAAK,GAAGyB,UAAU,CAACH,IAAI,EAAE,GAAG,CAAC;EAAE,CAAC;EAC1F,MAAMI,KAAK,GAAGA,CAAA,KAAM;IAClBvB,KAAK,CAAC,CAAC;IACPD,SAAS,GAAG,KAAK;IACjB,IAAI,CAACD,MAAM,EAAED,KAAK,GAAGyB,UAAU,CAAC,MAAM;MACpC,IAAI,CAAC5B,KAAK,CAAC8B,QAAQ,CAACC,QAAQ,CAACC,aAAa,CAAC,IAAI,CAAC/B,GAAG,EAAE6B,QAAQ,CAACC,QAAQ,CAACC,aAAa,CAAC,EAAEvB,KAAK,CAAC,CAAC;IAChG,CAAC,EAAE,GAAG,CAAC;EACT,CAAC;EACD,MAAMwB,OAAO,GAAGA,CAAA,KAAM;IACpB,MAAMC,OAAO,GAAGlC,KAAK,CAAC8B,QAAQ,CAACC,QAAQ,CAACC,aAAa,CAAC;IACtD3B,SAAS,GAAG,IAAI;IAChBI,KAAK,CAAC,CAAC;IACP,IAAIyB,OAAO,EAAE,CAAChC,IAAI,IAAIH,MAAM,EAAEoC,KAAK,CAAC,CAAC;EACvC,CAAC;EACD,MAAMC,MAAM,GAAGA,CAAA,KAAM;IACnB9B,KAAK,CAAC,CAAC;IACP,IAAIT,IAAI,CAAC,CAAC,IAAIO,MAAM,EAAE;MAAE6B,OAAO,CAAC,CAAC;MAAE;IAAQ;IAC3C5B,SAAS,GAAG,KAAK;IAAED,MAAM,GAAG,IAAI;IAAEqB,IAAI,CAAC,CAAC;IAAEzB,KAAK,CAACmC,KAAK,CAAC,CAAC;EACzD,CAAC;EACD3C,OAAO,CAAC,MAAM;IACZS,GAAG,GAAGF,MAAM,CAACsC,OAAO,CAAc,kCAAkC,CAAC;IACrE,IAAI1C,KAAK,CAAC2C,OAAO,KAAK,KAAK,EAAE;MAC3BpC,IAAI,GAAGD,GAAG,EAAEsC,aAAa,CAAoB,sDAAsD,CAAC,IAAI,IAAI;MAC5GrC,IAAI,EAAEsC,YAAY,CAAC,YAAY,EAAE7C,KAAK,CAAC8C,KAAK,CAAC;MAC7CvC,IAAI,EAAEsC,YAAY,CAAC,eAAe,EAAE,QAAQ,CAAC;MAC7CtC,IAAI,EAAEsC,YAAY,CAAC,eAAe,EAAE5C,EAAE,CAAC;MACvCM,IAAI,EAAEsC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;MAC5CtC,IAAI,EAAEwC,gBAAgB,CAAC,OAAO,EAAEN,MAAM,CAAC;IACzC;IACA,MAAMO,YAAY,GAAIC,KAAmB,IAAK;MAAE,IAAIA,KAAK,CAACC,WAAW,KAAK,OAAO,EAAElB,KAAK,CAAC,CAAC;IAAE,CAAC;IAC7F,MAAMmB,QAAQ,GAAIF,KAAiB,IAAK;MACtC,MAAMG,IAAI,GAAGH,KAAK,CAACI,aAAa;MAChC,IAAID,IAAI,YAAYE,IAAI,KAAKjD,KAAK,CAAC8B,QAAQ,CAACiB,IAAI,CAAC,IAAI9C,GAAG,EAAE6B,QAAQ,CAACiB,IAAI,CAAC,CAAC,EAAE;MAC3E3C,MAAM,GAAG,KAAK;MACdyB,KAAK,CAAC,CAAC;IACT,CAAC;IACD,MAAMqB,MAAM,GAAIN,KAAoB,IAAK;MACvC,IAAIA,KAAK,CAACO,GAAG,KAAK,QAAQ,IAAI,CAACtD,IAAI,CAAC,CAAC,EAAE;MACvCoC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAMmB,UAAU,GAAGA,CAAA,KAAM;MAAE,IAAIvD,IAAI,CAAC,CAAC,EAAEc,QAAQ,CAAC,CAAC;IAAE,CAAC;IACpDV,GAAG,EAAEyC,gBAAgB,CAAC,cAAc,EAAEC,YAAY,CAAC;IACnD1C,GAAG,EAAEyC,gBAAgB,CAAC,cAAc,EAAEb,KAAK,CAAC;IAC5C5B,GAAG,EAAEyC,gBAAgB,CAAC,SAAS,EAAEf,KAAK,CAAC;IACvC1B,GAAG,EAAEyC,gBAAgB,CAAC,UAAU,EAAEI,QAAQ,CAAC;IAC3C9C,KAAK,CAAC0C,gBAAgB,CAAC,UAAU,EAAEI,QAAQ,CAAC;IAC5Cf,QAAQ,CAACW,gBAAgB,CAAC,SAAS,EAAEQ,MAAM,CAAC;IAC5C3B,MAAM,CAACmB,gBAAgB,CAAC,QAAQ,EAAEU,UAAU,CAAC;IAC7C7B,MAAM,CAACmB,gBAAgB,CAAC,QAAQ,EAAEU,UAAU,EAAE,IAAI,CAAC;IACnD,MAAMC,QAAQ,GAAG,IAAIC,cAAc,CAACF,UAAU,CAAC;IAC/CC,QAAQ,CAACE,OAAO,CAACvD,KAAK,CAAC;IACvBT,SAAS,CAAC,MAAM;MACde,KAAK,CAAC,CAAC;MAAE+C,QAAQ,CAACG,UAAU,CAAC,CAAC;MAC9BtD,IAAI,EAAEuD,mBAAmB,CAAC,OAAO,EAAErB,MAAM,CAAC;MAC1CnC,GAAG,EAAEwD,mBAAmB,CAAC,cAAc,EAAEd,YAAY,CAAC;MACtD1C,GAAG,EAAEwD,mBAAmB,CAAC,cAAc,EAAE5B,KAAK,CAAC;MAC/C5B,GAAG,EAAEwD,mBAAmB,CAAC,SAAS,EAAE9B,KAAK,CAAC;MAC1C1B,GAAG,EAAEwD,mBAAmB,CAAC,UAAU,EAAEX,QAAQ,CAAC;MAC9C9C,KAAK,CAACyD,mBAAmB,CAAC,UAAU,EAAEX,QAAQ,CAAC;MAC/Cf,QAAQ,CAAC0B,mBAAmB,CAAC,SAAS,EAAEP,MAAM,CAAC;MAC/C3B,MAAM,CAACkC,mBAAmB,CAAC,QAAQ,EAAEL,UAAU,CAAC;MAChD7B,MAAM,CAACkC,mBAAmB,CAAC,QAAQ,EAAEL,UAAU,EAAE,IAAI,CAAC;IACxD,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,QAAAM,KAAA,CAAAC,MAAA,EAAAC,cAAA,eAAAC,QAAA,CAEwClE,KAAK,CAAC8C,KAAK,iBAAAmB,cAAA,kBAAAC,QAAA,CAAwChE,IAAI,CAAC,CAAC,kBAAA+D,cAAA,kBAAAC,QAAA,CAAiBjE,EAAE,kBAAAgE,cAAA,qBAC9FjE,KAAK,CAAC2C,OAAO,KAAK,KAAK,GAAG,MAAM,GAAAuB,QAAA,CAAGrD,SAAS,iBAAAoD,cAAA,UACnCjE,KAAK,CAAC2C,OAAO,KAAK,KAAK,GAAG,qBAAqB,GAAG,mBAAmB,WAAAoB,KAAA,CAAAI,OAAA,EAAAF,cAAA,OAAAC,QAAA,CAC7EjE,EAAE,iBAAAgE,cAAA,eAAAC,QAAA,CAA2ClE,KAAK,CAAC8C,KAAK,iBAAAoB,QAAA,CAAAE,iBAAA,CAG1E3E,UAAU;IAAA,IAAC4E,YAAYA,CAAA;MAAA,OAAErE,KAAK,CAACqE,YAAY;IAAA;IAAA;IAAA,IAAAC,SAAA;MAAA,OACzC,OAAOtE,KAAK,CAACsE,QAAQ,KAAK,UAAU,GAAGtE,KAAK,CAACsE,QAAQ,CAAChC,OAAO,CAAC,GAAGtC,KAAK,CAACsE,QAAQ;IAAA;EAAA;AAIxF","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { installScrollFades } from "./scroll-fade";
|
|
1
2
|
import { APP_WORKSPACE_DETAIL_MAX, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DRAWER_MAX, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_MAIN_MIN, APP_WORKSPACE_PANE_MAX, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_SIDEBAR_COLLAPSED, APP_WORKSPACE_SIDEBAR_MAX, APP_WORKSPACE_SIDEBAR_MIN, appWorkspacePanelVariable, appWorkspaceResizeLimits, fitAppWorkspacePaneSizes, normalizeAppWorkspaceLayoutState, resolveAppWorkspaceSidebarWidth, safeAppWorkspacePanelId, shouldCollapseAppWorkspaceSidebar } from "./app-workspace-state";
|
|
2
3
|
const HANDLE_SELECTOR = "[data-app-workspace-resize]";
|
|
3
4
|
const ROOT_SELECTOR = "[data-k2b-app-workspace]";
|
|
@@ -152,6 +153,7 @@ const measureLabel = label => {
|
|
|
152
153
|
};
|
|
153
154
|
export const installAppWorkspaceController = (options = {}) => {
|
|
154
155
|
const eventRoot = options.root ?? document;
|
|
156
|
+
const stopScrollFades = installScrollFades(eventRoot);
|
|
155
157
|
let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? {
|
|
156
158
|
version: 2
|
|
157
159
|
};
|
|
@@ -402,6 +404,7 @@ export const installAppWorkspaceController = (options = {}) => {
|
|
|
402
404
|
});
|
|
403
405
|
scheduleReconcile();
|
|
404
406
|
return () => {
|
|
407
|
+
stopScrollFades();
|
|
405
408
|
// Flush the latest coalesced pointer sample before listeners and frames are
|
|
406
409
|
// torn down, so unmounting during a drag cannot lose the final size.
|
|
407
410
|
stopResize();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["APP_WORKSPACE_DETAIL_MAX","APP_WORKSPACE_DETAIL_MIN","APP_WORKSPACE_DRAWER_MAX","APP_WORKSPACE_DRAWER_MIN","APP_WORKSPACE_MAIN_MIN","APP_WORKSPACE_PANE_MAX","APP_WORKSPACE_PANE_MIN","APP_WORKSPACE_SIDEBAR_COLLAPSED","APP_WORKSPACE_SIDEBAR_MAX","APP_WORKSPACE_SIDEBAR_MIN","appWorkspacePanelVariable","appWorkspaceResizeLimits","fitAppWorkspacePaneSizes","normalizeAppWorkspaceLayoutState","resolveAppWorkspaceSidebarWidth","safeAppWorkspacePanelId","shouldCollapseAppWorkspaceSidebar","HANDLE_SELECTOR","ROOT_SELECTOR","LAYOUT_REGION_SELECTOR","join","LABEL_SELECTOR","LABEL_TEXT_SELECTOR","ITEM_SELECTOR","clamp","value","min","max","Math","round","eventElement","event","target","Element","resizeHandle","closest","resizeKind","handle","dataset","appWorkspaceResize","resizeDirection","kind","workspaceResizeEdge","workspaceRoot","workspaceResizable","root","rootElements","selector","Array","from","querySelectorAll","filter","element","sidebarElement","mainElement","sidebarCollapsible","workspaceCollapsible","isVisible","Boolean","hidden","getComputedStyle","display","elementSize","rect","getBoundingClientRect","height","width","controlledPanel","controls","getAttribute","panel","document","getElementById","controlsResizableRegion","panelId","workspacePanelId","numberData","key","fallback","Number","isFinite","sizeLimits","controlled","main","panes","pane","classList","contains","details","sidebarWidth","otherDetailWidth","reduce","total","detail","defaultMin","defaultMax","workspaceSize","reservedSize","currentSize","updateHandleValue","size","limits","setAttribute","String","applySize","requestedSize","options","collapsible","sidebar","snapSidebar","collapsed","style","setProperty","sidebarCollapsed","reconcilePanes","layoutState","active","handles","length","Set","map","fixedWidth","has","fits","flatMap","preferred","moved","liveSize","paneWidths","desired","sizes","forEach","fit","index","measureLabel","label","text","querySelector","overflow","scrollWidth","clientWidth","installAppWorkspaceController","eventRoot","readState","version","resizeFrame","pendingClient","persistSize","writeState","flushPointerMove","cancelAnimationFrame","client","startClient","startSize","direction","onPointerMove","pointerId","clientY","clientX","requestAnimationFrame","stopResize","PointerEvent","finished","workspaceResizeActive","hasPointerCapture","releasePointerCapture","body","userSelect","previousUserSelect","window","removeEventListener","onPointerDown","button","preventDefault","setPointerCapture","addEventListener","onKeyDown","current","step","shiftKey","requested","collapsibleSidebar","allRoots","nested","HTMLElement","matches","roots","reconcile","persisted","detailWidths","drawerHeights","undefined","onFocusIn","onPointerOver","relatedTarget","Node","clearMeasuredLabels","removeProperty","reconcileFrame","scheduleReconcile","clearLabels","onResize","observedRoots","resizeObserver","ResizeObserver","syncObservedRoots","next","unobserve","delete","add","observe","layoutNode","node","mutationObserver","MutationObserver","records","changed","some","record","type","addedNodes","removedNodes","attributes","attributeFilter","childList","subtree","disconnect","clear"],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import {\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n type AppWorkspaceResizeKind,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n fitAppWorkspacePaneSizes,\n normalizeAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\n\nexport type AppWorkspaceControllerOptions = {\n root?: Document | HTMLElement;\n readState?: () => AppWorkspaceLayoutState | null | undefined;\n writeState?: (state: AppWorkspaceLayoutState) => void;\n};\n\ntype ActiveResize = {\n handle: HTMLElement;\n root: HTMLElement;\n kind: AppWorkspaceResizeKind;\n pointerId: number;\n startClient: number;\n startSize: number;\n liveSize: number;\n moved: boolean;\n direction: 1 | -1;\n previousUserSelect: string;\n};\n\nconst HANDLE_SELECTOR = \"[data-app-workspace-resize]\";\nconst ROOT_SELECTOR = \"[data-k2b-app-workspace]\";\nconst LAYOUT_REGION_SELECTOR = [\n ROOT_SELECTOR,\n \".k2b-app-workspace__sidebar\",\n \".k2b-app-workspace__main-pane\",\n \".k2b-app-workspace__detail\",\n \".k2b-app-workspace__drawer\",\n HANDLE_SELECTOR,\n].join(\",\");\nconst LABEL_SELECTOR = \".k2b-app-workspace__sidebar-item-label[data-marquee='true']\";\nconst LABEL_TEXT_SELECTOR = \".k2b-app-workspace__sidebar-item-label-text\";\nconst ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\nconst clamp = (value: number, min: number, max: number) => Math.round(Math.min(max, Math.max(min, value)));\nconst eventElement = (event: Event) => (event.target instanceof Element ? event.target : null);\nconst resizeHandle = (event: Event) => eventElement(event)?.closest<HTMLElement>(HANDLE_SELECTOR) ?? null;\nconst resizeKind = (handle: HTMLElement): AppWorkspaceResizeKind | null => {\n const value = handle.dataset.appWorkspaceResize;\n return value === \"sidebar\" || value === \"pane\" || value === \"detail\" || value === \"drawer\" ? value : null;\n};\nconst resizeDirection = (handle: HTMLElement, kind: AppWorkspaceResizeKind): 1 | -1 =>\n (handle.dataset.workspaceResizeEdge ?? (kind === \"sidebar\" ? \"end\" : \"start\")) === \"end\" ? 1 : -1;\nconst workspaceRoot = (handle: HTMLElement) => handle.closest<HTMLElement>(ROOT_SELECTOR);\nconst workspaceResizable = (root: HTMLElement) => root.dataset.workspaceResizable !== \"false\";\nconst rootElements = (root: HTMLElement, selector: string) =>\n Array.from(root.querySelectorAll<HTMLElement>(selector)).filter((element) => element.closest(ROOT_SELECTOR) === root);\nconst sidebarElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__sidebar\")[0] ?? null;\nconst mainElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__main\")[0] ?? null;\nconst sidebarCollapsible = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceCollapsible === \"true\";\nconst isVisible = (element: HTMLElement | null): element is HTMLElement =>\n Boolean(element && !element.hidden && getComputedStyle(element).display !== \"none\");\nconst elementSize = (element: HTMLElement | null, kind: AppWorkspaceResizeKind) => {\n if (!isVisible(element)) return 0;\n const rect = element.getBoundingClientRect();\n return kind === \"drawer\" ? rect.height : rect.width;\n};\nconst controlledPanel = (root: HTMLElement, handle: HTMLElement) => {\n const controls = handle.getAttribute(\"aria-controls\");\n if (!controls) return null;\n const panel = document.getElementById(controls);\n return panel?.closest(ROOT_SELECTOR) === root ? panel : null;\n};\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n (kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle))?.dataset.workspaceResizable === \"true\";\nconst panelId = (handle: HTMLElement) => safeAppWorkspacePanelId(handle.dataset.workspacePanelId ?? \"primary\") || \"primary\";\nconst numberData = (handle: HTMLElement, key: \"workspaceDefaultSize\" | \"workspaceMinSize\" | \"workspaceMaxSize\", fallback: number) => {\n const value = Number(handle.dataset[key]);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst sizeLimits = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const controlled = controlledPanel(root, handle);\n const main = kind === \"pane\" ? handle.closest<HTMLElement>(\".k2b-app-workspace__main\") : mainElement(root);\n const panes = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\")).filter(\n (pane) => pane.closest(\".k2b-app-workspace__main\") === main && !pane.classList.contains(\"is-primary\") && isVisible(pane),\n )\n : [];\n const details = rootElements(root, \".k2b-app-workspace__detail\").filter(isVisible);\n const sidebarWidth = elementSize(sidebarElement(root), \"sidebar\");\n const otherDetailWidth = details.reduce((total, detail) => total + (detail === controlled ? 0 : elementSize(detail, \"detail\")), 0);\n const defaultMin =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MIN\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : APP_WORKSPACE_DRAWER_MIN;\n const defaultMax =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : APP_WORKSPACE_DRAWER_MAX;\n return appWorkspaceResizeLimits({\n kind,\n workspaceSize:\n kind === \"drawer\"\n ? root.getBoundingClientRect().height\n : kind === \"pane\" && main\n ? main.getBoundingClientRect().width\n : root.getBoundingClientRect().width,\n reservedSize:\n kind === \"sidebar\"\n ? otherDetailWidth\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0)\n : kind === \"detail\"\n ? sidebarWidth + otherDetailWidth\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n};\n\nconst currentSize = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? elementSize(sidebarElement(root), kind) : elementSize(controlledPanel(root, handle), kind);\n\nconst updateHandleValue = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n size: number,\n limits = sizeLimits(root, handle, kind),\n) => {\n const { min, max } = limits;\n handle.setAttribute(\"aria-valuemin\", String(min));\n handle.setAttribute(\"aria-valuemax\", String(max));\n handle.setAttribute(\"aria-valuenow\", String(clamp(size, min, max)));\n};\n\nconst applySize = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n requestedSize: number,\n /**\n * `snapSidebar: false` tracks the pointer continuously and only *previews*\n * the collapsed state. Snapping (the default, and what keyboard steps and\n * reconciliation want) quantises the width to either the collapsed rail or\n * the sidebar minimum, which during a live drag makes the handle jump.\n */\n options: { snapSidebar?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind);\n if (kind === \"sidebar\") {\n const collapsible = sidebarCollapsible(root);\n const sidebar =\n options.snapSidebar === false\n ? { width: clamp(requestedSize, min, max), collapsed: shouldCollapseAppWorkspaceSidebar(requestedSize, collapsible) }\n : resolveAppWorkspaceSidebarWidth(requestedSize, max, collapsible);\n root.style.setProperty(\"--k2b-workspace-sidebar-width\", `${sidebar.width}px`);\n // Cloud removes the attribute rather than writing \"false\", so that a\n // presence selector (`[data-sidebar-collapsed]`) means \"collapsed\".\n if (sidebar.collapsed) root.dataset.sidebarCollapsed = \"true\";\n else delete root.dataset.sidebarCollapsed;\n updateHandleValue(root, handle, kind, sidebar.width, { min, max });\n return sidebar.width;\n }\n const size = clamp(requestedSize, min, max);\n root.style.setProperty(appWorkspacePanelVariable(kind, panelId(handle)), `${size}px`);\n updateHandleValue(root, handle, kind, size, { min, max });\n return size;\n};\n\ntype PaneFit = {\n desired: number;\n handle: HTMLElement;\n min: number;\n};\n\n/**\n * Fits all auxiliary main panes as one group. One main region remains the\n * flexible anchor; the others keep their preferred sizes while space permits\n * and give up the same share of their optional space when the container,\n * navigation or detail panels reduce the available width.\n */\nconst reconcilePanes = (root: HTMLElement, layoutState: AppWorkspaceLayoutState, active: ActiveResize | null = null) => {\n const main = mainElement(root);\n if (!main || !isVisible(main)) return;\n const handles = rootElements(root, HANDLE_SELECTOR).filter(\n (handle) => resizeKind(handle) === \"pane\" && controlsResizableRegion(root, handle, \"pane\"),\n );\n if (!handles.length) return;\n\n const controlled = new Set(handles.map((handle) => controlledPanel(root, handle)).filter(Boolean));\n const fixedWidth = Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\"))\n .filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n isVisible(pane) &&\n !controlled.has(pane),\n )\n .reduce((total, pane) => total + elementSize(pane, \"pane\"), 0);\n const fits: PaneFit[] = handles.flatMap((handle) => {\n const panel = controlledPanel(root, handle);\n if (!isVisible(panel)) return [];\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : (layoutState.paneWidths?.[panelId(handle)] ?? numberData(handle, \"workspaceDefaultSize\", elementSize(panel, \"pane\")));\n const desired = clamp(preferred, min, max);\n return [{ desired, handle, min }];\n });\n if (!fits.length) return;\n\n const sizes = fitAppWorkspacePaneSizes(fits, main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN);\n fits.forEach((fit, index) => {\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(fit.handle)), `${sizes[index]}px`);\n });\n fits.forEach((fit, index) => updateHandleValue(root, fit.handle, \"pane\", sizes[index]!));\n};\n\n/**\n * Marquee support for a truncated sidebar label.\n *\n * The animation needs to know how far to travel, and that is only knowable\n * once the label has been laid out — so it is measured lazily, on the same\n * hover/focus that triggers it, and published as a custom property. Labels\n * that fit get no `data-overflow`, so they never animate.\n */\nconst measureLabel = (label: HTMLElement) => {\n const text = label.querySelector<HTMLElement>(LABEL_TEXT_SELECTOR);\n if (!text) return;\n const overflow = Math.max(0, text.scrollWidth - label.clientWidth);\n label.style.setProperty(\"--k2b-sidebar-label-overflow\", `${overflow}px`);\n if (overflow > 2) label.dataset.overflow = \"true\";\n else delete label.dataset.overflow;\n};\n\nexport const installAppWorkspaceController = (options: AppWorkspaceControllerOptions = {}): (() => void) => {\n const eventRoot = options.root ?? document;\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n let active: ActiveResize | null = null;\n let resizeFrame: number | null = null;\n let pendingClient: number | null = null;\n\n const persistSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind, size: number) => {\n if (kind === \"sidebar\") {\n const collapsed = size === APP_WORKSPACE_SIDEBAR_COLLAPSED;\n layoutState = {\n ...layoutState,\n sidebarWidth: collapsed ? layoutState.sidebarWidth : size,\n sidebarCollapsed: collapsed,\n };\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"detail\" ? \"detailWidths\" : \"drawerHeights\";\n layoutState = { ...layoutState, [key]: { ...layoutState[key], [panelId(handle)]: size } };\n }\n options.writeState?.(layoutState);\n };\n\n const flushPointerMove = () => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n if (!active || pendingClient === null) return;\n const client = pendingClient;\n pendingClient = null;\n active.moved ||= client !== active.startClient;\n active.liveSize = applySize(\n active.root,\n active.handle,\n active.kind,\n active.startSize + (client - active.startClient) * active.direction,\n { snapSidebar: active.kind !== \"sidebar\" },\n );\n if (active.kind === \"sidebar\" || active.kind === \"detail\") reconcilePanes(active.root, layoutState, active);\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!active || event.pointerId !== active.pointerId) return;\n pendingClient = active.kind === \"drawer\" ? event.clientY : event.clientX;\n if (resizeFrame !== null) return;\n resizeFrame = requestAnimationFrame(flushPointerMove);\n };\n const stopResize = (event?: Event) => {\n if (!active || (event instanceof PointerEvent && event.pointerId !== active.pointerId)) return;\n flushPointerMove();\n const finished = active;\n active = null;\n delete finished.root.dataset.workspaceResizeActive;\n delete finished.handle.dataset.workspaceResizeActive;\n if (finished.moved) {\n // A pane's rendered width may have been fitted below the pointer's live\n // preference to keep the main region usable. Persist that preference,\n // then fit the visible panes from the updated state. Reapplying it through\n // the per-handle limits here would count the already-fitted sibling panes\n // a second time and permanently shrink the preference on release.\n const size =\n finished.kind === \"pane\" ? finished.liveSize : applySize(finished.root, finished.handle, finished.kind, finished.liveSize);\n persistSize(finished.handle, finished.kind, size);\n if (finished.kind !== \"drawer\") reconcilePanes(finished.root, layoutState);\n }\n if (finished.handle.hasPointerCapture?.(finished.pointerId)) finished.handle.releasePointerCapture(finished.pointerId);\n document.body.style.userSelect = finished.previousUserSelect;\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", stopResize);\n window.removeEventListener(\"pointercancel\", stopResize);\n window.removeEventListener(\"blur\", stopResize);\n };\n const onPointerDown = (event: PointerEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind) || event.button !== 0)\n return;\n event.preventDefault();\n stopResize();\n pendingClient = null;\n const startSize = currentSize(root, handle, kind);\n active = {\n handle,\n root,\n kind,\n pointerId: event.pointerId,\n startClient: kind === \"drawer\" ? event.clientY : event.clientX,\n startSize,\n liveSize: startSize,\n moved: false,\n direction: resizeDirection(handle, kind),\n previousUserSelect: document.body.style.userSelect,\n };\n root.dataset.workspaceResizeActive = kind;\n handle.dataset.workspaceResizeActive = \"true\";\n document.body.style.userSelect = \"none\";\n handle.setPointerCapture?.(event.pointerId);\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", stopResize);\n window.addEventListener(\"pointercancel\", stopResize);\n window.addEventListener(\"blur\", stopResize);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n const current = currentSize(root, handle, kind);\n const { min, max } = sizeLimits(root, handle, kind);\n const step = event.shiftKey ? 32 : 8;\n let requested: number | null = null;\n const direction = resizeDirection(handle, kind);\n const collapsibleSidebar = kind === \"sidebar\" && sidebarCollapsible(root);\n if (event.key === \"Home\") requested = min;\n else if (event.key === \"End\") requested = max;\n // The drawer arrows follow the handle's edge like every other kind; the\n // hard-coded +/- here inverted for a handle on the `end` edge.\n else if (kind === \"drawer\" && event.key === \"ArrowUp\") requested = current - step * direction;\n else if (kind === \"drawer\" && event.key === \"ArrowDown\") requested = current + step * direction;\n // A collapsible sidebar is already at its minimum when the rail is the\n // next step: without these two branches a keyboard step of 8 (or 32) is\n // clamped straight back to the minimum, so the handle is simply stuck and\n // collapse/expand is unreachable without a pointer.\n else if (kind !== \"drawer\" && event.key === \"ArrowLeft\")\n requested = collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_MIN ? APP_WORKSPACE_SIDEBAR_COLLAPSED : current - step * direction;\n else if (kind !== \"drawer\" && event.key === \"ArrowRight\")\n requested =\n collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_COLLAPSED\n ? (layoutState.sidebarWidth ?? APP_WORKSPACE_SIDEBAR_MIN)\n : current + step * direction;\n if (requested === null) return;\n event.preventDefault();\n persistSize(handle, kind, applySize(root, handle, kind, requested));\n if (kind === \"sidebar\" || kind === \"detail\") reconcilePanes(root, layoutState);\n };\n\n const allRoots = () => {\n const nested = Array.from(eventRoot.querySelectorAll<HTMLElement>(ROOT_SELECTOR));\n return eventRoot instanceof HTMLElement && eventRoot.matches(ROOT_SELECTOR) ? [eventRoot, ...nested] : nested;\n };\n const roots = () => {\n // A hidden or zero-width workspace measures 0, which drives every limit\n // down to its minimum — reconciling one would overwrite its variables and\n // `aria-valuenow` with that minimum for good.\n return allRoots().filter((root) => getComputedStyle(root).display !== \"none\" && root.getBoundingClientRect().width > 0);\n };\n const reconcile = () => {\n roots().forEach((root) => {\n // `data-workspace-resizable=\"false\"` already refuses pointer and keyboard\n // resizing; without this the same workspace still had persisted sizes\n // forced onto it on load and on every window resize.\n if (!workspaceResizable(root)) return;\n const handles = rootElements(root, HANDLE_SELECTOR);\n // Chrome establishes the space available to the work area. Auxiliary\n // panes are then fitted together into what remains, so DOM order cannot\n // give the last pane an accidental sizing priority.\n handles\n .filter((handle) => resizeKind(handle) !== \"pane\")\n .forEach((handle) => {\n const kind = resizeKind(handle);\n if (!kind || !controlsResizableRegion(root, handle, kind)) return;\n if (active?.moved && active.root === root && active.handle === handle && active.kind === kind) {\n applySize(root, handle, kind, active.liveSize, { snapSidebar: kind !== \"sidebar\" });\n return;\n }\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarCollapsed && sidebarCollapsible(root)\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : layoutState.sidebarWidth\n : kind === \"detail\"\n ? layoutState.detailWidths?.[panelId(handle)]\n : layoutState.drawerHeights?.[panelId(handle)];\n if (persisted !== undefined) applySize(root, handle, kind, persisted);\n else updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n });\n reconcilePanes(root, layoutState, active?.root === root ? active : null);\n });\n };\n /**\n * A handle's limits move whenever anything around it does — opening a detail\n * panel, showing a pane. Only `applySize` refreshed them, so a keyboard user\n * arriving at a handle was announced whatever `aria-valuenow`/`valuemax` the\n * last drag left behind.\n */\n const onFocusIn = (event: FocusEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (handle && kind && root && controlsResizableRegion(root, handle, kind)) {\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n }\n const label = eventElement(event)?.closest<HTMLElement>(ITEM_SELECTOR)?.querySelector<HTMLElement>(LABEL_SELECTOR);\n if (label) requestAnimationFrame(() => measureLabel(label));\n };\n\n // Measured on entry rather than on every render: `scrollWidth` forces layout,\n // and a sidebar can hold hundreds of rows.\n const onPointerOver = (event: PointerEvent) => {\n const label = eventElement(event)?.closest<HTMLElement>(LABEL_SELECTOR);\n if (!label || (event.relatedTarget instanceof Node && label.contains(event.relatedTarget))) return;\n requestAnimationFrame(() => measureLabel(label));\n };\n\n // A resize changes every label's available width, so the cached measurement\n // is dropped and taken again on the next hover or focus.\n const clearMeasuredLabels = () => {\n eventRoot.querySelectorAll<HTMLElement>(LABEL_SELECTOR).forEach((label) => {\n delete label.dataset.overflow;\n label.style.removeProperty(\"--k2b-sidebar-label-overflow\");\n });\n };\n\n // Geometry can change without a window resize: a parent can resize the\n // workspace, or a detail/pane can open. All sources share one frame so a\n // transition performs at most one layout reconciliation.\n let reconcileFrame: number | null = null;\n const scheduleReconcile = (clearLabels = false) => {\n if (clearLabels) clearMeasuredLabels();\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n });\n };\n const onResize = () => scheduleReconcile(true);\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n scheduleReconcile(true);\n });\n const syncObservedRoots = () => {\n if (!resizeObserver) return;\n const next = new Set(allRoots());\n observedRoots.forEach((root) => {\n if (!next.has(root)) {\n resizeObserver.unobserve(root);\n observedRoots.delete(root);\n }\n });\n next.forEach((root) => {\n if (observedRoots.has(root)) return;\n observedRoots.add(root);\n resizeObserver.observe(root);\n });\n };\n const layoutNode = (node: Node) =>\n node instanceof Element && (node.matches(LAYOUT_REGION_SELECTOR) || Boolean(node.querySelector(LAYOUT_REGION_SELECTOR)));\n const mutationObserver =\n typeof MutationObserver === \"undefined\"\n ? null\n : new MutationObserver((records) => {\n const changed = records.some((record) =>\n record.type === \"attributes\"\n ? record.target instanceof Element && record.target.matches(LAYOUT_REGION_SELECTOR)\n : [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(layoutNode),\n );\n if (!changed) return;\n syncObservedRoots();\n scheduleReconcile();\n });\n\n eventRoot.addEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.addEventListener(\"pointerover\", onPointerOver as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncObservedRoots();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n // Flush the latest coalesced pointer sample before listeners and frames are\n // torn down, so unmounting during a drag cannot lose the final size.\n stopResize();\n if (reconcileFrame !== null) cancelAnimationFrame(reconcileFrame);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n observedRoots.clear();\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.removeEventListener(\"pointerover\", onPointerOver as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["installScrollFades","APP_WORKSPACE_DETAIL_MAX","APP_WORKSPACE_DETAIL_MIN","APP_WORKSPACE_DRAWER_MAX","APP_WORKSPACE_DRAWER_MIN","APP_WORKSPACE_MAIN_MIN","APP_WORKSPACE_PANE_MAX","APP_WORKSPACE_PANE_MIN","APP_WORKSPACE_SIDEBAR_COLLAPSED","APP_WORKSPACE_SIDEBAR_MAX","APP_WORKSPACE_SIDEBAR_MIN","appWorkspacePanelVariable","appWorkspaceResizeLimits","fitAppWorkspacePaneSizes","normalizeAppWorkspaceLayoutState","resolveAppWorkspaceSidebarWidth","safeAppWorkspacePanelId","shouldCollapseAppWorkspaceSidebar","HANDLE_SELECTOR","ROOT_SELECTOR","LAYOUT_REGION_SELECTOR","join","LABEL_SELECTOR","LABEL_TEXT_SELECTOR","ITEM_SELECTOR","clamp","value","min","max","Math","round","eventElement","event","target","Element","resizeHandle","closest","resizeKind","handle","dataset","appWorkspaceResize","resizeDirection","kind","workspaceResizeEdge","workspaceRoot","workspaceResizable","root","rootElements","selector","Array","from","querySelectorAll","filter","element","sidebarElement","mainElement","sidebarCollapsible","workspaceCollapsible","isVisible","Boolean","hidden","getComputedStyle","display","elementSize","rect","getBoundingClientRect","height","width","controlledPanel","controls","getAttribute","panel","document","getElementById","controlsResizableRegion","panelId","workspacePanelId","numberData","key","fallback","Number","isFinite","sizeLimits","controlled","main","panes","pane","classList","contains","details","sidebarWidth","otherDetailWidth","reduce","total","detail","defaultMin","defaultMax","workspaceSize","reservedSize","currentSize","updateHandleValue","size","limits","setAttribute","String","applySize","requestedSize","options","collapsible","sidebar","snapSidebar","collapsed","style","setProperty","sidebarCollapsed","reconcilePanes","layoutState","active","handles","length","Set","map","fixedWidth","has","fits","flatMap","preferred","moved","liveSize","paneWidths","desired","sizes","forEach","fit","index","measureLabel","label","text","querySelector","overflow","scrollWidth","clientWidth","installAppWorkspaceController","eventRoot","stopScrollFades","readState","version","resizeFrame","pendingClient","persistSize","writeState","flushPointerMove","cancelAnimationFrame","client","startClient","startSize","direction","onPointerMove","pointerId","clientY","clientX","requestAnimationFrame","stopResize","PointerEvent","finished","workspaceResizeActive","hasPointerCapture","releasePointerCapture","body","userSelect","previousUserSelect","window","removeEventListener","onPointerDown","button","preventDefault","setPointerCapture","addEventListener","onKeyDown","current","step","shiftKey","requested","collapsibleSidebar","allRoots","nested","HTMLElement","matches","roots","reconcile","persisted","detailWidths","drawerHeights","undefined","onFocusIn","onPointerOver","relatedTarget","Node","clearMeasuredLabels","removeProperty","reconcileFrame","scheduleReconcile","clearLabels","onResize","observedRoots","resizeObserver","ResizeObserver","syncObservedRoots","next","unobserve","delete","add","observe","layoutNode","node","mutationObserver","MutationObserver","records","changed","some","record","type","addedNodes","removedNodes","attributes","attributeFilter","childList","subtree","disconnect","clear"],"sources":["layout/app-workspace-controller.ts"],"sourcesContent":["import { installScrollFades } from \"./scroll-fade\";\nimport {\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n type AppWorkspaceResizeKind,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n fitAppWorkspacePaneSizes,\n normalizeAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\n\nexport type AppWorkspaceControllerOptions = {\n root?: Document | HTMLElement;\n readState?: () => AppWorkspaceLayoutState | null | undefined;\n writeState?: (state: AppWorkspaceLayoutState) => void;\n};\n\ntype ActiveResize = {\n handle: HTMLElement;\n root: HTMLElement;\n kind: AppWorkspaceResizeKind;\n pointerId: number;\n startClient: number;\n startSize: number;\n liveSize: number;\n moved: boolean;\n direction: 1 | -1;\n previousUserSelect: string;\n};\n\nconst HANDLE_SELECTOR = \"[data-app-workspace-resize]\";\nconst ROOT_SELECTOR = \"[data-k2b-app-workspace]\";\nconst LAYOUT_REGION_SELECTOR = [\n ROOT_SELECTOR,\n \".k2b-app-workspace__sidebar\",\n \".k2b-app-workspace__main-pane\",\n \".k2b-app-workspace__detail\",\n \".k2b-app-workspace__drawer\",\n HANDLE_SELECTOR,\n].join(\",\");\nconst LABEL_SELECTOR = \".k2b-app-workspace__sidebar-item-label[data-marquee='true']\";\nconst LABEL_TEXT_SELECTOR = \".k2b-app-workspace__sidebar-item-label-text\";\nconst ITEM_SELECTOR = \".k2b-app-workspace__sidebar-item\";\nconst clamp = (value: number, min: number, max: number) => Math.round(Math.min(max, Math.max(min, value)));\nconst eventElement = (event: Event) => (event.target instanceof Element ? event.target : null);\nconst resizeHandle = (event: Event) => eventElement(event)?.closest<HTMLElement>(HANDLE_SELECTOR) ?? null;\nconst resizeKind = (handle: HTMLElement): AppWorkspaceResizeKind | null => {\n const value = handle.dataset.appWorkspaceResize;\n return value === \"sidebar\" || value === \"pane\" || value === \"detail\" || value === \"drawer\" ? value : null;\n};\nconst resizeDirection = (handle: HTMLElement, kind: AppWorkspaceResizeKind): 1 | -1 =>\n (handle.dataset.workspaceResizeEdge ?? (kind === \"sidebar\" ? \"end\" : \"start\")) === \"end\" ? 1 : -1;\nconst workspaceRoot = (handle: HTMLElement) => handle.closest<HTMLElement>(ROOT_SELECTOR);\nconst workspaceResizable = (root: HTMLElement) => root.dataset.workspaceResizable !== \"false\";\nconst rootElements = (root: HTMLElement, selector: string) =>\n Array.from(root.querySelectorAll<HTMLElement>(selector)).filter((element) => element.closest(ROOT_SELECTOR) === root);\nconst sidebarElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__sidebar\")[0] ?? null;\nconst mainElement = (root: HTMLElement) => rootElements(root, \".k2b-app-workspace__main\")[0] ?? null;\nconst sidebarCollapsible = (root: HTMLElement) => sidebarElement(root)?.dataset.workspaceCollapsible === \"true\";\nconst isVisible = (element: HTMLElement | null): element is HTMLElement =>\n Boolean(element && !element.hidden && getComputedStyle(element).display !== \"none\");\nconst elementSize = (element: HTMLElement | null, kind: AppWorkspaceResizeKind) => {\n if (!isVisible(element)) return 0;\n const rect = element.getBoundingClientRect();\n return kind === \"drawer\" ? rect.height : rect.width;\n};\nconst controlledPanel = (root: HTMLElement, handle: HTMLElement) => {\n const controls = handle.getAttribute(\"aria-controls\");\n if (!controls) return null;\n const panel = document.getElementById(controls);\n return panel?.closest(ROOT_SELECTOR) === root ? panel : null;\n};\nconst controlsResizableRegion = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n (kind === \"sidebar\" ? sidebarElement(root) : controlledPanel(root, handle))?.dataset.workspaceResizable === \"true\";\nconst panelId = (handle: HTMLElement) => safeAppWorkspacePanelId(handle.dataset.workspacePanelId ?? \"primary\") || \"primary\";\nconst numberData = (handle: HTMLElement, key: \"workspaceDefaultSize\" | \"workspaceMinSize\" | \"workspaceMaxSize\", fallback: number) => {\n const value = Number(handle.dataset[key]);\n return Number.isFinite(value) ? value : fallback;\n};\n\nconst sizeLimits = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) => {\n const controlled = controlledPanel(root, handle);\n const main = kind === \"pane\" ? handle.closest<HTMLElement>(\".k2b-app-workspace__main\") : mainElement(root);\n const panes = main\n ? Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\")).filter(\n (pane) => pane.closest(\".k2b-app-workspace__main\") === main && !pane.classList.contains(\"is-primary\") && isVisible(pane),\n )\n : [];\n const details = rootElements(root, \".k2b-app-workspace__detail\").filter(isVisible);\n const sidebarWidth = elementSize(sidebarElement(root), \"sidebar\");\n const otherDetailWidth = details.reduce((total, detail) => total + (detail === controlled ? 0 : elementSize(detail, \"detail\")), 0);\n const defaultMin =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MIN\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MIN\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MIN\n : APP_WORKSPACE_DRAWER_MIN;\n const defaultMax =\n kind === \"sidebar\"\n ? APP_WORKSPACE_SIDEBAR_MAX\n : kind === \"pane\"\n ? APP_WORKSPACE_PANE_MAX\n : kind === \"detail\"\n ? APP_WORKSPACE_DETAIL_MAX\n : APP_WORKSPACE_DRAWER_MAX;\n return appWorkspaceResizeLimits({\n kind,\n workspaceSize:\n kind === \"drawer\"\n ? root.getBoundingClientRect().height\n : kind === \"pane\" && main\n ? main.getBoundingClientRect().width\n : root.getBoundingClientRect().width,\n reservedSize:\n kind === \"sidebar\"\n ? otherDetailWidth\n : kind === \"pane\"\n ? panes.reduce((total, pane) => total + (pane === controlled ? 0 : elementSize(pane, \"pane\")), 0)\n : kind === \"detail\"\n ? sidebarWidth + otherDetailWidth\n : 0,\n min: numberData(handle, \"workspaceMinSize\", defaultMin),\n max: numberData(handle, \"workspaceMaxSize\", defaultMax),\n sidebarCollapsible: kind === \"sidebar\" && sidebarCollapsible(root),\n });\n};\n\nconst currentSize = (root: HTMLElement, handle: HTMLElement, kind: AppWorkspaceResizeKind) =>\n kind === \"sidebar\" ? elementSize(sidebarElement(root), kind) : elementSize(controlledPanel(root, handle), kind);\n\nconst updateHandleValue = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n size: number,\n limits = sizeLimits(root, handle, kind),\n) => {\n const { min, max } = limits;\n handle.setAttribute(\"aria-valuemin\", String(min));\n handle.setAttribute(\"aria-valuemax\", String(max));\n handle.setAttribute(\"aria-valuenow\", String(clamp(size, min, max)));\n};\n\nconst applySize = (\n root: HTMLElement,\n handle: HTMLElement,\n kind: AppWorkspaceResizeKind,\n requestedSize: number,\n /**\n * `snapSidebar: false` tracks the pointer continuously and only *previews*\n * the collapsed state. Snapping (the default, and what keyboard steps and\n * reconciliation want) quantises the width to either the collapsed rail or\n * the sidebar minimum, which during a live drag makes the handle jump.\n */\n options: { snapSidebar?: boolean } = {},\n) => {\n const { min, max } = sizeLimits(root, handle, kind);\n if (kind === \"sidebar\") {\n const collapsible = sidebarCollapsible(root);\n const sidebar =\n options.snapSidebar === false\n ? { width: clamp(requestedSize, min, max), collapsed: shouldCollapseAppWorkspaceSidebar(requestedSize, collapsible) }\n : resolveAppWorkspaceSidebarWidth(requestedSize, max, collapsible);\n root.style.setProperty(\"--k2b-workspace-sidebar-width\", `${sidebar.width}px`);\n // Cloud removes the attribute rather than writing \"false\", so that a\n // presence selector (`[data-sidebar-collapsed]`) means \"collapsed\".\n if (sidebar.collapsed) root.dataset.sidebarCollapsed = \"true\";\n else delete root.dataset.sidebarCollapsed;\n updateHandleValue(root, handle, kind, sidebar.width, { min, max });\n return sidebar.width;\n }\n const size = clamp(requestedSize, min, max);\n root.style.setProperty(appWorkspacePanelVariable(kind, panelId(handle)), `${size}px`);\n updateHandleValue(root, handle, kind, size, { min, max });\n return size;\n};\n\ntype PaneFit = {\n desired: number;\n handle: HTMLElement;\n min: number;\n};\n\n/**\n * Fits all auxiliary main panes as one group. One main region remains the\n * flexible anchor; the others keep their preferred sizes while space permits\n * and give up the same share of their optional space when the container,\n * navigation or detail panels reduce the available width.\n */\nconst reconcilePanes = (root: HTMLElement, layoutState: AppWorkspaceLayoutState, active: ActiveResize | null = null) => {\n const main = mainElement(root);\n if (!main || !isVisible(main)) return;\n const handles = rootElements(root, HANDLE_SELECTOR).filter(\n (handle) => resizeKind(handle) === \"pane\" && controlsResizableRegion(root, handle, \"pane\"),\n );\n if (!handles.length) return;\n\n const controlled = new Set(handles.map((handle) => controlledPanel(root, handle)).filter(Boolean));\n const fixedWidth = Array.from(main.querySelectorAll<HTMLElement>(\".k2b-app-workspace__main-pane\"))\n .filter(\n (pane) =>\n pane.closest(\".k2b-app-workspace__main\") === main &&\n !pane.classList.contains(\"is-primary\") &&\n isVisible(pane) &&\n !controlled.has(pane),\n )\n .reduce((total, pane) => total + elementSize(pane, \"pane\"), 0);\n const fits: PaneFit[] = handles.flatMap((handle) => {\n const panel = controlledPanel(root, handle);\n if (!isVisible(panel)) return [];\n const min = numberData(handle, \"workspaceMinSize\", APP_WORKSPACE_PANE_MIN);\n const max = Math.max(min, numberData(handle, \"workspaceMaxSize\", APP_WORKSPACE_PANE_MAX));\n const preferred =\n active?.moved && active.root === root && active.kind === \"pane\" && active.handle === handle\n ? active.liveSize\n : (layoutState.paneWidths?.[panelId(handle)] ?? numberData(handle, \"workspaceDefaultSize\", elementSize(panel, \"pane\")));\n const desired = clamp(preferred, min, max);\n return [{ desired, handle, min }];\n });\n if (!fits.length) return;\n\n const sizes = fitAppWorkspacePaneSizes(fits, main.getBoundingClientRect().width - fixedWidth - APP_WORKSPACE_MAIN_MIN);\n fits.forEach((fit, index) => {\n root.style.setProperty(appWorkspacePanelVariable(\"pane\", panelId(fit.handle)), `${sizes[index]}px`);\n });\n fits.forEach((fit, index) => updateHandleValue(root, fit.handle, \"pane\", sizes[index]!));\n};\n\n/**\n * Marquee support for a truncated sidebar label.\n *\n * The animation needs to know how far to travel, and that is only knowable\n * once the label has been laid out — so it is measured lazily, on the same\n * hover/focus that triggers it, and published as a custom property. Labels\n * that fit get no `data-overflow`, so they never animate.\n */\nconst measureLabel = (label: HTMLElement) => {\n const text = label.querySelector<HTMLElement>(LABEL_TEXT_SELECTOR);\n if (!text) return;\n const overflow = Math.max(0, text.scrollWidth - label.clientWidth);\n label.style.setProperty(\"--k2b-sidebar-label-overflow\", `${overflow}px`);\n if (overflow > 2) label.dataset.overflow = \"true\";\n else delete label.dataset.overflow;\n};\n\nexport const installAppWorkspaceController = (options: AppWorkspaceControllerOptions = {}): (() => void) => {\n const eventRoot = options.root ?? document;\n const stopScrollFades = installScrollFades(eventRoot);\n let layoutState = normalizeAppWorkspaceLayoutState(options.readState?.()) ?? { version: 2 as const };\n let active: ActiveResize | null = null;\n let resizeFrame: number | null = null;\n let pendingClient: number | null = null;\n\n const persistSize = (handle: HTMLElement, kind: AppWorkspaceResizeKind, size: number) => {\n if (kind === \"sidebar\") {\n const collapsed = size === APP_WORKSPACE_SIDEBAR_COLLAPSED;\n layoutState = {\n ...layoutState,\n sidebarWidth: collapsed ? layoutState.sidebarWidth : size,\n sidebarCollapsed: collapsed,\n };\n } else {\n const key = kind === \"pane\" ? \"paneWidths\" : kind === \"detail\" ? \"detailWidths\" : \"drawerHeights\";\n layoutState = { ...layoutState, [key]: { ...layoutState[key], [panelId(handle)]: size } };\n }\n options.writeState?.(layoutState);\n };\n\n const flushPointerMove = () => {\n if (resizeFrame !== null) {\n cancelAnimationFrame(resizeFrame);\n resizeFrame = null;\n }\n if (!active || pendingClient === null) return;\n const client = pendingClient;\n pendingClient = null;\n active.moved ||= client !== active.startClient;\n active.liveSize = applySize(\n active.root,\n active.handle,\n active.kind,\n active.startSize + (client - active.startClient) * active.direction,\n { snapSidebar: active.kind !== \"sidebar\" },\n );\n if (active.kind === \"sidebar\" || active.kind === \"detail\") reconcilePanes(active.root, layoutState, active);\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!active || event.pointerId !== active.pointerId) return;\n pendingClient = active.kind === \"drawer\" ? event.clientY : event.clientX;\n if (resizeFrame !== null) return;\n resizeFrame = requestAnimationFrame(flushPointerMove);\n };\n const stopResize = (event?: Event) => {\n if (!active || (event instanceof PointerEvent && event.pointerId !== active.pointerId)) return;\n flushPointerMove();\n const finished = active;\n active = null;\n delete finished.root.dataset.workspaceResizeActive;\n delete finished.handle.dataset.workspaceResizeActive;\n if (finished.moved) {\n // A pane's rendered width may have been fitted below the pointer's live\n // preference to keep the main region usable. Persist that preference,\n // then fit the visible panes from the updated state. Reapplying it through\n // the per-handle limits here would count the already-fitted sibling panes\n // a second time and permanently shrink the preference on release.\n const size =\n finished.kind === \"pane\" ? finished.liveSize : applySize(finished.root, finished.handle, finished.kind, finished.liveSize);\n persistSize(finished.handle, finished.kind, size);\n if (finished.kind !== \"drawer\") reconcilePanes(finished.root, layoutState);\n }\n if (finished.handle.hasPointerCapture?.(finished.pointerId)) finished.handle.releasePointerCapture(finished.pointerId);\n document.body.style.userSelect = finished.previousUserSelect;\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", stopResize);\n window.removeEventListener(\"pointercancel\", stopResize);\n window.removeEventListener(\"blur\", stopResize);\n };\n const onPointerDown = (event: PointerEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind) || event.button !== 0)\n return;\n event.preventDefault();\n stopResize();\n pendingClient = null;\n const startSize = currentSize(root, handle, kind);\n active = {\n handle,\n root,\n kind,\n pointerId: event.pointerId,\n startClient: kind === \"drawer\" ? event.clientY : event.clientX,\n startSize,\n liveSize: startSize,\n moved: false,\n direction: resizeDirection(handle, kind),\n previousUserSelect: document.body.style.userSelect,\n };\n root.dataset.workspaceResizeActive = kind;\n handle.dataset.workspaceResizeActive = \"true\";\n document.body.style.userSelect = \"none\";\n handle.setPointerCapture?.(event.pointerId);\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", stopResize);\n window.addEventListener(\"pointercancel\", stopResize);\n window.addEventListener(\"blur\", stopResize);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (!handle || !kind || !root || !workspaceResizable(root) || !controlsResizableRegion(root, handle, kind)) return;\n const current = currentSize(root, handle, kind);\n const { min, max } = sizeLimits(root, handle, kind);\n const step = event.shiftKey ? 32 : 8;\n let requested: number | null = null;\n const direction = resizeDirection(handle, kind);\n const collapsibleSidebar = kind === \"sidebar\" && sidebarCollapsible(root);\n if (event.key === \"Home\") requested = min;\n else if (event.key === \"End\") requested = max;\n // The drawer arrows follow the handle's edge like every other kind; the\n // hard-coded +/- here inverted for a handle on the `end` edge.\n else if (kind === \"drawer\" && event.key === \"ArrowUp\") requested = current - step * direction;\n else if (kind === \"drawer\" && event.key === \"ArrowDown\") requested = current + step * direction;\n // A collapsible sidebar is already at its minimum when the rail is the\n // next step: without these two branches a keyboard step of 8 (or 32) is\n // clamped straight back to the minimum, so the handle is simply stuck and\n // collapse/expand is unreachable without a pointer.\n else if (kind !== \"drawer\" && event.key === \"ArrowLeft\")\n requested = collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_MIN ? APP_WORKSPACE_SIDEBAR_COLLAPSED : current - step * direction;\n else if (kind !== \"drawer\" && event.key === \"ArrowRight\")\n requested =\n collapsibleSidebar && current <= APP_WORKSPACE_SIDEBAR_COLLAPSED\n ? (layoutState.sidebarWidth ?? APP_WORKSPACE_SIDEBAR_MIN)\n : current + step * direction;\n if (requested === null) return;\n event.preventDefault();\n persistSize(handle, kind, applySize(root, handle, kind, requested));\n if (kind === \"sidebar\" || kind === \"detail\") reconcilePanes(root, layoutState);\n };\n\n const allRoots = () => {\n const nested = Array.from(eventRoot.querySelectorAll<HTMLElement>(ROOT_SELECTOR));\n return eventRoot instanceof HTMLElement && eventRoot.matches(ROOT_SELECTOR) ? [eventRoot, ...nested] : nested;\n };\n const roots = () => {\n // A hidden or zero-width workspace measures 0, which drives every limit\n // down to its minimum — reconciling one would overwrite its variables and\n // `aria-valuenow` with that minimum for good.\n return allRoots().filter((root) => getComputedStyle(root).display !== \"none\" && root.getBoundingClientRect().width > 0);\n };\n const reconcile = () => {\n roots().forEach((root) => {\n // `data-workspace-resizable=\"false\"` already refuses pointer and keyboard\n // resizing; without this the same workspace still had persisted sizes\n // forced onto it on load and on every window resize.\n if (!workspaceResizable(root)) return;\n const handles = rootElements(root, HANDLE_SELECTOR);\n // Chrome establishes the space available to the work area. Auxiliary\n // panes are then fitted together into what remains, so DOM order cannot\n // give the last pane an accidental sizing priority.\n handles\n .filter((handle) => resizeKind(handle) !== \"pane\")\n .forEach((handle) => {\n const kind = resizeKind(handle);\n if (!kind || !controlsResizableRegion(root, handle, kind)) return;\n if (active?.moved && active.root === root && active.handle === handle && active.kind === kind) {\n applySize(root, handle, kind, active.liveSize, { snapSidebar: kind !== \"sidebar\" });\n return;\n }\n const persisted =\n kind === \"sidebar\"\n ? layoutState.sidebarCollapsed && sidebarCollapsible(root)\n ? APP_WORKSPACE_SIDEBAR_COLLAPSED\n : layoutState.sidebarWidth\n : kind === \"detail\"\n ? layoutState.detailWidths?.[panelId(handle)]\n : layoutState.drawerHeights?.[panelId(handle)];\n if (persisted !== undefined) applySize(root, handle, kind, persisted);\n else updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n });\n reconcilePanes(root, layoutState, active?.root === root ? active : null);\n });\n };\n /**\n * A handle's limits move whenever anything around it does — opening a detail\n * panel, showing a pane. Only `applySize` refreshed them, so a keyboard user\n * arriving at a handle was announced whatever `aria-valuenow`/`valuemax` the\n * last drag left behind.\n */\n const onFocusIn = (event: FocusEvent) => {\n const handle = resizeHandle(event);\n const kind = handle ? resizeKind(handle) : null;\n const root = handle ? workspaceRoot(handle) : null;\n if (handle && kind && root && controlsResizableRegion(root, handle, kind)) {\n updateHandleValue(root, handle, kind, currentSize(root, handle, kind));\n }\n const label = eventElement(event)?.closest<HTMLElement>(ITEM_SELECTOR)?.querySelector<HTMLElement>(LABEL_SELECTOR);\n if (label) requestAnimationFrame(() => measureLabel(label));\n };\n\n // Measured on entry rather than on every render: `scrollWidth` forces layout,\n // and a sidebar can hold hundreds of rows.\n const onPointerOver = (event: PointerEvent) => {\n const label = eventElement(event)?.closest<HTMLElement>(LABEL_SELECTOR);\n if (!label || (event.relatedTarget instanceof Node && label.contains(event.relatedTarget))) return;\n requestAnimationFrame(() => measureLabel(label));\n };\n\n // A resize changes every label's available width, so the cached measurement\n // is dropped and taken again on the next hover or focus.\n const clearMeasuredLabels = () => {\n eventRoot.querySelectorAll<HTMLElement>(LABEL_SELECTOR).forEach((label) => {\n delete label.dataset.overflow;\n label.style.removeProperty(\"--k2b-sidebar-label-overflow\");\n });\n };\n\n // Geometry can change without a window resize: a parent can resize the\n // workspace, or a detail/pane can open. All sources share one frame so a\n // transition performs at most one layout reconciliation.\n let reconcileFrame: number | null = null;\n const scheduleReconcile = (clearLabels = false) => {\n if (clearLabels) clearMeasuredLabels();\n if (reconcileFrame !== null) return;\n reconcileFrame = requestAnimationFrame(() => {\n reconcileFrame = null;\n reconcile();\n });\n };\n const onResize = () => scheduleReconcile(true);\n\n const observedRoots = new Set<HTMLElement>();\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(() => {\n scheduleReconcile(true);\n });\n const syncObservedRoots = () => {\n if (!resizeObserver) return;\n const next = new Set(allRoots());\n observedRoots.forEach((root) => {\n if (!next.has(root)) {\n resizeObserver.unobserve(root);\n observedRoots.delete(root);\n }\n });\n next.forEach((root) => {\n if (observedRoots.has(root)) return;\n observedRoots.add(root);\n resizeObserver.observe(root);\n });\n };\n const layoutNode = (node: Node) =>\n node instanceof Element && (node.matches(LAYOUT_REGION_SELECTOR) || Boolean(node.querySelector(LAYOUT_REGION_SELECTOR)));\n const mutationObserver =\n typeof MutationObserver === \"undefined\"\n ? null\n : new MutationObserver((records) => {\n const changed = records.some((record) =>\n record.type === \"attributes\"\n ? record.target instanceof Element && record.target.matches(LAYOUT_REGION_SELECTOR)\n : [...Array.from(record.addedNodes), ...Array.from(record.removedNodes)].some(layoutNode),\n );\n if (!changed) return;\n syncObservedRoots();\n scheduleReconcile();\n });\n\n eventRoot.addEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.addEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.addEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.addEventListener(\"pointerover\", onPointerOver as EventListener);\n window.addEventListener(\"resize\", onResize);\n syncObservedRoots();\n mutationObserver?.observe(eventRoot, {\n attributes: true,\n attributeFilter: [\"hidden\"],\n childList: true,\n subtree: true,\n });\n scheduleReconcile();\n return () => {\n stopScrollFades();\n // Flush the latest coalesced pointer sample before listeners and frames are\n // torn down, so unmounting during a drag cannot lose the final size.\n stopResize();\n if (reconcileFrame !== null) cancelAnimationFrame(reconcileFrame);\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n observedRoots.clear();\n eventRoot.removeEventListener(\"pointerdown\", onPointerDown as EventListener);\n eventRoot.removeEventListener(\"keydown\", onKeyDown as EventListener);\n eventRoot.removeEventListener(\"focusin\", onFocusIn as EventListener);\n eventRoot.removeEventListener(\"pointerover\", onPointerOver as EventListener);\n window.removeEventListener(\"resize\", onResize);\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
package/dist/ssr/layout/index.js
CHANGED
|
@@ -14,4 +14,7 @@ export { default as ScrollArea } from "./ScrollArea";
|
|
|
14
14
|
export { readSettingsError, SettingsField, SettingsGroup, SettingsPage, SettingsPanelFooter, SettingsSaveBar, SettingsSection, sameSettingValue } from "./Settings";
|
|
15
15
|
export { default as SettingsCollection } from "./SettingsCollection";
|
|
16
16
|
export { default as SettingsModal } from "./SettingsModal";
|
|
17
|
+
export { default as BottomSheet, bottomSheetOptions } from "./BottomSheet";
|
|
18
|
+
export { default as Navigation } from "./Navigation";
|
|
19
|
+
export { createNavigation, findNavigationItem } from "./navigation-model";
|
|
17
20
|
//# sourceMappingURL=index.js.map
|