@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,123 @@
|
|
|
1
|
+
import { dates } from "@k2b/stdlib";
|
|
2
|
+
export const pickerContext = context => ({
|
|
3
|
+
weekStartsOn: 1,
|
|
4
|
+
...context
|
|
5
|
+
});
|
|
6
|
+
export const hasInstantOffset = value => /[T\s].*([zZ]|[+-]\d{2}:?\d{2})$/.test(value);
|
|
7
|
+
export const dateKey = (date, context) => dates.formatDateKey(date, pickerContext(context));
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Short month names for the month panel. `dates.months()` only returns the long
|
|
11
|
+
* form ("September"), which overflows the three-column month grid, so the short
|
|
12
|
+
* form is derived here while staying locale aware.
|
|
13
|
+
*/
|
|
14
|
+
export const monthNames = context => {
|
|
15
|
+
const merged = pickerContext(context);
|
|
16
|
+
const formatter = new Intl.DateTimeFormat(merged.locale, {
|
|
17
|
+
month: "short",
|
|
18
|
+
timeZone: "UTC"
|
|
19
|
+
});
|
|
20
|
+
return Array.from({
|
|
21
|
+
length: 12
|
|
22
|
+
}, (_, index) => formatter.format(Date.UTC(2024, index, 15)));
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Picks the roving-tabindex day for a rendered month grid. The preferred day is
|
|
27
|
+
* used when the grid actually contains it, otherwise the first day of the
|
|
28
|
+
* visible month keeps exactly one cell reachable by Tab.
|
|
29
|
+
*/
|
|
30
|
+
export const resolveFocusDay = (monthDayKeys, preferred) => preferred && monthDayKeys.includes(preferred) ? preferred : monthDayKeys[0];
|
|
31
|
+
export const yearMonth = (date, context) => {
|
|
32
|
+
const [year = "1970", month = "1"] = dateKey(date, context).split("-");
|
|
33
|
+
return {
|
|
34
|
+
year: Number(year),
|
|
35
|
+
month: Number(month) - 1
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export const monthDate = (year, month, context) => {
|
|
39
|
+
const value = `${year}-${String(month + 1).padStart(2, "0")}-01T12:00`;
|
|
40
|
+
if (context?.timeZone) {
|
|
41
|
+
return new Date(dates.zonedDateTimeToInstant(value, context.timeZone, {
|
|
42
|
+
disambiguation: "compatible"
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
return new Date(year, month, 1, 12);
|
|
46
|
+
};
|
|
47
|
+
export const parseDateValue = (value, context) => {
|
|
48
|
+
if (!value) return dates.today(pickerContext(context));
|
|
49
|
+
return dates.parseCalendarDate(value.slice(0, 10), pickerContext(context));
|
|
50
|
+
};
|
|
51
|
+
export const displayDate = (value, context) => value ? dates.formatDate(`${value.slice(0, 10)}T12:00`, pickerContext(context)) : "";
|
|
52
|
+
const localDateTimeInput = value => {
|
|
53
|
+
if (!hasInstantOffset(value)) return value.slice(0, 16);
|
|
54
|
+
const date = new Date(value);
|
|
55
|
+
const year = date.getFullYear();
|
|
56
|
+
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
57
|
+
const day = String(date.getDate()).padStart(2, "0");
|
|
58
|
+
const hours = String(date.getHours()).padStart(2, "0");
|
|
59
|
+
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
60
|
+
return `${year}-${month}-${day}T${hours}:${minutes}`;
|
|
61
|
+
};
|
|
62
|
+
export const dateTimeInput = (value, context) => {
|
|
63
|
+
if (!value) return "";
|
|
64
|
+
if (context?.timeZone && hasInstantOffset(value)) return dates.instantToZonedInput(value, context.timeZone);
|
|
65
|
+
return localDateTimeInput(value);
|
|
66
|
+
};
|
|
67
|
+
export const splitDateTime = (value, context) => {
|
|
68
|
+
const input = dateTimeInput(value, context);
|
|
69
|
+
const [date = "", time = ""] = input.split("T");
|
|
70
|
+
return {
|
|
71
|
+
date,
|
|
72
|
+
time: time.slice(0, 5)
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
export const isCompleteTime = value => {
|
|
76
|
+
if (!/^\d{2}:\d{2}$/.test(value)) return false;
|
|
77
|
+
const [hours, minutes] = value.split(":").map(Number);
|
|
78
|
+
return hours >= 0 && hours <= 23 && minutes >= 0 && minutes <= 59;
|
|
79
|
+
};
|
|
80
|
+
export const toDateTimeValue = (date, time, context) => {
|
|
81
|
+
if (!date) return null;
|
|
82
|
+
const resolvedTime = time || "00:00";
|
|
83
|
+
if (!isCompleteTime(resolvedTime)) return null;
|
|
84
|
+
const local = `${date}T${resolvedTime}`;
|
|
85
|
+
if (context?.timeZone) {
|
|
86
|
+
return dates.zonedDateTimeToInstant(local, context.timeZone, {
|
|
87
|
+
disambiguation: "compatible"
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return local;
|
|
91
|
+
};
|
|
92
|
+
export const formatDateTimeValue = (value, context) => value ? dates.formatDateTime(value, pickerContext(context)) : "";
|
|
93
|
+
export const normalizeTimeInput = value => {
|
|
94
|
+
const [hours = "", minutes = ""] = value.split(":");
|
|
95
|
+
const hour = Math.max(0, Math.min(23, Number(hours || 0)));
|
|
96
|
+
const minute = Math.max(0, Math.min(59, Number(minutes || 0)));
|
|
97
|
+
return `${String(hour).padStart(2, "0")}:${String(minute).padStart(2, "0")}`;
|
|
98
|
+
};
|
|
99
|
+
export const filterTimeInput = value => {
|
|
100
|
+
const digits = value.replace(/\D/g, "").slice(0, 4);
|
|
101
|
+
return digits.length <= 2 ? digits : `${digits.slice(0, 2)}:${digits.slice(2)}`;
|
|
102
|
+
};
|
|
103
|
+
export const orderedRange = (start, end) => end.localeCompare(start) < 0 ? {
|
|
104
|
+
start: end,
|
|
105
|
+
end: start
|
|
106
|
+
} : {
|
|
107
|
+
start,
|
|
108
|
+
end
|
|
109
|
+
};
|
|
110
|
+
export const previewRange = (range, preview) => {
|
|
111
|
+
if (!range.start || range.end || !preview) return range;
|
|
112
|
+
return orderedRange(range.start, preview);
|
|
113
|
+
};
|
|
114
|
+
export const inRange = (day, range) => Boolean(range.start && range.end && day >= range.start && day <= range.end);
|
|
115
|
+
export const isRangeEdge = (day, range) => day === range.start || day === range.end;
|
|
116
|
+
export const formatDateOnlyRangeDuration = (range, context) => {
|
|
117
|
+
if (!range.start || !range.end) return "";
|
|
118
|
+
const start = Date.parse(`${dateKey(range.start, context)}T00:00:00.000Z`);
|
|
119
|
+
const end = Date.parse(`${dateKey(range.end, context)}T00:00:00.000Z`);
|
|
120
|
+
const days = Math.floor(Math.abs(end - start) / 86_400_000) + 1;
|
|
121
|
+
return `${days} ${days === 1 ? "day" : "days"}`;
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=date-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["dates","pickerContext","context","weekStartsOn","hasInstantOffset","value","test","dateKey","date","formatDateKey","monthNames","merged","formatter","Intl","DateTimeFormat","locale","month","timeZone","Array","from","length","_","index","format","Date","UTC","resolveFocusDay","monthDayKeys","preferred","includes","yearMonth","year","split","Number","monthDate","String","padStart","zonedDateTimeToInstant","disambiguation","parseDateValue","today","parseCalendarDate","slice","displayDate","formatDate","localDateTimeInput","getFullYear","getMonth","day","getDate","hours","getHours","minutes","getMinutes","dateTimeInput","instantToZonedInput","splitDateTime","input","time","isCompleteTime","map","toDateTimeValue","resolvedTime","local","formatDateTimeValue","formatDateTime","normalizeTimeInput","hour","Math","max","min","minute","filterTimeInput","digits","replace","orderedRange","start","end","localeCompare","previewRange","range","preview","inRange","Boolean","isRangeEdge","formatDateOnlyRangeDuration","parse","days","floor","abs"],"sources":["inputs/date-picker.ts"],"sourcesContent":["import { type DateContext, dates } from \"@k2b/stdlib\";\n\nexport type DateRangeValue = {\n start: string | null;\n end: string | null;\n};\n\nexport const pickerContext = (context?: DateContext): DateContext => ({\n weekStartsOn: 1,\n ...context,\n});\n\nexport const hasInstantOffset = (value: string): boolean => /[T\\s].*([zZ]|[+-]\\d{2}:?\\d{2})$/.test(value);\n\nexport const dateKey = (date: Date | string, context?: DateContext): string => dates.formatDateKey(date, pickerContext(context));\n\n/**\n * Short month names for the month panel. `dates.months()` only returns the long\n * form (\"September\"), which overflows the three-column month grid, so the short\n * form is derived here while staying locale aware.\n */\nexport const monthNames = (context?: DateContext): string[] => {\n const merged = pickerContext(context);\n const formatter = new Intl.DateTimeFormat(merged.locale, { month: \"short\", timeZone: \"UTC\" });\n return Array.from({ length: 12 }, (_, index) => formatter.format(Date.UTC(2024, index, 15)));\n};\n\n/**\n * Picks the roving-tabindex day for a rendered month grid. The preferred day is\n * used when the grid actually contains it, otherwise the first day of the\n * visible month keeps exactly one cell reachable by Tab.\n */\nexport const resolveFocusDay = (monthDayKeys: readonly string[], preferred: string | null | undefined): string | undefined =>\n preferred && monthDayKeys.includes(preferred) ? preferred : monthDayKeys[0];\n\nexport const yearMonth = (date: Date, context?: DateContext): { year: number; month: number } => {\n const [year = \"1970\", month = \"1\"] = dateKey(date, context).split(\"-\");\n return { year: Number(year), month: Number(month) - 1 };\n};\n\nexport const monthDate = (year: number, month: number, context?: DateContext): Date => {\n const value = `${year}-${String(month + 1).padStart(2, \"0\")}-01T12:00`;\n if (context?.timeZone) {\n return new Date(dates.zonedDateTimeToInstant(value, context.timeZone, { disambiguation: \"compatible\" }));\n }\n return new Date(year, month, 1, 12);\n};\n\nexport const parseDateValue = (value: string | null | undefined, context?: DateContext): Date => {\n if (!value) return dates.today(pickerContext(context));\n return dates.parseCalendarDate(value.slice(0, 10), pickerContext(context));\n};\n\nexport const displayDate = (value: string | null | undefined, context?: DateContext): string =>\n value ? dates.formatDate(`${value.slice(0, 10)}T12:00`, pickerContext(context)) : \"\";\n\nconst localDateTimeInput = (value: string): string => {\n if (!hasInstantOffset(value)) return value.slice(0, 16);\n const date = new Date(value);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\nexport const dateTimeInput = (value: string | null | undefined, context?: DateContext): string => {\n if (!value) return \"\";\n if (context?.timeZone && hasInstantOffset(value)) return dates.instantToZonedInput(value, context.timeZone);\n return localDateTimeInput(value);\n};\n\nexport const splitDateTime = (value: string | null | undefined, context?: DateContext): { date: string; time: string } => {\n const input = dateTimeInput(value, context);\n const [date = \"\", time = \"\"] = input.split(\"T\");\n return { date, time: time.slice(0, 5) };\n};\n\nexport const isCompleteTime = (value: string): boolean => {\n if (!/^\\d{2}:\\d{2}$/.test(value)) return false;\n const [hours, minutes] = value.split(\":\").map(Number);\n return hours! >= 0 && hours! <= 23 && minutes! >= 0 && minutes! <= 59;\n};\n\nexport const toDateTimeValue = (date: string, time: string, context?: DateContext): string | null => {\n if (!date) return null;\n const resolvedTime = time || \"00:00\";\n if (!isCompleteTime(resolvedTime)) return null;\n const local = `${date}T${resolvedTime}`;\n if (context?.timeZone) {\n return dates.zonedDateTimeToInstant(local, context.timeZone, { disambiguation: \"compatible\" });\n }\n return local;\n};\n\nexport const formatDateTimeValue = (value: string | null | undefined, context?: DateContext): string =>\n value ? dates.formatDateTime(value, pickerContext(context)) : \"\";\n\nexport const normalizeTimeInput = (value: string): string => {\n const [hours = \"\", minutes = \"\"] = value.split(\":\");\n const hour = Math.max(0, Math.min(23, Number(hours || 0)));\n const minute = Math.max(0, Math.min(59, Number(minutes || 0)));\n return `${String(hour).padStart(2, \"0\")}:${String(minute).padStart(2, \"0\")}`;\n};\n\nexport const filterTimeInput = (value: string): string => {\n const digits = value.replace(/\\D/g, \"\").slice(0, 4);\n return digits.length <= 2 ? digits : `${digits.slice(0, 2)}:${digits.slice(2)}`;\n};\n\nexport const orderedRange = (start: string, end: string): DateRangeValue =>\n end.localeCompare(start) < 0 ? { start: end, end: start } : { start, end };\n\nexport const previewRange = (range: DateRangeValue, preview: string | null): DateRangeValue => {\n if (!range.start || range.end || !preview) return range;\n return orderedRange(range.start, preview);\n};\n\nexport const inRange = (day: string, range: DateRangeValue): boolean =>\n Boolean(range.start && range.end && day >= range.start && day <= range.end);\n\nexport const isRangeEdge = (day: string, range: DateRangeValue): boolean => day === range.start || day === range.end;\n\nexport const formatDateOnlyRangeDuration = (range: DateRangeValue, context?: DateContext): string => {\n if (!range.start || !range.end) return \"\";\n const start = Date.parse(`${dateKey(range.start, context)}T00:00:00.000Z`);\n const end = Date.parse(`${dateKey(range.end, context)}T00:00:00.000Z`);\n const days = Math.floor(Math.abs(end - start) / 86_400_000) + 1;\n return `${days} ${days === 1 ? \"day\" : \"days\"}`;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replaces one textarea range while preserving the browser's native undo path
|
|
3
|
+
* where possible. The fallback emits the input event that the editing command
|
|
4
|
+
* would have emitted, so callers never need a second dispatch.
|
|
5
|
+
*/
|
|
6
|
+
export const replaceTextareaRange = (textarea, start, end, replacement) => {
|
|
7
|
+
textarea.focus();
|
|
8
|
+
textarea.setSelectionRange(start, end);
|
|
9
|
+
try {
|
|
10
|
+
if (typeof document !== "undefined" && document.execCommand?.("insertText", false, replacement)) return true;
|
|
11
|
+
} catch {
|
|
12
|
+
// Fall through to the standards-based replacement below.
|
|
13
|
+
}
|
|
14
|
+
if (typeof textarea.setRangeText === "function") {
|
|
15
|
+
textarea.setRangeText(replacement, start, end, "end");
|
|
16
|
+
} else {
|
|
17
|
+
textarea.value = textarea.value.slice(0, start) + replacement + textarea.value.slice(end);
|
|
18
|
+
const caret = start + replacement.length;
|
|
19
|
+
textarea.setSelectionRange(caret, caret);
|
|
20
|
+
}
|
|
21
|
+
textarea.dispatchEvent(new Event("input", {
|
|
22
|
+
bubbles: true
|
|
23
|
+
}));
|
|
24
|
+
return true;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=editor-dom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["replaceTextareaRange","textarea","start","end","replacement","focus","setSelectionRange","document","execCommand","setRangeText","value","slice","caret","length","dispatchEvent","Event","bubbles"],"sources":["inputs/editor-dom.ts"],"sourcesContent":["/**\n * Replaces one textarea range while preserving the browser's native undo path\n * where possible. The fallback emits the input event that the editing command\n * would have emitted, so callers never need a second dispatch.\n */\nexport const replaceTextareaRange = (textarea: HTMLTextAreaElement, start: number, end: number, replacement: string): boolean => {\n textarea.focus();\n textarea.setSelectionRange(start, end);\n\n try {\n if (typeof document !== \"undefined\" && document.execCommand?.(\"insertText\", false, replacement)) return true;\n } catch {\n // Fall through to the standards-based replacement below.\n }\n\n if (typeof textarea.setRangeText === \"function\") {\n textarea.setRangeText(replacement, start, end, \"end\");\n } else {\n textarea.value = textarea.value.slice(0, start) + replacement + textarea.value.slice(end);\n const caret = start + replacement.length;\n textarea.setSelectionRange(caret, caret);\n }\n textarea.dispatchEvent(new Event(\"input\", { bubbles: true }));\n return true;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,oBAAoB,GAAGA,CAACC,QAA6B,EAAEC,KAAa,EAAEC,GAAW,EAAEC,WAAmB,KAAc;EAC/HH,QAAQ,CAACI,KAAK,CAAC,CAAC;EAChBJ,QAAQ,CAACK,iBAAiB,CAACJ,KAAK,EAAEC,GAAG,CAAC;EAEtC,IAAI;IACF,IAAI,OAAOI,QAAQ,KAAK,WAAW,IAAIA,QAAQ,CAACC,WAAW,GAAG,YAAY,EAAE,KAAK,EAAEJ,WAAW,CAAC,EAAE,OAAO,IAAI;EAC9G,CAAC,CAAC,MAAM;IACN;EAAA;EAGF,IAAI,OAAOH,QAAQ,CAACQ,YAAY,KAAK,UAAU,EAAE;IAC/CR,QAAQ,CAACQ,YAAY,CAACL,WAAW,EAAEF,KAAK,EAAEC,GAAG,EAAE,KAAK,CAAC;EACvD,CAAC,MAAM;IACLF,QAAQ,CAACS,KAAK,GAAGT,QAAQ,CAACS,KAAK,CAACC,KAAK,CAAC,CAAC,EAAET,KAAK,CAAC,GAAGE,WAAW,GAAGH,QAAQ,CAACS,KAAK,CAACC,KAAK,CAACR,GAAG,CAAC;IACzF,MAAMS,KAAK,GAAGV,KAAK,GAAGE,WAAW,CAACS,MAAM;IACxCZ,QAAQ,CAACK,iBAAiB,CAACM,KAAK,EAAEA,KAAK,CAAC;EAC1C;EACAX,QAAQ,CAACa,aAAa,CAAC,IAAIC,KAAK,CAAC,OAAO,EAAE;IAAEC,OAAO,EAAE;EAAK,CAAC,CAAC,CAAC;EAC7D,OAAO,IAAI;AACb,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Reports one atomic edit as both the current and committed field value. */
|
|
2
|
+
export const commitFieldValue = (owner, value) => {
|
|
3
|
+
owner.onValueChange?.(value);
|
|
4
|
+
owner.onValueCommit?.(value);
|
|
5
|
+
};
|
|
6
|
+
export function resolveMaybeAccessor(value) {
|
|
7
|
+
return typeof value === "function" ? value() : value;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=field-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["commitFieldValue","owner","value","onValueChange","onValueCommit","resolveMaybeAccessor"],"sources":["inputs/field-contract.ts"],"sourcesContent":["import type { DateContext as StdlibDateContext } from \"@k2b/stdlib\";\nimport type { JSX } from \"solid-js\";\n\nexport type DateContext = StdlibDateContext;\nexport type MaybeAccessor<T> = T | (() => T);\n\nexport type FieldProps = {\n id?: string;\n class?: string;\n label?: JSX.Element;\n description?: JSX.Element;\n error?: MaybeAccessor<JSX.Element | undefined>;\n required?: boolean;\n disabled?: boolean;\n \"aria-label\"?: string;\n \"aria-describedby\"?: string;\n};\n\nexport type ValueFieldProps<T> = FieldProps & {\n value: MaybeAccessor<T>;\n onValueChange?: (value: T) => void;\n onValueCommit?: (value: T) => void;\n};\n\n/** Reports one atomic edit as both the current and committed field value. */\nexport const commitFieldValue = <T>(owner: Pick<ValueFieldProps<T>, \"onValueChange\" | \"onValueCommit\">, value: T): void => {\n owner.onValueChange?.(value);\n owner.onValueCommit?.(value);\n};\n\nexport function resolveMaybeAccessor<T>(value: MaybeAccessor<T>): T;\nexport function resolveMaybeAccessor<T>(value: MaybeAccessor<T> | undefined): T | undefined;\nexport function resolveMaybeAccessor<T>(value: MaybeAccessor<T> | undefined): T | undefined {\n return typeof value === \"function\" ? (value as () => T)() : value;\n}\n"],"mappings":"AAwBA;AACA,OAAO,MAAMA,gBAAgB,GAAGA,CAAIC,KAAkE,EAAEC,KAAQ,KAAW;EACzHD,KAAK,CAACE,aAAa,GAAGD,KAAK,CAAC;EAC5BD,KAAK,CAACG,aAAa,GAAGF,KAAK,CAAC;AAC9B,CAAC;AAID,OAAO,SAASG,oBAAoBA,CAAIH,KAAmC,EAAiB;EAC1F,OAAO,OAAOA,KAAK,KAAK,UAAU,GAAIA,KAAK,CAAa,CAAC,GAAGA,KAAK;AACnE","ignoreList":[]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export const DEFAULT_ICON_GROUPS = [{
|
|
2
|
+
value: "recommended",
|
|
3
|
+
label: "Recommended"
|
|
4
|
+
}, {
|
|
5
|
+
value: "people",
|
|
6
|
+
label: "People"
|
|
7
|
+
}, {
|
|
8
|
+
value: "work",
|
|
9
|
+
label: "Work"
|
|
10
|
+
}, {
|
|
11
|
+
value: "communication",
|
|
12
|
+
label: "Communication"
|
|
13
|
+
}, {
|
|
14
|
+
value: "files",
|
|
15
|
+
label: "Files"
|
|
16
|
+
}, {
|
|
17
|
+
value: "data",
|
|
18
|
+
label: "Data & tech"
|
|
19
|
+
}, {
|
|
20
|
+
value: "commerce",
|
|
21
|
+
label: "Commerce"
|
|
22
|
+
}, {
|
|
23
|
+
value: "places",
|
|
24
|
+
label: "Places"
|
|
25
|
+
}, {
|
|
26
|
+
value: "food",
|
|
27
|
+
label: "Food"
|
|
28
|
+
}, {
|
|
29
|
+
value: "media",
|
|
30
|
+
label: "Media"
|
|
31
|
+
}, {
|
|
32
|
+
value: "devices",
|
|
33
|
+
label: "Devices"
|
|
34
|
+
}];
|
|
35
|
+
const icon = (name, label, description, groups, keywords = []) => ({
|
|
36
|
+
value: `ti ti-${name}`,
|
|
37
|
+
label,
|
|
38
|
+
description,
|
|
39
|
+
icon: `ti ti-${name}`,
|
|
40
|
+
groups,
|
|
41
|
+
keywords: [name, ...keywords]
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
/** A curated, application-neutral Tabler catalogue for IconInput. */
|
|
45
|
+
export const DEFAULT_ICON_OPTIONS = [icon("activity", "Activity", "Live activity or health signals", ["recommended", "data"], ["pulse", "monitor"]), icon("adjustments", "Adjustments", "Tune settings or controls", ["recommended", "work"], ["settings", "controls"]), icon("alert-circle", "Alert", "Important warning or problem", ["recommended", "work"], ["warning", "error"]), icon("archive", "Archive", "Stored or inactive material", ["recommended", "files", "work"], ["box", "storage"]), icon("bell", "Bell", "Notifications and reminders", ["recommended", "communication"], ["notification", "reminder"]), icon("book", "Book", "Reading, knowledge, or a library", ["recommended", "files"], ["docs", "read", "library"]), icon("bookmark", "Bookmark", "Saved content for later", ["recommended", "files"], ["save", "favorite"]), icon("box", "Box", "A product, package, or container", ["recommended", "commerce", "work"], ["package", "inventory"]), icon("briefcase", "Briefcase", "Business, a job, or a project", ["recommended", "work"], ["business", "job"]), icon("building", "Building", "An organization or office", ["recommended", "work", "places"], ["company", "office"]), icon("calendar", "Calendar", "Dates, plans, and schedules", ["recommended", "work"], ["date", "schedule"]), icon("camera", "Camera", "Photography or image capture", ["recommended", "media", "devices"], ["photo", "image"]), icon("chart-bar", "Bar chart", "Compare values across categories", ["recommended", "data", "work"], ["analytics", "stats"]), icon("chart-line", "Line chart", "Show a trend over time", ["recommended", "data", "work"], ["analytics", "trend"]), icon("check", "Check", "A completed or confirmed action", ["recommended", "work"], ["done", "success"]), icon("circle-check", "Check circle", "Successful or approved status", ["recommended", "work"], ["done", "success", "approved"]), icon("clock", "Clock", "Time, duration, or a deadline", ["recommended", "work"], ["time", "schedule"]), icon("cloud", "Cloud", "Hosted or synchronized services", ["recommended", "data"], ["hosting", "online", "sync"]), icon("heart", "Heart", "A favorite, like, or health topic", ["recommended", "people"], ["favorite", "health", "love"]), icon("home", "Home", "A home page or physical home", ["recommended", "places"], ["start", "house"]), icon("layout-dashboard", "Dashboard", "An overview or control center", ["recommended", "data", "work"], ["layout", "overview"]), icon("search", "Search", "Find content or records", ["recommended", "work", "data"], ["find", "lookup"]), icon("settings", "Settings", "Configuration and preferences", ["recommended", "work"], ["configure", "preferences"]), icon("sparkles", "Sparkles", "AI, magic, or something new", ["recommended", "data", "media"], ["ai", "magic", "new"]), icon("star", "Star", "A favorite, rating, or highlight", ["recommended", "work"], ["favorite", "rating"]), icon("tag", "Tag", "A label or category", ["recommended", "files", "work"], ["label", "category"]), icon("cube", "Cube", "A module, object, or component", ["recommended", "data", "work"], ["package", "component"]), icon("download", "Download", "Save or export a file", ["recommended", "files", "data"], ["save", "export"]), icon("external-link", "External link", "Open a different page or website", ["recommended", "communication", "data"], ["open", "new tab"]), icon("eye", "Eye", "View, preview, or visibility", ["recommended", "work", "media"], ["view", "preview"]), icon("help-circle", "Help", "Help, support, or a question", ["recommended", "communication"], ["question", "support"]), icon("info-circle", "Info", "Additional information or guidance", ["recommended", "communication"], ["information", "help"]), icon("key", "Key", "Access, credentials, or security", ["recommended", "work", "data"], ["access", "security"]), icon("link", "Link", "A URL or connection", ["recommended", "communication", "data"], ["url", "connection"]), icon("list", "List", "A sequence of items or rows", ["recommended", "work", "files"], ["items", "rows"]), icon("lock", "Lock", "Private or protected content", ["recommended", "work", "data"], ["security", "private"]), icon("package", "Package", "A shipped item or software module", ["recommended", "commerce", "data"], ["box", "module"]), icon("plus", "Plus", "Add or create something", ["recommended", "work"], ["add", "create"]), icon("shield", "Shield", "Security or protection", ["recommended", "work", "data"], ["security", "protection"]), icon("trash", "Trash", "Delete or remove something", ["recommended", "work", "files"], ["delete", "remove"]), icon("upload", "Upload", "Import or send a file", ["recommended", "files", "data"], ["import", "file"]), icon("x", "Close", "Close, cancel, or remove", ["recommended", "work"], ["cancel", "remove"]), icon("address-book", "Address book", "Saved people and contact details", ["people", "communication"], ["contacts", "directory"]), icon("friends", "Friends", "Friends or a social circle", ["people", "communication"], ["social", "group"]), icon("id", "ID card", "Identity or account details", ["people", "work"], ["identity", "badge"]), icon("mood-smile", "Smile", "Positive mood or feedback", ["people", "communication"], ["happy", "emoji"]), icon("user", "User", "One person or account", ["recommended", "people", "work"], ["person", "account"]), icon("user-check", "Verified user", "An approved or verified person", ["people", "work"], ["approved", "verified"]), icon("user-circle", "User profile", "A personal profile or avatar", ["people"], ["profile", "avatar"]), icon("user-plus", "Add user", "Invite or add a person", ["people", "work"], ["invite", "join"]), icon("users", "Users", "A group, team, or audience", ["recommended", "people", "work"], ["people", "team"]), icon("award", "Award", "An achievement or recognition", ["work", "people"], ["medal", "achievement"]), icon("building-store", "Store", "A shop or retail location", ["work", "commerce", "places"], ["shop", "retail"]), icon("clipboard", "Clipboard", "Copied content or a work item", ["work", "files"], ["copy", "paste"]), icon("clipboard-list", "Task list", "A checklist or set of tasks", ["work", "files"], ["todo", "checklist"]), icon("edit", "Edit", "Change existing content", ["recommended", "work", "files"], ["pencil", "change"]), icon("filter", "Filter", "Narrow a set of results", ["work", "data"], ["refine", "search"]), icon("flag", "Flag", "A marker, milestone, or report", ["work", "places"], ["marker", "milestone"]), icon("presentation", "Presentation", "Slides or a talk", ["work", "files", "media"], ["slides", "deck"]), icon("printer", "Printer", "Print a physical copy", ["work", "files", "devices"], ["print", "paper"]), icon("school", "School", "Education, training, or a campus", ["work", "people", "places"], ["education", "learning"]), icon("target", "Target", "A goal or objective", ["work", "data"], ["goal", "aim"]), icon("tool", "Tool", "Maintenance or practical work", ["recommended", "work"], ["build", "maintenance", "wrench"]), icon("trophy", "Trophy", "A win or major achievement", ["work", "people"], ["winner", "champion"]), icon("file", "File", "A generic file or document", ["recommended", "files"], ["document"]), icon("file-code", "Code file", "Source code or a script", ["files", "data"], ["source", "developer"]), icon("file-spreadsheet", "Spreadsheet", "Tabular data or a workbook", ["files", "data", "work"], ["excel", "sheet", "csv"]), icon("file-text", "Document", "Written text or documentation", ["recommended", "files", "work"], ["text", "docs"]), icon("files", "Files", "A collection of documents", ["files", "work"], ["documents", "multiple"]), icon("folder", "Folder", "A directory of files", ["recommended", "files", "work"], ["directory"]), icon("folder-open", "Open folder", "A currently open directory", ["files", "work"], ["directory", "browse"]), icon("note", "Note", "A short memo or annotation", ["recommended", "files", "work"], ["memo", "writing"]), icon("notebook", "Notebook", "Notes, a journal, or research", ["files", "work"], ["journal", "writing"]), icon("paperclip", "Attachment", "An attached file", ["files", "communication", "work"], ["attach", "paperclip"]), icon("pencil", "Pencil", "Writing or composing content", ["files", "work"], ["write", "compose"]), icon("api", "API", "An application programming interface", ["data"], ["endpoint", "service"]), icon("brand-github", "GitHub", "A GitHub repository or project", ["data", "work"], ["git", "repository", "code"]), icon("browser", "Browser", "A website or web browser", ["data", "devices"], ["web", "internet"]), icon("bug", "Bug", "A software issue or defect", ["data", "work"], ["error", "issue"]), icon("code", "Code", "Programming or source code", ["recommended", "data", "work"], ["source", "developer"]), icon("database", "Database", "Structured data storage", ["recommended", "data"], ["db", "storage"]), icon("git-branch", "Git branch", "A branch of source changes", ["data", "work"], ["repository", "fork"]), icon("network", "Network", "Connected systems or nodes", ["data", "devices"], ["connection", "graph"]), icon("robot", "Robot", "Automation, a bot, or AI", ["data", "work"], ["bot", "ai", "automation"]), icon("server", "Server", "A host or infrastructure service", ["recommended", "data", "devices"], ["host", "infrastructure"]), icon("table", "Table", "Rows and columns of data", ["data", "files", "work"], ["grid", "spreadsheet"]), icon("terminal", "Terminal", "A command line or shell", ["data", "devices"], ["console", "cli", "shell"]), icon("wifi", "Wi-Fi", "Wireless network access", ["data", "devices"], ["wireless", "internet"]), icon("at", "At sign", "A mention or email address", ["communication"], ["mention", "email"]), icon("mail", "Mail", "Email or written correspondence", ["recommended", "communication", "work"], ["email", "message"]), icon("mail-opened", "Opened mail", "A read or opened message", ["communication", "work"], ["email", "read"]), icon("message", "Message", "Chat or a conversation", ["recommended", "communication", "people"], ["chat", "comment"]), icon("messages", "Messages", "A conversation with several messages", ["communication", "people"], ["chat", "conversation"]), icon("microphone", "Microphone", "Voice input or audio recording", ["communication", "media", "devices"], ["audio", "voice", "record"]), icon("phone", "Phone", "A telephone call or contact number", ["communication", "people", "devices"], ["call", "telephone"]), icon("send", "Send", "Deliver a message or submission", ["recommended", "communication", "work"], ["submit", "deliver"]), icon("share", "Share", "Distribute content to others", ["communication", "people", "files"], ["send", "social"]), icon("building-bank", "Bank", "Banking or a financial institution", ["commerce", "work", "places"], ["finance", "money"]), icon("calculator", "Calculator", "Calculation or accounting", ["commerce", "data", "devices"], ["math", "compute"]), icon("cash", "Cash", "Physical money or a cash payment", ["commerce"], ["money", "banknote"]), icon("coin", "Coin", "Money, currency, or credits", ["recommended", "commerce"], ["money", "finance"]), icon("credit-card", "Credit card", "Card payments and billing", ["recommended", "commerce"], ["payment", "money"]), icon("currency-dollar", "Dollar", "Prices or amounts in dollars", ["commerce", "data"], ["currency", "money", "usd", "$"]), icon("currency-euro", "Euro", "Prices or amounts in euros", ["commerce", "data"], ["currency", "money", "eur", "€"]), icon("percentage", "Percentage", "A rate, share, or discount", ["commerce", "data"], ["percent", "discount", "%"]), icon("receipt", "Receipt", "A purchase, bill, or invoice", ["commerce", "files"], ["bill", "invoice"]), icon("shopping-bag", "Shopping bag", "Retail shopping or an order", ["commerce"], ["shop", "buy"]), icon("shopping-cart", "Shopping cart", "A basket of items to purchase", ["commerce"], ["shop", "purchase"]), icon("wallet", "Wallet", "Money, cards, or an account balance", ["commerce"], ["cash", "finance"]), icon("bike", "Bike", "Cycling or bicycle transport", ["places"], ["bicycle", "transport"]), icon("bus", "Bus", "Public road transport", ["places"], ["transport", "public"]), icon("car", "Car", "Driving or a road vehicle", ["places"], ["auto", "vehicle"]), icon("compass", "Compass", "Direction or navigation", ["places"], ["navigation", "direction"]), icon("map", "Map", "Geography or an area overview", ["places", "data"], ["location", "geography"]), icon("map-pin", "Map pin", "A specific place or address", ["recommended", "places"], ["location", "place"]), icon("mountain", "Mountain", "Nature, outdoors, or a peak", ["places"], ["outdoors", "nature"]), icon("plane", "Plane", "Air travel or a flight", ["places"], ["flight", "airplane"]), icon("rocket", "Rocket", "A launch, growth, or fast start", ["places", "work", "data"], ["launch", "space", "boost"]), icon("route", "Route", "A path, journey, or itinerary", ["places"], ["path", "travel"]), icon("ship", "Ship", "Sea transport or shipping", ["places", "commerce"], ["boat", "vessel"]), icon("tent", "Tent", "Camping or an outdoor location", ["places"], ["camping", "outdoors"]), icon("train", "Train", "Rail travel or public transport", ["places"], ["rail", "transport"]), icon("truck", "Truck", "Freight, logistics, or delivery", ["places", "commerce"], ["shipping", "delivery"]), icon("world", "World", "Global, international, or web content", ["recommended", "places", "data"], ["globe", "web"]), icon("apple", "Apple", "Fruit, food, or healthy eating", ["food"], ["fruit", "healthy"]), icon("cake", "Cake", "Dessert or a celebration", ["food"], ["dessert", "birthday"]), icon("chef-hat", "Chef hat", "Cooking, recipes, or a restaurant", ["food", "work"], ["cook", "recipe", "restaurant"]), icon("coffee", "Coffee", "Coffee, a café, or a break", ["recommended", "food", "work"], ["drink", "cafe", "caffeine"]), icon("cookie", "Cookie", "A snack, dessert, or browser cookie", ["food", "data"], ["dessert", "snack"]), icon("glass", "Glass", "A drink or beverage", ["food"], ["drink", "wine"]), icon("ice-cream", "Ice cream", "A frozen dessert or treat", ["food"], ["dessert", "frozen"]), icon("lemon", "Lemon", "Citrus fruit or a fresh flavor", ["food"], ["fruit", "citrus"]), icon("mug", "Mug", "A hot drink or cup", ["food", "work"], ["cup", "beverage"]), icon("pizza", "Pizza", "Food, delivery, or a restaurant", ["recommended", "food", "commerce"], ["restaurant", "delivery"]), icon("headphones", "Headphones", "Listening to music or audio", ["media", "devices"], ["audio", "listen"]), icon("music", "Music", "Songs, sound, or audio", ["media"], ["song", "audio"]), icon("palette", "Palette", "Color, art, or visual design", ["media", "work"], ["color", "design", "art"]), icon("photo", "Photo", "An image or picture", ["recommended", "media", "files"], ["image", "picture"]), icon("player-pause", "Pause", "Pause audio or video playback", ["media"], ["stop", "playback"]), icon("player-play", "Play", "Start audio or video playback", ["recommended", "media"], ["start", "playback"]), icon("player-stop", "Stop", "Stop audio or video playback", ["media"], ["halt", "playback"]), icon("video", "Video", "Moving images or a recording", ["recommended", "media", "communication"], ["camera", "movie"]), icon("volume", "Volume", "Sound or audio level", ["media", "devices"], ["sound", "audio"]), icon("device-desktop", "Desktop", "A desktop computer or monitor", ["recommended", "devices", "data"], ["computer", "screen"]), icon("device-laptop", "Laptop", "A portable computer", ["devices", "data"], ["computer"]), icon("device-mobile", "Mobile phone", "A smartphone or mobile view", ["devices", "communication"], ["phone", "smartphone"]), icon("device-tablet", "Tablet", "A tablet computer or tablet view", ["devices", "data"], ["ipad", "computer"]), icon("plug", "Plug", "Power or a system connection", ["devices", "data"], ["connect", "power"])];
|
|
46
|
+
//# sourceMappingURL=icon-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_ICON_GROUPS","value","label","icon","name","description","groups","keywords","DEFAULT_ICON_OPTIONS"],"sources":["inputs/icon-options.ts"],"sourcesContent":["import type { SelectGroup } from \"./Select\";\nimport type { IconOption } from \"./SpecialInputs\";\n\nexport const DEFAULT_ICON_GROUPS = [\n { value: \"recommended\", label: \"Recommended\" },\n { value: \"people\", label: \"People\" },\n { value: \"work\", label: \"Work\" },\n { value: \"communication\", label: \"Communication\" },\n { value: \"files\", label: \"Files\" },\n { value: \"data\", label: \"Data & tech\" },\n { value: \"commerce\", label: \"Commerce\" },\n { value: \"places\", label: \"Places\" },\n { value: \"food\", label: \"Food\" },\n { value: \"media\", label: \"Media\" },\n { value: \"devices\", label: \"Devices\" },\n] as const satisfies readonly SelectGroup[];\n\ntype DefaultIconGroup = (typeof DEFAULT_ICON_GROUPS)[number][\"value\"];\n\nconst icon = (\n name: string,\n label: string,\n description: string,\n groups: readonly DefaultIconGroup[],\n keywords: readonly string[] = [],\n): IconOption => ({\n value: `ti ti-${name}`,\n label,\n description,\n icon: `ti ti-${name}`,\n groups,\n keywords: [name, ...keywords],\n});\n\n/** A curated, application-neutral Tabler catalogue for IconInput. */\nexport const DEFAULT_ICON_OPTIONS: readonly IconOption[] = [\n icon(\"activity\", \"Activity\", \"Live activity or health signals\", [\"recommended\", \"data\"], [\"pulse\", \"monitor\"]),\n icon(\"adjustments\", \"Adjustments\", \"Tune settings or controls\", [\"recommended\", \"work\"], [\"settings\", \"controls\"]),\n icon(\"alert-circle\", \"Alert\", \"Important warning or problem\", [\"recommended\", \"work\"], [\"warning\", \"error\"]),\n icon(\"archive\", \"Archive\", \"Stored or inactive material\", [\"recommended\", \"files\", \"work\"], [\"box\", \"storage\"]),\n icon(\"bell\", \"Bell\", \"Notifications and reminders\", [\"recommended\", \"communication\"], [\"notification\", \"reminder\"]),\n icon(\"book\", \"Book\", \"Reading, knowledge, or a library\", [\"recommended\", \"files\"], [\"docs\", \"read\", \"library\"]),\n icon(\"bookmark\", \"Bookmark\", \"Saved content for later\", [\"recommended\", \"files\"], [\"save\", \"favorite\"]),\n icon(\"box\", \"Box\", \"A product, package, or container\", [\"recommended\", \"commerce\", \"work\"], [\"package\", \"inventory\"]),\n icon(\"briefcase\", \"Briefcase\", \"Business, a job, or a project\", [\"recommended\", \"work\"], [\"business\", \"job\"]),\n icon(\"building\", \"Building\", \"An organization or office\", [\"recommended\", \"work\", \"places\"], [\"company\", \"office\"]),\n icon(\"calendar\", \"Calendar\", \"Dates, plans, and schedules\", [\"recommended\", \"work\"], [\"date\", \"schedule\"]),\n icon(\"camera\", \"Camera\", \"Photography or image capture\", [\"recommended\", \"media\", \"devices\"], [\"photo\", \"image\"]),\n icon(\"chart-bar\", \"Bar chart\", \"Compare values across categories\", [\"recommended\", \"data\", \"work\"], [\"analytics\", \"stats\"]),\n icon(\"chart-line\", \"Line chart\", \"Show a trend over time\", [\"recommended\", \"data\", \"work\"], [\"analytics\", \"trend\"]),\n icon(\"check\", \"Check\", \"A completed or confirmed action\", [\"recommended\", \"work\"], [\"done\", \"success\"]),\n icon(\"circle-check\", \"Check circle\", \"Successful or approved status\", [\"recommended\", \"work\"], [\"done\", \"success\", \"approved\"]),\n icon(\"clock\", \"Clock\", \"Time, duration, or a deadline\", [\"recommended\", \"work\"], [\"time\", \"schedule\"]),\n icon(\"cloud\", \"Cloud\", \"Hosted or synchronized services\", [\"recommended\", \"data\"], [\"hosting\", \"online\", \"sync\"]),\n icon(\"heart\", \"Heart\", \"A favorite, like, or health topic\", [\"recommended\", \"people\"], [\"favorite\", \"health\", \"love\"]),\n icon(\"home\", \"Home\", \"A home page or physical home\", [\"recommended\", \"places\"], [\"start\", \"house\"]),\n icon(\"layout-dashboard\", \"Dashboard\", \"An overview or control center\", [\"recommended\", \"data\", \"work\"], [\"layout\", \"overview\"]),\n icon(\"search\", \"Search\", \"Find content or records\", [\"recommended\", \"work\", \"data\"], [\"find\", \"lookup\"]),\n icon(\"settings\", \"Settings\", \"Configuration and preferences\", [\"recommended\", \"work\"], [\"configure\", \"preferences\"]),\n icon(\"sparkles\", \"Sparkles\", \"AI, magic, or something new\", [\"recommended\", \"data\", \"media\"], [\"ai\", \"magic\", \"new\"]),\n icon(\"star\", \"Star\", \"A favorite, rating, or highlight\", [\"recommended\", \"work\"], [\"favorite\", \"rating\"]),\n icon(\"tag\", \"Tag\", \"A label or category\", [\"recommended\", \"files\", \"work\"], [\"label\", \"category\"]),\n icon(\"cube\", \"Cube\", \"A module, object, or component\", [\"recommended\", \"data\", \"work\"], [\"package\", \"component\"]),\n icon(\"download\", \"Download\", \"Save or export a file\", [\"recommended\", \"files\", \"data\"], [\"save\", \"export\"]),\n icon(\"external-link\", \"External link\", \"Open a different page or website\", [\"recommended\", \"communication\", \"data\"], [\"open\", \"new tab\"]),\n icon(\"eye\", \"Eye\", \"View, preview, or visibility\", [\"recommended\", \"work\", \"media\"], [\"view\", \"preview\"]),\n icon(\"help-circle\", \"Help\", \"Help, support, or a question\", [\"recommended\", \"communication\"], [\"question\", \"support\"]),\n icon(\"info-circle\", \"Info\", \"Additional information or guidance\", [\"recommended\", \"communication\"], [\"information\", \"help\"]),\n icon(\"key\", \"Key\", \"Access, credentials, or security\", [\"recommended\", \"work\", \"data\"], [\"access\", \"security\"]),\n icon(\"link\", \"Link\", \"A URL or connection\", [\"recommended\", \"communication\", \"data\"], [\"url\", \"connection\"]),\n icon(\"list\", \"List\", \"A sequence of items or rows\", [\"recommended\", \"work\", \"files\"], [\"items\", \"rows\"]),\n icon(\"lock\", \"Lock\", \"Private or protected content\", [\"recommended\", \"work\", \"data\"], [\"security\", \"private\"]),\n icon(\"package\", \"Package\", \"A shipped item or software module\", [\"recommended\", \"commerce\", \"data\"], [\"box\", \"module\"]),\n icon(\"plus\", \"Plus\", \"Add or create something\", [\"recommended\", \"work\"], [\"add\", \"create\"]),\n icon(\"shield\", \"Shield\", \"Security or protection\", [\"recommended\", \"work\", \"data\"], [\"security\", \"protection\"]),\n icon(\"trash\", \"Trash\", \"Delete or remove something\", [\"recommended\", \"work\", \"files\"], [\"delete\", \"remove\"]),\n icon(\"upload\", \"Upload\", \"Import or send a file\", [\"recommended\", \"files\", \"data\"], [\"import\", \"file\"]),\n icon(\"x\", \"Close\", \"Close, cancel, or remove\", [\"recommended\", \"work\"], [\"cancel\", \"remove\"]),\n\n icon(\"address-book\", \"Address book\", \"Saved people and contact details\", [\"people\", \"communication\"], [\"contacts\", \"directory\"]),\n icon(\"friends\", \"Friends\", \"Friends or a social circle\", [\"people\", \"communication\"], [\"social\", \"group\"]),\n icon(\"id\", \"ID card\", \"Identity or account details\", [\"people\", \"work\"], [\"identity\", \"badge\"]),\n icon(\"mood-smile\", \"Smile\", \"Positive mood or feedback\", [\"people\", \"communication\"], [\"happy\", \"emoji\"]),\n icon(\"user\", \"User\", \"One person or account\", [\"recommended\", \"people\", \"work\"], [\"person\", \"account\"]),\n icon(\"user-check\", \"Verified user\", \"An approved or verified person\", [\"people\", \"work\"], [\"approved\", \"verified\"]),\n icon(\"user-circle\", \"User profile\", \"A personal profile or avatar\", [\"people\"], [\"profile\", \"avatar\"]),\n icon(\"user-plus\", \"Add user\", \"Invite or add a person\", [\"people\", \"work\"], [\"invite\", \"join\"]),\n icon(\"users\", \"Users\", \"A group, team, or audience\", [\"recommended\", \"people\", \"work\"], [\"people\", \"team\"]),\n\n icon(\"award\", \"Award\", \"An achievement or recognition\", [\"work\", \"people\"], [\"medal\", \"achievement\"]),\n icon(\"building-store\", \"Store\", \"A shop or retail location\", [\"work\", \"commerce\", \"places\"], [\"shop\", \"retail\"]),\n icon(\"clipboard\", \"Clipboard\", \"Copied content or a work item\", [\"work\", \"files\"], [\"copy\", \"paste\"]),\n icon(\"clipboard-list\", \"Task list\", \"A checklist or set of tasks\", [\"work\", \"files\"], [\"todo\", \"checklist\"]),\n icon(\"edit\", \"Edit\", \"Change existing content\", [\"recommended\", \"work\", \"files\"], [\"pencil\", \"change\"]),\n icon(\"filter\", \"Filter\", \"Narrow a set of results\", [\"work\", \"data\"], [\"refine\", \"search\"]),\n icon(\"flag\", \"Flag\", \"A marker, milestone, or report\", [\"work\", \"places\"], [\"marker\", \"milestone\"]),\n icon(\"presentation\", \"Presentation\", \"Slides or a talk\", [\"work\", \"files\", \"media\"], [\"slides\", \"deck\"]),\n icon(\"printer\", \"Printer\", \"Print a physical copy\", [\"work\", \"files\", \"devices\"], [\"print\", \"paper\"]),\n icon(\"school\", \"School\", \"Education, training, or a campus\", [\"work\", \"people\", \"places\"], [\"education\", \"learning\"]),\n icon(\"target\", \"Target\", \"A goal or objective\", [\"work\", \"data\"], [\"goal\", \"aim\"]),\n icon(\"tool\", \"Tool\", \"Maintenance or practical work\", [\"recommended\", \"work\"], [\"build\", \"maintenance\", \"wrench\"]),\n icon(\"trophy\", \"Trophy\", \"A win or major achievement\", [\"work\", \"people\"], [\"winner\", \"champion\"]),\n\n icon(\"file\", \"File\", \"A generic file or document\", [\"recommended\", \"files\"], [\"document\"]),\n icon(\"file-code\", \"Code file\", \"Source code or a script\", [\"files\", \"data\"], [\"source\", \"developer\"]),\n icon(\"file-spreadsheet\", \"Spreadsheet\", \"Tabular data or a workbook\", [\"files\", \"data\", \"work\"], [\"excel\", \"sheet\", \"csv\"]),\n icon(\"file-text\", \"Document\", \"Written text or documentation\", [\"recommended\", \"files\", \"work\"], [\"text\", \"docs\"]),\n icon(\"files\", \"Files\", \"A collection of documents\", [\"files\", \"work\"], [\"documents\", \"multiple\"]),\n icon(\"folder\", \"Folder\", \"A directory of files\", [\"recommended\", \"files\", \"work\"], [\"directory\"]),\n icon(\"folder-open\", \"Open folder\", \"A currently open directory\", [\"files\", \"work\"], [\"directory\", \"browse\"]),\n icon(\"note\", \"Note\", \"A short memo or annotation\", [\"recommended\", \"files\", \"work\"], [\"memo\", \"writing\"]),\n icon(\"notebook\", \"Notebook\", \"Notes, a journal, or research\", [\"files\", \"work\"], [\"journal\", \"writing\"]),\n icon(\"paperclip\", \"Attachment\", \"An attached file\", [\"files\", \"communication\", \"work\"], [\"attach\", \"paperclip\"]),\n icon(\"pencil\", \"Pencil\", \"Writing or composing content\", [\"files\", \"work\"], [\"write\", \"compose\"]),\n\n icon(\"api\", \"API\", \"An application programming interface\", [\"data\"], [\"endpoint\", \"service\"]),\n icon(\"brand-github\", \"GitHub\", \"A GitHub repository or project\", [\"data\", \"work\"], [\"git\", \"repository\", \"code\"]),\n icon(\"browser\", \"Browser\", \"A website or web browser\", [\"data\", \"devices\"], [\"web\", \"internet\"]),\n icon(\"bug\", \"Bug\", \"A software issue or defect\", [\"data\", \"work\"], [\"error\", \"issue\"]),\n icon(\"code\", \"Code\", \"Programming or source code\", [\"recommended\", \"data\", \"work\"], [\"source\", \"developer\"]),\n icon(\"database\", \"Database\", \"Structured data storage\", [\"recommended\", \"data\"], [\"db\", \"storage\"]),\n icon(\"git-branch\", \"Git branch\", \"A branch of source changes\", [\"data\", \"work\"], [\"repository\", \"fork\"]),\n icon(\"network\", \"Network\", \"Connected systems or nodes\", [\"data\", \"devices\"], [\"connection\", \"graph\"]),\n icon(\"robot\", \"Robot\", \"Automation, a bot, or AI\", [\"data\", \"work\"], [\"bot\", \"ai\", \"automation\"]),\n icon(\"server\", \"Server\", \"A host or infrastructure service\", [\"recommended\", \"data\", \"devices\"], [\"host\", \"infrastructure\"]),\n icon(\"table\", \"Table\", \"Rows and columns of data\", [\"data\", \"files\", \"work\"], [\"grid\", \"spreadsheet\"]),\n icon(\"terminal\", \"Terminal\", \"A command line or shell\", [\"data\", \"devices\"], [\"console\", \"cli\", \"shell\"]),\n icon(\"wifi\", \"Wi-Fi\", \"Wireless network access\", [\"data\", \"devices\"], [\"wireless\", \"internet\"]),\n\n icon(\"at\", \"At sign\", \"A mention or email address\", [\"communication\"], [\"mention\", \"email\"]),\n icon(\"mail\", \"Mail\", \"Email or written correspondence\", [\"recommended\", \"communication\", \"work\"], [\"email\", \"message\"]),\n icon(\"mail-opened\", \"Opened mail\", \"A read or opened message\", [\"communication\", \"work\"], [\"email\", \"read\"]),\n icon(\"message\", \"Message\", \"Chat or a conversation\", [\"recommended\", \"communication\", \"people\"], [\"chat\", \"comment\"]),\n icon(\"messages\", \"Messages\", \"A conversation with several messages\", [\"communication\", \"people\"], [\"chat\", \"conversation\"]),\n icon(\"microphone\", \"Microphone\", \"Voice input or audio recording\", [\"communication\", \"media\", \"devices\"], [\"audio\", \"voice\", \"record\"]),\n icon(\"phone\", \"Phone\", \"A telephone call or contact number\", [\"communication\", \"people\", \"devices\"], [\"call\", \"telephone\"]),\n icon(\"send\", \"Send\", \"Deliver a message or submission\", [\"recommended\", \"communication\", \"work\"], [\"submit\", \"deliver\"]),\n icon(\"share\", \"Share\", \"Distribute content to others\", [\"communication\", \"people\", \"files\"], [\"send\", \"social\"]),\n\n icon(\"building-bank\", \"Bank\", \"Banking or a financial institution\", [\"commerce\", \"work\", \"places\"], [\"finance\", \"money\"]),\n icon(\"calculator\", \"Calculator\", \"Calculation or accounting\", [\"commerce\", \"data\", \"devices\"], [\"math\", \"compute\"]),\n icon(\"cash\", \"Cash\", \"Physical money or a cash payment\", [\"commerce\"], [\"money\", \"banknote\"]),\n icon(\"coin\", \"Coin\", \"Money, currency, or credits\", [\"recommended\", \"commerce\"], [\"money\", \"finance\"]),\n icon(\"credit-card\", \"Credit card\", \"Card payments and billing\", [\"recommended\", \"commerce\"], [\"payment\", \"money\"]),\n icon(\"currency-dollar\", \"Dollar\", \"Prices or amounts in dollars\", [\"commerce\", \"data\"], [\"currency\", \"money\", \"usd\", \"$\"]),\n icon(\"currency-euro\", \"Euro\", \"Prices or amounts in euros\", [\"commerce\", \"data\"], [\"currency\", \"money\", \"eur\", \"€\"]),\n icon(\"percentage\", \"Percentage\", \"A rate, share, or discount\", [\"commerce\", \"data\"], [\"percent\", \"discount\", \"%\"]),\n icon(\"receipt\", \"Receipt\", \"A purchase, bill, or invoice\", [\"commerce\", \"files\"], [\"bill\", \"invoice\"]),\n icon(\"shopping-bag\", \"Shopping bag\", \"Retail shopping or an order\", [\"commerce\"], [\"shop\", \"buy\"]),\n icon(\"shopping-cart\", \"Shopping cart\", \"A basket of items to purchase\", [\"commerce\"], [\"shop\", \"purchase\"]),\n icon(\"wallet\", \"Wallet\", \"Money, cards, or an account balance\", [\"commerce\"], [\"cash\", \"finance\"]),\n\n icon(\"bike\", \"Bike\", \"Cycling or bicycle transport\", [\"places\"], [\"bicycle\", \"transport\"]),\n icon(\"bus\", \"Bus\", \"Public road transport\", [\"places\"], [\"transport\", \"public\"]),\n icon(\"car\", \"Car\", \"Driving or a road vehicle\", [\"places\"], [\"auto\", \"vehicle\"]),\n icon(\"compass\", \"Compass\", \"Direction or navigation\", [\"places\"], [\"navigation\", \"direction\"]),\n icon(\"map\", \"Map\", \"Geography or an area overview\", [\"places\", \"data\"], [\"location\", \"geography\"]),\n icon(\"map-pin\", \"Map pin\", \"A specific place or address\", [\"recommended\", \"places\"], [\"location\", \"place\"]),\n icon(\"mountain\", \"Mountain\", \"Nature, outdoors, or a peak\", [\"places\"], [\"outdoors\", \"nature\"]),\n icon(\"plane\", \"Plane\", \"Air travel or a flight\", [\"places\"], [\"flight\", \"airplane\"]),\n icon(\"rocket\", \"Rocket\", \"A launch, growth, or fast start\", [\"places\", \"work\", \"data\"], [\"launch\", \"space\", \"boost\"]),\n icon(\"route\", \"Route\", \"A path, journey, or itinerary\", [\"places\"], [\"path\", \"travel\"]),\n icon(\"ship\", \"Ship\", \"Sea transport or shipping\", [\"places\", \"commerce\"], [\"boat\", \"vessel\"]),\n icon(\"tent\", \"Tent\", \"Camping or an outdoor location\", [\"places\"], [\"camping\", \"outdoors\"]),\n icon(\"train\", \"Train\", \"Rail travel or public transport\", [\"places\"], [\"rail\", \"transport\"]),\n icon(\"truck\", \"Truck\", \"Freight, logistics, or delivery\", [\"places\", \"commerce\"], [\"shipping\", \"delivery\"]),\n icon(\"world\", \"World\", \"Global, international, or web content\", [\"recommended\", \"places\", \"data\"], [\"globe\", \"web\"]),\n\n icon(\"apple\", \"Apple\", \"Fruit, food, or healthy eating\", [\"food\"], [\"fruit\", \"healthy\"]),\n icon(\"cake\", \"Cake\", \"Dessert or a celebration\", [\"food\"], [\"dessert\", \"birthday\"]),\n icon(\"chef-hat\", \"Chef hat\", \"Cooking, recipes, or a restaurant\", [\"food\", \"work\"], [\"cook\", \"recipe\", \"restaurant\"]),\n icon(\"coffee\", \"Coffee\", \"Coffee, a café, or a break\", [\"recommended\", \"food\", \"work\"], [\"drink\", \"cafe\", \"caffeine\"]),\n icon(\"cookie\", \"Cookie\", \"A snack, dessert, or browser cookie\", [\"food\", \"data\"], [\"dessert\", \"snack\"]),\n icon(\"glass\", \"Glass\", \"A drink or beverage\", [\"food\"], [\"drink\", \"wine\"]),\n icon(\"ice-cream\", \"Ice cream\", \"A frozen dessert or treat\", [\"food\"], [\"dessert\", \"frozen\"]),\n icon(\"lemon\", \"Lemon\", \"Citrus fruit or a fresh flavor\", [\"food\"], [\"fruit\", \"citrus\"]),\n icon(\"mug\", \"Mug\", \"A hot drink or cup\", [\"food\", \"work\"], [\"cup\", \"beverage\"]),\n icon(\"pizza\", \"Pizza\", \"Food, delivery, or a restaurant\", [\"recommended\", \"food\", \"commerce\"], [\"restaurant\", \"delivery\"]),\n\n icon(\"headphones\", \"Headphones\", \"Listening to music or audio\", [\"media\", \"devices\"], [\"audio\", \"listen\"]),\n icon(\"music\", \"Music\", \"Songs, sound, or audio\", [\"media\"], [\"song\", \"audio\"]),\n icon(\"palette\", \"Palette\", \"Color, art, or visual design\", [\"media\", \"work\"], [\"color\", \"design\", \"art\"]),\n icon(\"photo\", \"Photo\", \"An image or picture\", [\"recommended\", \"media\", \"files\"], [\"image\", \"picture\"]),\n icon(\"player-pause\", \"Pause\", \"Pause audio or video playback\", [\"media\"], [\"stop\", \"playback\"]),\n icon(\"player-play\", \"Play\", \"Start audio or video playback\", [\"recommended\", \"media\"], [\"start\", \"playback\"]),\n icon(\"player-stop\", \"Stop\", \"Stop audio or video playback\", [\"media\"], [\"halt\", \"playback\"]),\n icon(\"video\", \"Video\", \"Moving images or a recording\", [\"recommended\", \"media\", \"communication\"], [\"camera\", \"movie\"]),\n icon(\"volume\", \"Volume\", \"Sound or audio level\", [\"media\", \"devices\"], [\"sound\", \"audio\"]),\n\n icon(\"device-desktop\", \"Desktop\", \"A desktop computer or monitor\", [\"recommended\", \"devices\", \"data\"], [\"computer\", \"screen\"]),\n icon(\"device-laptop\", \"Laptop\", \"A portable computer\", [\"devices\", \"data\"], [\"computer\"]),\n icon(\"device-mobile\", \"Mobile phone\", \"A smartphone or mobile view\", [\"devices\", \"communication\"], [\"phone\", \"smartphone\"]),\n icon(\"device-tablet\", \"Tablet\", \"A tablet computer or tablet view\", [\"devices\", \"data\"], [\"ipad\", \"computer\"]),\n icon(\"plug\", \"Plug\", \"Power or a system connection\", [\"devices\", \"data\"], [\"connect\", \"power\"]),\n] as const;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
const MIN_CROP_SIZE = 0.08;
|
|
2
|
+
const clamp = (value, min, max) => Math.max(min, Math.min(max, value));
|
|
3
|
+
const aspectRatio = aspect => aspect.width > 0 && aspect.height > 0 ? aspect.width / aspect.height : 1;
|
|
4
|
+
export const normalizeImageCropRotation = rotation => (Math.round(rotation / 90) * 90 % 360 + 360) % 360;
|
|
5
|
+
export const rotateImageCropRight = rotation => normalizeImageCropRotation(rotation + 90);
|
|
6
|
+
export const getInitialImageCropRect = (imageSize, aspect = "free") => {
|
|
7
|
+
if (aspect === "free") return {
|
|
8
|
+
x: 0.1,
|
|
9
|
+
y: 0.1,
|
|
10
|
+
width: 0.8,
|
|
11
|
+
height: 0.8
|
|
12
|
+
};
|
|
13
|
+
const target = aspectRatio(aspect);
|
|
14
|
+
const source = imageSize.width > 0 && imageSize.height > 0 ? imageSize.width / imageSize.height : 1;
|
|
15
|
+
let width = 0.86;
|
|
16
|
+
let height = width * source / target;
|
|
17
|
+
if (height > 0.86) {
|
|
18
|
+
height = 0.86;
|
|
19
|
+
width = height * target / source;
|
|
20
|
+
}
|
|
21
|
+
width = clamp(width, MIN_CROP_SIZE, 1);
|
|
22
|
+
height = clamp(height, MIN_CROP_SIZE, 1);
|
|
23
|
+
return {
|
|
24
|
+
x: (1 - width) / 2,
|
|
25
|
+
y: (1 - height) / 2,
|
|
26
|
+
width,
|
|
27
|
+
height
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export const clampImageCropRect = (rect, imageSize, aspect = "free") => {
|
|
31
|
+
if (aspect === "free") {
|
|
32
|
+
const width = clamp(rect.width, MIN_CROP_SIZE, 1);
|
|
33
|
+
const height = clamp(rect.height, MIN_CROP_SIZE, 1);
|
|
34
|
+
return {
|
|
35
|
+
x: clamp(rect.x, 0, 1 - width),
|
|
36
|
+
y: clamp(rect.y, 0, 1 - height),
|
|
37
|
+
width,
|
|
38
|
+
height
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const target = aspectRatio(aspect);
|
|
42
|
+
const source = imageSize.width > 0 && imageSize.height > 0 ? imageSize.width / imageSize.height : 1;
|
|
43
|
+
let width = clamp(rect.width, MIN_CROP_SIZE, 1);
|
|
44
|
+
let height = width * source / target;
|
|
45
|
+
if (height > 1) {
|
|
46
|
+
height = 1;
|
|
47
|
+
width = height * target / source;
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
x: clamp(rect.x, 0, 1 - width),
|
|
51
|
+
y: clamp(rect.y, 0, 1 - height),
|
|
52
|
+
width,
|
|
53
|
+
height
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
export const resizeImageCropAroundCenter = (rect, imageSize, aspect, scale) => {
|
|
57
|
+
const safeScale = clamp(scale, 0.2, 5);
|
|
58
|
+
const centerX = rect.x + rect.width / 2;
|
|
59
|
+
const centerY = rect.y + rect.height / 2;
|
|
60
|
+
const width = clamp(rect.width / safeScale, MIN_CROP_SIZE, 1);
|
|
61
|
+
const height = aspect === "free" ? clamp(rect.height / safeScale, MIN_CROP_SIZE, 1) : width * (imageSize.width / Math.max(1, imageSize.height)) / aspectRatio(aspect);
|
|
62
|
+
return clampImageCropRect({
|
|
63
|
+
x: centerX - width / 2,
|
|
64
|
+
y: centerY - height / 2,
|
|
65
|
+
width,
|
|
66
|
+
height
|
|
67
|
+
}, imageSize, aspect);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/** Resizes a crop from one corner while keeping the opposite corner anchored. */
|
|
71
|
+
export const resizeImageCropFromCorner = (rect, imageSize, aspect, handle, dx, dy) => {
|
|
72
|
+
const movesEast = handle.includes("e");
|
|
73
|
+
const movesSouth = handle.includes("s");
|
|
74
|
+
const anchorX = movesEast ? rect.x : rect.x + rect.width;
|
|
75
|
+
const anchorY = movesSouth ? rect.y : rect.y + rect.height;
|
|
76
|
+
const requestedWidth = rect.width + (movesEast ? dx : -dx);
|
|
77
|
+
const requestedHeight = rect.height + (movesSouth ? dy : -dy);
|
|
78
|
+
if (aspect === "free") {
|
|
79
|
+
const width = clamp(requestedWidth, MIN_CROP_SIZE, movesEast ? 1 - anchorX : anchorX);
|
|
80
|
+
const height = clamp(requestedHeight, MIN_CROP_SIZE, movesSouth ? 1 - anchorY : anchorY);
|
|
81
|
+
return {
|
|
82
|
+
x: movesEast ? anchorX : anchorX - width,
|
|
83
|
+
y: movesSouth ? anchorY : anchorY - height,
|
|
84
|
+
width,
|
|
85
|
+
height
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const source = imageSize.width > 0 && imageSize.height > 0 ? imageSize.width / imageSize.height : 1;
|
|
89
|
+
const target = aspectRatio(aspect);
|
|
90
|
+
const widthFromHeight = requestedHeight * target / source;
|
|
91
|
+
const requested = Math.abs(requestedWidth - rect.width) >= Math.abs(widthFromHeight - rect.width) ? requestedWidth : widthFromHeight;
|
|
92
|
+
const horizontalLimit = movesEast ? 1 - anchorX : anchorX;
|
|
93
|
+
const verticalLimit = movesSouth ? 1 - anchorY : anchorY;
|
|
94
|
+
const maxWidth = Math.max(0, Math.min(horizontalLimit, verticalLimit * target / source));
|
|
95
|
+
const minimumWidth = Math.min(maxWidth, Math.max(MIN_CROP_SIZE, MIN_CROP_SIZE * target / source));
|
|
96
|
+
const width = clamp(requested, minimumWidth, maxWidth);
|
|
97
|
+
const height = width * source / target;
|
|
98
|
+
return {
|
|
99
|
+
x: movesEast ? anchorX : anchorX - width,
|
|
100
|
+
y: movesSouth ? anchorY : anchorY - height,
|
|
101
|
+
width,
|
|
102
|
+
height
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
export const imageCropRectToPixels = (rect, imageSize) => {
|
|
106
|
+
const x = clamp(rect.x, 0, 1 - MIN_CROP_SIZE);
|
|
107
|
+
const y = clamp(rect.y, 0, 1 - MIN_CROP_SIZE);
|
|
108
|
+
return {
|
|
109
|
+
x: Math.round(x * imageSize.width),
|
|
110
|
+
y: Math.round(y * imageSize.height),
|
|
111
|
+
width: Math.max(1, Math.round(clamp(rect.width, MIN_CROP_SIZE, 1 - x) * imageSize.width)),
|
|
112
|
+
height: Math.max(1, Math.round(clamp(rect.height, MIN_CROP_SIZE, 1 - y) * imageSize.height))
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
const cropped = async (source, state, output) => {
|
|
116
|
+
const {
|
|
117
|
+
img
|
|
118
|
+
} = await import("@k2b/stdlib/browser");
|
|
119
|
+
let data = await img.create(source);
|
|
120
|
+
if (state.rotation) data = await img.rotate(state.rotation)(data);
|
|
121
|
+
const crop = imageCropRectToPixels(state.crop, {
|
|
122
|
+
width: data.width,
|
|
123
|
+
height: data.height
|
|
124
|
+
});
|
|
125
|
+
data = await img.crop(crop.x, crop.y, crop.width, crop.height)(data);
|
|
126
|
+
if (output.width || output.height) {
|
|
127
|
+
data = await img.resize(output.width, output.height, "fill")(data);
|
|
128
|
+
} else if (output.maxWidth || output.maxHeight) {
|
|
129
|
+
const ratio = Math.min(1, (output.maxWidth ?? data.width) / data.width, (output.maxHeight ?? data.height) / data.height);
|
|
130
|
+
if (ratio < 1) data = await img.resize(Math.round(data.width * ratio), Math.round(data.height * ratio), "fill")(data);
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
img,
|
|
134
|
+
data
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
export const createCroppedImageCanvas = async (source, state, output = {}) => {
|
|
138
|
+
const result = await cropped(source, state, output);
|
|
139
|
+
return result.img.toCanvas(result.data);
|
|
140
|
+
};
|
|
141
|
+
export const createCroppedImageDataUrl = async (source, state, output = {}) => {
|
|
142
|
+
const result = await cropped(source, state, output);
|
|
143
|
+
return result.img.toBase64(output.format ?? "webp", output.quality ?? 0.86)(result.data);
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=image-crop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MIN_CROP_SIZE","clamp","value","min","max","Math","aspectRatio","aspect","width","height","normalizeImageCropRotation","rotation","round","rotateImageCropRight","getInitialImageCropRect","imageSize","x","y","target","source","clampImageCropRect","rect","resizeImageCropAroundCenter","scale","safeScale","centerX","centerY","resizeImageCropFromCorner","handle","dx","dy","movesEast","includes","movesSouth","anchorX","anchorY","requestedWidth","requestedHeight","widthFromHeight","requested","abs","horizontalLimit","verticalLimit","maxWidth","minimumWidth","imageCropRectToPixels","cropped","state","output","img","data","create","rotate","crop","resize","maxHeight","ratio","createCroppedImageCanvas","result","toCanvas","createCroppedImageDataUrl","toBase64","format","quality"],"sources":["inputs/image-crop.ts"],"sourcesContent":["export type ImageCropAspect = \"free\" | { width: number; height: number };\nexport type ImageCropRotation = 0 | 90 | 180 | 270;\nexport type ImageCropRect = { x: number; y: number; width: number; height: number };\nexport type ImageCropState = { crop: ImageCropRect; rotation: ImageCropRotation };\nexport type ImageCropSource = File | Blob | HTMLImageElement | HTMLCanvasElement | string;\nexport type ImageCropOutput = {\n width?: number;\n height?: number;\n maxWidth?: number;\n maxHeight?: number;\n format?: \"webp\" | \"jpeg\" | \"png\";\n quality?: number;\n};\nexport type ImageCropSize = { width: number; height: number };\nexport type ImageCropResizeHandle = \"nw\" | \"ne\" | \"sw\" | \"se\";\n\nconst MIN_CROP_SIZE = 0.08;\nconst clamp = (value: number, min: number, max: number) => Math.max(min, Math.min(max, value));\nconst aspectRatio = (aspect: Exclude<ImageCropAspect, \"free\">) =>\n aspect.width > 0 && aspect.height > 0 ? aspect.width / aspect.height : 1;\n\nexport const normalizeImageCropRotation = (rotation: number): ImageCropRotation =>\n ((((Math.round(rotation / 90) * 90) % 360) + 360) % 360) as ImageCropRotation;\n\nexport const rotateImageCropRight = (rotation: ImageCropRotation): ImageCropRotation => normalizeImageCropRotation(rotation + 90);\n\nexport const getInitialImageCropRect = (imageSize: ImageCropSize, aspect: ImageCropAspect = \"free\"): ImageCropRect => {\n if (aspect === \"free\") return { x: 0.1, y: 0.1, width: 0.8, height: 0.8 };\n const target = aspectRatio(aspect);\n const source = imageSize.width > 0 && imageSize.height > 0 ? imageSize.width / imageSize.height : 1;\n let width = 0.86;\n let height = (width * source) / target;\n if (height > 0.86) {\n height = 0.86;\n width = (height * target) / source;\n }\n width = clamp(width, MIN_CROP_SIZE, 1);\n height = clamp(height, MIN_CROP_SIZE, 1);\n return { x: (1 - width) / 2, y: (1 - height) / 2, width, height };\n};\n\nexport const clampImageCropRect = (rect: ImageCropRect, imageSize: ImageCropSize, aspect: ImageCropAspect = \"free\"): ImageCropRect => {\n if (aspect === \"free\") {\n const width = clamp(rect.width, MIN_CROP_SIZE, 1);\n const height = clamp(rect.height, MIN_CROP_SIZE, 1);\n return { x: clamp(rect.x, 0, 1 - width), y: clamp(rect.y, 0, 1 - height), width, height };\n }\n const target = aspectRatio(aspect);\n const source = imageSize.width > 0 && imageSize.height > 0 ? imageSize.width / imageSize.height : 1;\n let width = clamp(rect.width, MIN_CROP_SIZE, 1);\n let height = (width * source) / target;\n if (height > 1) {\n height = 1;\n width = (height * target) / source;\n }\n return { x: clamp(rect.x, 0, 1 - width), y: clamp(rect.y, 0, 1 - height), width, height };\n};\n\nexport const resizeImageCropAroundCenter = (\n rect: ImageCropRect,\n imageSize: ImageCropSize,\n aspect: ImageCropAspect,\n scale: number,\n): ImageCropRect => {\n const safeScale = clamp(scale, 0.2, 5);\n const centerX = rect.x + rect.width / 2;\n const centerY = rect.y + rect.height / 2;\n const width = clamp(rect.width / safeScale, MIN_CROP_SIZE, 1);\n const height =\n aspect === \"free\"\n ? clamp(rect.height / safeScale, MIN_CROP_SIZE, 1)\n : (width * (imageSize.width / Math.max(1, imageSize.height))) / aspectRatio(aspect);\n return clampImageCropRect({ x: centerX - width / 2, y: centerY - height / 2, width, height }, imageSize, aspect);\n};\n\n/** Resizes a crop from one corner while keeping the opposite corner anchored. */\nexport const resizeImageCropFromCorner = (\n rect: ImageCropRect,\n imageSize: ImageCropSize,\n aspect: ImageCropAspect,\n handle: ImageCropResizeHandle,\n dx: number,\n dy: number,\n): ImageCropRect => {\n const movesEast = handle.includes(\"e\");\n const movesSouth = handle.includes(\"s\");\n const anchorX = movesEast ? rect.x : rect.x + rect.width;\n const anchorY = movesSouth ? rect.y : rect.y + rect.height;\n const requestedWidth = rect.width + (movesEast ? dx : -dx);\n const requestedHeight = rect.height + (movesSouth ? dy : -dy);\n\n if (aspect === \"free\") {\n const width = clamp(requestedWidth, MIN_CROP_SIZE, movesEast ? 1 - anchorX : anchorX);\n const height = clamp(requestedHeight, MIN_CROP_SIZE, movesSouth ? 1 - anchorY : anchorY);\n return {\n x: movesEast ? anchorX : anchorX - width,\n y: movesSouth ? anchorY : anchorY - height,\n width,\n height,\n };\n }\n\n const source = imageSize.width > 0 && imageSize.height > 0 ? imageSize.width / imageSize.height : 1;\n const target = aspectRatio(aspect);\n const widthFromHeight = (requestedHeight * target) / source;\n const requested = Math.abs(requestedWidth - rect.width) >= Math.abs(widthFromHeight - rect.width) ? requestedWidth : widthFromHeight;\n const horizontalLimit = movesEast ? 1 - anchorX : anchorX;\n const verticalLimit = movesSouth ? 1 - anchorY : anchorY;\n const maxWidth = Math.max(0, Math.min(horizontalLimit, (verticalLimit * target) / source));\n const minimumWidth = Math.min(maxWidth, Math.max(MIN_CROP_SIZE, (MIN_CROP_SIZE * target) / source));\n const width = clamp(requested, minimumWidth, maxWidth);\n const height = (width * source) / target;\n\n return {\n x: movesEast ? anchorX : anchorX - width,\n y: movesSouth ? anchorY : anchorY - height,\n width,\n height,\n };\n};\n\nexport const imageCropRectToPixels = (rect: ImageCropRect, imageSize: ImageCropSize) => {\n const x = clamp(rect.x, 0, 1 - MIN_CROP_SIZE);\n const y = clamp(rect.y, 0, 1 - MIN_CROP_SIZE);\n return {\n x: Math.round(x * imageSize.width),\n y: Math.round(y * imageSize.height),\n width: Math.max(1, Math.round(clamp(rect.width, MIN_CROP_SIZE, 1 - x) * imageSize.width)),\n height: Math.max(1, Math.round(clamp(rect.height, MIN_CROP_SIZE, 1 - y) * imageSize.height)),\n };\n};\n\nconst cropped = async (source: ImageCropSource, state: ImageCropState, output: ImageCropOutput) => {\n const { img } = await import(\"@k2b/stdlib/browser\");\n let data = await img.create(source);\n if (state.rotation) data = await img.rotate(state.rotation)(data);\n const crop = imageCropRectToPixels(state.crop, { width: data.width, height: data.height });\n data = await img.crop(crop.x, crop.y, crop.width, crop.height)(data);\n if (output.width || output.height) {\n data = await img.resize(output.width, output.height, \"fill\")(data);\n } else if (output.maxWidth || output.maxHeight) {\n const ratio = Math.min(1, (output.maxWidth ?? data.width) / data.width, (output.maxHeight ?? data.height) / data.height);\n if (ratio < 1) data = await img.resize(Math.round(data.width * ratio), Math.round(data.height * ratio), \"fill\")(data);\n }\n return { img, data };\n};\n\nexport const createCroppedImageCanvas = async (\n source: ImageCropSource,\n state: ImageCropState,\n output: ImageCropOutput = {},\n): Promise<HTMLCanvasElement> => {\n const result = await cropped(source, state, output);\n return result.img.toCanvas(result.data);\n};\n\nexport const createCroppedImageDataUrl = async (\n source: ImageCropSource,\n state: ImageCropState,\n output: ImageCropOutput = {},\n): Promise<string> => {\n const result = await cropped(source, state, output);\n return result.img.toBase64(output.format ?? \"webp\", output.quality ?? 0.86)(result.data);\n};\n"],"mappings":"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","ignoreList":[]}
|