@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
package/README.md
ADDED
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
# @k2b/ui
|
|
2
|
+
|
|
3
|
+
`@k2b/ui` is a standalone, production-ready component library for SolidJS. It
|
|
4
|
+
uses accessible interaction patterns, scoped precompiled styles, configurable
|
|
5
|
+
design tokens, and separate browser and server builds. Use it inside Cloud or
|
|
6
|
+
in another Solid application.
|
|
7
|
+
|
|
8
|
+
```css
|
|
9
|
+
@import "@k2b/ui/global.css";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Or load only the component styles when the application provides its own fonts
|
|
13
|
+
and icons:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import "@k2b/ui/styles.css";
|
|
17
|
+
import { Button, DatePicker, StatusBadge, prompts } from "@k2b/ui";
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Wrap the rendered application in the UI scope:
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
<main class="k2b-ui">
|
|
24
|
+
<Placeholder title="Nothing here yet" />
|
|
25
|
+
</main>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The scope uses `0.9375rem` body text at weight `400` without changing the
|
|
29
|
+
document's global `body`.
|
|
30
|
+
|
|
31
|
+
Fonts and theme stacks are CSS variables and can be replaced without
|
|
32
|
+
JavaScript:
|
|
33
|
+
|
|
34
|
+
```css
|
|
35
|
+
.k2b-ui {
|
|
36
|
+
--k2b-font-sans: Inter, sans-serif;
|
|
37
|
+
--k2b-accent-50: #f5f3ff;
|
|
38
|
+
--k2b-accent-100: #ede9fe;
|
|
39
|
+
--k2b-accent-300: #c4b5fd;
|
|
40
|
+
--k2b-accent-400: #a78bfa;
|
|
41
|
+
--k2b-accent-500: #8b5cf6;
|
|
42
|
+
--k2b-accent-600: #7c3aed;
|
|
43
|
+
--k2b-accent-700: #6d28d9;
|
|
44
|
+
--k2b-accent-950: #2e1065;
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`--k2b-action` is the accessible foreground color for links and text actions.
|
|
49
|
+
`--k2b-action-solid` is the background color for filled controls; override both
|
|
50
|
+
with matching hover tokens when defining a custom theme.
|
|
51
|
+
|
|
52
|
+
AI surfaces can use a distinct semantic treatment without changing the general
|
|
53
|
+
application accent:
|
|
54
|
+
|
|
55
|
+
```css
|
|
56
|
+
.k2b-ui {
|
|
57
|
+
--k2b-ai-accent: #0891b2;
|
|
58
|
+
--k2b-ai-accent-hover: #0e7490;
|
|
59
|
+
--k2b-ai-border: #06b6d4;
|
|
60
|
+
--k2b-ai-surface: #ecfeff;
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
IBM Plex is an optional preset:
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
import "@k2b/ui/fonts/plex.css";
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Tabler's webfont is the supported icon preset:
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
import "@k2b/ui/icons/tabler.css";
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Component tranches
|
|
77
|
+
|
|
78
|
+
The public package surface only exposes components that have passed the
|
|
79
|
+
standalone SSR, behavior, styling, and migration checks:
|
|
80
|
+
|
|
81
|
+
- Actions: buttons, menus, context menus, filter/select chips, spotlight
|
|
82
|
+
search, copy, remove, segmented controls, controlled tabs, native
|
|
83
|
+
disclosures, and semantic toolbars
|
|
84
|
+
- Inputs: text, number, checkbox and switch controls; select, combobox,
|
|
85
|
+
multi-select, freeform tags, managed tag editing, icons, PIN, slider, color,
|
|
86
|
+
and date/time pickers;
|
|
87
|
+
dropzones, image selection/cropping, completion-aware plain text,
|
|
88
|
+
Markdown, and template editors
|
|
89
|
+
- Layout: `AppOverview`, `DataPanel`, `PanelHeader`, `PanelDialog`,
|
|
90
|
+
`SettingsModal`, `AppWorkspace`, `Panes`, `FloatingWindow`, and generic
|
|
91
|
+
settings-form helpers
|
|
92
|
+
- Surfaces: `Paper`, `Avatar`, `LinkCard`, `StatGrid`, `StatCell`, `StatusBadge`,
|
|
93
|
+
`ProgressBar`, `NoticeCard` (with `NoticeCard.Grid`), `Tag`,
|
|
94
|
+
`DescriptionList`, `Placeholder`, and `NotFoundState`
|
|
95
|
+
- Feedback: the complete scoped prompt family, `Tooltip`, and scoped `toast`
|
|
96
|
+
- AI: the controlled compound `Chat` surface with timeline, messages,
|
|
97
|
+
activity, composer, and compact context usage
|
|
98
|
+
- Content: data and log tables, charts and interactive state timelines,
|
|
99
|
+
calendars, file trees/browsers/previews, lightboxes, PDF previews,
|
|
100
|
+
documentation primitives, pagination, range navigation, code and Markdown
|
|
101
|
+
views, and structured-data previews
|
|
102
|
+
- Widgets: `Widget`, `WidgetHero`, `WidgetList`, `WidgetPills`,
|
|
103
|
+
`WidgetStat`, and `WidgetStatus`
|
|
104
|
+
- Intl: `LocaleProvider`, `useLocale`, and the unstyled `Format` namespace
|
|
105
|
+
(`Number`, `Percent`, `Currency`, `Bytes`, `Date`, `Time`, `DateTime`,
|
|
106
|
+
`RelativeTime`, `Duration`, `DurationMs`)
|
|
107
|
+
|
|
108
|
+
`MarkdownView` renders escaped Markdown by default. Pre-rendered HTML requires
|
|
109
|
+
the explicit `trustedHtml` prop and stays an application-owned trust boundary.
|
|
110
|
+
Authoring previews may pass an exact `inlineTokens` allowlist to emphasize
|
|
111
|
+
standalone placeholders during safe Markdown parsing.
|
|
112
|
+
|
|
113
|
+
## Field contract
|
|
114
|
+
|
|
115
|
+
Form controls share one controlled contract. The same prop always has the same
|
|
116
|
+
meaning:
|
|
117
|
+
|
|
118
|
+
- `id`, `class`, `label`, `description`, `error`, `required`, and `disabled`
|
|
119
|
+
describe the field around the control.
|
|
120
|
+
- Use a visible `label` whenever possible. If the surrounding UI already
|
|
121
|
+
provides the label, use the native `"aria-label"` or `"aria-describedby"`
|
|
122
|
+
props. A placeholder is never an accessible label.
|
|
123
|
+
- `value` accepts either a direct value or a Solid accessor.
|
|
124
|
+
- `onValueChange` reports every controlled edit.
|
|
125
|
+
- `onValueCommit` reports the value when the user finishes the edit: on blur
|
|
126
|
+
or Enter for text-like controls, and on an explicit selection or Apply action
|
|
127
|
+
for pickers.
|
|
128
|
+
|
|
129
|
+
```tsx
|
|
130
|
+
const [name, setName] = createSignal("");
|
|
131
|
+
const [date, setDate] = createSignal<string | null>(null);
|
|
132
|
+
|
|
133
|
+
<TextInput
|
|
134
|
+
label="Project name"
|
|
135
|
+
value={name}
|
|
136
|
+
onValueChange={setName}
|
|
137
|
+
onValueCommit={saveName}
|
|
138
|
+
/>
|
|
139
|
+
<DatePicker
|
|
140
|
+
label="Release date"
|
|
141
|
+
value={date}
|
|
142
|
+
onValueChange={setDate}
|
|
143
|
+
onValueCommit={saveReleaseDate}
|
|
144
|
+
/>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Select, date, combobox, tags, and text controls use the same field metadata,
|
|
148
|
+
ARIA wiring, disabled and invalid states, and stable one-border focus shell.
|
|
149
|
+
Control-specific props only describe genuinely different behavior. For
|
|
150
|
+
example, `Combobox` owns a transient search `query` and hands the selected
|
|
151
|
+
domain object to `onSelect`; `FileDropzone` and `ImageCropper` are action/editor
|
|
152
|
+
primitives rather than value fields.
|
|
153
|
+
|
|
154
|
+
The package does not read Cloud routes, services, permissions, or application
|
|
155
|
+
state. Product-specific composition stays with the consuming application.
|
|
156
|
+
`Avatar` is therefore an additive portable presentation adapter. It does not
|
|
157
|
+
migrate Cloud's routed `./misc/Avatar` source contract, which remains
|
|
158
|
+
Cloud-specific.
|
|
159
|
+
|
|
160
|
+
Composition components intentionally use semantic data instead of application
|
|
161
|
+
stores:
|
|
162
|
+
|
|
163
|
+
```tsx
|
|
164
|
+
<Widget title="Platform health" icon="ti ti-heartbeat">
|
|
165
|
+
<WidgetStatus title="Operational" tone="success" />
|
|
166
|
+
<WidgetPills pills={[{ label: "Checks", value: 48, tone: "emerald" }]} />
|
|
167
|
+
</Widget>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Portable presentation components use shared semantic vocabularies:
|
|
171
|
+
`IntentTone` (`neutral`, `info`, `success`, `warning`, `danger`) and
|
|
172
|
+
`AccentColor` (`zinc`, `blue`, `emerald`, `amber`, `red`). Specialized state
|
|
173
|
+
components such as `StatusBadge` keep a smaller domain-specific vocabulary
|
|
174
|
+
where the states carry meaning beyond color.
|
|
175
|
+
|
|
176
|
+
## Locale and formatting
|
|
177
|
+
|
|
178
|
+
Locale-aware components resolve their locale in one order: an explicit
|
|
179
|
+
component `locale` prop, the nearest `LocaleProvider`, the browser's
|
|
180
|
+
`document.documentElement.lang`, then `"en"`. The package never reads
|
|
181
|
+
`navigator.language` and holds no global locale state, so one server can
|
|
182
|
+
render different locales concurrently.
|
|
183
|
+
|
|
184
|
+
```tsx
|
|
185
|
+
import { Format, LocaleProvider } from "@k2b/ui";
|
|
186
|
+
|
|
187
|
+
<html lang={locale}>
|
|
188
|
+
{/* ... */}
|
|
189
|
+
<LocaleProvider locale={locale}>
|
|
190
|
+
<Format.Currency value={1999.5} currency="EUR" />
|
|
191
|
+
<Format.DateTime value={order.createdAt} timeZone="Europe/Berlin" />
|
|
192
|
+
</LocaleProvider>
|
|
193
|
+
</html>;
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
The server-side provider controls SSR output. A browser island rendered with
|
|
197
|
+
`@k2b/ssr` is an independent Solid root: an outer server provider does not
|
|
198
|
+
survive the island's browser re-render, which falls back to `<html lang>`.
|
|
199
|
+
Emit `<html lang>` equal to the provider locale to keep both passes identical.
|
|
200
|
+
Changing the language without a reload is out of scope.
|
|
201
|
+
|
|
202
|
+
`Format` components are unstyled and semantic: numeric components render a
|
|
203
|
+
`<span>`, temporal components render `<time>` with a canonical `datetime`
|
|
204
|
+
attribute. `Format.Percent` takes a ratio (`0.12` → `12%`), `Format.Currency`
|
|
205
|
+
requires an ISO 4217 code, and `Format.Date`/`Time`/`DateTime` format in UTC
|
|
206
|
+
unless an explicit `timeZone` is passed, so server and browser text cannot
|
|
207
|
+
drift with the runtime timezone. Null and invalid input renders a `"—"`
|
|
208
|
+
fallback (override with `fallback`).
|
|
209
|
+
|
|
210
|
+
`NumberInput` derives its decimal separator from the effective locale while
|
|
211
|
+
keeping the controlled value a canonical number; `DatePicker` and `Calendar`
|
|
212
|
+
prefer an explicit `dateConfig.locale` and inherit the render locale
|
|
213
|
+
otherwise. Timezone is never part of the locale context.
|
|
214
|
+
|
|
215
|
+
## Catalog groups
|
|
216
|
+
|
|
217
|
+
The source tree and component documentation use the same groups as the Cloud
|
|
218
|
+
UI showcase: AI, Inputs, Actions, Layout, Surfaces, Feedback, Content, and
|
|
219
|
+
Widgets. Cloud-specific integrations are intentionally not part of this
|
|
220
|
+
package.
|
|
221
|
+
|
|
222
|
+
The chat family accepts portable data and callbacks. Applications keep their
|
|
223
|
+
protocol, persistence, tool rendering, approvals, and file storage:
|
|
224
|
+
|
|
225
|
+
```tsx
|
|
226
|
+
const [draft, setDraft] = createSignal("");
|
|
227
|
+
|
|
228
|
+
<Chat>
|
|
229
|
+
<Chat.Timeline
|
|
230
|
+
items={items()}
|
|
231
|
+
hasMore={hasMore()}
|
|
232
|
+
onLoadOlder={loadOlder}
|
|
233
|
+
/>
|
|
234
|
+
<Chat.Composer
|
|
235
|
+
value={draft()}
|
|
236
|
+
onValueChange={setDraft}
|
|
237
|
+
onSubmit={sendMessage}
|
|
238
|
+
state={runState()}
|
|
239
|
+
models={models}
|
|
240
|
+
selectedModelId={modelId()}
|
|
241
|
+
onModelChange={setModelId}
|
|
242
|
+
contextUsage={{ usage: usage(), contextWindow: 128_000 }}
|
|
243
|
+
/>
|
|
244
|
+
</Chat>;
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Return `false` or throw from `onSubmit` to restore the controlled draft and
|
|
248
|
+
attachments. A synchronous throw and a rejected promise are treated identically,
|
|
249
|
+
and the failure is handed to
|
|
250
|
+
`onError` for user-facing reporting. Raw selected files are handed to
|
|
251
|
+
`fileSelection.onSelect`; storage and upload policy remain application-owned.
|
|
252
|
+
`Chat.Timeline` requests older items through `hasMore`/`onLoadOlder` and keeps
|
|
253
|
+
the reader's position once they are prepended.
|
|
254
|
+
|
|
255
|
+
`Panes` is a controlled, serializable layout for IDE-like workspaces. The
|
|
256
|
+
package owns tabs, nested splits, resize and drag-and-drop; applications own
|
|
257
|
+
pane content, open and close behavior, routing, and persistence:
|
|
258
|
+
|
|
259
|
+
```tsx
|
|
260
|
+
const [layout, setLayout] = createSignal(createPanesLayout(["result", "query"]));
|
|
261
|
+
const items: PanesItem[] = [
|
|
262
|
+
{
|
|
263
|
+
id: "result",
|
|
264
|
+
title: "Result",
|
|
265
|
+
icon: "ti ti-table",
|
|
266
|
+
render: () => <ResultView />,
|
|
267
|
+
onClose: () => setLayout((current) => removePanesItem(current, "result")),
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
id: "query",
|
|
271
|
+
title: "Query",
|
|
272
|
+
icon: "ti ti-code",
|
|
273
|
+
render: () => <QueryEditor />,
|
|
274
|
+
},
|
|
275
|
+
];
|
|
276
|
+
|
|
277
|
+
<Panes layout={layout()} onLayoutChange={setLayout} items={items} />;
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Persist only `PanesLayout`, never the runtime item descriptors containing
|
|
281
|
+
render functions. Validate stored input with `parsePanesLayout`; invalid or
|
|
282
|
+
unsupported values require an explicit application fallback. Panes invokes an
|
|
283
|
+
item's `render` function only while that item is active in its tab group.
|
|
284
|
+
Tab rows remain one line and scroll horizontally when needed. Dragging exposes
|
|
285
|
+
separate tab-insertion, group, and directional split targets while the pointer
|
|
286
|
+
preview retains the source tab's compact pill treatment.
|
|
287
|
+
|
|
288
|
+
Cloud applications import portable components directly from `@k2b/ui`.
|
|
289
|
+
Product-owned behavior such as permissions, account routes, stored AI
|
|
290
|
+
protocols, and workflow contracts stays behind focused Cloud package exports;
|
|
291
|
+
there is no generic Cloud UI compatibility layer.
|
|
292
|
+
|
|
293
|
+
The Fibel component showcase is the canonical acceptance consumer. Its
|
|
294
|
+
portable pages import `@k2b/ui` directly, while Cloud API integrations remain
|
|
295
|
+
in a visibly separate section. Together with `packages/ui/fixture`, it
|
|
296
|
+
exercises the package boundary and public API ergonomics outside the Cloud
|
|
297
|
+
shell. The fixture provides automated server-render and shipped-class checks;
|
|
298
|
+
the catalog owns representative browser interaction, theme, responsive, and
|
|
299
|
+
accessibility states.
|
|
300
|
+
|
|
301
|
+
## Verification
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
bun run typecheck # package sources
|
|
305
|
+
bun run test # builds the stylesheet first, then runs every suite
|
|
306
|
+
bun run build # dist/styles.css and the optional font/icon presets
|
|
307
|
+
bun run fixture:typecheck # standalone consumer fixture
|
|
308
|
+
bun run fixture:build # standalone SSR build, no Cloud CSS or runtime
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
The JavaScript build preserves per-component ESM modules for browser and SSR
|
|
312
|
+
conditions. Bundlers can therefore tree-shake unused component families instead
|
|
313
|
+
of retaining the complete package through the root export.
|
|
314
|
+
|
|
315
|
+
Do not use bare `bun test` as the package verification command: several guards
|
|
316
|
+
compare rendered markup with `dist/styles.css`. The fixture render guard rejects
|
|
317
|
+
a missing or stale stylesheet so this mistake fails loudly, but `bun run test`
|
|
318
|
+
is the supported one-step command.
|
|
319
|
+
|
|
320
|
+
Three contracts are enforced by tests rather than convention, because each one
|
|
321
|
+
regressed silently during the extraction:
|
|
322
|
+
|
|
323
|
+
- `src/styles/class-contract.test.ts` — the package renders no class its own
|
|
324
|
+
stylesheet cannot style, renders only `k2b-`-prefixed names, and claims no
|
|
325
|
+
unprefixed name inside the `.k2b-ui` scope. `styles/entry.css` imports the six
|
|
326
|
+
scoped source sheets; Tailwind `@reference` directives live in source sheets
|
|
327
|
+
such as `index.css` and `content-parity.css` and emit no generic utilities, so
|
|
328
|
+
a leftover utility class in markup styles nothing.
|
|
329
|
+
- `src/styles/focus-contract.test.ts` — at most one focus signal per selector
|
|
330
|
+
and cascade context, box-shadow-only focus rings have a forced-colors outline
|
|
331
|
+
fallback, and AI tokens stay inside AI surfaces.
|
|
332
|
+
- Per-group single-ownership tests — a selector may be declared in only one
|
|
333
|
+
stylesheet. Two partial declarations of the same selector merge into a third
|
|
334
|
+
geometry matching neither Cloud nor either source.
|
|
335
|
+
|
|
336
|
+
## License
|
|
337
|
+
|
|
338
|
+
`@k2b/ui` uses AGPL-3.0-or-later, the same license as Cloud. See `LICENSE`.
|
|
339
|
+
The bundled IBM Plex fonts retain their SIL Open Font License, and Tabler
|
|
340
|
+
Icons retain their MIT license. Their complete notices ship in `dist/licenses`.
|
|
341
|
+
|
|
342
|
+
See [Release instructions](https://github.com/ValentinKolb/cloud/blob/main/docs-site/RELEASING.md) for package verification
|
|
343
|
+
and the first npm publication.
|
|
File without changes
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { template as _$template } from "solid-js/web";
|
|
2
|
+
import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
|
|
3
|
+
import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
4
|
+
import { insert as _$insert } from "solid-js/web";
|
|
5
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
6
|
+
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
7
|
+
import { use as _$use } from "solid-js/web";
|
|
8
|
+
import { spread as _$spread } from "solid-js/web";
|
|
9
|
+
import { mergeProps as _$mergeProps } from "solid-js/web";
|
|
10
|
+
import { memo as _$memo } from "solid-js/web";
|
|
11
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<i class="ti ti-loader-2 k2b-spin"aria-hidden=true>`),
|
|
12
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<button><!$><!/><span class=k2b-button__label>`),
|
|
13
|
+
_tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-button__label>`),
|
|
14
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<a>`);
|
|
15
|
+
import { Link } from "@k2b/ssr/nav";
|
|
16
|
+
import { Show, splitProps } from "solid-js";
|
|
17
|
+
import { Tooltip } from "../feedback/Tooltip";
|
|
18
|
+
const buttonClass = className => ["k2b-button", className].filter(Boolean).join(" ");
|
|
19
|
+
export function Button(props) {
|
|
20
|
+
const [local, rest] = splitProps(props, ["children", "class", "disabled", "loading", "loadingLabel", "ref", "size", "tooltip", "tooltipDelay", "tooltipPlacement", "type", "variant"]);
|
|
21
|
+
let target;
|
|
22
|
+
const setRef = element => {
|
|
23
|
+
target = element;
|
|
24
|
+
if (typeof local.ref === "function") local.ref(element);
|
|
25
|
+
};
|
|
26
|
+
const control = (() => {
|
|
27
|
+
var _el$ = _$getNextElement(_tmpl$2),
|
|
28
|
+
_el$4 = _el$.firstChild,
|
|
29
|
+
[_el$5, _co$] = _$getNextMarker(_el$4.nextSibling),
|
|
30
|
+
_el$3 = _el$5.nextSibling;
|
|
31
|
+
_$use(setRef, _el$);
|
|
32
|
+
_$spread(_el$, _$mergeProps(rest, {
|
|
33
|
+
get type() {
|
|
34
|
+
return local.type ?? "button";
|
|
35
|
+
},
|
|
36
|
+
get ["class"]() {
|
|
37
|
+
return buttonClass(local.class);
|
|
38
|
+
},
|
|
39
|
+
get ["data-size"]() {
|
|
40
|
+
return local.size ?? "md";
|
|
41
|
+
},
|
|
42
|
+
get ["data-variant"]() {
|
|
43
|
+
return local.variant ?? "primary";
|
|
44
|
+
},
|
|
45
|
+
get disabled() {
|
|
46
|
+
return local.disabled || local.loading;
|
|
47
|
+
},
|
|
48
|
+
get ["aria-busy"]() {
|
|
49
|
+
return local.loading ? "true" : undefined;
|
|
50
|
+
}
|
|
51
|
+
}), false, true);
|
|
52
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
53
|
+
get when() {
|
|
54
|
+
return local.loading;
|
|
55
|
+
},
|
|
56
|
+
get children() {
|
|
57
|
+
return _$getNextElement(_tmpl$);
|
|
58
|
+
}
|
|
59
|
+
}), _el$5, _co$);
|
|
60
|
+
_$insert(_el$3, _$createComponent(Show, {
|
|
61
|
+
get when() {
|
|
62
|
+
return _$memo(() => !!local.loading)() && local.loadingLabel;
|
|
63
|
+
},
|
|
64
|
+
get fallback() {
|
|
65
|
+
return local.children;
|
|
66
|
+
},
|
|
67
|
+
get children() {
|
|
68
|
+
return local.loadingLabel;
|
|
69
|
+
}
|
|
70
|
+
}));
|
|
71
|
+
_$runHydrationEvents();
|
|
72
|
+
return _el$;
|
|
73
|
+
})();
|
|
74
|
+
return [control, _$createComponent(Show, {
|
|
75
|
+
get when() {
|
|
76
|
+
return _$memo(() => local.tooltip !== false)() && local.tooltip !== undefined;
|
|
77
|
+
},
|
|
78
|
+
get children() {
|
|
79
|
+
return _$createComponent(Tooltip, {
|
|
80
|
+
get content() {
|
|
81
|
+
return local.tooltip;
|
|
82
|
+
},
|
|
83
|
+
target: () => target,
|
|
84
|
+
get delay() {
|
|
85
|
+
return local.tooltipDelay;
|
|
86
|
+
},
|
|
87
|
+
get disabled() {
|
|
88
|
+
return local.disabled || local.loading;
|
|
89
|
+
},
|
|
90
|
+
get placement() {
|
|
91
|
+
return local.tooltipPlacement;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
})];
|
|
96
|
+
}
|
|
97
|
+
export function ButtonLink(props) {
|
|
98
|
+
const [local, rest] = splitProps(props, ["children", "class", "href", "navigation", "onClick", "onNavigate", "replace", "ref", "scroll", "size", "tooltip", "tooltipDelay", "tooltipPlacement", "variant"]);
|
|
99
|
+
let target;
|
|
100
|
+
const setRef = element => {
|
|
101
|
+
target = element;
|
|
102
|
+
if (typeof local.ref === "function") local.ref(element);
|
|
103
|
+
};
|
|
104
|
+
const className = buttonClass(local.class);
|
|
105
|
+
const content = (() => {
|
|
106
|
+
var _el$6 = _$getNextElement(_tmpl$3);
|
|
107
|
+
_$insert(_el$6, () => local.children);
|
|
108
|
+
return _el$6;
|
|
109
|
+
})();
|
|
110
|
+
const tooltip = () => _$createComponent(Show, {
|
|
111
|
+
get when() {
|
|
112
|
+
return _$memo(() => local.tooltip !== false)() && local.tooltip !== undefined;
|
|
113
|
+
},
|
|
114
|
+
get children() {
|
|
115
|
+
return _$createComponent(Tooltip, {
|
|
116
|
+
get content() {
|
|
117
|
+
return local.tooltip;
|
|
118
|
+
},
|
|
119
|
+
target: () => target,
|
|
120
|
+
get delay() {
|
|
121
|
+
return local.tooltipDelay;
|
|
122
|
+
},
|
|
123
|
+
get placement() {
|
|
124
|
+
return local.tooltipPlacement;
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
if (local.navigation === "enhanced" && local.href && local.onNavigate) {
|
|
130
|
+
return [_$createComponent(Link, _$mergeProps(rest, {
|
|
131
|
+
ref: setRef,
|
|
132
|
+
get href() {
|
|
133
|
+
return local.href;
|
|
134
|
+
},
|
|
135
|
+
"class": className,
|
|
136
|
+
get ["data-size"]() {
|
|
137
|
+
return local.size ?? "md";
|
|
138
|
+
},
|
|
139
|
+
get ["data-variant"]() {
|
|
140
|
+
return local.variant ?? "primary";
|
|
141
|
+
},
|
|
142
|
+
get onClick() {
|
|
143
|
+
return local.onClick;
|
|
144
|
+
},
|
|
145
|
+
get onNavigate() {
|
|
146
|
+
return local.onNavigate;
|
|
147
|
+
},
|
|
148
|
+
get replace() {
|
|
149
|
+
return local.replace;
|
|
150
|
+
},
|
|
151
|
+
get scroll() {
|
|
152
|
+
return local.scroll;
|
|
153
|
+
},
|
|
154
|
+
children: content
|
|
155
|
+
})), _$memo(tooltip)];
|
|
156
|
+
}
|
|
157
|
+
return [(() => {
|
|
158
|
+
var _el$7 = _$getNextElement(_tmpl$4);
|
|
159
|
+
_$use(setRef, _el$7);
|
|
160
|
+
_$spread(_el$7, _$mergeProps(rest, {
|
|
161
|
+
get href() {
|
|
162
|
+
return local.href;
|
|
163
|
+
},
|
|
164
|
+
"class": className,
|
|
165
|
+
get ["data-size"]() {
|
|
166
|
+
return local.size ?? "md";
|
|
167
|
+
},
|
|
168
|
+
get ["data-variant"]() {
|
|
169
|
+
return local.variant ?? "primary";
|
|
170
|
+
},
|
|
171
|
+
get onClick() {
|
|
172
|
+
return local.onClick;
|
|
173
|
+
}
|
|
174
|
+
}), false, true);
|
|
175
|
+
_$insert(_el$7, content);
|
|
176
|
+
_$runHydrationEvents();
|
|
177
|
+
return _el$7;
|
|
178
|
+
})(), _$memo(tooltip)];
|
|
179
|
+
}
|
|
180
|
+
export function IconButton(props) {
|
|
181
|
+
const [local, rest] = splitProps(props, ["children", "class", "label", "loading", "loadingLabel", "tooltip", "variant"]);
|
|
182
|
+
return _$createComponent(Button, _$mergeProps(rest, {
|
|
183
|
+
get loading() {
|
|
184
|
+
return local.loading;
|
|
185
|
+
},
|
|
186
|
+
get variant() {
|
|
187
|
+
return local.variant ?? "ghost";
|
|
188
|
+
},
|
|
189
|
+
get ["class"]() {
|
|
190
|
+
return `k2b-icon-button ${local.class ?? ""}`;
|
|
191
|
+
},
|
|
192
|
+
get ["aria-label"]() {
|
|
193
|
+
return _$memo(() => !!local.loading)() ? local.loadingLabel ?? local.label : local.label;
|
|
194
|
+
},
|
|
195
|
+
get title() {
|
|
196
|
+
return rest.title ?? (local.tooltip === undefined ? local.label : undefined);
|
|
197
|
+
},
|
|
198
|
+
get tooltip() {
|
|
199
|
+
return local.tooltip;
|
|
200
|
+
},
|
|
201
|
+
get children() {
|
|
202
|
+
return _$createComponent(Show, {
|
|
203
|
+
get when() {
|
|
204
|
+
return !local.loading;
|
|
205
|
+
},
|
|
206
|
+
get children() {
|
|
207
|
+
return local.children;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}));
|
|
212
|
+
}
|
|
213
|
+
export function IconButtonLink(props) {
|
|
214
|
+
const [local, rest] = splitProps(props, ["children", "class", "label", "tooltip", "variant"]);
|
|
215
|
+
return _$createComponent(ButtonLink, _$mergeProps(rest, {
|
|
216
|
+
get variant() {
|
|
217
|
+
return local.variant ?? "ghost";
|
|
218
|
+
},
|
|
219
|
+
get ["class"]() {
|
|
220
|
+
return `k2b-icon-button ${local.class ?? ""}`;
|
|
221
|
+
},
|
|
222
|
+
get ["aria-label"]() {
|
|
223
|
+
return local.label;
|
|
224
|
+
},
|
|
225
|
+
get title() {
|
|
226
|
+
return rest.title ?? (local.tooltip === undefined ? local.label : undefined);
|
|
227
|
+
},
|
|
228
|
+
get tooltip() {
|
|
229
|
+
return local.tooltip;
|
|
230
|
+
},
|
|
231
|
+
get children() {
|
|
232
|
+
return local.children;
|
|
233
|
+
}
|
|
234
|
+
}));
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Link","Show","splitProps","Tooltip","buttonClass","className","filter","Boolean","join","Button","props","local","rest","target","setRef","element","ref","control","_el$","_$getNextElement","_tmpl$2","_el$4","firstChild","_el$5","_co$","_$getNextMarker","nextSibling","_el$3","_$use","_$spread","_$mergeProps","type","class","data-size","size","data-variant","variant","disabled","loading","aria-busy","undefined","_$insert","_$createComponent","when","children","_tmpl$","_$memo","loadingLabel","fallback","_$runHydrationEvents","tooltip","content","delay","tooltipDelay","placement","tooltipPlacement","ButtonLink","_el$6","_tmpl$3","navigation","href","onNavigate","onClick","replace","scroll","_el$7","_tmpl$4","IconButton","aria-label","label","title","IconButtonLink"],"sources":["actions/Button.tsx"],"sourcesContent":["import { Link, type LinkNavigateEvent, type NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport { type JSX, Show, splitProps } from \"solid-js\";\nimport { Tooltip, type TooltipPlacement } from \"../feedback/Tooltip\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"text\" | \"subtle\" | \"input\" | \"warning\" | \"danger\" | \"success\" | \"ai\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport type ButtonProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n loading?: boolean;\n loadingLabel?: string;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nexport type ButtonLinkProps = Omit<JSX.AnchorHTMLAttributes<HTMLAnchorElement>, \"onClick\"> & {\n navigation?: \"document\" | \"enhanced\";\n onClick?: JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n replace?: boolean;\n scroll?: NavigationScrollMode;\n size?: ButtonSize;\n variant?: ButtonVariant;\n tooltip?: JSX.Element | false;\n tooltipDelay?: number;\n tooltipPlacement?: TooltipPlacement;\n};\n\nconst buttonClass = (className?: string): string => [\"k2b-button\", className].filter(Boolean).join(\" \");\n\nexport function Button(props: ButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"disabled\",\n \"loading\",\n \"loadingLabel\",\n \"ref\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"type\",\n \"variant\",\n ]);\n let target: HTMLButtonElement | undefined;\n const setRef = (element: HTMLButtonElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n\n const control = (\n <button\n {...rest}\n ref={setRef}\n type={local.type ?? \"button\"}\n class={buttonClass(local.class)}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n disabled={local.disabled || local.loading}\n aria-busy={local.loading ? \"true\" : undefined}\n >\n <Show when={local.loading}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n </Show>\n <span class=\"k2b-button__label\">\n <Show when={local.loading && local.loadingLabel} fallback={local.children}>\n {local.loadingLabel}\n </Show>\n </span>\n </button>\n );\n\n return (\n <>\n {control}\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip\n content={local.tooltip as JSX.Element}\n target={() => target}\n delay={local.tooltipDelay}\n disabled={local.disabled || local.loading}\n placement={local.tooltipPlacement}\n />\n </Show>\n </>\n );\n}\n\nexport function ButtonLink(props: ButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"href\",\n \"navigation\",\n \"onClick\",\n \"onNavigate\",\n \"replace\",\n \"ref\",\n \"scroll\",\n \"size\",\n \"tooltip\",\n \"tooltipDelay\",\n \"tooltipPlacement\",\n \"variant\",\n ]);\n let target: HTMLAnchorElement | undefined;\n const setRef = (element: HTMLAnchorElement) => {\n target = element;\n if (typeof local.ref === \"function\") local.ref(element);\n };\n const className = buttonClass(local.class);\n const content = <span class=\"k2b-button__label\">{local.children}</span>;\n\n const tooltip = () => (\n <Show when={local.tooltip !== false && local.tooltip !== undefined}>\n <Tooltip content={local.tooltip as JSX.Element} target={() => target} delay={local.tooltipDelay} placement={local.tooltipPlacement} />\n </Show>\n );\n\n if (local.navigation === \"enhanced\" && local.href && local.onNavigate) {\n return (\n <>\n <Link\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n onClick={local.onClick}\n onNavigate={local.onNavigate}\n replace={local.replace}\n scroll={local.scroll}\n >\n {content}\n </Link>\n {tooltip()}\n </>\n );\n }\n\n return (\n <>\n <a\n {...rest}\n ref={setRef}\n href={local.href}\n class={className}\n data-size={local.size ?? \"md\"}\n data-variant={local.variant ?? \"primary\"}\n onClick={local.onClick}\n >\n {content}\n </a>\n {tooltip()}\n </>\n );\n}\n\nexport type IconButtonProps = Omit<ButtonProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport type IconButtonLinkProps = Omit<ButtonLinkProps, \"children\"> & {\n children: JSX.Element;\n label: string;\n};\n\nexport function IconButton(props: IconButtonProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"loading\", \"loadingLabel\", \"tooltip\", \"variant\"]);\n\n return (\n <Button\n {...rest}\n loading={local.loading}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.loading ? (local.loadingLabel ?? local.label) : local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n <Show when={!local.loading}>{local.children}</Show>\n </Button>\n );\n}\n\nexport function IconButtonLink(props: IconButtonLinkProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"label\", \"tooltip\", \"variant\"]);\n\n return (\n <ButtonLink\n {...rest}\n variant={local.variant ?? \"ghost\"}\n class={`k2b-icon-button ${local.class ?? \"\"}`}\n aria-label={local.label}\n title={rest.title ?? (local.tooltip === undefined ? local.label : undefined)}\n tooltip={local.tooltip}\n >\n {local.children}\n </ButtonLink>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|