@k2b/ui 0.5.0 → 0.6.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/ContextMenu.js.map +1 -1
- package/dist/browser/actions/CopyButton.js.map +1 -1
- package/dist/browser/actions/Disclosure.js.map +1 -1
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/RemoveButton.js.map +1 -1
- package/dist/browser/actions/SegmentedControl.js.map +1 -1
- package/dist/browser/actions/SplitButton.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/actions/Toolbar.js.map +1 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatContextPopup.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/ChatRoot.js.map +1 -1
- package/dist/browser/chat/ChatTasks.js +1 -1
- package/dist/browser/chat/ChatTasks.js.map +1 -1
- package/dist/browser/chat/ChatTimeline.js.map +1 -1
- package/dist/browser/chat/chat-behavior.js.map +1 -1
- package/dist/browser/chat/composer-document.js.map +1 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/ChartExplorerControls.js.map +1 -1
- package/dist/browser/content/ChartFilterControls.js +1 -1
- package/dist/browser/content/ChartFilterControls.js.map +1 -1
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/CodeDisplay.js.map +1 -1
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/Docs.js.map +1 -1
- package/dist/browser/content/FileBrowser.js.map +1 -1
- package/dist/browser/content/FileGrid.js.map +1 -1
- package/dist/browser/content/FileTree.js.map +1 -1
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/LogEntriesTable.js.map +1 -1
- package/dist/browser/content/MarkdownView.js.map +1 -1
- package/dist/browser/content/Pagination.js.map +1 -1
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/RangePicker.js.map +1 -1
- package/dist/browser/content/StructuredDataPreview.js.map +1 -1
- package/dist/browser/content/ZoomPanViewport.js +396 -0
- package/dist/browser/content/ZoomPanViewport.js.map +1 -0
- package/dist/browser/content/calendar-event-layout.js.map +1 -1
- package/dist/browser/content/calendar-pointer.js.map +1 -1
- package/dist/browser/content/chart-cursor.js.map +1 -1
- package/dist/browser/content/chart-explorer.js.map +1 -1
- package/dist/browser/content/chart-inspection.js.map +1 -1
- package/dist/browser/content/chart-line-gaps.js.map +1 -1
- package/dist/browser/content/chart-map-viewport.js.map +1 -1
- package/dist/browser/content/chart-snapshot.js.map +1 -1
- package/dist/browser/content/chart-state-timeline.js.map +1 -1
- package/dist/browser/content/chart-svg.js.map +1 -1
- package/dist/browser/content/code-highlight.js.map +1 -1
- package/dist/browser/content/collection-selection.js.map +1 -1
- package/dist/browser/content/delimited-preferences.js.map +1 -1
- package/dist/browser/content/file-tree.js.map +1 -1
- package/dist/browser/content/file-view-preview.js.map +1 -1
- package/dist/browser/content/index.js +1 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/zoom-pan.js +54 -0
- package/dist/browser/content/zoom-pan.js.map +1 -0
- package/dist/browser/feedback/InlineGuidance.js.map +1 -1
- package/dist/browser/feedback/Tooltip.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/index.js.map +1 -1
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/feedback/toast.js.map +1 -1
- package/dist/browser/feedback/tooltip-position.js.map +1 -1
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/browser/inputs/Checkbox.js.map +1 -1
- package/dist/browser/inputs/CheckboxCard.js.map +1 -1
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
- package/dist/browser/inputs/Combobox.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
- package/dist/browser/inputs/NumberInput.js.map +1 -1
- package/dist/browser/inputs/Select.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/SpecialInputs.js.map +1 -1
- package/dist/browser/inputs/Switch.js.map +1 -1
- package/dist/browser/inputs/TagEditor.js.map +1 -1
- package/dist/browser/inputs/TagsInput.js.map +1 -1
- package/dist/browser/inputs/TemplateEditor.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +2 -1
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/choice.js.map +1 -1
- package/dist/browser/inputs/completion/behaviors.js.map +1 -1
- package/dist/browser/inputs/completion/engine.js.map +1 -1
- package/dist/browser/inputs/completion/index.js.map +1 -1
- package/dist/browser/inputs/completion/overlay.js.map +1 -1
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/inputs/editor-dom.js.map +1 -1
- package/dist/browser/inputs/field-contract.js.map +1 -1
- package/dist/browser/inputs/icon-options.js.map +1 -1
- package/dist/browser/inputs/image-crop.js.map +1 -1
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/browser/inputs/markdown/actions.js.map +1 -1
- package/dist/browser/inputs/markdown/active-formats.js.map +1 -1
- package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
- package/dist/browser/inputs/markdown/code-zone.js.map +1 -1
- package/dist/browser/internal/color.js.map +1 -1
- package/dist/browser/internal/field.js.map +1 -1
- package/dist/browser/internal/portal.js.map +1 -1
- package/dist/browser/intl/Format.js.map +1 -1
- package/dist/browser/intl/index.js.map +1 -1
- package/dist/browser/intl/locale.js.map +1 -1
- package/dist/browser/intl/messages.js +6 -0
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppOverview.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js.map +1 -1
- package/dist/browser/layout/DataPanel.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/Discussion.js.map +1 -1
- package/dist/browser/layout/FloatingWindow.js.map +1 -1
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/PanelHeader.js.map +1 -1
- package/dist/browser/layout/Panes.js.map +1 -1
- package/dist/browser/layout/PullToRefresh.js +8 -7
- package/dist/browser/layout/PullToRefresh.js.map +1 -1
- package/dist/browser/layout/ScrollArea.js.map +1 -1
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SettingsCollection.js.map +1 -1
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/app-workspace-state.js.map +1 -1
- package/dist/browser/layout/floating-window-geometry.js.map +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/layout/panes-layout.js.map +1 -1
- package/dist/browser/layout/scroll-fade.js.map +1 -1
- package/dist/browser/layout/stable-id.js.map +1 -1
- package/dist/browser/surfaces/Avatar.js.map +1 -1
- package/dist/browser/surfaces/DescriptionList.js.map +1 -1
- package/dist/browser/surfaces/LinkCard.js.map +1 -1
- package/dist/browser/surfaces/NotFoundState.js.map +1 -1
- package/dist/browser/surfaces/NoticeCard.js.map +1 -1
- package/dist/browser/surfaces/Paper.js.map +1 -1
- package/dist/browser/surfaces/Placeholder.js.map +1 -1
- package/dist/browser/surfaces/ProgressBar.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/surfaces/StatGrid.js.map +1 -1
- package/dist/browser/surfaces/StatusBadge.js.map +1 -1
- package/dist/browser/surfaces/Tag.js.map +1 -1
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/widgets/Widget.js.map +1 -1
- package/dist/browser/widgets/WidgetHero.js.map +1 -1
- package/dist/browser/widgets/WidgetList.js.map +1 -1
- package/dist/browser/widgets/WidgetPills.js.map +1 -1
- package/dist/browser/widgets/WidgetStat.js.map +1 -1
- package/dist/browser/widgets/WidgetStatus.js.map +1 -1
- package/dist/ssr/actions/Button.js +16 -6
- package/dist/ssr/actions/Button.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/CopyButton.js +2 -1
- package/dist/ssr/actions/CopyButton.js.map +1 -1
- package/dist/ssr/actions/Disclosure.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +7 -6
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +5 -4
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/RemoveButton.js +1 -0
- package/dist/ssr/actions/RemoveButton.js.map +1 -1
- package/dist/ssr/actions/SegmentedControl.js.map +1 -1
- package/dist/ssr/actions/SplitButton.js +1 -0
- package/dist/ssr/actions/SplitButton.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/actions/Toolbar.js.map +1 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +6 -5
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +6 -5
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/ChatRoot.js.map +1 -1
- package/dist/ssr/chat/ChatTasks.js +1 -1
- package/dist/ssr/chat/ChatTasks.js.map +1 -1
- package/dist/ssr/chat/ChatTimeline.js +5 -4
- package/dist/ssr/chat/ChatTimeline.js.map +1 -1
- package/dist/ssr/chat/chat-behavior.js.map +1 -1
- package/dist/ssr/chat/composer-document.js.map +1 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/content/Calendar.js +2 -1
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/ChartExplorerControls.js +5 -4
- package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
- package/dist/ssr/content/ChartFilterControls.js +3 -2
- package/dist/ssr/content/ChartFilterControls.js.map +1 -1
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/CodeDisplay.js.map +1 -1
- package/dist/ssr/content/DataTable.js +1 -0
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/Docs.js +1 -0
- package/dist/ssr/content/Docs.js.map +1 -1
- package/dist/ssr/content/FileBrowser.js +2 -1
- package/dist/ssr/content/FileBrowser.js.map +1 -1
- package/dist/ssr/content/FileGrid.js.map +1 -1
- package/dist/ssr/content/FileTree.js +2 -1
- package/dist/ssr/content/FileTree.js.map +1 -1
- package/dist/ssr/content/FileView.js +5 -4
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +2 -1
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/LogEntriesTable.js.map +1 -1
- package/dist/ssr/content/MarkdownView.js.map +1 -1
- package/dist/ssr/content/Pagination.js +2 -1
- package/dist/ssr/content/Pagination.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/RangePicker.js.map +1 -1
- package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
- package/dist/ssr/content/ZoomPanViewport.js +300 -0
- package/dist/ssr/content/ZoomPanViewport.js.map +1 -0
- package/dist/ssr/content/calendar-event-layout.js.map +1 -1
- package/dist/ssr/content/calendar-pointer.js.map +1 -1
- package/dist/ssr/content/chart-cursor.js.map +1 -1
- package/dist/ssr/content/chart-explorer.js.map +1 -1
- package/dist/ssr/content/chart-inspection.js.map +1 -1
- package/dist/ssr/content/chart-line-gaps.js.map +1 -1
- package/dist/ssr/content/chart-map-viewport.js.map +1 -1
- package/dist/ssr/content/chart-snapshot.js.map +1 -1
- package/dist/ssr/content/chart-state-timeline.js.map +1 -1
- package/dist/ssr/content/chart-svg.js.map +1 -1
- package/dist/ssr/content/code-highlight.js.map +1 -1
- package/dist/ssr/content/collection-selection.js.map +1 -1
- package/dist/ssr/content/delimited-preferences.js.map +1 -1
- package/dist/ssr/content/file-tree.js.map +1 -1
- package/dist/ssr/content/file-view-preview.js.map +1 -1
- package/dist/ssr/content/index.js +1 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/zoom-pan.js +54 -0
- package/dist/ssr/content/zoom-pan.js.map +1 -0
- package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
- package/dist/ssr/feedback/Tooltip.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/index.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +3 -2
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/feedback/toast.js.map +1 -1
- package/dist/ssr/feedback/tooltip-position.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteEditor.js +3 -2
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteSelect.js +5 -4
- package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/ssr/inputs/Checkbox.js +1 -0
- package/dist/ssr/inputs/Checkbox.js.map +1 -1
- package/dist/ssr/inputs/CheckboxCard.js.map +1 -1
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
- package/dist/ssr/inputs/ChoiceInputs.js +1 -0
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
- package/dist/ssr/inputs/Combobox.js +2 -1
- package/dist/ssr/inputs/Combobox.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +4 -3
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/FileInputs.js +2 -1
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/MultiSelectInput.js +4 -3
- package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
- package/dist/ssr/inputs/NumberInput.js +2 -1
- package/dist/ssr/inputs/NumberInput.js.map +1 -1
- package/dist/ssr/inputs/Select.js +4 -3
- package/dist/ssr/inputs/Select.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +3 -2
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/SpecialInputs.js +1 -0
- package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
- package/dist/ssr/inputs/Switch.js.map +1 -1
- package/dist/ssr/inputs/TagEditor.js +3 -2
- package/dist/ssr/inputs/TagEditor.js.map +1 -1
- package/dist/ssr/inputs/TagsInput.js.map +1 -1
- package/dist/ssr/inputs/TemplateEditor.js +1 -0
- package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js +6 -4
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/choice.js.map +1 -1
- package/dist/ssr/inputs/completion/behaviors.js.map +1 -1
- package/dist/ssr/inputs/completion/engine.js.map +1 -1
- package/dist/ssr/inputs/completion/index.js.map +1 -1
- package/dist/ssr/inputs/completion/overlay.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/inputs/editor-dom.js.map +1 -1
- package/dist/ssr/inputs/field-contract.js.map +1 -1
- package/dist/ssr/inputs/icon-options.js.map +1 -1
- package/dist/ssr/inputs/image-crop.js.map +1 -1
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/ssr/inputs/markdown/actions.js.map +1 -1
- package/dist/ssr/inputs/markdown/active-formats.js.map +1 -1
- package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
- package/dist/ssr/inputs/markdown/code-zone.js.map +1 -1
- package/dist/ssr/internal/color.js.map +1 -1
- package/dist/ssr/internal/field.js.map +1 -1
- package/dist/ssr/internal/portal.js.map +1 -1
- package/dist/ssr/intl/Format.js.map +1 -1
- package/dist/ssr/intl/index.js.map +1 -1
- package/dist/ssr/intl/locale.js.map +1 -1
- package/dist/ssr/intl/messages.js +6 -0
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppOverview.js +2 -1
- package/dist/ssr/layout/AppOverview.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +7 -6
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js.map +1 -1
- package/dist/ssr/layout/DataPanel.js +1 -0
- package/dist/ssr/layout/DataPanel.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +1 -0
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/Discussion.js +3 -2
- package/dist/ssr/layout/Discussion.js.map +1 -1
- package/dist/ssr/layout/FloatingWindow.js +1 -0
- package/dist/ssr/layout/FloatingWindow.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +3 -2
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PanelDialog.js +1 -0
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/PanelHeader.js.map +1 -1
- package/dist/ssr/layout/Panes.js.map +1 -1
- package/dist/ssr/layout/PullToRefresh.js +1 -1
- package/dist/ssr/layout/PullToRefresh.js.map +1 -1
- package/dist/ssr/layout/ScrollArea.js.map +1 -1
- package/dist/ssr/layout/Settings.js +2 -1
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SettingsCollection.js +1 -0
- package/dist/ssr/layout/SettingsCollection.js.map +1 -1
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/app-workspace-state.js.map +1 -1
- package/dist/ssr/layout/floating-window-geometry.js.map +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/layout/panes-layout.js.map +1 -1
- package/dist/ssr/layout/scroll-fade.js.map +1 -1
- package/dist/ssr/layout/stable-id.js.map +1 -1
- package/dist/ssr/surfaces/Avatar.js +2 -1
- package/dist/ssr/surfaces/Avatar.js.map +1 -1
- package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
- package/dist/ssr/surfaces/LinkCard.js.map +1 -1
- package/dist/ssr/surfaces/NotFoundState.js.map +1 -1
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
- package/dist/ssr/surfaces/Paper.js +2 -1
- package/dist/ssr/surfaces/Paper.js.map +1 -1
- package/dist/ssr/surfaces/Placeholder.js +2 -1
- package/dist/ssr/surfaces/Placeholder.js.map +1 -1
- package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +2 -1
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/surfaces/StatGrid.js +1 -0
- package/dist/ssr/surfaces/StatGrid.js.map +1 -1
- package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
- package/dist/ssr/surfaces/Tag.js.map +1 -1
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/widgets/Widget.js +1 -0
- package/dist/ssr/widgets/Widget.js.map +1 -1
- package/dist/ssr/widgets/WidgetHero.js.map +1 -1
- package/dist/ssr/widgets/WidgetList.js.map +1 -1
- package/dist/ssr/widgets/WidgetPills.js.map +1 -1
- package/dist/ssr/widgets/WidgetStat.js +1 -0
- package/dist/ssr/widgets/WidgetStat.js.map +1 -1
- package/dist/ssr/widgets/WidgetStatus.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Button.d.ts +5 -0
- package/dist/types/actions/SplitButton.d.ts +1 -1
- package/dist/types/actions/SpotlightSearch.d.ts +1 -1
- package/dist/types/actions/index.d.ts +1 -1
- package/dist/types/content/ZoomPanViewport.d.ts +33 -0
- package/dist/types/content/index.d.ts +2 -0
- package/dist/types/content/zoom-pan.d.ts +29 -0
- package/dist/types/feedback/prompts.d.ts +4 -3
- package/dist/types/intl/messages.d.ts +3 -0
- package/package.json +9 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["charts","createEffect","createMemo","createSignal","createUniqueId","onCleanup","onMount","Show","splitProps","untrack","isServer","useLocale","useUiMessages","createChartInspection","lineGapsSvg","DEFAULT_MAP_VIEWPORT","normalizeMapViewport","panMapViewport","zoomMapViewport","panStateTimelineViewport","renderStateTimelineSvg","stateTimelineDomain","stateTimelineHeight","zoomStateTimelineViewport","responsiveChartSvg","responsiveMapSvg","selectedChartSvg","chartRenderHeight","props","kind","rows","length","legend","Math","max","title","subtitle","data","renderChartSvg","width","height","mapViewport","timelineViewport","class","_class","style","_style","labels","_labels","interactive","_interactive","onSelect","_onSelect","selected","_selected","tooltip","_tooltip","cursor","_cursor","zoomFocus","_zoomFocus","opts","viewport","svg","inspect","maxGap","undefined","area","errorBand","Error","preservesAspectRatio","isEmpty","series","every","s","groups","row","intervals","Chart","drawingProps","messages","locale","containerRef","chartTooltipRef","lineAnchorRef","size","dimensions","getBoundingClientRect","initialMapViewport","setMapViewport","initialTimelineViewport","domain","setTimelineViewport","dragging","setDragging","chartTooltipId","timelineViewportLocallyChanged","drag","timelineDrag","pointerFrame","pendingPointer","interactiveMap","interactiveTimeline","interactiveLine","draggable","timelineFullDomain","updateTimelineViewport","update","mapDimensions","viewportElement","querySelector","matrix","getScreenCTM","box","viewBox","baseVal","hypot","a","b","c","d","rect","zoom","delta","closeChartTooltip","current","reset","handlePointerDown","event","inspection","down","button","target","closest","pointerId","x","clientX","currentTarget","setPointerCapture","y","clientY","flushPointerMove","cancelAnimationFrame","sample","start","activeTimelineDrag","handlePointerMove","move","requestAnimationFrame","stopDragging","hasPointerCapture","releasePointerCapture","handleWheel","ctrlKey","metaKey","preventDefault","deltaY","anchor","left","shiftKey","handleKeyDown","key","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","container","enabled","select","selection","format","fields","chartFields","Intl","NumberFormat","maximumFractionDigits","datum","label","seriesIndex","values","map","field","value","formatted","yes","no","close","svgMarkup","invalidate","selectDatum","outside","Node","contains","window","addEventListener","scroll","removeEventListener","chartStyle","_$createComponent","when","fallback","_el$11","_$getNextElement","_tmpl$5","_ref$4","_$use","_$insert","empty","noData","_$effect","_p$","_v$19","_v$20","e","_$className","t","_$style","children","_el$","_tmpl$4","_el$2","firstChild","_el$9","nextSibling","_el$0","_co$","_$getNextMarker","_el$1","_el$10","_co$2","$$keydown","$$focusout","_$addEventListener","focus","leave","click","$$pointerup","$$pointermove","$$pointerdown","_ref$","_el$3","_tmpl$","_ref$2","_el$4","_tmpl$2","_ref$3","_$setAttribute","_el$5","_tmpl$3","_el$6","_el$7","_el$8","$$click","_v$","zoomIn","_v$2","_v$3","zoomOut","_v$4","_v$5","resetMap","resetMapView","resetTimeline","resetTimelineView","_v$6","o","i","n","_$runHydrationEvents","_v$7","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","interactiveLineChart","interactiveChart","_v$12","_v$13","_v$14","_v$15","_v$16","_v$17","_v$18","h","r","l","_$setStyleProperty","u","w","_$setProperty","_$delegateEvents"],"sources":["content/Chart.tsx"],"sourcesContent":["import type { MapViewport } from \"@k2b/stdlib\";\nimport { charts } from \"@k2b/stdlib\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, Show, splitProps, untrack } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { type ChartDatumRef, type ChartSelection, type ChartTooltipFormatter, createChartInspection } from \"./chart-inspection\";\nimport { lineGapsSvg } from \"./chart-line-gaps\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from \"./chart-map-viewport\";\nimport {\n panStateTimelineViewport,\n renderStateTimelineSvg,\n type StateTimelineChartOptions,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n zoomStateTimelineViewport,\n} from \"./chart-state-timeline\";\nimport { responsiveChartSvg, responsiveMapSvg, selectedChartSvg } from \"./chart-svg\";\n\n/**\n * Chart — minimal Solid wrapper around `stdlib.charts`.\n *\n * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;\n * Solid's `innerHTML` is reactive, so any time a prop (signal, store\n * slice, derived value) changes, the SVG re-renders. No manual\n * subscription, no imperative DOM patching. Trade-off: every change\n * is a full SVG re-build, not a diff — fine for dashboard cadences\n * (poll, websocket, store updates). Don't use this for 60fps streaming.\n *\n * **Sizing.** The server and browser render the same logical viewBox. CSS\n * fits Cartesian plots to the container and preserves text/marker sizes;\n * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain\n * their aspect ratio. No measurement\n * or hydration redraw is needed. The caller sizes the wrapper, for example\n * `style={{ height: \"14rem\" }}`. State timelines derive their default height\n * from the row count and legend via `stateTimelineHeight()`.\n *\n * **Why so thin.** The props are a discriminated union over each\n * stdlib chart function — `kind: \"line\"` brings in exactly the params\n * `charts.line` expects, `kind: \"bar\"` brings in `charts.bar`'s, etc.\n * Options stay aligned with stdlib without renaming. Shared interactive\n * layers add bounded pan / zoom controls to maps and state timelines, plus\n * renderer-owned inspection, tooltips and optional selection for all chart kinds.\n * If stdlib gains a new option, it's automatically available at every\n * callsite.\n *\n * **Theming.** stdlib charts use `currentColor` for axes / ticks /\n * tick labels — set the wrapping element's `color` and everything\n * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS\n * custom properties; override on the parent for per-chart palettes.\n *\n * ```tsx\n * <Chart kind=\"line\" style={{ height: \"12rem\" }}\n * series={[{ data: points() }]}\n * yAxis={{ format: v => `€${v}k` }} />\n *\n * <Chart kind=\"donut\" style={{ height: \"12rem\" }} data={slices()} />\n *\n * <Chart kind=\"sparkline\" style={{ width: \"6rem\", height: \"1.5rem\" }} data={trend()} />\n *\n * <Chart kind=\"map\" style={{ height: \"16rem\" }} series={locations()} interactive />\n * ```\n */\n\n/** All chart kinds shipped by `stdlib.charts`. */\nexport type ChartKind = keyof typeof charts;\n\nexport type ChartLabels = Partial<{\n empty: string;\n series: string;\n interactiveMap: string;\n interactiveTimeline: string;\n interactiveLine: string;\n interactiveChart: string;\n zoomIn: string;\n zoomOut: string;\n resetMap: string;\n resetTimeline: string;\n}>;\n\n/**\n * Per-kind props: `kind` discriminator + the exact options that\n * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper\n * owns those — CSS fits a stable coordinate space to the box). Solid's\n * component model handles discriminated unions natively, so callsites\n * get full type safety.\n */\nexport type ChartProps = {\n [K in ChartKind]: {\n kind: K;\n class?: string;\n style?: JSX.CSSProperties | string;\n labels?: ChartLabels;\n interactive?: boolean;\n onSelect?: (selection: ChartSelection) => void;\n /** Controlled highlight; indices belong to this exact input snapshot. */\n selected?: ChartDatumRef | null;\n tooltip?: ChartTooltipFormatter;\n /** Optional shared X cursor for line charts. */\n cursor?: ChartCursor;\n } & (K extends \"map\"\n ? {\n /** Target when zooming in from the world view. Defaults to Europe (50, 10). */\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n }\n : {}) &\n (K extends \"line\" ? { /** Largest connected X distance; positive, finite, without area/errorBand fills. */ maxGap?: number } : {}) &\n (K extends \"stateTimeline\" ? StateTimelineChartOptions : Omit<Parameters<(typeof charts)[K]>[0], \"width\" | \"height\" | \"inspect\">);\n}[ChartKind];\n\n/** Pure renderer options: component layout, events and inspection are configured elsewhere. */\nexport type ChartRenderOptions = {\n [K in ChartKind]: Omit<\n Extract<ChartProps, { kind: K }>,\n \"class\" | \"style\" | \"labels\" | \"interactive\" | \"onSelect\" | \"selected\" | \"tooltip\" | \"cursor\"\n >;\n}[ChartKind];\n\n/** Keep the fixed 28-unit bar-gauge rows inside the shared SSR/browser coordinate space. */\nexport const chartRenderHeight = (props: ChartRenderOptions): number => {\n if (props.kind === \"stateTimeline\") return stateTimelineHeight(props.rows.length, props.legend !== false);\n if (props.kind === \"barGauge\") return Math.max(280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);\n return 280;\n};\n\n/**\n * Internal — strips wrapper-only keys from props and forwards the\n * rest (plus logical size) to `charts[kind]`. The `any` is the\n * price for dispatching one function call across 14 different option\n * types; an explicit per-kind switch would type it but balloon the\n * component for no runtime benefit.\n */\nexport const renderChartSvg = (\n props: ChartProps,\n width: number,\n height: number,\n mapViewport?: MapViewport,\n timelineViewport?: StateTimelineDomain,\n): string => {\n const {\n kind,\n class: _class,\n style: _style,\n labels: _labels,\n interactive: _interactive,\n onSelect: _onSelect,\n selected: _selected,\n tooltip: _tooltip,\n cursor: _cursor,\n zoomFocus: _zoomFocus,\n ...opts\n } = props as ChartProps & { interactive?: boolean; zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\"> };\n if (kind === \"stateTimeline\") {\n return responsiveChartSvg(\n renderStateTimelineSvg({\n ...(opts as StateTimelineChartOptions),\n width,\n height,\n viewport: timelineViewport,\n interactive: props.interactive,\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let svg = (charts[kind] as (o: unknown) => string)({\n ...(opts as any),\n ...(kind === \"map\" ? { viewport: DEFAULT_MAP_VIEWPORT } : {}),\n width,\n height,\n inspect: props.interactive === true || (props.kind === \"line\" && props.maxGap !== undefined),\n });\n if (props.kind === \"line\" && props.maxGap !== undefined) {\n if (props.area || props.errorBand) throw new Error(\"Chart maxGap does not support area or errorBand fills\");\n svg = lineGapsSvg(svg, props.maxGap, props);\n }\n if (props.kind === \"map\") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));\n return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);\n};\n\nconst preservesAspectRatio = (kind: ChartKind) => kind === \"map\" || kind === \"pie\" || kind === \"donut\" || kind === \"gauge\";\n\n/** Empty-data short-circuit. Kept per-kind because stdlib's payload\n * key differs (series vs data vs groups). We're conservative: only\n * block on truly empty inputs; partially-filled series get rendered\n * as-is and stdlib handles the gaps. */\nconst isEmpty = (props: ChartProps): boolean => {\n if (props.kind === \"line\" || props.kind === \"scatter\") {\n return !props.series?.length || props.series.every((s) => !s.data.length);\n }\n if (props.kind === \"bar\" || props.kind === \"donut\" || props.kind === \"pie\") {\n return !props.data?.length;\n }\n if (props.kind === \"histogram\" || props.kind === \"sparkline\") {\n return !props.data?.length;\n }\n if (props.kind === \"boxplot\") {\n return !props.groups?.length;\n }\n if (props.kind === \"stateTimeline\") {\n return !props.rows?.length || props.rows.every((row) => !row.intervals.length);\n }\n return false;\n};\n\nconst Chart = (props: ChartProps): JSX.Element => {\n const [, drawingProps] = splitProps(props, [\"selected\", \"onSelect\", \"tooltip\", \"cursor\"]);\n const messages = useUiMessages();\n const locale = useLocale();\n let containerRef: HTMLDivElement | undefined;\n let chartTooltipRef: HTMLSpanElement | undefined;\n let lineAnchorRef: HTMLSpanElement | undefined;\n // One deterministic coordinate space on the server and client. CSS fits the\n // SVG to its box; hydration must never replace it with measured geometry.\n const size = () => ({\n width: 480,\n height: chartRenderHeight(props),\n });\n const dimensions = () => containerRef?.getBoundingClientRect() ?? size();\n const initialMapViewport = props.kind === \"map\" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;\n const [mapViewport, setMapViewport] = createSignal<MapViewport>(initialMapViewport);\n const initialTimelineViewport =\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : ([0, 1] as StateTimelineDomain);\n const [timelineViewport, setTimelineViewport] = createSignal<StateTimelineDomain>(initialTimelineViewport);\n const [dragging, setDragging] = createSignal(false);\n const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;\n let timelineViewportLocallyChanged = false;\n let drag:\n | {\n pointerId: number;\n x: number;\n y: number;\n width: number;\n height: number;\n viewport: MapViewport;\n }\n | undefined;\n let timelineDrag:\n | {\n pointerId: number;\n x: number;\n width: number;\n viewport: StateTimelineDomain;\n }\n | undefined;\n let pointerFrame: number | undefined;\n let pendingPointer: { pointerId: number; clientX: number; clientY: number } | undefined;\n\n const interactiveMap = () => props.kind === \"map\" && props.interactive === true;\n const interactiveTimeline = () => props.kind === \"stateTimeline\" && props.interactive === true;\n const interactiveLine = () => props.kind === \"line\" && props.interactive === true;\n const interactive = () => props.interactive === true;\n const draggable = () => interactiveMap() || interactiveTimeline();\n const labels = () => props.labels ?? {};\n const timelineFullDomain = (): StateTimelineDomain =>\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];\n\n createEffect(() => {\n if (props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n });\n\n createEffect(() => {\n if (props.kind === \"stateTimeline\" && !timelineViewportLocallyChanged) {\n setTimelineViewport(timelineFullDomain());\n }\n });\n\n const updateTimelineViewport = (update: (current: StateTimelineDomain) => StateTimelineDomain) => {\n timelineViewportLocallyChanged = true;\n setTimelineViewport(update);\n };\n\n const mapDimensions = () => {\n const viewportElement = containerRef?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n const matrix = viewportElement?.getScreenCTM?.();\n const box = viewportElement?.viewBox?.baseVal;\n if (matrix && box?.width && box.height) {\n return { width: box.width * Math.hypot(matrix.a, matrix.b), height: box.height * Math.hypot(matrix.c, matrix.d) };\n }\n const rect = viewportElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n return { width: rect.width, height: rect.height };\n }\n return dimensions();\n };\n\n const zoom = (delta: number) => {\n closeChartTooltip();\n if (interactiveMap()) {\n setMapViewport((current) => zoomMapViewport(current, delta, props.kind === \"map\" ? props.zoomFocus : undefined));\n } else if (interactiveTimeline()) {\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), delta));\n }\n };\n\n const reset = () => {\n closeChartTooltip();\n if (interactiveMap() && props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n if (interactiveTimeline()) {\n timelineViewportLocallyChanged = false;\n setTimelineViewport(timelineFullDomain());\n }\n };\n\n const handlePointerDown: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.down(event);\n if (!draggable() || event.button !== 0 || (event.target as Element).closest(\"button, a\")) {\n return;\n }\n closeChartTooltip();\n if (interactiveTimeline()) {\n timelineDrag = {\n pointerId: event.pointerId,\n x: event.clientX,\n width: Math.max(1, event.currentTarget.getBoundingClientRect().width),\n viewport: timelineViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n return;\n }\n const dimensions = mapDimensions();\n drag = {\n pointerId: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n width: dimensions.width,\n height: dimensions.height,\n viewport: mapViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n };\n\n const flushPointerMove = () => {\n if (pointerFrame !== undefined) {\n cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n }\n const sample = pendingPointer;\n pendingPointer = undefined;\n if (!sample) return;\n const start = timelineDrag ?? drag;\n if (start && Math.hypot(sample.clientX - start.x, sample.clientY - (\"y\" in start ? start.y : sample.clientY)) <= 6) return;\n const activeTimelineDrag = timelineDrag;\n if (activeTimelineDrag?.pointerId === sample.pointerId) {\n updateTimelineViewport(() =>\n panStateTimelineViewport(\n activeTimelineDrag.viewport,\n timelineFullDomain(),\n sample.clientX - activeTimelineDrag.x,\n activeTimelineDrag.width,\n ),\n );\n return;\n }\n if (!drag || drag.pointerId !== sample.pointerId) return;\n setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));\n };\n\n const handlePointerMove: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.move(event);\n if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;\n pendingPointer = { pointerId: event.pointerId, clientX: event.clientX, clientY: event.clientY };\n if (pointerFrame !== undefined) return;\n pointerFrame = requestAnimationFrame(flushPointerMove);\n };\n\n const stopDragging: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();\n if (timelineDrag?.pointerId === event.pointerId) {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n timelineDrag = undefined;\n setDragging(false);\n return;\n }\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n drag = undefined;\n setDragging(false);\n };\n\n const handleWheel: JSX.EventHandlerUnion<HTMLDivElement, WheelEvent> = (event) => {\n if (interactiveMap() && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n zoom(event.deltaY < 0 ? 1 : -1);\n return;\n }\n if (!interactiveTimeline()) return;\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));\n } else if (event.shiftKey) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width),\n );\n }\n };\n\n const handleKeyDown: JSX.EventHandlerUnion<HTMLDivElement, KeyboardEvent> = (event) => {\n if (inspection.key(event)) return;\n if (!draggable() || event.target !== containerRef) return;\n if (event.key === \"+\" || event.key === \"=\") {\n event.preventDefault();\n zoom(1);\n return;\n }\n if (event.key === \"-\" || event.key === \"_\") {\n event.preventDefault();\n zoom(-1);\n return;\n }\n if (event.key === \"0\" || event.key === \"Home\") {\n event.preventDefault();\n reset();\n return;\n }\n if (interactiveTimeline() && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\")) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(\n current,\n timelineFullDomain(),\n event.key === \"ArrowLeft\" ? 80 : -80,\n event.currentTarget.getBoundingClientRect().width,\n ),\n );\n return;\n }\n const delta: readonly [number, number] | undefined = {\n ArrowLeft: [40, 0],\n ArrowRight: [-40, 0],\n ArrowUp: [0, 40],\n ArrowDown: [0, -40],\n }[event.key] as readonly [number, number] | undefined;\n if (!delta) return;\n event.preventDefault();\n const dimensions = mapDimensions();\n setMapViewport((current) => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));\n };\n\n const inspection = createChartInspection({\n container: () => containerRef,\n cursor: () => props.cursor,\n tooltip: () => chartTooltipRef,\n anchor: () => lineAnchorRef,\n kind: () => props.kind,\n enabled: interactive,\n select: (selection) => props.onSelect?.(selection),\n format: (selection) => {\n if (props.tooltip) return props.tooltip(selection);\n const fields = messages().chartFields;\n const format = new Intl.NumberFormat(locale(), { maximumFractionDigits: 6 });\n return {\n title:\n selection.datum.label ??\n (selection.datum.seriesIndex !== undefined\n ? `${labels().series ?? messages().series} ${selection.datum.seriesIndex + 1}`\n : undefined),\n rows: selection.datum.values.map((field) => ({\n label:\n selection.kind === \"line\" && field.key === \"y\"\n ? (selection.datum.label ?? labels().series ?? messages().series)\n : fields({ key: field.key }),\n value:\n field.formatted ??\n (field.key === \"upperInclusive\"\n ? field.value === \"true\"\n ? messages().yes\n : messages().no\n : typeof field.value === \"number\"\n ? `${format.format(field.value)}${field.key === \"percent\" ? \"%\" : \"\"}`\n : field.value),\n })),\n };\n },\n });\n const closeChartTooltip = () => inspection.close();\n const svgMarkup = createMemo(() =>\n renderChartSvg(\n drawingProps,\n size().width,\n size().height,\n interactiveMap() ? mapViewport() : undefined,\n interactiveTimeline() ? timelineViewport() : undefined,\n ),\n );\n createEffect(() => {\n svgMarkup();\n inspection.invalidate();\n untrack(() => inspection.selectDatum(props.selected));\n });\n\n createEffect(() => inspection.selectDatum(props.selected));\n\n onCleanup(() => {\n inspection.close();\n if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n pendingPointer = undefined;\n });\n\n onMount(() => {\n if (!containerRef) return;\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !containerRef?.contains(event.target)) closeChartTooltip();\n };\n window.addEventListener(\"pointerdown\", outside);\n const scroll = (event: Event) => {\n if (event.target instanceof Node && chartTooltipRef?.contains(event.target)) return;\n closeChartTooltip();\n };\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", closeChartTooltip);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", closeChartTooltip);\n });\n });\n\n const chartStyle = () =>\n props.style ??\n (props.kind === \"stateTimeline\"\n ? {\n height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`,\n }\n : undefined);\n\n return (\n <Show\n when={!isEmpty(props)}\n fallback={\n <div ref={containerRef} class={`k2b-chart k2b-chart__empty ${props.class ?? \"\"}`} style={chartStyle()}>\n {labels().empty ?? messages().noData}\n </div>\n }\n >\n {/* CSS fits the server-rendered SVG to the caller's box. Only changes\n to chart data/options rebuild the SVG; resizing does not. */}\n <div\n ref={containerRef}\n class={`k2b-chart ${props.class ?? \"\"}`}\n data-chart-kind={props.kind}\n data-drag={draggable() ? (dragging() ? \"active\" : \"idle\") : undefined}\n data-crosshair={!draggable() && interactiveLine() ? \"true\" : undefined}\n data-interactive={interactive() ? \"true\" : undefined}\n style={chartStyle()}\n role=\"group\"\n aria-label={\n interactiveMap()\n ? (labels().interactiveMap ?? messages().interactiveMap)\n : interactiveTimeline()\n ? (labels().interactiveTimeline ?? messages().interactiveTimeline)\n : interactiveLine()\n ? (labels().interactiveLine ?? messages().interactiveLineChart)\n : interactive()\n ? (labels().interactiveChart ?? messages().interactiveChart)\n : undefined\n }\n aria-description={interactive() ? messages().interactiveChart : undefined}\n tabIndex={interactive() ? 0 : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={stopDragging}\n onPointerCancel={stopDragging}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={closeChartTooltip}\n onWheel={handleWheel}\n onKeyDown={handleKeyDown}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={!preservesAspectRatio(props.kind) ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${size().width}px`,\n \"--k2b-chart-height\": `${size().height}px`,\n \"aspect-ratio\": `${size().width} / ${size().height}`,\n }}\n innerHTML={isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup()}\n />\n <Show when={interactive()}>\n <span ref={lineAnchorRef} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span\n id={chartTooltipId}\n ref={chartTooltipRef}\n role=\"tooltip\"\n popover=\"manual\"\n data-instant=\"true\"\n class=\"k2b-tooltip k2b-chart__tooltip\"\n />\n </Show>\n <Show when={draggable()}>\n <div class=\"k2b-chart__controls\">\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomIn ?? messages().zoomIn}\n title={`${labels().zoomIn ?? messages().zoomIn} (+)`}\n onClick={() => zoom(1)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomOut ?? messages().zoomOut}\n title={`${labels().zoomOut ?? messages().zoomOut} (-)`}\n onClick={() => zoom(-1)}\n >\n <i class=\"ti ti-minus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={\n interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)\n }\n title={`${interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)} (0)`}\n onClick={reset}\n >\n <i class=\"ti ti-focus-centered\" aria-hidden=\"true\" />\n </button>\n </div>\n </Show>\n </div>\n </Show>\n );\n};\n\nexport default Chart;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/Chart.tsx"],"sourcesContent":["import type { MapViewport } from \"@k2b/stdlib\";\nimport { charts } from \"@k2b/stdlib\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, Show, splitProps, untrack } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { type ChartDatumRef, type ChartSelection, type ChartTooltipFormatter, createChartInspection } from \"./chart-inspection\";\nimport { lineGapsSvg } from \"./chart-line-gaps\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from \"./chart-map-viewport\";\nimport {\n panStateTimelineViewport,\n renderStateTimelineSvg,\n type StateTimelineChartOptions,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n zoomStateTimelineViewport,\n} from \"./chart-state-timeline\";\nimport { responsiveChartSvg, responsiveMapSvg, selectedChartSvg } from \"./chart-svg\";\n\n/**\n * Chart — minimal Solid wrapper around `stdlib.charts`.\n *\n * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;\n * Solid's `innerHTML` is reactive, so any time a prop (signal, store\n * slice, derived value) changes, the SVG re-renders. No manual\n * subscription, no imperative DOM patching. Trade-off: every change\n * is a full SVG re-build, not a diff — fine for dashboard cadences\n * (poll, websocket, store updates). Don't use this for 60fps streaming.\n *\n * **Sizing.** The server and browser render the same logical viewBox. CSS\n * fits Cartesian plots to the container and preserves text/marker sizes;\n * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain\n * their aspect ratio. No measurement\n * or hydration redraw is needed. The caller sizes the wrapper, for example\n * `style={{ height: \"14rem\" }}`. State timelines derive their default height\n * from the row count and legend via `stateTimelineHeight()`.\n *\n * **Why so thin.** The props are a discriminated union over each\n * stdlib chart function — `kind: \"line\"` brings in exactly the params\n * `charts.line` expects, `kind: \"bar\"` brings in `charts.bar`'s, etc.\n * Options stay aligned with stdlib without renaming. Shared interactive\n * layers add bounded pan / zoom controls to maps and state timelines, plus\n * renderer-owned inspection, tooltips and optional selection for all chart kinds.\n * If stdlib gains a new option, it's automatically available at every\n * callsite.\n *\n * **Theming.** stdlib charts use `currentColor` for axes / ticks /\n * tick labels — set the wrapping element's `color` and everything\n * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS\n * custom properties; override on the parent for per-chart palettes.\n *\n * ```tsx\n * <Chart kind=\"line\" style={{ height: \"12rem\" }}\n * series={[{ data: points() }]}\n * yAxis={{ format: v => `€${v}k` }} />\n *\n * <Chart kind=\"donut\" style={{ height: \"12rem\" }} data={slices()} />\n *\n * <Chart kind=\"sparkline\" style={{ width: \"6rem\", height: \"1.5rem\" }} data={trend()} />\n *\n * <Chart kind=\"map\" style={{ height: \"16rem\" }} series={locations()} interactive />\n * ```\n */\n\n/** All chart kinds shipped by `stdlib.charts`. */\nexport type ChartKind = keyof typeof charts;\n\nexport type ChartLabels = Partial<{\n empty: string;\n series: string;\n interactiveMap: string;\n interactiveTimeline: string;\n interactiveLine: string;\n interactiveChart: string;\n zoomIn: string;\n zoomOut: string;\n resetMap: string;\n resetTimeline: string;\n}>;\n\n/**\n * Per-kind props: `kind` discriminator + the exact options that\n * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper\n * owns those — CSS fits a stable coordinate space to the box). Solid's\n * component model handles discriminated unions natively, so callsites\n * get full type safety.\n */\nexport type ChartProps = {\n [K in ChartKind]: {\n kind: K;\n class?: string;\n style?: JSX.CSSProperties | string;\n labels?: ChartLabels;\n interactive?: boolean;\n onSelect?: (selection: ChartSelection) => void;\n /** Controlled highlight; indices belong to this exact input snapshot. */\n selected?: ChartDatumRef | null;\n tooltip?: ChartTooltipFormatter;\n /** Optional shared X cursor for line charts. */\n cursor?: ChartCursor;\n } & (K extends \"map\"\n ? {\n /** Target when zooming in from the world view. Defaults to Europe (50, 10). */\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n }\n : {}) &\n (K extends \"line\" ? { /** Largest connected X distance; positive, finite, without area/errorBand fills. */ maxGap?: number } : {}) &\n (K extends \"stateTimeline\" ? StateTimelineChartOptions : Omit<Parameters<(typeof charts)[K]>[0], \"width\" | \"height\" | \"inspect\">);\n}[ChartKind];\n\n/** Pure renderer options: component layout, events and inspection are configured elsewhere. */\nexport type ChartRenderOptions = {\n [K in ChartKind]: Omit<\n Extract<ChartProps, { kind: K }>,\n \"class\" | \"style\" | \"labels\" | \"interactive\" | \"onSelect\" | \"selected\" | \"tooltip\" | \"cursor\"\n >;\n}[ChartKind];\n\n/** Keep the fixed 28-unit bar-gauge rows inside the shared SSR/browser coordinate space. */\nexport const chartRenderHeight = (props: ChartRenderOptions): number => {\n if (props.kind === \"stateTimeline\") return stateTimelineHeight(props.rows.length, props.legend !== false);\n if (props.kind === \"barGauge\") return Math.max(280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);\n return 280;\n};\n\n/**\n * Internal — strips wrapper-only keys from props and forwards the\n * rest (plus logical size) to `charts[kind]`. The `any` is the\n * price for dispatching one function call across 14 different option\n * types; an explicit per-kind switch would type it but balloon the\n * component for no runtime benefit.\n */\nexport const renderChartSvg = (\n props: ChartProps,\n width: number,\n height: number,\n mapViewport?: MapViewport,\n timelineViewport?: StateTimelineDomain,\n): string => {\n const {\n kind,\n class: _class,\n style: _style,\n labels: _labels,\n interactive: _interactive,\n onSelect: _onSelect,\n selected: _selected,\n tooltip: _tooltip,\n cursor: _cursor,\n zoomFocus: _zoomFocus,\n ...opts\n } = props as ChartProps & { interactive?: boolean; zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\"> };\n if (kind === \"stateTimeline\") {\n return responsiveChartSvg(\n renderStateTimelineSvg({\n ...(opts as StateTimelineChartOptions),\n width,\n height,\n viewport: timelineViewport,\n interactive: props.interactive,\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let svg = (charts[kind] as (o: unknown) => string)({\n ...(opts as any),\n ...(kind === \"map\" ? { viewport: DEFAULT_MAP_VIEWPORT } : {}),\n width,\n height,\n inspect: props.interactive === true || (props.kind === \"line\" && props.maxGap !== undefined),\n });\n if (props.kind === \"line\" && props.maxGap !== undefined) {\n if (props.area || props.errorBand) throw new Error(\"Chart maxGap does not support area or errorBand fills\");\n svg = lineGapsSvg(svg, props.maxGap, props);\n }\n if (props.kind === \"map\") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));\n return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);\n};\n\nconst preservesAspectRatio = (kind: ChartKind) => kind === \"map\" || kind === \"pie\" || kind === \"donut\" || kind === \"gauge\";\n\n/** Empty-data short-circuit. Kept per-kind because stdlib's payload\n * key differs (series vs data vs groups). We're conservative: only\n * block on truly empty inputs; partially-filled series get rendered\n * as-is and stdlib handles the gaps. */\nconst isEmpty = (props: ChartProps): boolean => {\n if (props.kind === \"line\" || props.kind === \"scatter\") {\n return !props.series?.length || props.series.every((s) => !s.data.length);\n }\n if (props.kind === \"bar\" || props.kind === \"donut\" || props.kind === \"pie\") {\n return !props.data?.length;\n }\n if (props.kind === \"histogram\" || props.kind === \"sparkline\") {\n return !props.data?.length;\n }\n if (props.kind === \"boxplot\") {\n return !props.groups?.length;\n }\n if (props.kind === \"stateTimeline\") {\n return !props.rows?.length || props.rows.every((row) => !row.intervals.length);\n }\n return false;\n};\n\nconst Chart = (props: ChartProps): JSX.Element => {\n const [, drawingProps] = splitProps(props, [\"selected\", \"onSelect\", \"tooltip\", \"cursor\"]);\n const messages = useUiMessages();\n const locale = useLocale();\n let containerRef: HTMLDivElement | undefined;\n let chartTooltipRef: HTMLSpanElement | undefined;\n let lineAnchorRef: HTMLSpanElement | undefined;\n // One deterministic coordinate space on the server and client. CSS fits the\n // SVG to its box; hydration must never replace it with measured geometry.\n const size = () => ({\n width: 480,\n height: chartRenderHeight(props),\n });\n const dimensions = () => containerRef?.getBoundingClientRect() ?? size();\n const initialMapViewport = props.kind === \"map\" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;\n const [mapViewport, setMapViewport] = createSignal<MapViewport>(initialMapViewport);\n const initialTimelineViewport =\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : ([0, 1] as StateTimelineDomain);\n const [timelineViewport, setTimelineViewport] = createSignal<StateTimelineDomain>(initialTimelineViewport);\n const [dragging, setDragging] = createSignal(false);\n const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;\n let timelineViewportLocallyChanged = false;\n let drag:\n | {\n pointerId: number;\n x: number;\n y: number;\n width: number;\n height: number;\n viewport: MapViewport;\n }\n | undefined;\n let timelineDrag:\n | {\n pointerId: number;\n x: number;\n width: number;\n viewport: StateTimelineDomain;\n }\n | undefined;\n let pointerFrame: number | undefined;\n let pendingPointer: { pointerId: number; clientX: number; clientY: number } | undefined;\n\n const interactiveMap = () => props.kind === \"map\" && props.interactive === true;\n const interactiveTimeline = () => props.kind === \"stateTimeline\" && props.interactive === true;\n const interactiveLine = () => props.kind === \"line\" && props.interactive === true;\n const interactive = () => props.interactive === true;\n const draggable = () => interactiveMap() || interactiveTimeline();\n const labels = () => props.labels ?? {};\n const timelineFullDomain = (): StateTimelineDomain =>\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];\n\n createEffect(() => {\n if (props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n });\n\n createEffect(() => {\n if (props.kind === \"stateTimeline\" && !timelineViewportLocallyChanged) {\n setTimelineViewport(timelineFullDomain());\n }\n });\n\n const updateTimelineViewport = (update: (current: StateTimelineDomain) => StateTimelineDomain) => {\n timelineViewportLocallyChanged = true;\n setTimelineViewport(update);\n };\n\n const mapDimensions = () => {\n const viewportElement = containerRef?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n const matrix = viewportElement?.getScreenCTM?.();\n const box = viewportElement?.viewBox?.baseVal;\n if (matrix && box?.width && box.height) {\n return { width: box.width * Math.hypot(matrix.a, matrix.b), height: box.height * Math.hypot(matrix.c, matrix.d) };\n }\n const rect = viewportElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n return { width: rect.width, height: rect.height };\n }\n return dimensions();\n };\n\n const zoom = (delta: number) => {\n closeChartTooltip();\n if (interactiveMap()) {\n setMapViewport((current) => zoomMapViewport(current, delta, props.kind === \"map\" ? props.zoomFocus : undefined));\n } else if (interactiveTimeline()) {\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), delta));\n }\n };\n\n const reset = () => {\n closeChartTooltip();\n if (interactiveMap() && props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n if (interactiveTimeline()) {\n timelineViewportLocallyChanged = false;\n setTimelineViewport(timelineFullDomain());\n }\n };\n\n const handlePointerDown: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.down(event);\n if (!draggable() || event.button !== 0 || (event.target as Element).closest(\"button, a\")) {\n return;\n }\n closeChartTooltip();\n if (interactiveTimeline()) {\n timelineDrag = {\n pointerId: event.pointerId,\n x: event.clientX,\n width: Math.max(1, event.currentTarget.getBoundingClientRect().width),\n viewport: timelineViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n return;\n }\n const dimensions = mapDimensions();\n drag = {\n pointerId: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n width: dimensions.width,\n height: dimensions.height,\n viewport: mapViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n };\n\n const flushPointerMove = () => {\n if (pointerFrame !== undefined) {\n cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n }\n const sample = pendingPointer;\n pendingPointer = undefined;\n if (!sample) return;\n const start = timelineDrag ?? drag;\n if (start && Math.hypot(sample.clientX - start.x, sample.clientY - (\"y\" in start ? start.y : sample.clientY)) <= 6) return;\n const activeTimelineDrag = timelineDrag;\n if (activeTimelineDrag?.pointerId === sample.pointerId) {\n updateTimelineViewport(() =>\n panStateTimelineViewport(\n activeTimelineDrag.viewport,\n timelineFullDomain(),\n sample.clientX - activeTimelineDrag.x,\n activeTimelineDrag.width,\n ),\n );\n return;\n }\n if (!drag || drag.pointerId !== sample.pointerId) return;\n setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));\n };\n\n const handlePointerMove: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.move(event);\n if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;\n pendingPointer = { pointerId: event.pointerId, clientX: event.clientX, clientY: event.clientY };\n if (pointerFrame !== undefined) return;\n pointerFrame = requestAnimationFrame(flushPointerMove);\n };\n\n const stopDragging: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();\n if (timelineDrag?.pointerId === event.pointerId) {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n timelineDrag = undefined;\n setDragging(false);\n return;\n }\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n drag = undefined;\n setDragging(false);\n };\n\n const handleWheel: JSX.EventHandlerUnion<HTMLDivElement, WheelEvent> = (event) => {\n if (interactiveMap() && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n zoom(event.deltaY < 0 ? 1 : -1);\n return;\n }\n if (!interactiveTimeline()) return;\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));\n } else if (event.shiftKey) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width),\n );\n }\n };\n\n const handleKeyDown: JSX.EventHandlerUnion<HTMLDivElement, KeyboardEvent> = (event) => {\n if (inspection.key(event)) return;\n if (!draggable() || event.target !== containerRef) return;\n if (event.key === \"+\" || event.key === \"=\") {\n event.preventDefault();\n zoom(1);\n return;\n }\n if (event.key === \"-\" || event.key === \"_\") {\n event.preventDefault();\n zoom(-1);\n return;\n }\n if (event.key === \"0\" || event.key === \"Home\") {\n event.preventDefault();\n reset();\n return;\n }\n if (interactiveTimeline() && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\")) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(\n current,\n timelineFullDomain(),\n event.key === \"ArrowLeft\" ? 80 : -80,\n event.currentTarget.getBoundingClientRect().width,\n ),\n );\n return;\n }\n const delta: readonly [number, number] | undefined = {\n ArrowLeft: [40, 0],\n ArrowRight: [-40, 0],\n ArrowUp: [0, 40],\n ArrowDown: [0, -40],\n }[event.key] as readonly [number, number] | undefined;\n if (!delta) return;\n event.preventDefault();\n const dimensions = mapDimensions();\n setMapViewport((current) => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));\n };\n\n const inspection = createChartInspection({\n container: () => containerRef,\n cursor: () => props.cursor,\n tooltip: () => chartTooltipRef,\n anchor: () => lineAnchorRef,\n kind: () => props.kind,\n enabled: interactive,\n select: (selection) => props.onSelect?.(selection),\n format: (selection) => {\n if (props.tooltip) return props.tooltip(selection);\n const fields = messages().chartFields;\n const format = new Intl.NumberFormat(locale(), { maximumFractionDigits: 6 });\n return {\n title:\n selection.datum.label ??\n (selection.datum.seriesIndex !== undefined\n ? `${labels().series ?? messages().series} ${selection.datum.seriesIndex + 1}`\n : undefined),\n rows: selection.datum.values.map((field) => ({\n label:\n selection.kind === \"line\" && field.key === \"y\"\n ? (selection.datum.label ?? labels().series ?? messages().series)\n : fields({ key: field.key }),\n value:\n field.formatted ??\n (field.key === \"upperInclusive\"\n ? field.value === \"true\"\n ? messages().yes\n : messages().no\n : typeof field.value === \"number\"\n ? `${format.format(field.value)}${field.key === \"percent\" ? \"%\" : \"\"}`\n : field.value),\n })),\n };\n },\n });\n const closeChartTooltip = () => inspection.close();\n const svgMarkup = createMemo(() =>\n renderChartSvg(\n drawingProps,\n size().width,\n size().height,\n interactiveMap() ? mapViewport() : undefined,\n interactiveTimeline() ? timelineViewport() : undefined,\n ),\n );\n createEffect(() => {\n svgMarkup();\n inspection.invalidate();\n untrack(() => inspection.selectDatum(props.selected));\n });\n\n createEffect(() => inspection.selectDatum(props.selected));\n\n onCleanup(() => {\n inspection.close();\n if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n pendingPointer = undefined;\n });\n\n onMount(() => {\n if (!containerRef) return;\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !containerRef?.contains(event.target)) closeChartTooltip();\n };\n window.addEventListener(\"pointerdown\", outside);\n const scroll = (event: Event) => {\n if (event.target instanceof Node && chartTooltipRef?.contains(event.target)) return;\n closeChartTooltip();\n };\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", closeChartTooltip);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", closeChartTooltip);\n });\n });\n\n const chartStyle = () =>\n props.style ??\n (props.kind === \"stateTimeline\"\n ? {\n height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`,\n }\n : undefined);\n\n return (\n <Show\n when={!isEmpty(props)}\n fallback={\n <div ref={containerRef} class={`k2b-chart k2b-chart__empty ${props.class ?? \"\"}`} style={chartStyle()}>\n {labels().empty ?? messages().noData}\n </div>\n }\n >\n {/* CSS fits the server-rendered SVG to the caller's box. Only changes\n to chart data/options rebuild the SVG; resizing does not. */}\n <div\n ref={containerRef}\n class={`k2b-chart ${props.class ?? \"\"}`}\n data-chart-kind={props.kind}\n data-drag={draggable() ? (dragging() ? \"active\" : \"idle\") : undefined}\n data-crosshair={!draggable() && interactiveLine() ? \"true\" : undefined}\n data-interactive={interactive() ? \"true\" : undefined}\n style={chartStyle()}\n role=\"group\"\n aria-label={\n interactiveMap()\n ? (labels().interactiveMap ?? messages().interactiveMap)\n : interactiveTimeline()\n ? (labels().interactiveTimeline ?? messages().interactiveTimeline)\n : interactiveLine()\n ? (labels().interactiveLine ?? messages().interactiveLineChart)\n : interactive()\n ? (labels().interactiveChart ?? messages().interactiveChart)\n : undefined\n }\n aria-description={interactive() ? messages().interactiveChart : undefined}\n tabIndex={interactive() ? 0 : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={stopDragging}\n onPointerCancel={stopDragging}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={closeChartTooltip}\n onWheel={handleWheel}\n onKeyDown={handleKeyDown}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={!preservesAspectRatio(props.kind) ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${size().width}px`,\n \"--k2b-chart-height\": `${size().height}px`,\n \"aspect-ratio\": `${size().width} / ${size().height}`,\n }}\n innerHTML={isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup()}\n />\n <Show when={interactive()}>\n <span ref={lineAnchorRef} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span\n id={chartTooltipId}\n ref={chartTooltipRef}\n role=\"tooltip\"\n popover=\"manual\"\n data-instant=\"true\"\n class=\"k2b-tooltip k2b-chart__tooltip\"\n />\n </Show>\n <Show when={draggable()}>\n <div class=\"k2b-chart__controls\">\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomIn ?? messages().zoomIn}\n title={`${labels().zoomIn ?? messages().zoomIn} (+)`}\n onClick={() => zoom(1)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomOut ?? messages().zoomOut}\n title={`${labels().zoomOut ?? messages().zoomOut} (-)`}\n onClick={() => zoom(-1)}\n >\n <i class=\"ti ti-minus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={\n interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)\n }\n title={`${interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)} (0)`}\n onClick={reset}\n >\n <i class=\"ti ti-focus-centered\" aria-hidden=\"true\" />\n </button>\n </div>\n </Show>\n </div>\n </Show>\n );\n};\n\nexport default Chart;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createEffect","createMemo","createSignal","createUniqueId","Show","Button","CopyButton","SelectChip","useLocale","useUiMessages","DescriptionList","Paper","ChartSnapshotView","validateChartExplorerData","DataTable","tsvCell","value","test","replaceAll","ChartExplorer","props","messages","locale","id","data","copyFailed","setCopyFailed","localSelection","setLocalSelection","localView","setLocalView","defaultView","localSort","setLocalSort","defaultSort","view","sort","undefined","setView","onViewChange","setSort","onSortChange","rowsByKey","Map","rows","map","row","key","rawSelected","selectedKey","selected","has","selectedRow","get","select","onSelectedKeyChange","columns","length","some","column","Set","size","Error","result","order","find","c","sortValue","collator","Intl","Collator","numeric","a","b","av","bv","comparison","compare","String","direction","copyText","label","join","_el$","_$getNextElement","_tmpl$4","_el$2","firstChild","_el$3","_el$4","_el$6","nextSibling","_el$7","_co$","_$getNextMarker","_el$8","_el$9","_el$0","_co$2","_el$1","_el$10","_co$3","_el$14","_el$15","_co$4","_el$12","_el$16","_el$17","_co$5","_$setAttribute","_$insert","title","_$createComponent","when","description","children","_el$5","_tmpl$","text","chartCopyData","iconOnly","variant","disabled","onCopyError","onCopied","onValueChange","aria-label","chartView","options","chartDiagram","chartData","_el$11","_tmpl$2","chartCopyFailed","fallback","_el$18","_tmpl$5","noData","header","align","sortable","Boolean","ariaLabelledBy","getRowId","selectedRowId","fillHeight","surface","onRowClick","renderCell","col","render","custom","cell","onClick","renderHeader","_$memo","_el$19","_tmpl$6","_c$","cursor","snapshot","chart","onSelect","style","height","renderDetails","_el$13","_tmpl$3","_el$20","_tmpl$8","_el$21","_el$23","_el$24","_co$6","chartSelectedDatum","clearSelection","_tmpl$7","items","term","_$effect","_p$","_v$","class","_v$2","e","_$className","t","_$setStyleProperty"],"sources":["content/ChartExplorer.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { CopyButton } from \"../actions/CopyButton\";\nimport { SelectChip } from \"../inputs/SelectChip\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { DescriptionList } from \"../surfaces/DescriptionList\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { ChartSnapshotView } from \"./ChartSnapshotView\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { type ChartExplorerData, type ChartExplorerRow, validateChartExplorerData } from \"./chart-explorer\";\nimport DataTable, { type DataTableSort } from \"./DataTable\";\n\nexport type ChartExplorerColumn<T> = {\n id: string;\n label: string;\n value: (row: T) => string;\n /** Optional table cell presentation; value remains the plain text used for copy/details. */\n render?: (row: T) => JSX.Element;\n /** Explicit comparable value. Omit to leave the column unsortable. */\n sortValue?: (row: T) => string | number | null;\n align?: \"left\" | \"center\" | \"right\";\n};\nexport type ChartExplorerProps<T extends ChartExplorerRow> = {\n cursor?: ChartCursor;\n title: string;\n description?: JSX.Element;\n data: ChartExplorerData<T>;\n columns: readonly ChartExplorerColumn<T>[];\n view?: \"chart\" | \"table\";\n defaultView?: \"chart\" | \"table\";\n onViewChange?: (view: \"chart\" | \"table\") => void;\n sort?: DataTableSort | null;\n defaultSort?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n selectedKey?: string | null;\n onSelectedKeyChange?: (key: string | null) => void;\n /** false hides the complete local detail area for a shared selection panel. */\n renderDetails?: false | ((row: T) => JSX.Element);\n height?: string;\n class?: string;\n};\n\nconst tsvCell = (value: string) => (/[\\t\\r\\n\"]/.test(value) ? `\"${value.replaceAll('\"', '\"\"')}\"` : value);\n\nexport function ChartExplorer<T extends ChartExplorerRow>(props: ChartExplorerProps<T>) {\n const messages = useUiMessages();\n const locale = useLocale();\n const id = `k2b-chart-explorer-${createUniqueId()}`;\n const data = () => props.data;\n const [copyFailed, setCopyFailed] = createSignal(false);\n const [localSelection, setLocalSelection] = createSignal<string | null>(null);\n const [localView, setLocalView] = createSignal(props.defaultView ?? \"chart\");\n const [localSort, setLocalSort] = createSignal<DataTableSort | null>(props.defaultSort ?? null);\n const view = () => props.view ?? localView();\n const sort = () => (props.sort === undefined ? localSort() : props.sort);\n const setView = (value: \"chart\" | \"table\") => {\n if (props.view === undefined) setLocalView(value);\n props.onViewChange?.(value);\n };\n const setSort = (value: DataTableSort | null) => {\n if (props.sort === undefined) setLocalSort(value);\n props.onSortChange?.(value);\n };\n const rowsByKey = createMemo(() => new Map(data().rows.map((row) => [row.key, row])));\n const rawSelected = () => (props.selectedKey !== undefined ? props.selectedKey : localSelection());\n const selected = () => (rowsByKey().has(rawSelected() ?? \"\") ? rawSelected() : null);\n const selectedRow = () => rowsByKey().get(selected() ?? \"\");\n const select = (key: string | null) => {\n if (key !== null && !rowsByKey().has(key)) return;\n setLocalSelection(key);\n props.onSelectedKeyChange?.(key);\n };\n if (\n !props.columns.length ||\n props.columns.some((column) => !column.id) ||\n new Set(props.columns.map((column) => column.id)).size !== props.columns.length\n ) {\n throw new Error(\"Chart columns require unique nonempty IDs and at least one column\");\n }\n validateChartExplorerData(data());\n createEffect(() => validateChartExplorerData(data()));\n createEffect(() => {\n if (props.selectedKey === undefined && rawSelected() !== null && selected() === null) select(null);\n });\n const rows = createMemo(() => {\n const result = [...data().rows];\n const order = sort();\n const column = props.columns.find((c) => c.id === order?.key);\n const value = column?.sortValue;\n if (!order || !value) return result;\n const collator = new Intl.Collator(locale(), { numeric: true });\n return result.sort((a, b) => {\n const av = value(a),\n bv = value(b);\n if (av === null) return bv === null ? 0 : 1;\n if (bv === null) return -1;\n const comparison = typeof av === \"number\" && typeof bv === \"number\" ? av - bv : collator.compare(String(av), String(bv));\n return order.direction === \"asc\" ? comparison : -comparison;\n });\n });\n const copyText = () =>\n [\n props.columns.map((c) => tsvCell(c.label)).join(\"\\t\"),\n ...rows().map((row) => props.columns.map((c) => tsvCell(c.value(row))).join(\"\\t\")),\n ].join(\"\\n\");\n return (\n <section class={`k2b-chart-explorer ${props.class ?? \"\"}`} aria-labelledby={id}>\n <header class=\"k2b-chart-explorer__header\">\n <div>\n <h3 id={id}>{props.title}</h3>\n <Show when={props.description}>\n <div>{props.description}</div>\n </Show>\n </div>\n <div class=\"k2b-chart-explorer__actions\">\n <CopyButton\n text={copyText()}\n label={messages().chartCopyData}\n iconOnly\n size=\"sm\"\n variant=\"ghost\"\n disabled={!rows().length}\n onCopyError={() => setCopyFailed(true)}\n onCopied={() => setCopyFailed(false)}\n />\n <SelectChip<\"chart\" | \"table\">\n value={view()}\n onValueChange={setView}\n aria-label={messages().chartView}\n options={[\n { value: \"chart\", label: messages().chartDiagram },\n { value: \"table\", label: messages().chartData },\n ]}\n />\n </div>\n </header>\n <Show when={copyFailed()}>\n <span role=\"alert\">{messages().chartCopyFailed}</span>\n </Show>\n <div class=\"k2b-chart-explorer__viewport\" style={{ height: props.height ?? \"18rem\" }}>\n <Show when={data().rows.length > 0} fallback={<div class=\"k2b-chart__empty\">{messages().noData}</div>}>\n <Show\n when={view() === \"chart\"}\n fallback={\n <DataTable\n rows={rows()}\n columns={props.columns.map((column) => ({\n id: column.id,\n header: column.label,\n value: column.value,\n align: column.align,\n sortable: Boolean(column.sortValue),\n }))}\n ariaLabelledBy={id}\n getRowId={(row) => row.key}\n selectedRowId={selected()}\n sort={sort()}\n fillHeight\n surface=\"paper\"\n onRowClick={(row) => select(row.key)}\n renderCell={({ row, col, value, render }) => {\n const custom = props.columns.find((column) => column.id === col.id)?.render;\n const cell = () => (custom ? custom(row) : render(value));\n return col.id === props.columns[0]?.id ? (\n <Button variant=\"text\" size=\"sm\" onClick={() => select(row.key)}>\n {cell()}\n </Button>\n ) : (\n cell()\n );\n }}\n renderHeader={({ col, render }) =>\n col.sortable ? (\n <Button\n variant=\"text\"\n size=\"sm\"\n onClick={() =>\n setSort({\n key: col.id,\n direction: sort()?.key === col.id && sort()?.direction === \"asc\" ? \"desc\" : \"asc\",\n })\n }\n >\n {props.columns.find((column) => column.id === col.id)?.label}{\" \"}\n <span class=\"k2b-chart-explorer__sort-icon\" aria-hidden=\"true\">\n {sort()?.key === col.id ? (sort()?.direction === \"asc\" ? \"↑\" : \"↓\") : \"↕\"}\n </span>\n </Button>\n ) : (\n render()\n )\n }\n />\n }\n >\n <ChartSnapshotView\n cursor={props.cursor}\n snapshot={data().chart}\n selectedKey={selected()}\n onSelect={select}\n style={{ height: \"100%\" }}\n />\n </Show>\n </Show>\n </div>\n <Show when={props.renderDetails !== false}>\n <div class=\"k2b-chart-explorer__details\" aria-live=\"polite\">\n <Show when={selectedRow()}>\n {(row) => (\n <Paper class=\"k2b-chart-explorer__detail-paper\">\n <div class=\"k2b-chart-explorer__detail-header\">\n <span>{messages().chartSelectedDatum}</span>\n <Button\n variant=\"text\"\n size=\"sm\"\n aria-label={messages().clearSelection}\n title={messages().clearSelection}\n onClick={() => select(null)}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n </div>\n {props.renderDetails ? (\n props.renderDetails(row())\n ) : (\n <DescriptionList\n columns={3}\n size=\"sm\"\n items={props.columns.map((column) => ({\n term: column.label,\n description: column.value(row()),\n }))}\n />\n )}\n </Paper>\n )}\n </Show>\n </div>\n </Show>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/ChartExplorer.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { CopyButton } from \"../actions/CopyButton\";\nimport { SelectChip } from \"../inputs/SelectChip\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { DescriptionList } from \"../surfaces/DescriptionList\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { ChartSnapshotView } from \"./ChartSnapshotView\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { type ChartExplorerData, type ChartExplorerRow, validateChartExplorerData } from \"./chart-explorer\";\nimport DataTable, { type DataTableSort } from \"./DataTable\";\n\nexport type ChartExplorerColumn<T> = {\n id: string;\n label: string;\n value: (row: T) => string;\n /** Optional table cell presentation; value remains the plain text used for copy/details. */\n render?: (row: T) => JSX.Element;\n /** Explicit comparable value. Omit to leave the column unsortable. */\n sortValue?: (row: T) => string | number | null;\n align?: \"left\" | \"center\" | \"right\";\n};\nexport type ChartExplorerProps<T extends ChartExplorerRow> = {\n cursor?: ChartCursor;\n title: string;\n description?: JSX.Element;\n data: ChartExplorerData<T>;\n columns: readonly ChartExplorerColumn<T>[];\n view?: \"chart\" | \"table\";\n defaultView?: \"chart\" | \"table\";\n onViewChange?: (view: \"chart\" | \"table\") => void;\n sort?: DataTableSort | null;\n defaultSort?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n selectedKey?: string | null;\n onSelectedKeyChange?: (key: string | null) => void;\n /** false hides the complete local detail area for a shared selection panel. */\n renderDetails?: false | ((row: T) => JSX.Element);\n height?: string;\n class?: string;\n};\n\nconst tsvCell = (value: string) => (/[\\t\\r\\n\"]/.test(value) ? `\"${value.replaceAll('\"', '\"\"')}\"` : value);\n\nexport function ChartExplorer<T extends ChartExplorerRow>(props: ChartExplorerProps<T>) {\n const messages = useUiMessages();\n const locale = useLocale();\n const id = `k2b-chart-explorer-${createUniqueId()}`;\n const data = () => props.data;\n const [copyFailed, setCopyFailed] = createSignal(false);\n const [localSelection, setLocalSelection] = createSignal<string | null>(null);\n const [localView, setLocalView] = createSignal(props.defaultView ?? \"chart\");\n const [localSort, setLocalSort] = createSignal<DataTableSort | null>(props.defaultSort ?? null);\n const view = () => props.view ?? localView();\n const sort = () => (props.sort === undefined ? localSort() : props.sort);\n const setView = (value: \"chart\" | \"table\") => {\n if (props.view === undefined) setLocalView(value);\n props.onViewChange?.(value);\n };\n const setSort = (value: DataTableSort | null) => {\n if (props.sort === undefined) setLocalSort(value);\n props.onSortChange?.(value);\n };\n const rowsByKey = createMemo(() => new Map(data().rows.map((row) => [row.key, row])));\n const rawSelected = () => (props.selectedKey !== undefined ? props.selectedKey : localSelection());\n const selected = () => (rowsByKey().has(rawSelected() ?? \"\") ? rawSelected() : null);\n const selectedRow = () => rowsByKey().get(selected() ?? \"\");\n const select = (key: string | null) => {\n if (key !== null && !rowsByKey().has(key)) return;\n setLocalSelection(key);\n props.onSelectedKeyChange?.(key);\n };\n if (\n !props.columns.length ||\n props.columns.some((column) => !column.id) ||\n new Set(props.columns.map((column) => column.id)).size !== props.columns.length\n ) {\n throw new Error(\"Chart columns require unique nonempty IDs and at least one column\");\n }\n validateChartExplorerData(data());\n createEffect(() => validateChartExplorerData(data()));\n createEffect(() => {\n if (props.selectedKey === undefined && rawSelected() !== null && selected() === null) select(null);\n });\n const rows = createMemo(() => {\n const result = [...data().rows];\n const order = sort();\n const column = props.columns.find((c) => c.id === order?.key);\n const value = column?.sortValue;\n if (!order || !value) return result;\n const collator = new Intl.Collator(locale(), { numeric: true });\n return result.sort((a, b) => {\n const av = value(a),\n bv = value(b);\n if (av === null) return bv === null ? 0 : 1;\n if (bv === null) return -1;\n const comparison = typeof av === \"number\" && typeof bv === \"number\" ? av - bv : collator.compare(String(av), String(bv));\n return order.direction === \"asc\" ? comparison : -comparison;\n });\n });\n const copyText = () =>\n [\n props.columns.map((c) => tsvCell(c.label)).join(\"\\t\"),\n ...rows().map((row) => props.columns.map((c) => tsvCell(c.value(row))).join(\"\\t\")),\n ].join(\"\\n\");\n return (\n <section class={`k2b-chart-explorer ${props.class ?? \"\"}`} aria-labelledby={id}>\n <header class=\"k2b-chart-explorer__header\">\n <div>\n <h3 id={id}>{props.title}</h3>\n <Show when={props.description}>\n <div>{props.description}</div>\n </Show>\n </div>\n <div class=\"k2b-chart-explorer__actions\">\n <CopyButton\n text={copyText()}\n label={messages().chartCopyData}\n iconOnly\n size=\"sm\"\n variant=\"ghost\"\n disabled={!rows().length}\n onCopyError={() => setCopyFailed(true)}\n onCopied={() => setCopyFailed(false)}\n />\n <SelectChip<\"chart\" | \"table\">\n value={view()}\n onValueChange={setView}\n aria-label={messages().chartView}\n options={[\n { value: \"chart\", label: messages().chartDiagram },\n { value: \"table\", label: messages().chartData },\n ]}\n />\n </div>\n </header>\n <Show when={copyFailed()}>\n <span role=\"alert\">{messages().chartCopyFailed}</span>\n </Show>\n <div class=\"k2b-chart-explorer__viewport\" style={{ height: props.height ?? \"18rem\" }}>\n <Show when={data().rows.length > 0} fallback={<div class=\"k2b-chart__empty\">{messages().noData}</div>}>\n <Show\n when={view() === \"chart\"}\n fallback={\n <DataTable\n rows={rows()}\n columns={props.columns.map((column) => ({\n id: column.id,\n header: column.label,\n value: column.value,\n align: column.align,\n sortable: Boolean(column.sortValue),\n }))}\n ariaLabelledBy={id}\n getRowId={(row) => row.key}\n selectedRowId={selected()}\n sort={sort()}\n fillHeight\n surface=\"paper\"\n onRowClick={(row) => select(row.key)}\n renderCell={({ row, col, value, render }) => {\n const custom = props.columns.find((column) => column.id === col.id)?.render;\n const cell = () => (custom ? custom(row) : render(value));\n return col.id === props.columns[0]?.id ? (\n <Button variant=\"text\" size=\"sm\" onClick={() => select(row.key)}>\n {cell()}\n </Button>\n ) : (\n cell()\n );\n }}\n renderHeader={({ col, render }) =>\n col.sortable ? (\n <Button\n variant=\"text\"\n size=\"sm\"\n onClick={() =>\n setSort({\n key: col.id,\n direction: sort()?.key === col.id && sort()?.direction === \"asc\" ? \"desc\" : \"asc\",\n })\n }\n >\n {props.columns.find((column) => column.id === col.id)?.label}{\" \"}\n <span class=\"k2b-chart-explorer__sort-icon\" aria-hidden=\"true\">\n {sort()?.key === col.id ? (sort()?.direction === \"asc\" ? \"↑\" : \"↓\") : \"↕\"}\n </span>\n </Button>\n ) : (\n render()\n )\n }\n />\n }\n >\n <ChartSnapshotView\n cursor={props.cursor}\n snapshot={data().chart}\n selectedKey={selected()}\n onSelect={select}\n style={{ height: \"100%\" }}\n />\n </Show>\n </Show>\n </div>\n <Show when={props.renderDetails !== false}>\n <div class=\"k2b-chart-explorer__details\" aria-live=\"polite\">\n <Show when={selectedRow()}>\n {(row) => (\n <Paper class=\"k2b-chart-explorer__detail-paper\">\n <div class=\"k2b-chart-explorer__detail-header\">\n <span>{messages().chartSelectedDatum}</span>\n <Button\n variant=\"text\"\n size=\"sm\"\n aria-label={messages().clearSelection}\n title={messages().clearSelection}\n onClick={() => select(null)}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n </div>\n {props.renderDetails ? (\n props.renderDetails(row())\n ) : (\n <DescriptionList\n columns={3}\n size=\"sm\"\n items={props.columns.map((column) => ({\n term: column.label,\n description: column.value(row()),\n }))}\n />\n )}\n </Paper>\n )}\n </Show>\n </div>\n </Show>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Show","Button","useUiMessages","Paper","StatusBadge","ChartFilterControls","ChartExplorerControls","props","messages","label","key","steps","find","step","_$createComponent","children","_el$","_$getNextElement","_tmpl$3","_el$2","firstChild","_el$3","nextSibling","_el$4","_el$13","_el$14","_co$4","_$getNextMarker","_$insert","title","when","explorer","loading","_tmpl$","_el$6","_tmpl$2","_el$9","_el$0","_co$","_el$7","_el$1","_el$10","_co$2","_el$8","_el$11","_el$12","_co$3","chartPreviousData","snapshot","request","_$memo","length","undefined","desired","referenceStep","reference","size","variant","onClick","clearReference","aria-label","chartRemoveComparison","chartReference","_tmpl$4","disabled","error","pinReference","chartPinReference","_$effect","_p$","_v$","_v$2","e","_$setAttribute","t","displayedRequest","series","dimensionLabel","failed","onRequest","setRequest","onRetry","retry","_el$16","_tmpl$5","_el$17","_el$18","_co$5","_el$19","_el$20","_co$6","tone","icon","_tmpl$6","chartCurrent","_tmpl$7"],"sources":["content/ChartExplorerControls.tsx"],"sourcesContent":["import { Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { StatusBadge } from \"../surfaces/StatusBadge\";\nimport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nimport type { ChartExplorerCharts, ChartExplorerController } from \"./chart-explorer\";\n\nexport type ChartExplorerControlsProps<C extends ChartExplorerCharts> = {\n explorer: ChartExplorerController<C>;\n title: string;\n steps?: ChartFilterControlsProps[\"steps\"];\n series?: ChartFilterControlsProps[\"series\"];\n dimensionLabel?: string;\n};\n\nexport function ChartExplorerControls<C extends ChartExplorerCharts>(props: ChartExplorerControlsProps<C>) {\n const messages = useUiMessages();\n const label = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <Paper class=\"k2b-chart-group-controls\">\n <div class=\"k2b-chart-explorer__header\">\n <strong>{props.title}</strong>\n <div class=\"k2b-chart-explorer__actions\">\n <span\n class=\"k2b-chart-group-controls__loading\"\n data-loading={props.explorer.loading() || undefined}\n role=\"status\"\n title={\n props.explorer.loading()\n ? `${messages().loading} · ${messages().chartPreviousData}: ${label(props.explorer.snapshot().request.step)}`\n : undefined\n }\n >\n <Show when={props.explorer.loading()}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">\n {messages().loading} · {messages().chartPreviousData}: {label(props.explorer.snapshot().request.step)}\n </span>\n </Show>\n </span>\n <Show when={props.steps?.length && props.explorer.snapshot().request.step !== undefined}>\n <Show when={props.explorer.desired().referenceStep}>\n {(reference) => (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={() => void props.explorer.clearReference()}\n aria-label={`${messages().chartRemoveComparison}: ${label(reference())}`}\n >\n {messages().chartReference}: {label(reference())} <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n )}\n </Show>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={\n props.explorer.loading() ||\n props.explorer.error() !== null ||\n props.explorer.desired().referenceStep === props.explorer.snapshot().request.step\n }\n onClick={() => void props.explorer.pinReference()}\n >\n {messages().chartPinReference}\n </Button>\n </Show>\n </div>\n </div>\n <ChartFilterControls\n request={props.explorer.desired()}\n displayedRequest={props.explorer.snapshot().request}\n steps={props.steps}\n series={props.series}\n dimensionLabel={props.dimensionLabel}\n failed={props.explorer.error() !== null}\n onRequest={(request) => void props.explorer.setRequest(request)}\n onRetry={() => void props.explorer.retry()}\n />\n <Show when={props.explorer.snapshot().request.referenceStep}>\n {(reference) => (\n <div class=\"k2b-chart-explorer__actions\" aria-live=\"polite\">\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">●</span> {messages().chartCurrent}: {label(props.explorer.snapshot().request.step)}\n </>\n }\n />\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">○</span> {messages().chartReference}: {label(reference())}\n </>\n }\n />\n </div>\n )}\n </Show>\n </Paper>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/ChartExplorerControls.tsx"],"sourcesContent":["import { Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { StatusBadge } from \"../surfaces/StatusBadge\";\nimport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nimport type { ChartExplorerCharts, ChartExplorerController } from \"./chart-explorer\";\n\nexport type ChartExplorerControlsProps<C extends ChartExplorerCharts> = {\n explorer: ChartExplorerController<C>;\n title: string;\n steps?: ChartFilterControlsProps[\"steps\"];\n series?: ChartFilterControlsProps[\"series\"];\n dimensionLabel?: string;\n};\n\nexport function ChartExplorerControls<C extends ChartExplorerCharts>(props: ChartExplorerControlsProps<C>) {\n const messages = useUiMessages();\n const label = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <Paper class=\"k2b-chart-group-controls\">\n <div class=\"k2b-chart-explorer__header\">\n <strong>{props.title}</strong>\n <div class=\"k2b-chart-explorer__actions\">\n <span\n class=\"k2b-chart-group-controls__loading\"\n data-loading={props.explorer.loading() || undefined}\n role=\"status\"\n title={\n props.explorer.loading()\n ? `${messages().loading} · ${messages().chartPreviousData}: ${label(props.explorer.snapshot().request.step)}`\n : undefined\n }\n >\n <Show when={props.explorer.loading()}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">\n {messages().loading} · {messages().chartPreviousData}: {label(props.explorer.snapshot().request.step)}\n </span>\n </Show>\n </span>\n <Show when={props.steps?.length && props.explorer.snapshot().request.step !== undefined}>\n <Show when={props.explorer.desired().referenceStep}>\n {(reference) => (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={() => void props.explorer.clearReference()}\n aria-label={`${messages().chartRemoveComparison}: ${label(reference())}`}\n >\n {messages().chartReference}: {label(reference())} <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n )}\n </Show>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={\n props.explorer.loading() ||\n props.explorer.error() !== null ||\n props.explorer.desired().referenceStep === props.explorer.snapshot().request.step\n }\n onClick={() => void props.explorer.pinReference()}\n >\n {messages().chartPinReference}\n </Button>\n </Show>\n </div>\n </div>\n <ChartFilterControls\n request={props.explorer.desired()}\n displayedRequest={props.explorer.snapshot().request}\n steps={props.steps}\n series={props.series}\n dimensionLabel={props.dimensionLabel}\n failed={props.explorer.error() !== null}\n onRequest={(request) => void props.explorer.setRequest(request)}\n onRetry={() => void props.explorer.retry()}\n />\n <Show when={props.explorer.snapshot().request.referenceStep}>\n {(reference) => (\n <div class=\"k2b-chart-explorer__actions\" aria-live=\"polite\">\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">●</span> {messages().chartCurrent}: {label(props.explorer.snapshot().request.step)}\n </>\n }\n />\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">○</span> {messages().chartReference}: {label(reference())}\n </>\n }\n />\n </div>\n )}\n </Show>\n </Paper>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -183,7 +183,7 @@ export function ChartFilterControls(props) {
|
|
|
183
183
|
return props.failed;
|
|
184
184
|
},
|
|
185
185
|
get children() {
|
|
186
|
-
return ["
|
|
186
|
+
return ["· ", _$memo(() => messages().chartPreviousData), _$createComponent(Show, {
|
|
187
187
|
get when() {
|
|
188
188
|
return props.steps?.length;
|
|
189
189
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createEffect","createSignal","createUniqueId","For","Show","Button","FilterChip","Slider","useUiMessages","ChartFilterControls","props","validateOptions","items","steps","series","keys","map","item","key","some","Set","size","length","Error","messages","id","keyboardSteps","setKeyboardSteps","pointerFocus","stepLabel","find","step","label","_$createComponent","when","children","_el$","_$getNextElement","_tmpl$","_el$4","firstChild","_el$5","_co$","_$getNextMarker","nextSibling","_el$2","_el$3","$$focusout","$$focusin","event","target","matches","$$keydown","$$pointerdown","_$insert","showValue","dimensionLabel","range","min","max","Math","value","findIndex","request","disabled","formatValue","index","aria-valuetext","onValueChange","onRequest","_$setAttribute","each","_el$12","_tmpl$3","_$effect","undefined","_p$","_v$","_v$2","e","t","_$runHydrationEvents","_el$6","_tmpl$2","_el$10","_el$11","_co$4","_el$7","_el$8","_el$9","_co$2","_el$0","_el$1","_co$3","chartSeries","icon","visibleKeys","defaultValue","isActive","_$memo","options","multiple","color","failed","couldNotLoadData","variant","onClick","onRetry","retry","chartPreviousData","displayedRequest","_$delegateEvents"],"sources":["content/ChartFilterControls.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, For, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { FilterChip } from \"../actions/FilterChip\";\nimport { Slider } from \"../inputs/ChoiceInputs\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartExplorerRequest } from \"./chart-explorer\";\n\nexport type ChartFilterControlsProps = {\n request: ChartExplorerRequest;\n displayedRequest: ChartExplorerRequest;\n steps?: readonly { key: string; label: string }[];\n series?: readonly { key: string; label: string; color: string }[];\n dimensionLabel?: string;\n disabled?: boolean;\n failed?: boolean;\n onRequest: (request: ChartExplorerRequest) => void;\n onRetry?: () => void;\n};\n\n/** Shared controls for a standalone explorer or an atomic group of charts. */\nexport function ChartFilterControls(props: ChartFilterControlsProps) {\n const validateOptions = () => {\n for (const items of [props.steps, props.series]) {\n const keys = items?.map((item) => item.key) ?? [];\n if (keys.some((key) => !key) || new Set(keys).size !== keys.length)\n throw new Error(\"Chart control options require nonempty unique keys\");\n }\n };\n validateOptions();\n createEffect(validateOptions);\n const messages = useUiMessages();\n const id = `k2b-chart-controls-${createUniqueId()}`;\n const [keyboardSteps, setKeyboardSteps] = createSignal(false);\n let pointerFocus = false;\n const stepLabel = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <>\n <Show when={props.steps?.length}>\n <div\n class=\"k2b-chart-explorer__dimension\"\n role=\"group\"\n aria-label={props.dimensionLabel ?? messages().range}\n data-keyboard={keyboardSteps() ? \"true\" : undefined}\n onPointerDown={() => {\n pointerFocus = true;\n setKeyboardSteps(false);\n }}\n onKeyDown={() => {\n pointerFocus = false;\n setKeyboardSteps(true);\n }}\n onFocusIn={(event) => {\n if (!pointerFocus && event.target.matches(\":focus-visible\")) setKeyboardSteps(true);\n }}\n onFocusOut={() => {\n pointerFocus = false;\n setKeyboardSteps(false);\n }}\n >\n <Slider\n id={`${id}-dimension`}\n showValue={false}\n aria-describedby={`${id}-steps`}\n label={props.dimensionLabel ?? messages().range}\n min={0}\n max={Math.max(0, (props.steps?.length ?? 1) - 1)}\n step={1}\n value={Math.max(0, props.steps?.findIndex((step) => step.key === props.request.step) ?? 0)}\n disabled={props.disabled || (props.steps?.length ?? 0) < 2}\n formatValue={(index) => props.steps?.[index]?.label ?? \"\"}\n aria-valuetext={stepLabel(props.request.step)}\n onValueChange={(index) => {\n const step = props.steps?.[index];\n if (step) props.onRequest({ ...props.request, step: step.key });\n }}\n />\n <output class=\"k2b-chart-explorer__dimension-value\" for={`${id}-dimension`}>\n {stepLabel(props.request.step)}\n </output>\n <div id={`${id}-steps`} class=\"k2b-chart-explorer__steps\">\n <For each={props.steps}>\n {(step) => <span data-current={step.key === props.request.step ? \"true\" : undefined}>{step.label}</span>}\n </For>\n </div>\n </div>\n </Show>\n <div class=\"k2b-chart-explorer__legend\">\n <Show when={props.series?.length}>\n <FilterChip\n label={messages().chartSeries}\n icon=\"ti ti-chart-dots\"\n disabled={props.disabled}\n value={props.request.visibleKeys ?? props.series?.map((item) => item.key) ?? []}\n defaultValue={props.series?.map((item) => item.key) ?? []}\n isActive={props.request.visibleKeys !== undefined && props.request.visibleKeys.length !== props.series?.length}\n options={[\n { multiple: true, options: (props.series ?? []).map((item) => ({ value: item.key, label: item.label, color: item.color })) },\n ]}\n onValueChange={(visibleKeys) => props.onRequest({ ...props.request, visibleKeys })}\n />\n </Show>\n <div class=\"k2b-chart-explorer__status\" role=\"status\">\n <Show when={props.failed}>\n {messages().couldNotLoadData}{\" \"}\n <Button variant=\"text\" size=\"sm\" onClick={props.onRetry}>\n {messages().retry}\n </Button>\n </Show>\n <Show when={props.failed}>\n · {messages().chartPreviousData}\n <Show when={props.steps?.length}>: {stepLabel(props.displayedRequest.step)}</Show>\n </Show>\n </div>\n </div>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/ChartFilterControls.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, For, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { FilterChip } from \"../actions/FilterChip\";\nimport { Slider } from \"../inputs/ChoiceInputs\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartExplorerRequest } from \"./chart-explorer\";\n\nexport type ChartFilterControlsProps = {\n request: ChartExplorerRequest;\n displayedRequest: ChartExplorerRequest;\n steps?: readonly { key: string; label: string }[];\n series?: readonly { key: string; label: string; color: string }[];\n dimensionLabel?: string;\n disabled?: boolean;\n failed?: boolean;\n onRequest: (request: ChartExplorerRequest) => void;\n onRetry?: () => void;\n};\n\n/** Shared controls for a standalone explorer or an atomic group of charts. */\nexport function ChartFilterControls(props: ChartFilterControlsProps) {\n const validateOptions = () => {\n for (const items of [props.steps, props.series]) {\n const keys = items?.map((item) => item.key) ?? [];\n if (keys.some((key) => !key) || new Set(keys).size !== keys.length)\n throw new Error(\"Chart control options require nonempty unique keys\");\n }\n };\n validateOptions();\n createEffect(validateOptions);\n const messages = useUiMessages();\n const id = `k2b-chart-controls-${createUniqueId()}`;\n const [keyboardSteps, setKeyboardSteps] = createSignal(false);\n let pointerFocus = false;\n const stepLabel = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <>\n <Show when={props.steps?.length}>\n <div\n class=\"k2b-chart-explorer__dimension\"\n role=\"group\"\n aria-label={props.dimensionLabel ?? messages().range}\n data-keyboard={keyboardSteps() ? \"true\" : undefined}\n onPointerDown={() => {\n pointerFocus = true;\n setKeyboardSteps(false);\n }}\n onKeyDown={() => {\n pointerFocus = false;\n setKeyboardSteps(true);\n }}\n onFocusIn={(event) => {\n if (!pointerFocus && event.target.matches(\":focus-visible\")) setKeyboardSteps(true);\n }}\n onFocusOut={() => {\n pointerFocus = false;\n setKeyboardSteps(false);\n }}\n >\n <Slider\n id={`${id}-dimension`}\n showValue={false}\n aria-describedby={`${id}-steps`}\n label={props.dimensionLabel ?? messages().range}\n min={0}\n max={Math.max(0, (props.steps?.length ?? 1) - 1)}\n step={1}\n value={Math.max(0, props.steps?.findIndex((step) => step.key === props.request.step) ?? 0)}\n disabled={props.disabled || (props.steps?.length ?? 0) < 2}\n formatValue={(index) => props.steps?.[index]?.label ?? \"\"}\n aria-valuetext={stepLabel(props.request.step)}\n onValueChange={(index) => {\n const step = props.steps?.[index];\n if (step) props.onRequest({ ...props.request, step: step.key });\n }}\n />\n <output class=\"k2b-chart-explorer__dimension-value\" for={`${id}-dimension`}>\n {stepLabel(props.request.step)}\n </output>\n <div id={`${id}-steps`} class=\"k2b-chart-explorer__steps\">\n <For each={props.steps}>\n {(step) => <span data-current={step.key === props.request.step ? \"true\" : undefined}>{step.label}</span>}\n </For>\n </div>\n </div>\n </Show>\n <div class=\"k2b-chart-explorer__legend\">\n <Show when={props.series?.length}>\n <FilterChip\n label={messages().chartSeries}\n icon=\"ti ti-chart-dots\"\n disabled={props.disabled}\n value={props.request.visibleKeys ?? props.series?.map((item) => item.key) ?? []}\n defaultValue={props.series?.map((item) => item.key) ?? []}\n isActive={props.request.visibleKeys !== undefined && props.request.visibleKeys.length !== props.series?.length}\n options={[\n { multiple: true, options: (props.series ?? []).map((item) => ({ value: item.key, label: item.label, color: item.color })) },\n ]}\n onValueChange={(visibleKeys) => props.onRequest({ ...props.request, visibleKeys })}\n />\n </Show>\n <div class=\"k2b-chart-explorer__status\" role=\"status\">\n <Show when={props.failed}>\n {messages().couldNotLoadData}{\" \"}\n <Button variant=\"text\" size=\"sm\" onClick={props.onRetry}>\n {messages().retry}\n </Button>\n </Show>\n <Show when={props.failed}>\n · {messages().chartPreviousData}\n <Show when={props.steps?.length}>: {stepLabel(props.displayedRequest.step)}</Show>\n </Show>\n </div>\n </div>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["content/ChartSnapshotView.tsx"],"sourcesContent":["import { createEffect, createUniqueId, type JSX, onCleanup, onMount } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { createChartInspection, sameChartDatum } from \"./chart-inspection\";\nimport type { ChartSnapshot } from \"./chart-snapshot\";\nimport { selectedChartSvg } from \"./chart-svg\";\n\n/** Internal display for server-prepared geometry. Viewports are snapshot-owned. */\nexport function ChartSnapshotView(props: {\n snapshot: ChartSnapshot;\n cursor?: ChartCursor;\n selectedKey: string | null;\n onSelect: (key: string) => void;\n style?: JSX.CSSProperties;\n}) {\n const messages = useUiMessages();\n let container: HTMLDivElement | undefined;\n let tooltip: HTMLSpanElement | undefined;\n let anchor: HTMLSpanElement | undefined;\n const id = `k2b-chart-tooltip-${createUniqueId()}`;\n const inspection = createChartInspection({\n container: () => container,\n cursor: () => props.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => props.snapshot.kind,\n enabled: () => true,\n format: ({ datum }) => props.snapshot.marks.find((m) => sameChartDatum(m.datum, datum))?.tooltip ?? { rows: [] },\n select: ({ datum }) => {\n const mark = props.snapshot.marks.find((m) => sameChartDatum(m.datum, datum));\n if (mark) props.onSelect(mark.rowKey);\n },\n });\n createEffect(() => {\n props.snapshot;\n inspection.invalidate();\n });\n createEffect(() => inspection.selectData(props.snapshot.marks.filter((m) => m.rowKey === props.selectedKey).map((m) => m.datum)));\n onMount(() => {\n const outside = (event: Event) => {\n if (event.target instanceof Node && !container?.contains(event.target)) inspection.close();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", inspection.close, true);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", inspection.close, true);\n });\n });\n onCleanup(inspection.close);\n return (\n <div\n ref={container}\n class=\"k2b-chart\"\n data-chart-kind={props.snapshot.kind}\n data-interactive=\"true\"\n style={props.style}\n role=\"group\"\n aria-label={messages().interactiveChart}\n tabIndex={0}\n onPointerDown={inspection.down}\n onPointerMove={inspection.move}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={inspection.close}\n onKeyDown={inspection.key}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={props.snapshot.stretch ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${props.snapshot.width}px`,\n \"--k2b-chart-height\": `${props.snapshot.height}px`,\n \"aspect-ratio\": `${props.snapshot.width}/${props.snapshot.height}`,\n }}\n innerHTML={\n isServer\n ? selectedChartSvg(\n props.snapshot.svg,\n props.snapshot.marks.filter((m) => m.rowKey === props.selectedKey).map((m) => m.datum),\n )\n : props.snapshot.svg\n }\n />\n <span ref={anchor} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span ref={tooltip} id={id} class=\"k2b-chart__tooltip k2b-tooltip\" role=\"tooltip\" popover=\"manual\" data-instant=\"true\" />\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["content/CodeDisplay.tsx"],"sourcesContent":["import { For, Show } from \"solid-js\";\nimport CopyButton from \"../actions/CopyButton\";\nimport { type CodeDisplayLanguage, highlightCodeDisplayLines } from \"./code-highlight\";\n\nexport type { CodeDisplayLanguage };\n\nexport type CodeDisplayProps = {\n code: string;\n title?: string;\n language?: CodeDisplayLanguage;\n copy?: boolean;\n lineNumbers?: boolean;\n class?: string;\n};\n\nexport default function CodeDisplay(props: CodeDisplayProps) {\n const lines = () => highlightCodeDisplayLines(props.code, language());\n const lineNumbers = () => props.lineNumbers ?? true;\n const language = () => props.language ?? \"text\";\n const hasHeader = () => Boolean(props.title || props.copy !== false);\n\n return (\n <div class={`k2b-content-code-display ${props.class ?? \"\"}`}>\n <Show when={hasHeader()}>\n <div class=\"k2b-content-code-display__header\">\n <Show when={props.title}>{(title) => <p class=\"k2b-content-code-display__title\">{title()}</p>}</Show>\n <Show when={props.copy !== false}>\n <CopyButton text={props.code} />\n </Show>\n </div>\n </Show>\n\n <div\n class=\"k2b-content-code-display__body\"\n data-header={hasHeader() ? \"true\" : undefined}\n role=\"region\"\n aria-label={props.title ? `${props.title} code` : `${language()} code`}\n tabIndex={0}\n >\n <div class=\"k2b-content-code-display__lines\">\n <For each={lines()}>\n {(line, index) => (\n <div class=\"k2b-content-code-display__line\" data-numbered={lineNumbers() ? \"true\" : undefined}>\n <Show when={lineNumbers()}>\n <span class=\"k2b-content-code-display__number\">{index() + 1}</span>\n </Show>\n <code innerHTML={line || \" \"} />\n </div>\n )}\n </For>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,GAAG,EAAE,IAAI,QAAQ,UAAU;AACpC,OAAO,UAAU,MAAM,uBAAuB;AAC9C,SAAmC,yBAAyB,QAAQ,kBAAkB;AAatF,eAAe,SAAS,WAAW,CAAC,KAAuB,EAAE;EAC3D,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;EACrE,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,IAAI,IAAI;EACnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,IAAI,MAAM;EAC/C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;EAEpE;IAAA;MAAA;MAAA;MAAA;MAAA;IAAA,iCAEK,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,SAAS,CAAC,CAAC;MAAA;MAAA;QAAA;UAAA;UAAA;UAAA;UAAA;QAAA,kCAElB,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,KAAK;UAAA;UAAA,UAAI,KAAK;YAAA;YAAA,gBAAiD,KAAK;YAAA;UAAA;QAAO;QAAA,kCAC5F,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,IAAI,KAAK,KAAK;UAAA;UAAA;YAAA,yBAC7B,UAAU;cAAA,IAAC,IAAI;gBAAA,OAAE,KAAK,CAAC,IAAI;cAAA;YAAA;UAAA;QAAA;QAAA;MAAA;IAAA;IAAA,kCAa7B,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,CAAC;MAAA;MAAA,UACf,CAAC,IAAI,EAAE,KAAK;QAAA;UAAA;UAAA;UAAA;QAAA,mCAER,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,WAAW,CAAC,CAAC;UAAA;UAAA;YAAA;YAAA,uBACyB,KAAK,CAAC,CAAC,GAAG,CAAC;YAAA;UAAA;QAAA;QAAA,mCAE5C,IAAI,IAAI,GAAG;QAAA,uDAJ6B,WAAW,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;QAAA;MAAA;IAM9F;IAAA;MAAA,UA1BG,4BAA4B,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OAY1C,SAAS,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;QAAA,OAEjC,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,KAAK,OAAO,GAAG,GAAG,QAAQ,CAAC,CAAC,OAAO;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAkB9E","ignoreList":[]}
|