@k2b/ui 0.1.0-rc.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/LICENSE +661 -0
- package/README.md +343 -0
- package/dist/.build-complete +0 -0
- package/dist/browser/actions/Button.js +236 -0
- package/dist/browser/actions/Button.js.map +1 -0
- package/dist/browser/actions/ContextMenu.js +199 -0
- package/dist/browser/actions/ContextMenu.js.map +1 -0
- package/dist/browser/actions/CopyButton.js +97 -0
- package/dist/browser/actions/CopyButton.js.map +1 -0
- package/dist/browser/actions/Disclosure.js +83 -0
- package/dist/browser/actions/Disclosure.js.map +1 -0
- package/dist/browser/actions/Dropdown.js +669 -0
- package/dist/browser/actions/Dropdown.js.map +1 -0
- package/dist/browser/actions/FilterChip.js +149 -0
- package/dist/browser/actions/FilterChip.js.map +1 -0
- package/dist/browser/actions/RemoveButton.js +47 -0
- package/dist/browser/actions/RemoveButton.js.map +1 -0
- package/dist/browser/actions/SegmentedControl.js +138 -0
- package/dist/browser/actions/SegmentedControl.js.map +1 -0
- package/dist/browser/actions/SplitButton.js +76 -0
- package/dist/browser/actions/SplitButton.js.map +1 -0
- package/dist/browser/actions/SpotlightSearch.js +87 -0
- package/dist/browser/actions/SpotlightSearch.js.map +1 -0
- package/dist/browser/actions/Tabs.js +185 -0
- package/dist/browser/actions/Tabs.js.map +1 -0
- package/dist/browser/actions/Toolbar.js +87 -0
- package/dist/browser/actions/Toolbar.js.map +1 -0
- package/dist/browser/actions/index.js +13 -0
- package/dist/browser/actions/index.js.map +1 -0
- package/dist/browser/chat/ChatComposer.js +760 -0
- package/dist/browser/chat/ChatComposer.js.map +1 -0
- package/dist/browser/chat/ChatPrimitives.js +688 -0
- package/dist/browser/chat/ChatPrimitives.js.map +1 -0
- package/dist/browser/chat/ChatRoot.js +27 -0
- package/dist/browser/chat/ChatRoot.js.map +1 -0
- package/dist/browser/chat/ChatTimeline.js +404 -0
- package/dist/browser/chat/ChatTimeline.js.map +1 -0
- package/dist/browser/chat/chat-behavior.js +53 -0
- package/dist/browser/chat/chat-behavior.js.map +1 -0
- package/dist/browser/chat/index.js +17 -0
- package/dist/browser/chat/index.js.map +1 -0
- package/dist/browser/chat/types.js +2 -0
- package/dist/browser/chat/types.js.map +1 -0
- package/dist/browser/content/Calendar.js +2168 -0
- package/dist/browser/content/Calendar.js.map +1 -0
- package/dist/browser/content/Chart.js +680 -0
- package/dist/browser/content/Chart.js.map +1 -0
- package/dist/browser/content/CodeDisplay.js +104 -0
- package/dist/browser/content/CodeDisplay.js.map +1 -0
- package/dist/browser/content/DataTable.js +724 -0
- package/dist/browser/content/DataTable.js.map +1 -0
- package/dist/browser/content/Docs.js +227 -0
- package/dist/browser/content/Docs.js.map +1 -0
- package/dist/browser/content/FileBrowser.js +462 -0
- package/dist/browser/content/FileBrowser.js.map +1 -0
- package/dist/browser/content/FileTree.js +453 -0
- package/dist/browser/content/FileTree.js.map +1 -0
- package/dist/browser/content/FileView.js +842 -0
- package/dist/browser/content/FileView.js.map +1 -0
- package/dist/browser/content/Lightbox.js +285 -0
- package/dist/browser/content/Lightbox.js.map +1 -0
- package/dist/browser/content/LogEntriesTable.js +139 -0
- package/dist/browser/content/LogEntriesTable.js.map +1 -0
- package/dist/browser/content/MarkdownView.js +138 -0
- package/dist/browser/content/MarkdownView.js.map +1 -0
- package/dist/browser/content/Pagination.js +182 -0
- package/dist/browser/content/Pagination.js.map +1 -0
- package/dist/browser/content/PdfPreview.js +204 -0
- package/dist/browser/content/PdfPreview.js.map +1 -0
- package/dist/browser/content/RangePicker.js +83 -0
- package/dist/browser/content/RangePicker.js.map +1 -0
- package/dist/browser/content/StructuredDataPreview.js +194 -0
- package/dist/browser/content/StructuredDataPreview.js.map +1 -0
- package/dist/browser/content/calendar-event-layout.js +92 -0
- package/dist/browser/content/calendar-event-layout.js.map +1 -0
- package/dist/browser/content/calendar-pointer.js +114 -0
- package/dist/browser/content/calendar-pointer.js.map +1 -0
- package/dist/browser/content/chart-map-viewport.js +33 -0
- package/dist/browser/content/chart-map-viewport.js.map +1 -0
- package/dist/browser/content/chart-state-timeline.js +124 -0
- package/dist/browser/content/chart-state-timeline.js.map +1 -0
- package/dist/browser/content/code-highlight.js +144 -0
- package/dist/browser/content/code-highlight.js.map +1 -0
- package/dist/browser/content/file-tree.js +93 -0
- package/dist/browser/content/file-tree.js.map +1 -0
- package/dist/browser/content/file-view-preview.js +112 -0
- package/dist/browser/content/file-view-preview.js.map +1 -0
- package/dist/browser/content/index.js +16 -0
- package/dist/browser/content/index.js.map +1 -0
- package/dist/browser/feedback/InlineGuidance.js +46 -0
- package/dist/browser/feedback/InlineGuidance.js.map +1 -0
- package/dist/browser/feedback/Tooltip.js +189 -0
- package/dist/browser/feedback/Tooltip.js.map +1 -0
- package/dist/browser/feedback/dialog-core.js +207 -0
- package/dist/browser/feedback/dialog-core.js.map +1 -0
- package/dist/browser/feedback/index.js +6 -0
- package/dist/browser/feedback/index.js.map +1 -0
- package/dist/browser/feedback/prompts.js +991 -0
- package/dist/browser/feedback/prompts.js.map +1 -0
- package/dist/browser/feedback/toast.js +271 -0
- package/dist/browser/feedback/toast.js.map +1 -0
- package/dist/browser/feedback/tooltip-position.js +25 -0
- package/dist/browser/feedback/tooltip-position.js.map +1 -0
- package/dist/browser/index.js +11 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/inputs/AutocompleteEditor.js +610 -0
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -0
- package/dist/browser/inputs/AutocompleteSelect.js +632 -0
- package/dist/browser/inputs/AutocompleteSelect.js.map +1 -0
- package/dist/browser/inputs/Checkbox.js +137 -0
- package/dist/browser/inputs/Checkbox.js.map +1 -0
- package/dist/browser/inputs/CheckboxCard.js +130 -0
- package/dist/browser/inputs/CheckboxCard.js.map +1 -0
- package/dist/browser/inputs/ChoiceGroups.js +174 -0
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -0
- package/dist/browser/inputs/ChoiceInputs.js +400 -0
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -0
- package/dist/browser/inputs/Combobox.js +274 -0
- package/dist/browser/inputs/Combobox.js.map +1 -0
- package/dist/browser/inputs/DatePicker.js +923 -0
- package/dist/browser/inputs/DatePicker.js.map +1 -0
- package/dist/browser/inputs/FileInputs.js +736 -0
- package/dist/browser/inputs/FileInputs.js.map +1 -0
- package/dist/browser/inputs/MultiSelectInput.js +565 -0
- package/dist/browser/inputs/MultiSelectInput.js.map +1 -0
- package/dist/browser/inputs/NumberInput.js +288 -0
- package/dist/browser/inputs/NumberInput.js.map +1 -0
- package/dist/browser/inputs/Select.js +507 -0
- package/dist/browser/inputs/Select.js.map +1 -0
- package/dist/browser/inputs/SelectChip.js +151 -0
- package/dist/browser/inputs/SelectChip.js.map +1 -0
- package/dist/browser/inputs/SpecialInputs.js +117 -0
- package/dist/browser/inputs/SpecialInputs.js.map +1 -0
- package/dist/browser/inputs/Switch.js +117 -0
- package/dist/browser/inputs/Switch.js.map +1 -0
- package/dist/browser/inputs/TagEditor.js +358 -0
- package/dist/browser/inputs/TagEditor.js.map +1 -0
- package/dist/browser/inputs/TagsInput.js +195 -0
- package/dist/browser/inputs/TagsInput.js.map +1 -0
- package/dist/browser/inputs/TemplateEditor.js +190 -0
- package/dist/browser/inputs/TemplateEditor.js.map +1 -0
- package/dist/browser/inputs/TextInput.js +318 -0
- package/dist/browser/inputs/TextInput.js.map +1 -0
- package/dist/browser/inputs/choice.js +188 -0
- package/dist/browser/inputs/choice.js.map +1 -0
- package/dist/browser/inputs/completion/behaviors.js +108 -0
- package/dist/browser/inputs/completion/behaviors.js.map +1 -0
- package/dist/browser/inputs/completion/engine.js +103 -0
- package/dist/browser/inputs/completion/engine.js.map +1 -0
- package/dist/browser/inputs/completion/index.js +4 -0
- package/dist/browser/inputs/completion/index.js.map +1 -0
- package/dist/browser/inputs/completion/overlay.js +25 -0
- package/dist/browser/inputs/completion/overlay.js.map +1 -0
- package/dist/browser/inputs/date-picker.js +123 -0
- package/dist/browser/inputs/date-picker.js.map +1 -0
- package/dist/browser/inputs/editor-dom.js +26 -0
- package/dist/browser/inputs/editor-dom.js.map +1 -0
- package/dist/browser/inputs/field-contract.js +9 -0
- package/dist/browser/inputs/field-contract.js.map +1 -0
- package/dist/browser/inputs/icon-options.js +46 -0
- package/dist/browser/inputs/icon-options.js.map +1 -0
- package/dist/browser/inputs/image-crop.js +145 -0
- package/dist/browser/inputs/image-crop.js.map +1 -0
- package/dist/browser/inputs/index.js +23 -0
- package/dist/browser/inputs/index.js.map +1 -0
- package/dist/browser/inputs/markdown/MarkdownEditor.js +725 -0
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -0
- package/dist/browser/inputs/markdown/Toolbar.js +172 -0
- package/dist/browser/inputs/markdown/Toolbar.js.map +1 -0
- package/dist/browser/inputs/markdown/actions.js +140 -0
- package/dist/browser/inputs/markdown/actions.js.map +1 -0
- package/dist/browser/inputs/markdown/active-formats.js +36 -0
- package/dist/browser/inputs/markdown/active-formats.js.map +1 -0
- package/dist/browser/inputs/markdown/behaviors.js +63 -0
- package/dist/browser/inputs/markdown/behaviors.js.map +1 -0
- package/dist/browser/inputs/markdown/code-zone.js +8 -0
- package/dist/browser/inputs/markdown/code-zone.js.map +1 -0
- package/dist/browser/internal/color.js +18 -0
- package/dist/browser/internal/color.js.map +1 -0
- package/dist/browser/internal/field.js +158 -0
- package/dist/browser/internal/field.js.map +1 -0
- package/dist/browser/internal/portal.js +17 -0
- package/dist/browser/internal/portal.js.map +1 -0
- package/dist/browser/intl/Format.js +273 -0
- package/dist/browser/intl/Format.js.map +1 -0
- package/dist/browser/intl/index.js +3 -0
- package/dist/browser/intl/index.js.map +1 -0
- package/dist/browser/intl/locale.js +63 -0
- package/dist/browser/intl/locale.js.map +1 -0
- package/dist/browser/intl/messages.js +753 -0
- package/dist/browser/intl/messages.js.map +1 -0
- package/dist/browser/layout/AppOverview.js +151 -0
- package/dist/browser/layout/AppOverview.js.map +1 -0
- package/dist/browser/layout/AppWorkspace.js +1502 -0
- package/dist/browser/layout/AppWorkspace.js.map +1 -0
- package/dist/browser/layout/DataPanel.js +122 -0
- package/dist/browser/layout/DataPanel.js.map +1 -0
- package/dist/browser/layout/DetailPanel.js +484 -0
- package/dist/browser/layout/DetailPanel.js.map +1 -0
- package/dist/browser/layout/Discussion.js +511 -0
- package/dist/browser/layout/Discussion.js.map +1 -0
- package/dist/browser/layout/FloatingWindow.js +332 -0
- package/dist/browser/layout/FloatingWindow.js.map +1 -0
- package/dist/browser/layout/PanelDialog.js +236 -0
- package/dist/browser/layout/PanelDialog.js.map +1 -0
- package/dist/browser/layout/PanelHeader.js +91 -0
- package/dist/browser/layout/PanelHeader.js.map +1 -0
- package/dist/browser/layout/Panes.js +978 -0
- package/dist/browser/layout/Panes.js.map +1 -0
- package/dist/browser/layout/ScrollArea.js +29 -0
- package/dist/browser/layout/ScrollArea.js.map +1 -0
- package/dist/browser/layout/Settings.js +381 -0
- package/dist/browser/layout/Settings.js.map +1 -0
- package/dist/browser/layout/SettingsCollection.js +212 -0
- package/dist/browser/layout/SettingsCollection.js.map +1 -0
- package/dist/browser/layout/SettingsModal.js +281 -0
- package/dist/browser/layout/SettingsModal.js.map +1 -0
- package/dist/browser/layout/app-workspace-controller.js +419 -0
- package/dist/browser/layout/app-workspace-controller.js.map +1 -0
- package/dist/browser/layout/app-workspace-state.js +125 -0
- package/dist/browser/layout/app-workspace-state.js.map +1 -0
- package/dist/browser/layout/floating-window-geometry.js +15 -0
- package/dist/browser/layout/floating-window-geometry.js.map +1 -0
- package/dist/browser/layout/index.js +17 -0
- package/dist/browser/layout/index.js.map +1 -0
- package/dist/browser/layout/panes-layout.js +436 -0
- package/dist/browser/layout/panes-layout.js.map +1 -0
- package/dist/browser/layout/stable-id.js +17 -0
- package/dist/browser/layout/stable-id.js.map +1 -0
- package/dist/browser/semantics.js +2 -0
- package/dist/browser/semantics.js.map +1 -0
- package/dist/browser/surfaces/Avatar.js +97 -0
- package/dist/browser/surfaces/Avatar.js.map +1 -0
- package/dist/browser/surfaces/DescriptionList.js +66 -0
- package/dist/browser/surfaces/DescriptionList.js.map +1 -0
- package/dist/browser/surfaces/LinkCard.js +40 -0
- package/dist/browser/surfaces/LinkCard.js.map +1 -0
- package/dist/browser/surfaces/NotFoundState.js +85 -0
- package/dist/browser/surfaces/NotFoundState.js.map +1 -0
- package/dist/browser/surfaces/NoticeCard.js +145 -0
- package/dist/browser/surfaces/NoticeCard.js.map +1 -0
- package/dist/browser/surfaces/Paper.js +33 -0
- package/dist/browser/surfaces/Paper.js.map +1 -0
- package/dist/browser/surfaces/Placeholder.js +90 -0
- package/dist/browser/surfaces/Placeholder.js.map +1 -0
- package/dist/browser/surfaces/ProgressBar.js +58 -0
- package/dist/browser/surfaces/ProgressBar.js.map +1 -0
- package/dist/browser/surfaces/StatCell.js +172 -0
- package/dist/browser/surfaces/StatCell.js.map +1 -0
- package/dist/browser/surfaces/StatGrid.js +80 -0
- package/dist/browser/surfaces/StatGrid.js.map +1 -0
- package/dist/browser/surfaces/StatusBadge.js +70 -0
- package/dist/browser/surfaces/StatusBadge.js.map +1 -0
- package/dist/browser/surfaces/Tag.js +94 -0
- package/dist/browser/surfaces/Tag.js.map +1 -0
- package/dist/browser/surfaces/index.js +13 -0
- package/dist/browser/surfaces/index.js.map +1 -0
- package/dist/browser/widgets/Widget.js +89 -0
- package/dist/browser/widgets/Widget.js.map +1 -0
- package/dist/browser/widgets/WidgetHero.js +47 -0
- package/dist/browser/widgets/WidgetHero.js.map +1 -0
- package/dist/browser/widgets/WidgetList.js +125 -0
- package/dist/browser/widgets/WidgetList.js.map +1 -0
- package/dist/browser/widgets/WidgetPills.js +78 -0
- package/dist/browser/widgets/WidgetPills.js.map +1 -0
- package/dist/browser/widgets/WidgetStat.js +114 -0
- package/dist/browser/widgets/WidgetStat.js.map +1 -0
- package/dist/browser/widgets/WidgetStatus.js +54 -0
- package/dist/browser/widgets/WidgetStatus.js.map +1 -0
- package/dist/browser/widgets/index.js +7 -0
- package/dist/browser/widgets/index.js.map +1 -0
- package/dist/global.css +3 -0
- package/dist/licenses/ibm-plex-mono.txt +93 -0
- package/dist/licenses/ibm-plex-sans.txt +93 -0
- package/dist/licenses/tabler-icons.txt +21 -0
- package/dist/plex.css +1 -0
- package/dist/ssr/actions/Button.js +203 -0
- package/dist/ssr/actions/Button.js.map +1 -0
- package/dist/ssr/actions/ContextMenu.js +128 -0
- package/dist/ssr/actions/ContextMenu.js.map +1 -0
- package/dist/ssr/actions/CopyButton.js +79 -0
- package/dist/ssr/actions/CopyButton.js.map +1 -0
- package/dist/ssr/actions/Disclosure.js +26 -0
- package/dist/ssr/actions/Disclosure.js.map +1 -0
- package/dist/ssr/actions/Dropdown.js +443 -0
- package/dist/ssr/actions/Dropdown.js.map +1 -0
- package/dist/ssr/actions/FilterChip.js +132 -0
- package/dist/ssr/actions/FilterChip.js.map +1 -0
- package/dist/ssr/actions/RemoveButton.js +45 -0
- package/dist/ssr/actions/RemoveButton.js.map +1 -0
- package/dist/ssr/actions/SegmentedControl.js +57 -0
- package/dist/ssr/actions/SegmentedControl.js.map +1 -0
- package/dist/ssr/actions/SplitButton.js +74 -0
- package/dist/ssr/actions/SplitButton.js.map +1 -0
- package/dist/ssr/actions/SpotlightSearch.js +38 -0
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -0
- package/dist/ssr/actions/Tabs.js +91 -0
- package/dist/ssr/actions/Tabs.js.map +1 -0
- package/dist/ssr/actions/Toolbar.js +33 -0
- package/dist/ssr/actions/Toolbar.js.map +1 -0
- package/dist/ssr/actions/index.js +13 -0
- package/dist/ssr/actions/index.js.map +1 -0
- package/dist/ssr/chat/ChatComposer.js +392 -0
- package/dist/ssr/chat/ChatComposer.js.map +1 -0
- package/dist/ssr/chat/ChatPrimitives.js +377 -0
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -0
- package/dist/ssr/chat/ChatRoot.js +10 -0
- package/dist/ssr/chat/ChatRoot.js.map +1 -0
- package/dist/ssr/chat/ChatTimeline.js +301 -0
- package/dist/ssr/chat/ChatTimeline.js.map +1 -0
- package/dist/ssr/chat/chat-behavior.js +53 -0
- package/dist/ssr/chat/chat-behavior.js.map +1 -0
- package/dist/ssr/chat/index.js +17 -0
- package/dist/ssr/chat/index.js.map +1 -0
- package/dist/ssr/chat/types.js +2 -0
- package/dist/ssr/chat/types.js.map +1 -0
- package/dist/ssr/content/Calendar.js +1542 -0
- package/dist/ssr/content/Calendar.js.map +1 -0
- package/dist/ssr/content/Chart.js +552 -0
- package/dist/ssr/content/Chart.js.map +1 -0
- package/dist/ssr/content/CodeDisplay.js +55 -0
- package/dist/ssr/content/CodeDisplay.js.map +1 -0
- package/dist/ssr/content/DataTable.js +470 -0
- package/dist/ssr/content/DataTable.js.map +1 -0
- package/dist/ssr/content/Docs.js +108 -0
- package/dist/ssr/content/Docs.js.map +1 -0
- package/dist/ssr/content/FileBrowser.js +422 -0
- package/dist/ssr/content/FileBrowser.js.map +1 -0
- package/dist/ssr/content/FileTree.js +299 -0
- package/dist/ssr/content/FileTree.js.map +1 -0
- package/dist/ssr/content/FileView.js +612 -0
- package/dist/ssr/content/FileView.js.map +1 -0
- package/dist/ssr/content/Lightbox.js +164 -0
- package/dist/ssr/content/Lightbox.js.map +1 -0
- package/dist/ssr/content/LogEntriesTable.js +106 -0
- package/dist/ssr/content/LogEntriesTable.js.map +1 -0
- package/dist/ssr/content/MarkdownView.js +119 -0
- package/dist/ssr/content/MarkdownView.js.map +1 -0
- package/dist/ssr/content/Pagination.js +141 -0
- package/dist/ssr/content/Pagination.js.map +1 -0
- package/dist/ssr/content/PdfPreview.js +126 -0
- package/dist/ssr/content/PdfPreview.js.map +1 -0
- package/dist/ssr/content/RangePicker.js +35 -0
- package/dist/ssr/content/RangePicker.js.map +1 -0
- package/dist/ssr/content/StructuredDataPreview.js +127 -0
- package/dist/ssr/content/StructuredDataPreview.js.map +1 -0
- package/dist/ssr/content/calendar-event-layout.js +92 -0
- package/dist/ssr/content/calendar-event-layout.js.map +1 -0
- package/dist/ssr/content/calendar-pointer.js +114 -0
- package/dist/ssr/content/calendar-pointer.js.map +1 -0
- package/dist/ssr/content/chart-map-viewport.js +33 -0
- package/dist/ssr/content/chart-map-viewport.js.map +1 -0
- package/dist/ssr/content/chart-state-timeline.js +124 -0
- package/dist/ssr/content/chart-state-timeline.js.map +1 -0
- package/dist/ssr/content/code-highlight.js +144 -0
- package/dist/ssr/content/code-highlight.js.map +1 -0
- package/dist/ssr/content/file-tree.js +93 -0
- package/dist/ssr/content/file-tree.js.map +1 -0
- package/dist/ssr/content/file-view-preview.js +112 -0
- package/dist/ssr/content/file-view-preview.js.map +1 -0
- package/dist/ssr/content/index.js +16 -0
- package/dist/ssr/content/index.js.map +1 -0
- package/dist/ssr/feedback/InlineGuidance.js +26 -0
- package/dist/ssr/feedback/InlineGuidance.js.map +1 -0
- package/dist/ssr/feedback/Tooltip.js +156 -0
- package/dist/ssr/feedback/Tooltip.js.map +1 -0
- package/dist/ssr/feedback/dialog-core.js +207 -0
- package/dist/ssr/feedback/dialog-core.js.map +1 -0
- package/dist/ssr/feedback/index.js +6 -0
- package/dist/ssr/feedback/index.js.map +1 -0
- package/dist/ssr/feedback/prompts.js +703 -0
- package/dist/ssr/feedback/prompts.js.map +1 -0
- package/dist/ssr/feedback/toast.js +271 -0
- package/dist/ssr/feedback/toast.js.map +1 -0
- package/dist/ssr/feedback/tooltip-position.js +25 -0
- package/dist/ssr/feedback/tooltip-position.js.map +1 -0
- package/dist/ssr/index.js +11 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/ssr/inputs/AutocompleteEditor.js +463 -0
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -0
- package/dist/ssr/inputs/AutocompleteSelect.js +420 -0
- package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -0
- package/dist/ssr/inputs/Checkbox.js +75 -0
- package/dist/ssr/inputs/Checkbox.js.map +1 -0
- package/dist/ssr/inputs/CheckboxCard.js +69 -0
- package/dist/ssr/inputs/CheckboxCard.js.map +1 -0
- package/dist/ssr/inputs/ChoiceGroups.js +101 -0
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -0
- package/dist/ssr/inputs/ChoiceInputs.js +250 -0
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -0
- package/dist/ssr/inputs/Combobox.js +177 -0
- package/dist/ssr/inputs/Combobox.js.map +1 -0
- package/dist/ssr/inputs/DatePicker.js +629 -0
- package/dist/ssr/inputs/DatePicker.js.map +1 -0
- package/dist/ssr/inputs/FileInputs.js +543 -0
- package/dist/ssr/inputs/FileInputs.js.map +1 -0
- package/dist/ssr/inputs/MultiSelectInput.js +347 -0
- package/dist/ssr/inputs/MultiSelectInput.js.map +1 -0
- package/dist/ssr/inputs/NumberInput.js +177 -0
- package/dist/ssr/inputs/NumberInput.js.map +1 -0
- package/dist/ssr/inputs/Select.js +308 -0
- package/dist/ssr/inputs/Select.js.map +1 -0
- package/dist/ssr/inputs/SelectChip.js +129 -0
- package/dist/ssr/inputs/SelectChip.js.map +1 -0
- package/dist/ssr/inputs/SpecialInputs.js +116 -0
- package/dist/ssr/inputs/SpecialInputs.js.map +1 -0
- package/dist/ssr/inputs/Switch.js +62 -0
- package/dist/ssr/inputs/Switch.js.map +1 -0
- package/dist/ssr/inputs/TagEditor.js +280 -0
- package/dist/ssr/inputs/TagEditor.js.map +1 -0
- package/dist/ssr/inputs/TagsInput.js +122 -0
- package/dist/ssr/inputs/TagsInput.js.map +1 -0
- package/dist/ssr/inputs/TemplateEditor.js +164 -0
- package/dist/ssr/inputs/TemplateEditor.js.map +1 -0
- package/dist/ssr/inputs/TextInput.js +211 -0
- package/dist/ssr/inputs/TextInput.js.map +1 -0
- package/dist/ssr/inputs/choice.js +188 -0
- package/dist/ssr/inputs/choice.js.map +1 -0
- package/dist/ssr/inputs/completion/behaviors.js +108 -0
- package/dist/ssr/inputs/completion/behaviors.js.map +1 -0
- package/dist/ssr/inputs/completion/engine.js +103 -0
- package/dist/ssr/inputs/completion/engine.js.map +1 -0
- package/dist/ssr/inputs/completion/index.js +4 -0
- package/dist/ssr/inputs/completion/index.js.map +1 -0
- package/dist/ssr/inputs/completion/overlay.js +25 -0
- package/dist/ssr/inputs/completion/overlay.js.map +1 -0
- package/dist/ssr/inputs/date-picker.js +123 -0
- package/dist/ssr/inputs/date-picker.js.map +1 -0
- package/dist/ssr/inputs/editor-dom.js +26 -0
- package/dist/ssr/inputs/editor-dom.js.map +1 -0
- package/dist/ssr/inputs/field-contract.js +9 -0
- package/dist/ssr/inputs/field-contract.js.map +1 -0
- package/dist/ssr/inputs/icon-options.js +46 -0
- package/dist/ssr/inputs/icon-options.js.map +1 -0
- package/dist/ssr/inputs/image-crop.js +145 -0
- package/dist/ssr/inputs/image-crop.js.map +1 -0
- package/dist/ssr/inputs/index.js +23 -0
- package/dist/ssr/inputs/index.js.map +1 -0
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +516 -0
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -0
- package/dist/ssr/inputs/markdown/Toolbar.js +115 -0
- package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -0
- package/dist/ssr/inputs/markdown/actions.js +140 -0
- package/dist/ssr/inputs/markdown/actions.js.map +1 -0
- package/dist/ssr/inputs/markdown/active-formats.js +36 -0
- package/dist/ssr/inputs/markdown/active-formats.js.map +1 -0
- package/dist/ssr/inputs/markdown/behaviors.js +63 -0
- package/dist/ssr/inputs/markdown/behaviors.js.map +1 -0
- package/dist/ssr/inputs/markdown/code-zone.js +8 -0
- package/dist/ssr/inputs/markdown/code-zone.js.map +1 -0
- package/dist/ssr/internal/color.js +18 -0
- package/dist/ssr/internal/color.js.map +1 -0
- package/dist/ssr/internal/field.js +90 -0
- package/dist/ssr/internal/field.js.map +1 -0
- package/dist/ssr/internal/portal.js +17 -0
- package/dist/ssr/internal/portal.js.map +1 -0
- package/dist/ssr/intl/Format.js +192 -0
- package/dist/ssr/intl/Format.js.map +1 -0
- package/dist/ssr/intl/index.js +3 -0
- package/dist/ssr/intl/index.js.map +1 -0
- package/dist/ssr/intl/locale.js +63 -0
- package/dist/ssr/intl/locale.js.map +1 -0
- package/dist/ssr/intl/messages.js +753 -0
- package/dist/ssr/intl/messages.js.map +1 -0
- package/dist/ssr/layout/AppOverview.js +85 -0
- package/dist/ssr/layout/AppOverview.js.map +1 -0
- package/dist/ssr/layout/AppWorkspace.js +976 -0
- package/dist/ssr/layout/AppWorkspace.js.map +1 -0
- package/dist/ssr/layout/DataPanel.js +101 -0
- package/dist/ssr/layout/DataPanel.js.map +1 -0
- package/dist/ssr/layout/DetailPanel.js +284 -0
- package/dist/ssr/layout/DetailPanel.js.map +1 -0
- package/dist/ssr/layout/Discussion.js +319 -0
- package/dist/ssr/layout/Discussion.js.map +1 -0
- package/dist/ssr/layout/FloatingWindow.js +259 -0
- package/dist/ssr/layout/FloatingWindow.js.map +1 -0
- package/dist/ssr/layout/PanelDialog.js +136 -0
- package/dist/ssr/layout/PanelDialog.js.map +1 -0
- package/dist/ssr/layout/PanelHeader.js +45 -0
- package/dist/ssr/layout/PanelHeader.js.map +1 -0
- package/dist/ssr/layout/Panes.js +678 -0
- package/dist/ssr/layout/Panes.js.map +1 -0
- package/dist/ssr/layout/ScrollArea.js +18 -0
- package/dist/ssr/layout/ScrollArea.js.map +1 -0
- package/dist/ssr/layout/Settings.js +219 -0
- package/dist/ssr/layout/Settings.js.map +1 -0
- package/dist/ssr/layout/SettingsCollection.js +150 -0
- package/dist/ssr/layout/SettingsCollection.js.map +1 -0
- package/dist/ssr/layout/SettingsModal.js +156 -0
- package/dist/ssr/layout/SettingsModal.js.map +1 -0
- package/dist/ssr/layout/app-workspace-controller.js +419 -0
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -0
- package/dist/ssr/layout/app-workspace-state.js +125 -0
- package/dist/ssr/layout/app-workspace-state.js.map +1 -0
- package/dist/ssr/layout/floating-window-geometry.js +15 -0
- package/dist/ssr/layout/floating-window-geometry.js.map +1 -0
- package/dist/ssr/layout/index.js +17 -0
- package/dist/ssr/layout/index.js.map +1 -0
- package/dist/ssr/layout/panes-layout.js +436 -0
- package/dist/ssr/layout/panes-layout.js.map +1 -0
- package/dist/ssr/layout/stable-id.js +17 -0
- package/dist/ssr/layout/stable-id.js.map +1 -0
- package/dist/ssr/semantics.js +2 -0
- package/dist/ssr/semantics.js.map +1 -0
- package/dist/ssr/surfaces/Avatar.js +43 -0
- package/dist/ssr/surfaces/Avatar.js.map +1 -0
- package/dist/ssr/surfaces/DescriptionList.js +25 -0
- package/dist/ssr/surfaces/DescriptionList.js.map +1 -0
- package/dist/ssr/surfaces/LinkCard.js +25 -0
- package/dist/ssr/surfaces/LinkCard.js.map +1 -0
- package/dist/ssr/surfaces/NotFoundState.js +38 -0
- package/dist/ssr/surfaces/NotFoundState.js.map +1 -0
- package/dist/ssr/surfaces/NoticeCard.js +83 -0
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -0
- package/dist/ssr/surfaces/Paper.js +32 -0
- package/dist/ssr/surfaces/Paper.js.map +1 -0
- package/dist/ssr/surfaces/Placeholder.js +76 -0
- package/dist/ssr/surfaces/Placeholder.js.map +1 -0
- package/dist/ssr/surfaces/ProgressBar.js +13 -0
- package/dist/ssr/surfaces/ProgressBar.js.map +1 -0
- package/dist/ssr/surfaces/StatCell.js +80 -0
- package/dist/ssr/surfaces/StatCell.js.map +1 -0
- package/dist/ssr/surfaces/StatGrid.js +62 -0
- package/dist/ssr/surfaces/StatGrid.js.map +1 -0
- package/dist/ssr/surfaces/StatusBadge.js +38 -0
- package/dist/ssr/surfaces/StatusBadge.js.map +1 -0
- package/dist/ssr/surfaces/Tag.js +32 -0
- package/dist/ssr/surfaces/Tag.js.map +1 -0
- package/dist/ssr/surfaces/index.js +13 -0
- package/dist/ssr/surfaces/index.js.map +1 -0
- package/dist/ssr/widgets/Widget.js +54 -0
- package/dist/ssr/widgets/Widget.js.map +1 -0
- package/dist/ssr/widgets/WidgetHero.js +23 -0
- package/dist/ssr/widgets/WidgetHero.js.map +1 -0
- package/dist/ssr/widgets/WidgetList.js +73 -0
- package/dist/ssr/widgets/WidgetList.js.map +1 -0
- package/dist/ssr/widgets/WidgetPills.js +40 -0
- package/dist/ssr/widgets/WidgetPills.js.map +1 -0
- package/dist/ssr/widgets/WidgetStat.js +45 -0
- package/dist/ssr/widgets/WidgetStat.js.map +1 -0
- package/dist/ssr/widgets/WidgetStatus.js +23 -0
- package/dist/ssr/widgets/WidgetStatus.js.map +1 -0
- package/dist/ssr/widgets/index.js +7 -0
- package/dist/ssr/widgets/index.js.map +1 -0
- package/dist/styles.css +1 -0
- package/dist/tabler-icons-q30jt7jk.woff2 +0 -0
- package/dist/tabler.css +4 -0
- package/package.json +77 -0
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
import { ssrStyleProperty as _$ssrStyleProperty } from "solid-js/web";
|
|
2
|
+
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
3
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
4
|
+
import { ssr as _$ssr } from "solid-js/web";
|
|
5
|
+
import { escape as _$escape } from "solid-js/web";
|
|
6
|
+
var _tmpl$ = ["<span class=\"k2b-data-table__header-title\">", "</span>"],
|
|
7
|
+
_tmpl$2 = ["<span class=\"k2b-data-table__header-subtitle\">", "</span>"],
|
|
8
|
+
_tmpl$3 = ["<div class=\"k2b-data-table__header-content\"", ">", "</div>"],
|
|
9
|
+
_tmpl$4 = ["<a", " class=\"k2b-data-table__header-content k2b-data-table__sort\"", "><span class=\"k2b-data-table__header-line\">", "<i class=\"", "\"", " aria-hidden=\"true\"></i></span></a>"],
|
|
10
|
+
_tmpl$5 = ["<tr aria-hidden=\"true\"><td class=\"k2b-data-table__fill\"", "></td></tr>"],
|
|
11
|
+
_tmpl$6 = "<div class=\"k2b-data-table__sentinel\" aria-hidden=\"true\"></div>",
|
|
12
|
+
_tmpl$7 = ["<div role=\"region\"", " tabindex=\"0\" class=\"k2b-table-wrap\"", "><table", "><thead class=\"k2b-data-table__head\"", "><tr class=\"k2b-data-table__head-row\">", "</tr></thead><tbody>", "</tbody>", "</table>", "</div>"],
|
|
13
|
+
_tmpl$8 = ["<th scope=\"col\" class=\"", "\"", ">", "</th>"],
|
|
14
|
+
_tmpl$9 = ["<tr><td class=\"k2b-data-table__empty\"", ">", "</td></tr>"],
|
|
15
|
+
_tmpl$0 = ["<tr class=\"", "\"", ">", "</tr>"],
|
|
16
|
+
_tmpl$1 = ["<td class=\"", "\"", "><div", ">", "</div></td>"],
|
|
17
|
+
_tmpl$10 = ["<tfoot class=\"k2b-data-table__foot\" data-sticky=\"true\"><tr class=\"k2b-data-table__foot-row\">", "</tr></tfoot>"],
|
|
18
|
+
_tmpl$11 = ["<td class=\"k2b-data-table__footer-cell\"", ">", "</td>"],
|
|
19
|
+
_tmpl$12 = ["<div class=\"k2b-data-table__scrollbar\"", " aria-hidden=\"true\"><span style=\"", "\"></span></div>"],
|
|
20
|
+
_tmpl$13 = ["<div class=\"", "\">", "</div>"],
|
|
21
|
+
_tmpl$14 = ["<span", ">", "</span>"],
|
|
22
|
+
_tmpl$15 = ["<footer class=\"", "\">", "</footer>"];
|
|
23
|
+
import { createContext, createEffect, createMemo, createSignal, createUniqueId, For, onCleanup, onMount, Show, useContext } from "solid-js";
|
|
24
|
+
import { Dynamic } from "solid-js/web";
|
|
25
|
+
import { useUiMessages } from "../intl/messages";
|
|
26
|
+
import { useLocale } from "../intl/locale";
|
|
27
|
+
import { PanelHeader } from "../layout/PanelHeader";
|
|
28
|
+
import { Paper } from "../surfaces/Paper";
|
|
29
|
+
import Placeholder from "../surfaces/Placeholder";
|
|
30
|
+
const DataTablePanelContext = createContext();
|
|
31
|
+
const defaultRender = (value, locale, messages) => {
|
|
32
|
+
if (value === null || value === undefined || value === "") return "—";
|
|
33
|
+
if (value instanceof Date) return value.toLocaleString(locale);
|
|
34
|
+
if (typeof value === "boolean") return value ? messages.yes : messages.no;
|
|
35
|
+
if (typeof value === "number" || typeof value === "bigint") return String(value);
|
|
36
|
+
if (typeof value === "string") return value;
|
|
37
|
+
return JSON.stringify(value);
|
|
38
|
+
};
|
|
39
|
+
const renderColumnPart = (part, col) => {
|
|
40
|
+
if (typeof part === "function") return part({
|
|
41
|
+
col
|
|
42
|
+
});
|
|
43
|
+
return part;
|
|
44
|
+
};
|
|
45
|
+
const rowInteractiveSelector = ["a[href]", "button", "input", "select", "textarea", "summary", "[contenteditable]", "[role='button']", "[role='checkbox']", "[role='link']", "[role='menuitem']", "[role='option']", "[role='radio']", "[role='switch']", "[role='tab']", "[tabindex]"].join(",");
|
|
46
|
+
const isNestedRowControl = event => event.target instanceof Element && event.target.closest(rowInteractiveSelector) !== event.currentTarget;
|
|
47
|
+
const scrollbarMetrics = (viewportSize, contentSize, scrollOffset) => {
|
|
48
|
+
if (viewportSize <= 0 || contentSize <= viewportSize + 1) return {
|
|
49
|
+
overflow: false,
|
|
50
|
+
offset: 0,
|
|
51
|
+
size: 0
|
|
52
|
+
};
|
|
53
|
+
const size = Math.min(viewportSize, Math.max(24, viewportSize * viewportSize / contentSize));
|
|
54
|
+
const offset = scrollOffset / (contentSize - viewportSize) * (viewportSize - size);
|
|
55
|
+
return {
|
|
56
|
+
overflow: true,
|
|
57
|
+
offset,
|
|
58
|
+
size
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
function DataTableRoot(props) {
|
|
62
|
+
const messages = useUiMessages();
|
|
63
|
+
const locale = useLocale();
|
|
64
|
+
const [hoveredColumn, setHoveredColumn] = createSignal(null);
|
|
65
|
+
const [scrollbars, setScrollbars] = createSignal({
|
|
66
|
+
x: {
|
|
67
|
+
overflow: false,
|
|
68
|
+
offset: 0,
|
|
69
|
+
size: 0
|
|
70
|
+
},
|
|
71
|
+
y: {
|
|
72
|
+
overflow: false,
|
|
73
|
+
offset: 0,
|
|
74
|
+
size: 0
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
const [scrollbarEnhanced, setScrollbarEnhanced] = createSignal(false);
|
|
78
|
+
const [scrolling, setScrolling] = createSignal(false);
|
|
79
|
+
const panel = useContext(DataTablePanelContext);
|
|
80
|
+
let tableRef;
|
|
81
|
+
let scrollRef;
|
|
82
|
+
let loadMoreRef;
|
|
83
|
+
let scrollingTimeout;
|
|
84
|
+
let scrollbarDragOffset = 0;
|
|
85
|
+
let hasMore = false;
|
|
86
|
+
let loadingMore = false;
|
|
87
|
+
let onLoadMore;
|
|
88
|
+
let loadMoreRequested = false;
|
|
89
|
+
let previousRowsLength = props.rows.length;
|
|
90
|
+
let previousLoadingMore = !!props.loadingMore;
|
|
91
|
+
let previousHasMore = !!props.hasMore;
|
|
92
|
+
const rowId = row => props.getRowId?.(row);
|
|
93
|
+
const isInteractive = () => !!props.onRowClick || !!props.onRowDoubleClick;
|
|
94
|
+
const shouldHoverRows = () => props.hoverRows ?? isInteractive();
|
|
95
|
+
const shouldRenderLoadMoreSentinel = () => !!props.onLoadMore;
|
|
96
|
+
const labelledBy = () => props.ariaLabelledBy ?? (panel?.hasHeading() ? panel.headingId : undefined);
|
|
97
|
+
const surface = () => props.surface ?? (props.class ? "plain" : "paper");
|
|
98
|
+
const cellContentClass = () => props.cellContentClass ?? "k2b-data-table__cell-text";
|
|
99
|
+
const tableClass = () => `k2b-data-table ${props.tableClass ?? ""}`.trim();
|
|
100
|
+
const columnHighlighted = index => props.highlightColumns !== false && shouldHoverRows() && hoveredColumn() === index ? "true" : undefined;
|
|
101
|
+
const setHoveredColumnIfEnabled = index => {
|
|
102
|
+
if (shouldHoverRows()) setHoveredColumn(index);
|
|
103
|
+
};
|
|
104
|
+
const isNearBottom = () => {
|
|
105
|
+
if (!scrollRef) return false;
|
|
106
|
+
return scrollRef.scrollTop + scrollRef.clientHeight >= scrollRef.scrollHeight - 240;
|
|
107
|
+
};
|
|
108
|
+
const maybeLoadMore = () => {
|
|
109
|
+
if (!hasMore || loadingMore || loadMoreRequested || !onLoadMore) return;
|
|
110
|
+
if (!isNearBottom()) return;
|
|
111
|
+
loadMoreRequested = true;
|
|
112
|
+
try {
|
|
113
|
+
onLoadMore();
|
|
114
|
+
} catch (error) {
|
|
115
|
+
loadMoreRequested = false;
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const syncScrollbars = () => {
|
|
120
|
+
if (!scrollRef) return;
|
|
121
|
+
setScrollbars({
|
|
122
|
+
x: scrollbarMetrics(scrollRef.clientWidth, scrollRef.scrollWidth, scrollRef.scrollLeft),
|
|
123
|
+
y: scrollbarMetrics(scrollRef.clientHeight, scrollRef.scrollHeight, scrollRef.scrollTop)
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
const revealScrollbars = () => {
|
|
127
|
+
setScrolling(true);
|
|
128
|
+
if (scrollingTimeout !== undefined) clearTimeout(scrollingTimeout);
|
|
129
|
+
scrollingTimeout = setTimeout(() => {
|
|
130
|
+
setScrolling(false);
|
|
131
|
+
scrollingTimeout = undefined;
|
|
132
|
+
}, 700);
|
|
133
|
+
};
|
|
134
|
+
const onScroll = () => {
|
|
135
|
+
syncScrollbars();
|
|
136
|
+
revealScrollbars();
|
|
137
|
+
maybeLoadMore();
|
|
138
|
+
};
|
|
139
|
+
const scrollFromPointer = (event, axis) => {
|
|
140
|
+
if (!scrollRef) return;
|
|
141
|
+
const track = event.currentTarget;
|
|
142
|
+
const metrics = scrollbars()[axis];
|
|
143
|
+
const rect = track.getBoundingClientRect();
|
|
144
|
+
const trackSize = axis === "y" ? rect.height : rect.width;
|
|
145
|
+
const pointerOffset = axis === "y" ? event.clientY - rect.top : event.clientX - rect.left;
|
|
146
|
+
const available = Math.max(1, trackSize - metrics.size);
|
|
147
|
+
const thumbOffset = Math.min(available, Math.max(0, pointerOffset - scrollbarDragOffset));
|
|
148
|
+
const maxScroll = axis === "y" ? scrollRef.scrollHeight - scrollRef.clientHeight : scrollRef.scrollWidth - scrollRef.clientWidth;
|
|
149
|
+
if (axis === "y") scrollRef.scrollTop = thumbOffset / available * maxScroll;else scrollRef.scrollLeft = thumbOffset / available * maxScroll;
|
|
150
|
+
syncScrollbars();
|
|
151
|
+
revealScrollbars();
|
|
152
|
+
};
|
|
153
|
+
const startScrollbarDrag = (event, axis) => {
|
|
154
|
+
event.preventDefault();
|
|
155
|
+
const metrics = scrollbars()[axis];
|
|
156
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
157
|
+
const pointerOffset = axis === "y" ? event.clientY - rect.top : event.clientX - rect.left;
|
|
158
|
+
scrollbarDragOffset = event.target === event.currentTarget ? metrics.size / 2 : Math.min(metrics.size, Math.max(0, pointerOffset - metrics.offset));
|
|
159
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
160
|
+
scrollFromPointer(event, axis);
|
|
161
|
+
};
|
|
162
|
+
const valueOf = (row, col) => {
|
|
163
|
+
if (typeof col.value === "function") return col.value(row);
|
|
164
|
+
if (col.value) return row[col.value];
|
|
165
|
+
return undefined;
|
|
166
|
+
};
|
|
167
|
+
const columnAlignments = createMemo(() => {
|
|
168
|
+
const alignments = new Map();
|
|
169
|
+
for (const col of props.columns) {
|
|
170
|
+
if (col.align) {
|
|
171
|
+
alignments.set(col.id, col.align);
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
let align = "left";
|
|
175
|
+
for (const row of props.rows) {
|
|
176
|
+
const value = valueOf(row, col);
|
|
177
|
+
if (value === null || value === undefined || value === "") continue;
|
|
178
|
+
align = typeof value === "number" || typeof value === "bigint" ? "right" : "left";
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
alignments.set(col.id, align);
|
|
182
|
+
}
|
|
183
|
+
return alignments;
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
/** `data-align` mirrors Cloud's `text-left/center/right` on the same cell. */
|
|
187
|
+
const alignAttr = col => {
|
|
188
|
+
const align = columnAlignments().get(col.id) ?? "left";
|
|
189
|
+
return align === "left" ? undefined : align;
|
|
190
|
+
};
|
|
191
|
+
const sortKeyOf = col => col.sortable === true ? col.id : typeof col.sortable === "string" ? col.sortable : null;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Sorting is a link, not a handler: these tables are server-rendered, so the
|
|
195
|
+
* order belongs in the URL. Clicking the active column flips its direction.
|
|
196
|
+
*/
|
|
197
|
+
const sortLinkFor = col => {
|
|
198
|
+
const key = sortKeyOf(col);
|
|
199
|
+
if (!key || !props.sortHref) return null;
|
|
200
|
+
const active = props.sort?.key === key;
|
|
201
|
+
const direction = active && props.sort?.direction === "desc" ? "asc" : "desc";
|
|
202
|
+
return {
|
|
203
|
+
href: props.sortHref({
|
|
204
|
+
key,
|
|
205
|
+
direction
|
|
206
|
+
}),
|
|
207
|
+
active,
|
|
208
|
+
direction
|
|
209
|
+
};
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
/** Only a sortable column carries a sort state; the rest carry none at all. */
|
|
213
|
+
const ariaSortFor = col => {
|
|
214
|
+
const sort = sortLinkFor(col);
|
|
215
|
+
if (!sort) return undefined;
|
|
216
|
+
if (!sort.active) return "none";
|
|
217
|
+
return props.sort?.direction === "asc" ? "ascending" : "descending";
|
|
218
|
+
};
|
|
219
|
+
const renderHeaderDefault = col => {
|
|
220
|
+
const sort = sortLinkFor(col);
|
|
221
|
+
const title = [_$ssr(_tmpl$, _$escape(renderColumnPart(col.header, col))), _$createComponent(Show, {
|
|
222
|
+
get when() {
|
|
223
|
+
return col.subtitle !== undefined;
|
|
224
|
+
},
|
|
225
|
+
get children() {
|
|
226
|
+
return _$ssr(_tmpl$2, _$escape(renderColumnPart(col.subtitle, col)));
|
|
227
|
+
}
|
|
228
|
+
})];
|
|
229
|
+
if (!sort) return _$ssr(_tmpl$3, _$ssrAttribute("data-align", _$escape(alignAttr(col), true), false), _$escape(title));
|
|
230
|
+
return _$ssr(_tmpl$4, _$ssrAttribute("href", _$escape(sort.href, true), false), _$ssrAttribute("data-align", _$escape(alignAttr(col), true), false), _$escape(title), `k2b-data-table__sort-icon ti ${props.sort?.direction === "asc" && sort.active ? "ti-arrow-up" : "ti-arrow-down"}`, _$ssrAttribute("data-active", sort.active ? "true" : _$escape(undefined, true), false));
|
|
231
|
+
};
|
|
232
|
+
const renderValueDefault = value => defaultRender(value, locale(), messages());
|
|
233
|
+
const renderCellDefault = (row, col) => renderValueDefault(valueOf(row, col));
|
|
234
|
+
const onRowKeyDown = (event, row) => {
|
|
235
|
+
if (!isInteractive()) return;
|
|
236
|
+
if (isNestedRowControl(event)) return;
|
|
237
|
+
if (event.key !== "Enter" && event.key !== " ") return;
|
|
238
|
+
event.preventDefault();
|
|
239
|
+
(props.onRowClick ?? props.onRowDoubleClick)?.(row);
|
|
240
|
+
};
|
|
241
|
+
const onRowClick = (event, row) => {
|
|
242
|
+
if (isNestedRowControl(event)) return;
|
|
243
|
+
props.onRowClick?.(row);
|
|
244
|
+
};
|
|
245
|
+
const onRowDoubleClick = (event, row) => {
|
|
246
|
+
if (isNestedRowControl(event)) return;
|
|
247
|
+
props.onRowDoubleClick?.(row);
|
|
248
|
+
};
|
|
249
|
+
const rowClass = row => {
|
|
250
|
+
if (typeof props.rowClass === "function") return props.rowClass(row) ?? "";
|
|
251
|
+
return props.rowClass ?? "";
|
|
252
|
+
};
|
|
253
|
+
onMount(() => {
|
|
254
|
+
if (typeof IntersectionObserver === "undefined" || !scrollRef || !loadMoreRef) return;
|
|
255
|
+
const observer = new IntersectionObserver(entries => {
|
|
256
|
+
if (entries.some(entry => entry.isIntersecting)) maybeLoadMore();
|
|
257
|
+
}, {
|
|
258
|
+
root: scrollRef,
|
|
259
|
+
rootMargin: "240px"
|
|
260
|
+
});
|
|
261
|
+
observer.observe(loadMoreRef);
|
|
262
|
+
onCleanup(() => observer.disconnect());
|
|
263
|
+
});
|
|
264
|
+
onMount(() => {
|
|
265
|
+
setScrollbarEnhanced(true);
|
|
266
|
+
syncScrollbars();
|
|
267
|
+
const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(syncScrollbars);
|
|
268
|
+
if (scrollRef) observer?.observe(scrollRef);
|
|
269
|
+
if (tableRef) observer?.observe(tableRef);
|
|
270
|
+
onCleanup(() => {
|
|
271
|
+
observer?.disconnect();
|
|
272
|
+
if (scrollingTimeout !== undefined) clearTimeout(scrollingTimeout);
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
createEffect(() => {
|
|
276
|
+
const rowsLength = props.rows.length;
|
|
277
|
+
const nextHasMore = !!props.hasMore;
|
|
278
|
+
const nextLoadingMore = !!props.loadingMore;
|
|
279
|
+
if (rowsLength !== previousRowsLength || previousLoadingMore && !nextLoadingMore || !previousHasMore && nextHasMore) {
|
|
280
|
+
loadMoreRequested = false;
|
|
281
|
+
}
|
|
282
|
+
previousRowsLength = rowsLength;
|
|
283
|
+
previousLoadingMore = nextLoadingMore;
|
|
284
|
+
previousHasMore = nextHasMore;
|
|
285
|
+
hasMore = nextHasMore;
|
|
286
|
+
loadingMore = nextLoadingMore;
|
|
287
|
+
onLoadMore = props.onLoadMore;
|
|
288
|
+
maybeLoadMore();
|
|
289
|
+
queueMicrotask(syncScrollbars);
|
|
290
|
+
});
|
|
291
|
+
return _$createComponent(Show, {
|
|
292
|
+
get when() {
|
|
293
|
+
return props.columns.length > 0;
|
|
294
|
+
},
|
|
295
|
+
get fallback() {
|
|
296
|
+
return _$createComponent(Placeholder, {
|
|
297
|
+
surface: "paper",
|
|
298
|
+
get description() {
|
|
299
|
+
return messages().noColumns;
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
},
|
|
303
|
+
get children() {
|
|
304
|
+
return _$createComponent(Dynamic, {
|
|
305
|
+
get component() {
|
|
306
|
+
return surface() === "paper" ? Paper : "div";
|
|
307
|
+
},
|
|
308
|
+
get ["class"]() {
|
|
309
|
+
return `k2b-table-shell ${props.class ?? ""}`;
|
|
310
|
+
},
|
|
311
|
+
get ["data-surface"]() {
|
|
312
|
+
return surface();
|
|
313
|
+
},
|
|
314
|
+
get ["data-has-footer"]() {
|
|
315
|
+
return props.footer ? "true" : undefined;
|
|
316
|
+
},
|
|
317
|
+
get ["data-overflow-x"]() {
|
|
318
|
+
return scrollbars().x.overflow ? "true" : undefined;
|
|
319
|
+
},
|
|
320
|
+
get ["data-overflow-y"]() {
|
|
321
|
+
return scrollbars().y.overflow ? "true" : undefined;
|
|
322
|
+
},
|
|
323
|
+
get ["data-scrollbar-enhanced"]() {
|
|
324
|
+
return scrollbarEnhanced() ? "true" : undefined;
|
|
325
|
+
},
|
|
326
|
+
get ["data-scrolling"]() {
|
|
327
|
+
return scrolling() ? "true" : undefined;
|
|
328
|
+
},
|
|
329
|
+
onMouseLeave: () => setHoveredColumn(null),
|
|
330
|
+
get children() {
|
|
331
|
+
return [_$ssr(_tmpl$7, _$ssrAttribute("aria-label", labelledBy() ? _$escape(undefined, true) : _$escape(props.ariaLabel ?? messages().dataTable, true), false) + _$ssrAttribute("aria-labelledby", _$escape(labelledBy(), true), false), _$ssrAttribute("data-density", props.density === "compact" ? "compact" : _$escape(undefined, true), false) + _$ssrAttribute("data-has-footer", props.footer ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-surface", _$escape(surface(), true), false) + _$ssrAttribute("data-scroll-preserve", _$escape(props.scrollPreserveKey || undefined, true), false), _$ssrAttribute("class", _$escape(tableClass(), true), false) + _$ssrAttribute("data-fill", props.fillHeight ? "true" : _$escape(undefined, true), false), _$ssrAttribute("data-sticky", props.stickyHeader === false ? _$escape(undefined, true) : "true", false), _$escape(_$createComponent(For, {
|
|
332
|
+
get each() {
|
|
333
|
+
return props.columns;
|
|
334
|
+
},
|
|
335
|
+
children: (col, index) => _$ssr(_tmpl$8, `${_$escape(col.headerClass ?? "", true)} ${_$escape(col.class ?? "", true)}`, _$ssrAttribute("data-align", _$escape(alignAttr(col), true), false) + _$ssrAttribute("data-highlighted", _$escape(columnHighlighted(index()), true), false) + _$ssrAttribute("aria-sort", _$escape(ariaSortFor(col), true), false), props.renderHeader ? _$escape(props.renderHeader({
|
|
336
|
+
col,
|
|
337
|
+
render: () => renderHeaderDefault(col)
|
|
338
|
+
})) : _$escape(renderHeaderDefault(col)))
|
|
339
|
+
})), _$escape(_$createComponent(Show, {
|
|
340
|
+
get when() {
|
|
341
|
+
return props.rows.length > 0;
|
|
342
|
+
},
|
|
343
|
+
get fallback() {
|
|
344
|
+
return _$ssr(_tmpl$9, _$ssrAttribute("colspan", _$escape(props.columns.length, true), false), _$escape(_$createComponent(Placeholder, {
|
|
345
|
+
get description() {
|
|
346
|
+
return props.empty ?? messages().noRecords;
|
|
347
|
+
}
|
|
348
|
+
})));
|
|
349
|
+
},
|
|
350
|
+
get children() {
|
|
351
|
+
return [_$createComponent(For, {
|
|
352
|
+
get each() {
|
|
353
|
+
return props.rows;
|
|
354
|
+
},
|
|
355
|
+
children: row => {
|
|
356
|
+
const id = () => rowId(row);
|
|
357
|
+
const isSelected = () => props.selectedRowId && id() === props.selectedRowId;
|
|
358
|
+
return _$ssr(_tmpl$0, `k2b-data-table__row ${_$escape(rowClass(row), true)}`, _$ssrAttribute("data-hover", shouldHoverRows() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-clickable", shouldHoverRows() && isInteractive() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-selected", isSelected() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("tabindex", isInteractive() ? 0 : _$escape(undefined, true), false), _$escape(_$createComponent(For, {
|
|
359
|
+
get each() {
|
|
360
|
+
return props.columns;
|
|
361
|
+
},
|
|
362
|
+
children: (col, index) => {
|
|
363
|
+
const value = () => valueOf(row, col);
|
|
364
|
+
return _$ssr(_tmpl$1, `${_$escape(col.cellClass ?? "", true)} ${_$escape(col.class ?? "", true)}`, _$ssrAttribute("data-align", _$escape(alignAttr(col), true), false) + _$ssrAttribute("data-valign", props.verticalAlign && props.verticalAlign !== "middle" ? _$escape(props.verticalAlign, true) : _$escape(undefined, true), false) + _$ssrAttribute("data-highlighted", _$escape(columnHighlighted(index()), true), false), _$ssrAttribute("class", _$escape(cellContentClass(), true), false), props.renderCell ? _$escape(props.renderCell({
|
|
365
|
+
row,
|
|
366
|
+
col,
|
|
367
|
+
value: value(),
|
|
368
|
+
render: v => renderCellDefault(row, {
|
|
369
|
+
...col,
|
|
370
|
+
value: () => v
|
|
371
|
+
})
|
|
372
|
+
})) : _$escape(renderValueDefault(value())));
|
|
373
|
+
}
|
|
374
|
+
})));
|
|
375
|
+
}
|
|
376
|
+
}), _$createComponent(Show, {
|
|
377
|
+
get when() {
|
|
378
|
+
return props.fillHeight;
|
|
379
|
+
},
|
|
380
|
+
get children() {
|
|
381
|
+
return _$ssr(_tmpl$5, _$ssrAttribute("colspan", _$escape(props.columns.length, true), false));
|
|
382
|
+
}
|
|
383
|
+
})];
|
|
384
|
+
}
|
|
385
|
+
})), _$escape(_$createComponent(Show, {
|
|
386
|
+
get when() {
|
|
387
|
+
return props.footer;
|
|
388
|
+
},
|
|
389
|
+
children: footer => _$ssr(_tmpl$10, _$escape(_$createComponent(For, {
|
|
390
|
+
get each() {
|
|
391
|
+
return props.columns;
|
|
392
|
+
},
|
|
393
|
+
children: (col, index) => {
|
|
394
|
+
const value = () => footer().values?.[col.id];
|
|
395
|
+
return _$ssr(_tmpl$11, _$ssrAttribute("data-align", _$escape(alignAttr(col), true), false) + _$ssrAttribute("data-highlighted", _$escape(columnHighlighted(index()), true), false), footer().renderCell ? _$escape(footer().renderCell({
|
|
396
|
+
col,
|
|
397
|
+
value: value(),
|
|
398
|
+
render: renderValueDefault
|
|
399
|
+
})) : _$escape(renderValueDefault(value())));
|
|
400
|
+
}
|
|
401
|
+
})))
|
|
402
|
+
})), _$escape(_$createComponent(Show, {
|
|
403
|
+
get when() {
|
|
404
|
+
return shouldRenderLoadMoreSentinel();
|
|
405
|
+
},
|
|
406
|
+
get children() {
|
|
407
|
+
return _$ssr(_tmpl$6);
|
|
408
|
+
}
|
|
409
|
+
}))), _$createComponent(For, {
|
|
410
|
+
each: ["y", "x"],
|
|
411
|
+
children: axis => _$ssr(_tmpl$12, _$ssrAttribute("data-axis", _$escape(axis, true), false) + _$ssrAttribute("data-overflow", scrollbars()[axis].overflow ? "true" : _$escape(undefined, true), false), _$ssrStyleProperty("--k2b-data-table-scroll-offset:", `${_$escape(scrollbars()[axis].offset, true)}px`) + _$ssrStyleProperty(";--k2b-data-table-scroll-size:", `${_$escape(scrollbars()[axis].size, true)}px`))
|
|
412
|
+
})];
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
const DataTablePanel = props => {
|
|
419
|
+
const headingId = `k2b-data-table-${createUniqueId()}-heading`;
|
|
420
|
+
const [hasHeading, setHasHeading] = createSignal(false);
|
|
421
|
+
const context = {
|
|
422
|
+
headingId,
|
|
423
|
+
hasHeading,
|
|
424
|
+
registerHeading: () => setHasHeading(true)
|
|
425
|
+
};
|
|
426
|
+
return _$createComponent(DataTablePanelContext.Provider, {
|
|
427
|
+
value: context,
|
|
428
|
+
get children() {
|
|
429
|
+
return _$createComponent(Paper, {
|
|
430
|
+
as: "section",
|
|
431
|
+
get ["class"]() {
|
|
432
|
+
return `k2b-data-panel ${props.class ?? ""}`;
|
|
433
|
+
},
|
|
434
|
+
get children() {
|
|
435
|
+
return props.children;
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
};
|
|
441
|
+
const DataTableHeader = props => {
|
|
442
|
+
const panel = useContext(DataTablePanelContext);
|
|
443
|
+
panel?.registerHeading();
|
|
444
|
+
return _$ssr(_tmpl$13, `k2b-data-panel__header ${_$escape(props.class ?? "", true)}`, _$escape(_$createComponent(PanelHeader, {
|
|
445
|
+
get title() {
|
|
446
|
+
return _$ssr(_tmpl$14, _$ssrAttribute("id", _$escape(panel?.headingId, true), false), _$escape(props.title));
|
|
447
|
+
},
|
|
448
|
+
get subtitle() {
|
|
449
|
+
return props.subtitle;
|
|
450
|
+
},
|
|
451
|
+
get actions() {
|
|
452
|
+
return props.children;
|
|
453
|
+
},
|
|
454
|
+
get as() {
|
|
455
|
+
return props.as;
|
|
456
|
+
},
|
|
457
|
+
get size() {
|
|
458
|
+
return props.size;
|
|
459
|
+
}
|
|
460
|
+
})));
|
|
461
|
+
};
|
|
462
|
+
const DataTableControls = props => _$ssr(_tmpl$13, `k2b-data-panel__controls ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
|
|
463
|
+
const DataTablePanelFooter = props => _$ssr(_tmpl$15, `k2b-data-panel__footer ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
|
|
464
|
+
const DataTable = DataTableRoot;
|
|
465
|
+
DataTable.Panel = DataTablePanel;
|
|
466
|
+
DataTable.Header = DataTableHeader;
|
|
467
|
+
DataTable.Controls = DataTableControls;
|
|
468
|
+
DataTable.Footer = DataTablePanelFooter;
|
|
469
|
+
export default DataTable;
|
|
470
|
+
//# sourceMappingURL=DataTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","createEffect","createMemo","createSignal","createUniqueId","For","onCleanup","onMount","Show","useContext","Dynamic","useUiMessages","useLocale","PanelHeader","Paper","Placeholder","DataTablePanelContext","defaultRender","value","locale","messages","undefined","Date","toLocaleString","yes","no","String","JSON","stringify","renderColumnPart","part","col","rowInteractiveSelector","join","isNestedRowControl","event","target","Element","closest","currentTarget","scrollbarMetrics","viewportSize","contentSize","scrollOffset","overflow","offset","size","Math","min","max","DataTableRoot","props","hoveredColumn","setHoveredColumn","scrollbars","setScrollbars","x","y","scrollbarEnhanced","setScrollbarEnhanced","scrolling","setScrolling","panel","tableRef","scrollRef","loadMoreRef","scrollingTimeout","scrollbarDragOffset","hasMore","loadingMore","onLoadMore","loadMoreRequested","previousRowsLength","rows","length","previousLoadingMore","previousHasMore","rowId","row","getRowId","isInteractive","onRowClick","onRowDoubleClick","shouldHoverRows","hoverRows","shouldRenderLoadMoreSentinel","labelledBy","ariaLabelledBy","hasHeading","headingId","surface","class","cellContentClass","tableClass","trim","columnHighlighted","index","highlightColumns","setHoveredColumnIfEnabled","isNearBottom","scrollTop","clientHeight","scrollHeight","maybeLoadMore","error","syncScrollbars","clientWidth","scrollWidth","scrollLeft","revealScrollbars","clearTimeout","setTimeout","onScroll","scrollFromPointer","axis","track","metrics","rect","getBoundingClientRect","trackSize","height","width","pointerOffset","clientY","top","clientX","left","available","thumbOffset","maxScroll","startScrollbarDrag","preventDefault","setPointerCapture","pointerId","valueOf","columnAlignments","alignments","Map","columns","align","set","id","alignAttr","get","sortKeyOf","sortable","sortLinkFor","key","sortHref","active","sort","direction","href","ariaSortFor","renderHeaderDefault","title","_$ssr","_tmpl$","_$escape","header","_$createComponent","when","subtitle","children","_tmpl$2","_tmpl$3","_$ssrAttribute","_tmpl$4","renderValueDefault","renderCellDefault","onRowKeyDown","rowClass","IntersectionObserver","observer","entries","some","entry","isIntersecting","root","rootMargin","observe","disconnect","ResizeObserver","rowsLength","nextHasMore","nextLoadingMore","queueMicrotask","fallback","description","noColumns","component","data-surface","data-has-footer","footer","data-overflow-x","data-overflow-y","data-scrollbar-enhanced","data-scrolling","onMouseLeave","_tmpl$7","ariaLabel","dataTable","density","scrollPreserveKey","fillHeight","stickyHeader","each","_tmpl$8","headerClass","renderHeader","render","_tmpl$9","empty","noRecords","isSelected","selectedRowId","_tmpl$0","_tmpl$1","cellClass","verticalAlign","renderCell","v","_tmpl$5","_tmpl$10","values","_tmpl$11","_tmpl$6","_tmpl$12","_$ssrStyleProperty","DataTablePanel","setHasHeading","context","registerHeading","Provider","as","DataTableHeader","_tmpl$13","_tmpl$14","actions","DataTableControls","DataTablePanelFooter","_tmpl$15","DataTable","Panel","Header","Controls","Footer"],"sources":["content/DataTable.tsx"],"sourcesContent":["import {\n type Accessor,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n onCleanup,\n onMount,\n Show,\n useContext,\n} from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { useLocale } from \"../intl/locale\";\nimport { PanelHeader } from \"../layout/PanelHeader\";\nimport { Paper } from \"../surfaces/Paper\";\nimport Placeholder from \"../surfaces/Placeholder\";\n\nexport type DataTableColumn<T> = {\n id: string;\n header: JSX.Element | ((ctx: { col: DataTableColumn<T> }) => JSX.Element);\n subtitle?: JSX.Element | ((ctx: { col: DataTableColumn<T> }) => JSX.Element);\n value?: keyof T | ((row: T) => unknown);\n class?: string;\n headerClass?: string;\n cellClass?: string;\n /** Defaults to right for numeric values and left for everything else. */\n align?: \"left\" | \"center\" | \"right\";\n /**\n * Marks the column sortable. Pass a string when the server's sort key\n * differs from the column id — they often do, because one column can show a\n * rate while another sorts by the absolute count behind it.\n */\n sortable?: boolean | string;\n};\n\nexport type DataTableSort = { key: string; direction: \"asc\" | \"desc\" };\n\nexport type DataTableRenderCell<T> = (ctx: {\n row: T;\n col: DataTableColumn<T>;\n value: unknown;\n render: (value: unknown) => JSX.Element;\n}) => JSX.Element;\n\nexport type DataTableRenderHeader<T> = (ctx: { col: DataTableColumn<T>; render: () => JSX.Element }) => JSX.Element;\n\nexport type DataTableFooter<T> = {\n values?: Record<string, unknown>;\n renderCell?: (ctx: { col: DataTableColumn<T>; value: unknown; render: (value: unknown) => JSX.Element }) => JSX.Element;\n};\n\nexport type DataTableProps<T> = {\n rows: readonly T[];\n columns: readonly DataTableColumn<T>[];\n /** Accessible name for a standalone table region. Defaults to \"Data table\". */\n ariaLabel?: string;\n /** ID of a visible heading that labels the table region. Takes precedence over ariaLabel. */\n ariaLabelledBy?: string;\n getRowId?: (row: T) => string;\n /** Current server-side ordering, or null when the default applies. */\n sort?: DataTableSort | null;\n /**\n * Link target for a sortable header. Link-based because every admin table is\n * server-rendered: sorting is a query change, not client state.\n */\n sortHref?: (next: DataTableSort) => string;\n selectedRowId?: string | null;\n rowClass?: string | ((row: T) => string | undefined);\n hoverRows?: boolean;\n onRowClick?: (row: T) => void;\n onRowDoubleClick?: (row: T) => void;\n renderCell?: DataTableRenderCell<T>;\n renderHeader?: DataTableRenderHeader<T>;\n footer?: DataTableFooter<T>;\n hasMore?: boolean;\n loadingMore?: boolean;\n onLoadMore?: () => void;\n empty?: JSX.Element;\n density?: \"compact\" | \"normal\";\n stickyHeader?: boolean;\n highlightColumns?: boolean;\n verticalAlign?: \"top\" | \"middle\" | \"bottom\";\n cellContentClass?: string;\n fillHeight?: boolean;\n /** Visual frame for a standalone table. Defaults preserve the legacy class-based behavior. */\n surface?: \"paper\" | \"plain\";\n class?: string;\n /** Additional classes for the table element. Core table geometry is always retained. */\n tableClass?: string;\n scrollPreserveKey?: string | false;\n};\n\nexport type DataTablePanelProps = {\n children: JSX.Element;\n class?: string;\n};\n\nexport type DataTableHeaderProps = {\n title: string;\n subtitle?: string;\n children?: JSX.Element;\n as?: \"h1\" | \"h2\" | \"h3\";\n size?: \"sm\" | \"md\";\n class?: string;\n};\n\nexport type DataTableControlsProps = {\n children: JSX.Element;\n class?: string;\n};\n\nexport type DataTablePanelFooterProps = {\n children: JSX.Element;\n class?: string;\n};\n\ntype DataTablePanelContextValue = {\n headingId: string;\n hasHeading: Accessor<boolean>;\n registerHeading: () => void;\n};\n\nconst DataTablePanelContext = createContext<DataTablePanelContextValue>();\n\nconst defaultRender = (value: unknown, locale: string, messages: ReturnType<ReturnType<typeof useUiMessages>>): JSX.Element => {\n if (value === null || value === undefined || value === \"\") return \"—\";\n if (value instanceof Date) return value.toLocaleString(locale);\n if (typeof value === \"boolean\") return value ? messages.yes : messages.no;\n if (typeof value === \"number\" || typeof value === \"bigint\") return String(value);\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n};\n\nconst renderColumnPart = <T,>(\n part: DataTableColumn<T>[\"header\"] | DataTableColumn<T>[\"subtitle\"],\n col: DataTableColumn<T>,\n): JSX.Element => {\n if (typeof part === \"function\") return part({ col });\n return part;\n};\n\nconst rowInteractiveSelector = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n \"summary\",\n \"[contenteditable]\",\n \"[role='button']\",\n \"[role='checkbox']\",\n \"[role='link']\",\n \"[role='menuitem']\",\n \"[role='option']\",\n \"[role='radio']\",\n \"[role='switch']\",\n \"[role='tab']\",\n \"[tabindex]\",\n].join(\",\");\n\nconst isNestedRowControl = (event: Event): boolean =>\n event.target instanceof Element && event.target.closest(rowInteractiveSelector) !== event.currentTarget;\n\ntype DataTableScrollbarAxis = \"x\" | \"y\";\ntype DataTableScrollbarMetrics = { overflow: boolean; offset: number; size: number };\n\nconst scrollbarMetrics = (viewportSize: number, contentSize: number, scrollOffset: number): DataTableScrollbarMetrics => {\n if (viewportSize <= 0 || contentSize <= viewportSize + 1) return { overflow: false, offset: 0, size: 0 };\n const size = Math.min(viewportSize, Math.max(24, (viewportSize * viewportSize) / contentSize));\n const offset = (scrollOffset / (contentSize - viewportSize)) * (viewportSize - size);\n return { overflow: true, offset, size };\n};\n\nfunction DataTableRoot<T>(props: DataTableProps<T>) {\n const messages = useUiMessages();\n const locale = useLocale();\n const [hoveredColumn, setHoveredColumn] = createSignal<number | null>(null);\n const [scrollbars, setScrollbars] = createSignal<Record<DataTableScrollbarAxis, DataTableScrollbarMetrics>>({\n x: { overflow: false, offset: 0, size: 0 },\n y: { overflow: false, offset: 0, size: 0 },\n });\n const [scrollbarEnhanced, setScrollbarEnhanced] = createSignal(false);\n const [scrolling, setScrolling] = createSignal(false);\n const panel = useContext(DataTablePanelContext);\n let tableRef: HTMLTableElement | undefined;\n let scrollRef: HTMLDivElement | undefined;\n let loadMoreRef: HTMLDivElement | undefined;\n let scrollingTimeout: ReturnType<typeof setTimeout> | undefined;\n let scrollbarDragOffset = 0;\n let hasMore = false;\n let loadingMore = false;\n let onLoadMore: (() => void) | undefined;\n let loadMoreRequested = false;\n let previousRowsLength = props.rows.length;\n let previousLoadingMore = !!props.loadingMore;\n let previousHasMore = !!props.hasMore;\n const rowId = (row: T) => props.getRowId?.(row);\n const isInteractive = () => !!props.onRowClick || !!props.onRowDoubleClick;\n const shouldHoverRows = () => props.hoverRows ?? isInteractive();\n const shouldRenderLoadMoreSentinel = () => !!props.onLoadMore;\n const labelledBy = () => props.ariaLabelledBy ?? (panel?.hasHeading() ? panel.headingId : undefined);\n const surface = () => props.surface ?? (props.class ? \"plain\" : \"paper\");\n const cellContentClass = () => props.cellContentClass ?? \"k2b-data-table__cell-text\";\n const tableClass = () => `k2b-data-table ${props.tableClass ?? \"\"}`.trim();\n const columnHighlighted = (index: number) =>\n props.highlightColumns !== false && shouldHoverRows() && hoveredColumn() === index ? \"true\" : undefined;\n const setHoveredColumnIfEnabled = (index: number) => {\n if (shouldHoverRows()) setHoveredColumn(index);\n };\n\n const isNearBottom = () => {\n if (!scrollRef) return false;\n return scrollRef.scrollTop + scrollRef.clientHeight >= scrollRef.scrollHeight - 240;\n };\n\n const maybeLoadMore = () => {\n if (!hasMore || loadingMore || loadMoreRequested || !onLoadMore) return;\n if (!isNearBottom()) return;\n loadMoreRequested = true;\n try {\n onLoadMore();\n } catch (error) {\n loadMoreRequested = false;\n throw error;\n }\n };\n\n const syncScrollbars = () => {\n if (!scrollRef) return;\n setScrollbars({\n x: scrollbarMetrics(scrollRef.clientWidth, scrollRef.scrollWidth, scrollRef.scrollLeft),\n y: scrollbarMetrics(scrollRef.clientHeight, scrollRef.scrollHeight, scrollRef.scrollTop),\n });\n };\n\n const revealScrollbars = () => {\n setScrolling(true);\n if (scrollingTimeout !== undefined) clearTimeout(scrollingTimeout);\n scrollingTimeout = setTimeout(() => {\n setScrolling(false);\n scrollingTimeout = undefined;\n }, 700);\n };\n\n const onScroll = () => {\n syncScrollbars();\n revealScrollbars();\n maybeLoadMore();\n };\n\n const scrollFromPointer = (event: PointerEvent & { currentTarget: HTMLDivElement }, axis: DataTableScrollbarAxis) => {\n if (!scrollRef) return;\n const track = event.currentTarget;\n const metrics = scrollbars()[axis];\n const rect = track.getBoundingClientRect();\n const trackSize = axis === \"y\" ? rect.height : rect.width;\n const pointerOffset = axis === \"y\" ? event.clientY - rect.top : event.clientX - rect.left;\n const available = Math.max(1, trackSize - metrics.size);\n const thumbOffset = Math.min(available, Math.max(0, pointerOffset - scrollbarDragOffset));\n const maxScroll = axis === \"y\" ? scrollRef.scrollHeight - scrollRef.clientHeight : scrollRef.scrollWidth - scrollRef.clientWidth;\n if (axis === \"y\") scrollRef.scrollTop = (thumbOffset / available) * maxScroll;\n else scrollRef.scrollLeft = (thumbOffset / available) * maxScroll;\n syncScrollbars();\n revealScrollbars();\n };\n\n const startScrollbarDrag = (event: PointerEvent & { currentTarget: HTMLDivElement }, axis: DataTableScrollbarAxis) => {\n event.preventDefault();\n const metrics = scrollbars()[axis];\n const rect = event.currentTarget.getBoundingClientRect();\n const pointerOffset = axis === \"y\" ? event.clientY - rect.top : event.clientX - rect.left;\n scrollbarDragOffset =\n event.target === event.currentTarget ? metrics.size / 2 : Math.min(metrics.size, Math.max(0, pointerOffset - metrics.offset));\n event.currentTarget.setPointerCapture(event.pointerId);\n scrollFromPointer(event, axis);\n };\n\n const valueOf = (row: T, col: DataTableColumn<T>) => {\n if (typeof col.value === \"function\") return col.value(row);\n if (col.value) return row[col.value];\n return undefined;\n };\n\n const columnAlignments = createMemo(() => {\n const alignments = new Map<string, NonNullable<DataTableColumn<T>[\"align\"]>>();\n for (const col of props.columns) {\n if (col.align) {\n alignments.set(col.id, col.align);\n continue;\n }\n let align: NonNullable<DataTableColumn<T>[\"align\"]> = \"left\";\n for (const row of props.rows) {\n const value = valueOf(row, col);\n if (value === null || value === undefined || value === \"\") continue;\n align = typeof value === \"number\" || typeof value === \"bigint\" ? \"right\" : \"left\";\n break;\n }\n alignments.set(col.id, align);\n }\n return alignments;\n });\n\n /** `data-align` mirrors Cloud's `text-left/center/right` on the same cell. */\n const alignAttr = (col: DataTableColumn<T>) => {\n const align = columnAlignments().get(col.id) ?? \"left\";\n return align === \"left\" ? undefined : align;\n };\n\n const sortKeyOf = (col: DataTableColumn<T>): string | null =>\n col.sortable === true ? col.id : typeof col.sortable === \"string\" ? col.sortable : null;\n\n /**\n * Sorting is a link, not a handler: these tables are server-rendered, so the\n * order belongs in the URL. Clicking the active column flips its direction.\n */\n const sortLinkFor = (col: DataTableColumn<T>): { href: string; active: boolean; direction: \"asc\" | \"desc\" } | null => {\n const key = sortKeyOf(col);\n if (!key || !props.sortHref) return null;\n const active = props.sort?.key === key;\n const direction: \"asc\" | \"desc\" = active && props.sort?.direction === \"desc\" ? \"asc\" : \"desc\";\n return { href: props.sortHref({ key, direction }), active, direction };\n };\n\n /** Only a sortable column carries a sort state; the rest carry none at all. */\n const ariaSortFor = (col: DataTableColumn<T>): \"ascending\" | \"descending\" | \"none\" | undefined => {\n const sort = sortLinkFor(col);\n if (!sort) return undefined;\n if (!sort.active) return \"none\";\n return props.sort?.direction === \"asc\" ? \"ascending\" : \"descending\";\n };\n\n const renderHeaderDefault = (col: DataTableColumn<T>): JSX.Element => {\n const sort = sortLinkFor(col);\n const title = (\n <>\n <span class=\"k2b-data-table__header-title\">{renderColumnPart(col.header, col)}</span>\n <Show when={col.subtitle !== undefined}>\n <span class=\"k2b-data-table__header-subtitle\">{renderColumnPart(col.subtitle, col)}</span>\n </Show>\n </>\n );\n\n if (!sort)\n return (\n <div class=\"k2b-data-table__header-content\" data-align={alignAttr(col)}>\n {title}\n </div>\n );\n\n return (\n <a href={sort.href} class=\"k2b-data-table__header-content k2b-data-table__sort\" data-align={alignAttr(col)}>\n <span class=\"k2b-data-table__header-line\">\n {title}\n {/* Inactive columns keep a dimmed marker so the row reads as sortable. */}\n <i\n class={`k2b-data-table__sort-icon ti ${props.sort?.direction === \"asc\" && sort.active ? \"ti-arrow-up\" : \"ti-arrow-down\"}`}\n data-active={sort.active ? \"true\" : undefined}\n aria-hidden=\"true\"\n />\n </span>\n </a>\n );\n };\n\n const renderValueDefault = (value: unknown) => defaultRender(value, locale(), messages());\n const renderCellDefault = (row: T, col: DataTableColumn<T>) => renderValueDefault(valueOf(row, col));\n\n const onRowKeyDown = (event: KeyboardEvent, row: T) => {\n if (!isInteractive()) return;\n if (isNestedRowControl(event)) return;\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n (props.onRowClick ?? props.onRowDoubleClick)?.(row);\n };\n\n const onRowClick = (event: MouseEvent, row: T) => {\n if (isNestedRowControl(event)) return;\n props.onRowClick?.(row);\n };\n\n const onRowDoubleClick = (event: MouseEvent, row: T) => {\n if (isNestedRowControl(event)) return;\n props.onRowDoubleClick?.(row);\n };\n\n const rowClass = (row: T) => {\n if (typeof props.rowClass === \"function\") return props.rowClass(row) ?? \"\";\n return props.rowClass ?? \"\";\n };\n\n onMount(() => {\n if (typeof IntersectionObserver === \"undefined\" || !scrollRef || !loadMoreRef) return;\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) maybeLoadMore();\n },\n { root: scrollRef, rootMargin: \"240px\" },\n );\n observer.observe(loadMoreRef);\n onCleanup(() => observer.disconnect());\n });\n\n onMount(() => {\n setScrollbarEnhanced(true);\n syncScrollbars();\n const observer = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(syncScrollbars);\n if (scrollRef) observer?.observe(scrollRef);\n if (tableRef) observer?.observe(tableRef);\n onCleanup(() => {\n observer?.disconnect();\n if (scrollingTimeout !== undefined) clearTimeout(scrollingTimeout);\n });\n });\n\n createEffect(() => {\n const rowsLength = props.rows.length;\n const nextHasMore = !!props.hasMore;\n const nextLoadingMore = !!props.loadingMore;\n if (rowsLength !== previousRowsLength || (previousLoadingMore && !nextLoadingMore) || (!previousHasMore && nextHasMore)) {\n loadMoreRequested = false;\n }\n previousRowsLength = rowsLength;\n previousLoadingMore = nextLoadingMore;\n previousHasMore = nextHasMore;\n hasMore = nextHasMore;\n loadingMore = nextLoadingMore;\n onLoadMore = props.onLoadMore;\n maybeLoadMore();\n queueMicrotask(syncScrollbars);\n });\n\n return (\n <Show when={props.columns.length > 0} fallback={<Placeholder surface=\"paper\" description={<>{messages().noColumns}</>} />}>\n <Dynamic\n component={surface() === \"paper\" ? Paper : \"div\"}\n class={`k2b-table-shell ${props.class ?? \"\"}`}\n data-surface={surface()}\n data-has-footer={props.footer ? \"true\" : undefined}\n data-overflow-x={scrollbars().x.overflow ? \"true\" : undefined}\n data-overflow-y={scrollbars().y.overflow ? \"true\" : undefined}\n data-scrollbar-enhanced={scrollbarEnhanced() ? \"true\" : undefined}\n data-scrolling={scrolling() ? \"true\" : undefined}\n onMouseLeave={() => setHoveredColumn(null)}\n >\n <div\n ref={scrollRef}\n role=\"region\"\n aria-label={labelledBy() ? undefined : (props.ariaLabel ?? messages().dataTable)}\n aria-labelledby={labelledBy()}\n tabIndex={0}\n class=\"k2b-table-wrap\"\n data-density={props.density === \"compact\" ? \"compact\" : undefined}\n data-has-footer={props.footer ? \"true\" : undefined}\n data-surface={surface()}\n data-scroll-preserve={props.scrollPreserveKey || undefined}\n onScroll={onScroll}\n >\n <table ref={tableRef} class={tableClass()} data-fill={props.fillHeight ? \"true\" : undefined}>\n <thead class=\"k2b-data-table__head\" data-sticky={props.stickyHeader === false ? undefined : \"true\"}>\n <tr class=\"k2b-data-table__head-row\">\n <For each={props.columns}>\n {(col, index) => (\n <th\n scope=\"col\"\n class={`${col.headerClass ?? \"\"} ${col.class ?? \"\"}`}\n data-align={alignAttr(col)}\n data-highlighted={columnHighlighted(index())}\n aria-sort={ariaSortFor(col)}\n onMouseEnter={() => setHoveredColumnIfEnabled(index())}\n >\n {props.renderHeader ? props.renderHeader({ col, render: () => renderHeaderDefault(col) }) : renderHeaderDefault(col)}\n </th>\n )}\n </For>\n </tr>\n </thead>\n <tbody>\n <Show\n when={props.rows.length > 0}\n fallback={\n <tr>\n <td class=\"k2b-data-table__empty\" colspan={props.columns.length}>\n <Placeholder description={<>{props.empty ?? messages().noRecords}</>} />\n </td>\n </tr>\n }\n >\n <For each={props.rows}>\n {(row) => {\n const id = () => rowId(row);\n const isSelected = () => props.selectedRowId && id() === props.selectedRowId;\n return (\n <tr\n class={`k2b-data-table__row ${rowClass(row)}`}\n data-hover={shouldHoverRows() ? \"true\" : undefined}\n data-clickable={shouldHoverRows() && isInteractive() ? \"true\" : undefined}\n data-selected={isSelected() ? \"true\" : undefined}\n tabIndex={isInteractive() ? 0 : undefined}\n onClick={(event) => onRowClick(event, row)}\n onDblClick={(event) => onRowDoubleClick(event, row)}\n onKeyDown={(e) => onRowKeyDown(e, row)}\n >\n <For each={props.columns}>\n {(col, index) => {\n const value = () => valueOf(row, col);\n return (\n <td\n class={`${col.cellClass ?? \"\"} ${col.class ?? \"\"}`}\n data-align={alignAttr(col)}\n data-valign={props.verticalAlign && props.verticalAlign !== \"middle\" ? props.verticalAlign : undefined}\n data-highlighted={columnHighlighted(index())}\n onMouseEnter={() => setHoveredColumnIfEnabled(index())}\n >\n <div class={cellContentClass()}>\n {props.renderCell\n ? props.renderCell({\n row,\n col,\n value: value(),\n render: (v) => renderCellDefault(row, { ...col, value: () => v }),\n })\n : renderValueDefault(value())}\n </div>\n </td>\n );\n }}\n </For>\n </tr>\n );\n }}\n </For>\n <Show when={props.fillHeight}>\n <tr aria-hidden=\"true\">\n <td class=\"k2b-data-table__fill\" colspan={props.columns.length} />\n </tr>\n </Show>\n </Show>\n </tbody>\n <Show when={props.footer}>\n {(footer) => (\n <tfoot class=\"k2b-data-table__foot\" data-sticky=\"true\">\n <tr class=\"k2b-data-table__foot-row\">\n <For each={props.columns}>\n {(col, index) => {\n const value = () => footer().values?.[col.id];\n return (\n <td\n class=\"k2b-data-table__footer-cell\"\n data-align={alignAttr(col)}\n data-highlighted={columnHighlighted(index())}\n onMouseEnter={() => setHoveredColumnIfEnabled(index())}\n >\n {footer().renderCell\n ? footer().renderCell!({ col, value: value(), render: renderValueDefault })\n : renderValueDefault(value())}\n </td>\n );\n }}\n </For>\n </tr>\n </tfoot>\n )}\n </Show>\n </table>\n <Show when={shouldRenderLoadMoreSentinel()}>\n <div ref={loadMoreRef} class=\"k2b-data-table__sentinel\" aria-hidden=\"true\" />\n </Show>\n </div>\n <For each={[\"y\", \"x\"] as const}>\n {(axis) => (\n <div\n class=\"k2b-data-table__scrollbar\"\n data-axis={axis}\n data-overflow={scrollbars()[axis].overflow ? \"true\" : undefined}\n aria-hidden=\"true\"\n onPointerDown={(event) => startScrollbarDrag(event, axis)}\n onPointerMove={(event) => {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) scrollFromPointer(event, axis);\n }}\n onPointerUp={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n onPointerCancel={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n >\n <span\n style={{\n \"--k2b-data-table-scroll-offset\": `${scrollbars()[axis].offset}px`,\n \"--k2b-data-table-scroll-size\": `${scrollbars()[axis].size}px`,\n }}\n />\n </div>\n )}\n </For>\n </Dynamic>\n </Show>\n );\n}\n\nconst DataTablePanel = (props: DataTablePanelProps): JSX.Element => {\n const headingId = `k2b-data-table-${createUniqueId()}-heading`;\n const [hasHeading, setHasHeading] = createSignal(false);\n const context: DataTablePanelContextValue = {\n headingId,\n hasHeading,\n registerHeading: () => setHasHeading(true),\n };\n\n return (\n <DataTablePanelContext.Provider value={context}>\n <Paper as=\"section\" class={`k2b-data-panel ${props.class ?? \"\"}`}>\n {props.children}\n </Paper>\n </DataTablePanelContext.Provider>\n );\n};\n\nconst DataTableHeader = (props: DataTableHeaderProps): JSX.Element => {\n const panel = useContext(DataTablePanelContext);\n panel?.registerHeading();\n\n return (\n <div class={`k2b-data-panel__header ${props.class ?? \"\"}`}>\n <PanelHeader\n title={<span id={panel?.headingId}>{props.title}</span>}\n subtitle={props.subtitle}\n actions={props.children}\n as={props.as}\n size={props.size}\n />\n </div>\n );\n};\n\nconst DataTableControls = (props: DataTableControlsProps): JSX.Element => (\n <div class={`k2b-data-panel__controls ${props.class ?? \"\"}`}>{props.children}</div>\n);\n\nconst DataTablePanelFooter = (props: DataTablePanelFooterProps): JSX.Element => (\n <footer class={`k2b-data-panel__footer ${props.class ?? \"\"}`}>{props.children}</footer>\n);\n\ntype DataTableComponent = {\n <T>(props: DataTableProps<T>): JSX.Element;\n Panel: (props: DataTablePanelProps) => JSX.Element;\n Header: (props: DataTableHeaderProps) => JSX.Element;\n Controls: (props: DataTableControlsProps) => JSX.Element;\n Footer: (props: DataTablePanelFooterProps) => JSX.Element;\n};\n\nconst DataTable = DataTableRoot as DataTableComponent;\nDataTable.Panel = DataTablePanel;\nDataTable.Header = DataTableHeader;\nDataTable.Controls = DataTableControls;\nDataTable.Footer = DataTablePanelFooter;\n\nexport default DataTable;\n"],"mappings":"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","ignoreList":[]}
|