@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,6 +1,8 @@
|
|
|
1
1
|
import { template as _$template } from "solid-js/web";
|
|
2
2
|
import { delegateEvents as _$delegateEvents } from "solid-js/web";
|
|
3
|
+
import { memo as _$memo } from "solid-js/web";
|
|
3
4
|
import { setProperty as _$setProperty } from "solid-js/web";
|
|
5
|
+
import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
|
|
4
6
|
import { style as _$style } from "solid-js/web";
|
|
5
7
|
import { className as _$className } from "solid-js/web";
|
|
6
8
|
import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
@@ -10,19 +12,23 @@ import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
|
|
|
10
12
|
import { createComponent as _$createComponent } from "solid-js/web";
|
|
11
13
|
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
12
14
|
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
13
|
-
import {
|
|
15
|
+
import { addEventListener as _$addEventListener } from "solid-js/web";
|
|
14
16
|
import { use as _$use } from "solid-js/web";
|
|
15
17
|
var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-chart__anchor aria-hidden=true>`),
|
|
16
|
-
_tmpl$2 = /*#__PURE__*/_$template(`<span role=tooltip popover=manual class=k2b-tooltip>`),
|
|
18
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<span role=tooltip popover=manual data-instant=true class="k2b-tooltip k2b-chart__tooltip">`),
|
|
17
19
|
_tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-chart__controls><button type=button class="k2b-button k2b-icon-button"data-variant=secondary><i class="ti ti-plus"aria-hidden=true></i></button><button type=button class="k2b-button k2b-icon-button"data-variant=secondary><i class="ti ti-minus"aria-hidden=true></i></button><button type=button class="k2b-button k2b-icon-button"data-variant=secondary><i class="ti ti-focus-centered"aria-hidden=true>`),
|
|
18
20
|
_tmpl$4 = /*#__PURE__*/_$template(`<div role=group><div class=k2b-chart__svg></div><!$><!/><!$><!/>`),
|
|
19
21
|
_tmpl$5 = /*#__PURE__*/_$template(`<div>`);
|
|
22
|
+
import { lineGapsSvg } from "./chart-line-gaps";
|
|
20
23
|
import { charts } from "@k2b/stdlib";
|
|
21
|
-
import { createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, Show } from "solid-js";
|
|
22
|
-
import {
|
|
24
|
+
import { createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, Show, splitProps, untrack } from "solid-js";
|
|
25
|
+
import { createChartInspection } from "./chart-inspection";
|
|
26
|
+
import { useLocale } from "../intl/locale";
|
|
23
27
|
import { useUiMessages } from "../intl/messages";
|
|
24
28
|
import { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from "./chart-map-viewport";
|
|
25
29
|
import { panStateTimelineViewport, renderStateTimelineSvg, stateTimelineDomain, stateTimelineHeight, zoomStateTimelineViewport } from "./chart-state-timeline";
|
|
30
|
+
import { isServer } from "solid-js/web";
|
|
31
|
+
import { responsiveChartSvg, responsiveMapSvg, selectedChartSvg } from "./chart-svg";
|
|
26
32
|
|
|
27
33
|
/**
|
|
28
34
|
* Chart — minimal Solid wrapper around `stdlib.charts`.
|
|
@@ -34,31 +40,20 @@ import { panStateTimelineViewport, renderStateTimelineSvg, stateTimelineDomain,
|
|
|
34
40
|
* is a full SVG re-build, not a diff — fine for dashboard cadences
|
|
35
41
|
* (poll, websocket, store updates). Don't use this for 60fps streaming.
|
|
36
42
|
*
|
|
37
|
-
* **Sizing.**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* (`style={{ height: "14rem" }}`, an app class, a flex child, …).
|
|
45
|
-
* On SSR (no observer)
|
|
46
|
-
* the chart renders at stdlib's default size; the first client-side
|
|
47
|
-
* frame re-measures and re-renders.
|
|
48
|
-
*
|
|
49
|
-
* One documented exception: `kind: "stateTimeline"` derives its own
|
|
50
|
-
* initial height from the row count and legend via
|
|
51
|
-
* `stateTimelineHeight()`, because a timeline's height is a function of
|
|
52
|
-
* how many rows it has rather than of the layout around it. Every other
|
|
53
|
-
* kind starts at 280px until the observer reports the real box. Layout
|
|
54
|
-
* code that sizes charts uniformly must account for this.
|
|
43
|
+
* **Sizing.** The server and browser render the same logical viewBox. CSS
|
|
44
|
+
* fits Cartesian plots to the container and preserves text/marker sizes;
|
|
45
|
+
* maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain
|
|
46
|
+
* their aspect ratio. No measurement
|
|
47
|
+
* or hydration redraw is needed. The caller sizes the wrapper, for example
|
|
48
|
+
* `style={{ height: "14rem" }}`. State timelines derive their default height
|
|
49
|
+
* from the row count and legend via `stateTimelineHeight()`.
|
|
55
50
|
*
|
|
56
51
|
* **Why so thin.** The props are a discriminated union over each
|
|
57
52
|
* stdlib chart function — `kind: "line"` brings in exactly the params
|
|
58
53
|
* `charts.line` expects, `kind: "bar"` brings in `charts.bar`'s, etc.
|
|
59
54
|
* Options stay aligned with stdlib without renaming. Shared interactive
|
|
60
55
|
* layers add bounded pan / zoom controls to maps and state timelines, plus
|
|
61
|
-
*
|
|
56
|
+
* renderer-owned inspection, tooltips and optional selection for all chart kinds.
|
|
62
57
|
* If stdlib gains a new option, it's automatically available at every
|
|
63
58
|
* callsite.
|
|
64
59
|
*
|
|
@@ -85,45 +80,68 @@ import { panStateTimelineViewport, renderStateTimelineSvg, stateTimelineDomain,
|
|
|
85
80
|
/**
|
|
86
81
|
* Per-kind props: `kind` discriminator + the exact options that
|
|
87
82
|
* `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper
|
|
88
|
-
* owns those —
|
|
83
|
+
* owns those — CSS fits a stable coordinate space to the box). Solid's
|
|
89
84
|
* component model handles discriminated unions natively, so callsites
|
|
90
85
|
* get full type safety.
|
|
91
86
|
*/
|
|
92
87
|
|
|
88
|
+
/** Pure renderer options: component layout, events and inspection are configured elsewhere. */
|
|
89
|
+
|
|
90
|
+
/** Keep the fixed 28-unit bar-gauge rows inside the shared SSR/browser coordinate space. */
|
|
91
|
+
export const chartRenderHeight = props => {
|
|
92
|
+
if (props.kind === "stateTimeline") return stateTimelineHeight(props.rows.length, props.legend !== false);
|
|
93
|
+
if (props.kind === "barGauge") return Math.max(280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);
|
|
94
|
+
return 280;
|
|
95
|
+
};
|
|
96
|
+
|
|
93
97
|
/**
|
|
94
98
|
* Internal — strips wrapper-only keys from props and forwards the
|
|
95
|
-
* rest (plus
|
|
96
|
-
* price for dispatching one function call across
|
|
99
|
+
* rest (plus logical size) to `charts[kind]`. The `any` is the
|
|
100
|
+
* price for dispatching one function call across 14 different option
|
|
97
101
|
* types; an explicit per-kind switch would type it but balloon the
|
|
98
102
|
* component for no runtime benefit.
|
|
99
103
|
*/
|
|
100
|
-
const
|
|
104
|
+
export const renderChartSvg = (props, width, height, mapViewport, timelineViewport) => {
|
|
101
105
|
const {
|
|
102
106
|
kind,
|
|
103
107
|
class: _class,
|
|
104
108
|
style: _style,
|
|
105
109
|
labels: _labels,
|
|
106
110
|
interactive: _interactive,
|
|
111
|
+
onSelect: _onSelect,
|
|
112
|
+
selected: _selected,
|
|
113
|
+
tooltip: _tooltip,
|
|
114
|
+
cursor: _cursor,
|
|
115
|
+
zoomFocus: _zoomFocus,
|
|
107
116
|
...opts
|
|
108
117
|
} = props;
|
|
109
118
|
if (kind === "stateTimeline") {
|
|
110
|
-
return renderStateTimelineSvg({
|
|
119
|
+
return responsiveChartSvg(renderStateTimelineSvg({
|
|
111
120
|
...opts,
|
|
112
121
|
width,
|
|
113
122
|
height,
|
|
114
|
-
viewport: timelineViewport
|
|
115
|
-
|
|
123
|
+
viewport: timelineViewport,
|
|
124
|
+
interactive: props.interactive
|
|
125
|
+
}));
|
|
116
126
|
}
|
|
117
127
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
118
|
-
|
|
128
|
+
let svg = charts[kind]({
|
|
119
129
|
...opts,
|
|
120
|
-
...(kind === "map"
|
|
121
|
-
viewport:
|
|
130
|
+
...(kind === "map" ? {
|
|
131
|
+
viewport: DEFAULT_MAP_VIEWPORT
|
|
122
132
|
} : {}),
|
|
123
133
|
width,
|
|
124
|
-
height
|
|
134
|
+
height,
|
|
135
|
+
inspect: props.interactive === true || props.kind === "line" && props.maxGap !== undefined
|
|
125
136
|
});
|
|
137
|
+
if (props.kind === "line" && props.maxGap !== undefined) {
|
|
138
|
+
if (props.area || props.errorBand) throw new Error("Chart maxGap does not support area or errorBand fills");
|
|
139
|
+
svg = lineGapsSvg(svg, props.maxGap, props);
|
|
140
|
+
}
|
|
141
|
+
if (props.kind === "map") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));
|
|
142
|
+
return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);
|
|
126
143
|
};
|
|
144
|
+
const preservesAspectRatio = kind => kind === "map" || kind === "pie" || kind === "donut" || kind === "gauge";
|
|
127
145
|
|
|
128
146
|
/** Empty-data short-circuit. Kept per-kind because stdlib's payload
|
|
129
147
|
* key differs (series vs data vs groups). We're conservative: only
|
|
@@ -148,25 +166,23 @@ const isEmpty = props => {
|
|
|
148
166
|
return false;
|
|
149
167
|
};
|
|
150
168
|
const Chart = props => {
|
|
169
|
+
const [, drawingProps] = splitProps(props, ["selected", "onSelect", "tooltip", "cursor"]);
|
|
151
170
|
const messages = useUiMessages();
|
|
171
|
+
const locale = useLocale();
|
|
152
172
|
let containerRef;
|
|
153
173
|
let chartTooltipRef;
|
|
154
174
|
let lineAnchorRef;
|
|
155
|
-
|
|
156
|
-
//
|
|
157
|
-
|
|
158
|
-
// client-side frame; the SVG re-renders reactively via innerHTML.
|
|
159
|
-
const initialHeight = props.kind === "stateTimeline" ? stateTimelineHeight(props.rows.length, props.legend !== false) : 280;
|
|
160
|
-
const [size, setSize] = createSignal({
|
|
175
|
+
// One deterministic coordinate space on the server and client. CSS fits the
|
|
176
|
+
// SVG to its box; hydration must never replace it with measured geometry.
|
|
177
|
+
const size = () => ({
|
|
161
178
|
width: 480,
|
|
162
|
-
height:
|
|
179
|
+
height: chartRenderHeight(props)
|
|
163
180
|
});
|
|
181
|
+
const dimensions = () => containerRef?.getBoundingClientRect() ?? size();
|
|
164
182
|
const initialMapViewport = props.kind === "map" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;
|
|
165
183
|
const [mapViewport, setMapViewport] = createSignal(initialMapViewport);
|
|
166
184
|
const initialTimelineViewport = props.kind === "stateTimeline" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];
|
|
167
185
|
const [timelineViewport, setTimelineViewport] = createSignal(initialTimelineViewport);
|
|
168
|
-
const [linePointIndex, setLinePointIndex] = createSignal(0);
|
|
169
|
-
const [lineInspectionActive, setLineInspectionActive] = createSignal(false);
|
|
170
186
|
const [dragging, setDragging] = createSignal(false);
|
|
171
187
|
const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;
|
|
172
188
|
let timelineViewportLocallyChanged = false;
|
|
@@ -177,7 +193,7 @@ const Chart = props => {
|
|
|
177
193
|
const interactiveMap = () => props.kind === "map" && props.interactive === true;
|
|
178
194
|
const interactiveTimeline = () => props.kind === "stateTimeline" && props.interactive === true;
|
|
179
195
|
const interactiveLine = () => props.kind === "line" && props.interactive === true;
|
|
180
|
-
const interactive = () =>
|
|
196
|
+
const interactive = () => props.interactive === true;
|
|
181
197
|
const draggable = () => interactiveMap() || interactiveTimeline();
|
|
182
198
|
const labels = () => props.labels ?? {};
|
|
183
199
|
const timelineFullDomain = () => props.kind === "stateTimeline" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];
|
|
@@ -197,6 +213,14 @@ const Chart = props => {
|
|
|
197
213
|
};
|
|
198
214
|
const mapDimensions = () => {
|
|
199
215
|
const viewportElement = containerRef?.querySelector(".stdlib-chart-map-viewport");
|
|
216
|
+
const matrix = viewportElement?.getScreenCTM?.();
|
|
217
|
+
const box = viewportElement?.viewBox?.baseVal;
|
|
218
|
+
if (matrix && box?.width && box.height) {
|
|
219
|
+
return {
|
|
220
|
+
width: box.width * Math.hypot(matrix.a, matrix.b),
|
|
221
|
+
height: box.height * Math.hypot(matrix.c, matrix.d)
|
|
222
|
+
};
|
|
223
|
+
}
|
|
200
224
|
const rect = viewportElement?.getBoundingClientRect();
|
|
201
225
|
if (rect && rect.width > 0 && rect.height > 0) {
|
|
202
226
|
return {
|
|
@@ -204,16 +228,18 @@ const Chart = props => {
|
|
|
204
228
|
height: rect.height
|
|
205
229
|
};
|
|
206
230
|
}
|
|
207
|
-
return
|
|
231
|
+
return dimensions();
|
|
208
232
|
};
|
|
209
233
|
const zoom = delta => {
|
|
234
|
+
closeChartTooltip();
|
|
210
235
|
if (interactiveMap()) {
|
|
211
|
-
setMapViewport(current => zoomMapViewport(current, delta));
|
|
236
|
+
setMapViewport(current => zoomMapViewport(current, delta, props.kind === "map" ? props.zoomFocus : undefined));
|
|
212
237
|
} else if (interactiveTimeline()) {
|
|
213
238
|
updateTimelineViewport(current => zoomStateTimelineViewport(current, timelineFullDomain(), delta));
|
|
214
239
|
}
|
|
215
240
|
};
|
|
216
241
|
const reset = () => {
|
|
242
|
+
closeChartTooltip();
|
|
217
243
|
if (interactiveMap() && props.kind === "map") {
|
|
218
244
|
setMapViewport(normalizeMapViewport(props.viewport));
|
|
219
245
|
}
|
|
@@ -223,6 +249,7 @@ const Chart = props => {
|
|
|
223
249
|
}
|
|
224
250
|
};
|
|
225
251
|
const handlePointerDown = event => {
|
|
252
|
+
inspection.down(event);
|
|
226
253
|
if (!draggable() || event.button !== 0 || event.target.closest("button, a")) {
|
|
227
254
|
return;
|
|
228
255
|
}
|
|
@@ -258,10 +285,8 @@ const Chart = props => {
|
|
|
258
285
|
const sample = pendingPointer;
|
|
259
286
|
pendingPointer = undefined;
|
|
260
287
|
if (!sample) return;
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
288
|
+
const start = timelineDrag ?? drag;
|
|
289
|
+
if (start && Math.hypot(sample.clientX - start.x, sample.clientY - ("y" in start ? start.y : sample.clientY)) <= 6) return;
|
|
265
290
|
const activeTimelineDrag = timelineDrag;
|
|
266
291
|
if (activeTimelineDrag?.pointerId === sample.pointerId) {
|
|
267
292
|
updateTimelineViewport(() => panStateTimelineViewport(activeTimelineDrag.viewport, timelineFullDomain(), sample.clientX - activeTimelineDrag.x, activeTimelineDrag.width));
|
|
@@ -271,7 +296,8 @@ const Chart = props => {
|
|
|
271
296
|
setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));
|
|
272
297
|
};
|
|
273
298
|
const handlePointerMove = event => {
|
|
274
|
-
|
|
299
|
+
inspection.move(event);
|
|
300
|
+
if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;
|
|
275
301
|
pendingPointer = {
|
|
276
302
|
pointerId: event.pointerId,
|
|
277
303
|
clientX: event.clientX,
|
|
@@ -315,20 +341,8 @@ const Chart = props => {
|
|
|
315
341
|
}
|
|
316
342
|
};
|
|
317
343
|
const handleKeyDown = event => {
|
|
318
|
-
if (
|
|
319
|
-
if (
|
|
320
|
-
const values = lineXValues();
|
|
321
|
-
if (values.length === 0) return;
|
|
322
|
-
if (event.key === "Escape") {
|
|
323
|
-
closeChartTooltip();
|
|
324
|
-
return;
|
|
325
|
-
}
|
|
326
|
-
const next = event.key === "Home" ? 0 : event.key === "End" ? values.length - 1 : event.key === "ArrowLeft" ? Math.max(0, linePointIndex() - 1) : event.key === "ArrowRight" ? Math.min(values.length - 1, linePointIndex() + 1) : null;
|
|
327
|
-
if (next === null) return;
|
|
328
|
-
event.preventDefault();
|
|
329
|
-
showLinePoint(next);
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
344
|
+
if (inspection.key(event)) return;
|
|
345
|
+
if (!draggable() || event.target !== containerRef) return;
|
|
332
346
|
if (event.key === "+" || event.key === "=") {
|
|
333
347
|
event.preventDefault();
|
|
334
348
|
zoom(1);
|
|
@@ -360,171 +374,60 @@ const Chart = props => {
|
|
|
360
374
|
const dimensions = mapDimensions();
|
|
361
375
|
setMapViewport(current => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));
|
|
362
376
|
};
|
|
363
|
-
const
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
}
|
|
378
|
-
};
|
|
379
|
-
const showTimelineTooltip = target => {
|
|
380
|
-
if (!interactiveTimeline() || !chartTooltipRef) return;
|
|
381
|
-
const trigger = target?.closest("[data-chart-tooltip]");
|
|
382
|
-
const content = trigger?.dataset.chartTooltip;
|
|
383
|
-
if (!trigger || !content) return;
|
|
384
|
-
chartTooltipTriggerRef?.removeAttribute("aria-describedby");
|
|
385
|
-
chartTooltipTriggerRef = trigger;
|
|
386
|
-
trigger.setAttribute("aria-describedby", chartTooltipId);
|
|
387
|
-
chartTooltipRef.textContent = content;
|
|
388
|
-
try {
|
|
389
|
-
if (!chartTooltipRef.matches(":popover-open")) chartTooltipRef.showPopover();
|
|
390
|
-
positionTooltipSurface(chartTooltipRef, trigger);
|
|
391
|
-
} catch {
|
|
392
|
-
// SVG <title> remains as the fallback on browsers without Popover.
|
|
393
|
-
}
|
|
394
|
-
};
|
|
395
|
-
const lineInspection = createMemo(() => {
|
|
396
|
-
if (props.kind !== "line") {
|
|
377
|
+
const inspection = createChartInspection({
|
|
378
|
+
container: () => containerRef,
|
|
379
|
+
cursor: () => props.cursor,
|
|
380
|
+
tooltip: () => chartTooltipRef,
|
|
381
|
+
anchor: () => lineAnchorRef,
|
|
382
|
+
kind: () => props.kind,
|
|
383
|
+
enabled: interactive,
|
|
384
|
+
select: selection => props.onSelect?.(selection),
|
|
385
|
+
format: selection => {
|
|
386
|
+
if (props.tooltip) return props.tooltip(selection);
|
|
387
|
+
const fields = messages().chartFields;
|
|
388
|
+
const format = new Intl.NumberFormat(locale(), {
|
|
389
|
+
maximumFractionDigits: 6
|
|
390
|
+
});
|
|
397
391
|
return {
|
|
398
|
-
|
|
399
|
-
|
|
392
|
+
title: selection.datum.label ?? (selection.datum.seriesIndex !== undefined ? `${labels().series ?? messages().series} ${selection.datum.seriesIndex + 1}` : undefined),
|
|
393
|
+
rows: selection.datum.values.map(field => ({
|
|
394
|
+
label: selection.kind === "line" && field.key === "y" ? selection.datum.label ?? labels().series ?? messages().series : fields({
|
|
395
|
+
key: field.key
|
|
396
|
+
}),
|
|
397
|
+
value: field.formatted ?? (field.key === "upperInclusive" ? field.value === "true" ? messages().yes : messages().no : typeof field.value === "number" ? `${format.format(field.value)}${field.key === "percent" ? "%" : ""}` : field.value)
|
|
398
|
+
}))
|
|
400
399
|
};
|
|
401
400
|
}
|
|
402
|
-
const values = new Set();
|
|
403
|
-
const series = props.series.map(entry => {
|
|
404
|
-
const points = new Map();
|
|
405
|
-
for (const point of entry.data) {
|
|
406
|
-
if (!Number.isFinite(point.x)) continue;
|
|
407
|
-
values.add(point.x);
|
|
408
|
-
if (Number.isFinite(point.y) && !points.has(point.x)) points.set(point.x, point);
|
|
409
|
-
}
|
|
410
|
-
return {
|
|
411
|
-
label: entry.label ?? labels().series ?? messages().series,
|
|
412
|
-
points
|
|
413
|
-
};
|
|
414
|
-
});
|
|
415
|
-
return {
|
|
416
|
-
values: [...values].sort((left, right) => left - right),
|
|
417
|
-
series
|
|
418
|
-
};
|
|
419
401
|
});
|
|
420
|
-
const
|
|
421
|
-
const
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
const rightInset = (typeof padding === "number" ? padding : padding?.right) ?? 16;
|
|
429
|
-
return {
|
|
430
|
-
left: left + (props.yAxis?.label ? 14 : 0),
|
|
431
|
-
right: Math.max(left + 1, size().width - rightInset)
|
|
432
|
-
};
|
|
433
|
-
};
|
|
434
|
-
const showLinePoint = (index, pointerY) => {
|
|
435
|
-
if (props.kind !== "line" || !chartTooltipRef || !lineAnchorRef) return;
|
|
436
|
-
const inspection = lineInspection();
|
|
437
|
-
const values = inspection.values;
|
|
438
|
-
const pointIndex = Math.min(values.length - 1, Math.max(0, index));
|
|
439
|
-
const x = values[pointIndex];
|
|
440
|
-
if (x === undefined) return;
|
|
441
|
-
const points = inspection.series.map(series => {
|
|
442
|
-
const point = series.points.get(x);
|
|
443
|
-
return point ? {
|
|
444
|
-
label: series.label,
|
|
445
|
-
point
|
|
446
|
-
} : null;
|
|
447
|
-
}).filter(entry => entry !== null);
|
|
448
|
-
if (points.length === 0) return;
|
|
449
|
-
const xFormat = props.xAxis?.format ?? String;
|
|
450
|
-
const yFormat = props.yAxis?.format ?? String;
|
|
451
|
-
chartTooltipRef.textContent = [xFormat(x), ...points.map(entry => `${entry.label}: ${yFormat(entry.point.y)}`)].join(" · ");
|
|
452
|
-
const [min, max] = [values[0] ?? x, values.at(-1) ?? x];
|
|
453
|
-
const bounds = linePlotBounds();
|
|
454
|
-
const ratio = max === min ? 0.5 : (x - min) / (max - min);
|
|
455
|
-
lineAnchorRef.style.left = `${bounds.left + ratio * (bounds.right - bounds.left)}px`;
|
|
456
|
-
lineAnchorRef.style.top = `${Math.min(size().height - 8, Math.max(8, pointerY ?? 24))}px`;
|
|
457
|
-
setLinePointIndex(pointIndex);
|
|
458
|
-
setLineInspectionActive(true);
|
|
459
|
-
try {
|
|
460
|
-
if (!chartTooltipRef.matches(":popover-open")) chartTooltipRef.showPopover();
|
|
461
|
-
positionTooltipSurface(chartTooltipRef, lineAnchorRef);
|
|
462
|
-
} catch {
|
|
463
|
-
// The chart remains readable on browsers without Popover support.
|
|
464
|
-
}
|
|
465
|
-
};
|
|
466
|
-
const showLineTooltip = (clientX, clientY) => {
|
|
467
|
-
const values = lineXValues();
|
|
468
|
-
if (values.length === 0) return;
|
|
469
|
-
const rect = containerRef?.getBoundingClientRect();
|
|
470
|
-
if (!rect) return;
|
|
471
|
-
const bounds = linePlotBounds();
|
|
472
|
-
const localX = clientX - rect.left;
|
|
473
|
-
const ratio = Math.min(1, Math.max(0, (localX - bounds.left) / Math.max(1, bounds.right - bounds.left)));
|
|
474
|
-
const target = (values[0] ?? 0) + ratio * ((values.at(-1) ?? 0) - (values[0] ?? 0));
|
|
475
|
-
let low = 0;
|
|
476
|
-
let high = values.length - 1;
|
|
477
|
-
while (low < high) {
|
|
478
|
-
const middle = Math.floor((low + high) / 2);
|
|
479
|
-
if (values[middle] < target) low = middle + 1;else high = middle;
|
|
480
|
-
}
|
|
481
|
-
const previous = Math.max(0, low - 1);
|
|
482
|
-
const index = Math.abs(values[previous] - target) <= Math.abs(values[low] - target) ? previous : low;
|
|
483
|
-
showLinePoint(index, clientY - rect.top);
|
|
484
|
-
};
|
|
402
|
+
const closeChartTooltip = () => inspection.close();
|
|
403
|
+
const svgMarkup = createMemo(() => renderChartSvg(drawingProps, size().width, size().height, interactiveMap() ? mapViewport() : undefined, interactiveTimeline() ? timelineViewport() : undefined));
|
|
404
|
+
createEffect(() => {
|
|
405
|
+
svgMarkup();
|
|
406
|
+
inspection.invalidate();
|
|
407
|
+
untrack(() => inspection.selectDatum(props.selected));
|
|
408
|
+
});
|
|
409
|
+
createEffect(() => inspection.selectDatum(props.selected));
|
|
485
410
|
onCleanup(() => {
|
|
411
|
+
inspection.close();
|
|
486
412
|
if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);
|
|
487
413
|
pointerFrame = undefined;
|
|
488
414
|
pendingPointer = undefined;
|
|
489
415
|
});
|
|
490
416
|
onMount(() => {
|
|
491
417
|
if (!containerRef) return;
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
}
|
|
502
|
-
const ro = new ResizeObserver(entries => {
|
|
503
|
-
const entry = entries[0];
|
|
504
|
-
if (!entry) return;
|
|
505
|
-
const {
|
|
506
|
-
width,
|
|
507
|
-
height
|
|
508
|
-
} = entry.contentRect;
|
|
509
|
-
// Floor to integer pixels; sub-pixel jitter would trigger an
|
|
510
|
-
// SVG re-render on every scroll/zoom otherwise.
|
|
511
|
-
if (width > 0 && height > 0) {
|
|
512
|
-
setSize(prev => {
|
|
513
|
-
const w = Math.round(width);
|
|
514
|
-
const h = Math.round(height);
|
|
515
|
-
return prev.width === w && prev.height === h ? prev : {
|
|
516
|
-
width: w,
|
|
517
|
-
height: h
|
|
518
|
-
};
|
|
519
|
-
});
|
|
520
|
-
}
|
|
521
|
-
});
|
|
522
|
-
ro.observe(containerRef);
|
|
523
|
-
window.addEventListener("scroll", closeChartTooltip, true);
|
|
418
|
+
const outside = event => {
|
|
419
|
+
if (event.target instanceof Node && !containerRef?.contains(event.target)) closeChartTooltip();
|
|
420
|
+
};
|
|
421
|
+
window.addEventListener("pointerdown", outside);
|
|
422
|
+
const scroll = event => {
|
|
423
|
+
if (event.target instanceof Node && chartTooltipRef?.contains(event.target)) return;
|
|
424
|
+
closeChartTooltip();
|
|
425
|
+
};
|
|
426
|
+
window.addEventListener("scroll", scroll, true);
|
|
524
427
|
window.addEventListener("resize", closeChartTooltip);
|
|
525
428
|
onCleanup(() => {
|
|
526
|
-
|
|
527
|
-
window.removeEventListener("scroll",
|
|
429
|
+
window.removeEventListener("pointerdown", outside);
|
|
430
|
+
window.removeEventListener("scroll", scroll, true);
|
|
528
431
|
window.removeEventListener("resize", closeChartTooltip);
|
|
529
432
|
});
|
|
530
433
|
});
|
|
@@ -542,10 +445,10 @@ const Chart = props => {
|
|
|
542
445
|
typeof _ref$4 === "function" ? _$use(_ref$4, _el$11) : containerRef = _el$11;
|
|
543
446
|
_$insert(_el$11, () => labels().empty ?? messages().noData);
|
|
544
447
|
_$effect(_p$ => {
|
|
545
|
-
var _v$
|
|
546
|
-
_v$
|
|
547
|
-
_v$
|
|
548
|
-
_p$.t = _$style(_el$11, _v$
|
|
448
|
+
var _v$19 = `k2b-chart k2b-chart__empty ${props.class ?? ""}`,
|
|
449
|
+
_v$20 = chartStyle();
|
|
450
|
+
_v$19 !== _p$.e && _$className(_el$11, _p$.e = _v$19);
|
|
451
|
+
_p$.t = _$style(_el$11, _v$20, _p$.t);
|
|
549
452
|
return _p$;
|
|
550
453
|
}, {
|
|
551
454
|
e: undefined,
|
|
@@ -564,15 +467,9 @@ const Chart = props => {
|
|
|
564
467
|
_el$.$$keydown = handleKeyDown;
|
|
565
468
|
_el$.addEventListener("wheel", handleWheel);
|
|
566
469
|
_el$.$$focusout = closeChartTooltip;
|
|
567
|
-
_el
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
_el$.addEventListener("pointerleave", closeChartTooltip);
|
|
571
|
-
_el$.$$pointerout = event => {
|
|
572
|
-
const trigger = event.target.closest("[data-chart-tooltip]");
|
|
573
|
-
if (trigger && !trigger.contains(event.relatedTarget)) closeChartTooltip();
|
|
574
|
-
};
|
|
575
|
-
_el$.$$pointerover = event => showTimelineTooltip(event.target);
|
|
470
|
+
_$addEventListener(_el$, "focusin", inspection.focus, true);
|
|
471
|
+
_$addEventListener(_el$, "pointerleave", inspection.leave);
|
|
472
|
+
_$addEventListener(_el$, "click", inspection.click, true);
|
|
576
473
|
_el$.addEventListener("pointercancel", stopDragging);
|
|
577
474
|
_el$.$$pointerup = stopDragging;
|
|
578
475
|
_el$.$$pointermove = handlePointerMove;
|
|
@@ -581,7 +478,7 @@ const Chart = props => {
|
|
|
581
478
|
typeof _ref$ === "function" ? _$use(_ref$, _el$) : containerRef = _el$;
|
|
582
479
|
_$insert(_el$, _$createComponent(Show, {
|
|
583
480
|
get when() {
|
|
584
|
-
return
|
|
481
|
+
return interactive();
|
|
585
482
|
},
|
|
586
483
|
get children() {
|
|
587
484
|
return [(() => {
|
|
@@ -643,20 +540,28 @@ const Chart = props => {
|
|
|
643
540
|
_v$0 = !draggable() && interactiveLine() ? "true" : undefined,
|
|
644
541
|
_v$1 = interactive() ? "true" : undefined,
|
|
645
542
|
_v$10 = chartStyle(),
|
|
646
|
-
_v$11 = interactiveLine()
|
|
647
|
-
_v$12 =
|
|
543
|
+
_v$11 = interactiveMap() ? labels().interactiveMap ?? messages().interactiveMap : interactiveTimeline() ? labels().interactiveTimeline ?? messages().interactiveTimeline : interactiveLine() ? labels().interactiveLine ?? messages().interactiveLineChart : interactive() ? labels().interactiveChart ?? messages().interactiveChart : undefined,
|
|
544
|
+
_v$12 = interactive() ? messages().interactiveChart : undefined,
|
|
648
545
|
_v$13 = interactive() ? 0 : undefined,
|
|
649
|
-
_v$14 =
|
|
546
|
+
_v$14 = !preservesAspectRatio(props.kind) ? "true" : undefined,
|
|
547
|
+
_v$15 = `${size().width}px`,
|
|
548
|
+
_v$16 = `${size().height}px`,
|
|
549
|
+
_v$17 = `${size().width} / ${size().height}`,
|
|
550
|
+
_v$18 = isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup();
|
|
650
551
|
_v$7 !== _p$.e && _$className(_el$, _p$.e = _v$7);
|
|
651
552
|
_v$8 !== _p$.t && _$setAttribute(_el$, "data-chart-kind", _p$.t = _v$8);
|
|
652
553
|
_v$9 !== _p$.a && _$setAttribute(_el$, "data-drag", _p$.a = _v$9);
|
|
653
554
|
_v$0 !== _p$.o && _$setAttribute(_el$, "data-crosshair", _p$.o = _v$0);
|
|
654
555
|
_v$1 !== _p$.i && _$setAttribute(_el$, "data-interactive", _p$.i = _v$1);
|
|
655
556
|
_p$.n = _$style(_el$, _v$10, _p$.n);
|
|
656
|
-
_v$11 !== _p$.s && _$setAttribute(_el$, "aria-
|
|
657
|
-
_v$12 !== _p$.h && _$setAttribute(_el$, "aria-
|
|
557
|
+
_v$11 !== _p$.s && _$setAttribute(_el$, "aria-label", _p$.s = _v$11);
|
|
558
|
+
_v$12 !== _p$.h && _$setAttribute(_el$, "aria-description", _p$.h = _v$12);
|
|
658
559
|
_v$13 !== _p$.r && _$setAttribute(_el$, "tabindex", _p$.r = _v$13);
|
|
659
|
-
_v$14 !== _p$.d && _$
|
|
560
|
+
_v$14 !== _p$.d && _$setAttribute(_el$2, "data-stretch", _p$.d = _v$14);
|
|
561
|
+
_v$15 !== _p$.l && _$setStyleProperty(_el$2, "--k2b-chart-width", _p$.l = _v$15);
|
|
562
|
+
_v$16 !== _p$.u && _$setStyleProperty(_el$2, "--k2b-chart-height", _p$.u = _v$16);
|
|
563
|
+
_v$17 !== _p$.c && _$setStyleProperty(_el$2, "aspect-ratio", _p$.c = _v$17);
|
|
564
|
+
_v$18 !== _p$.w && _$setProperty(_el$2, "innerHTML", _p$.w = _v$18);
|
|
660
565
|
return _p$;
|
|
661
566
|
}, {
|
|
662
567
|
e: undefined,
|
|
@@ -668,7 +573,11 @@ const Chart = props => {
|
|
|
668
573
|
s: undefined,
|
|
669
574
|
h: undefined,
|
|
670
575
|
r: undefined,
|
|
671
|
-
d: undefined
|
|
576
|
+
d: undefined,
|
|
577
|
+
l: undefined,
|
|
578
|
+
u: undefined,
|
|
579
|
+
c: undefined,
|
|
580
|
+
w: undefined
|
|
672
581
|
});
|
|
673
582
|
_$runHydrationEvents();
|
|
674
583
|
return _el$;
|
|
@@ -676,5 +585,5 @@ const Chart = props => {
|
|
|
676
585
|
});
|
|
677
586
|
};
|
|
678
587
|
export default Chart;
|
|
679
|
-
_$delegateEvents(["pointerdown", "pointermove", "pointerup", "
|
|
588
|
+
_$delegateEvents(["pointerdown", "pointermove", "pointerup", "click", "focusin", "focusout", "keydown"]);
|
|
680
589
|
//# sourceMappingURL=Chart.js.map
|