@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,90 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
2
|
+
import { ssr as _$ssr } from "solid-js/web";
|
|
3
|
+
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
4
|
+
import { escape as _$escape } from "solid-js/web";
|
|
5
|
+
var _tmpl$ = "<span class=\"k2b-field__required\" aria-hidden=\"true\">*</span>",
|
|
6
|
+
_tmpl$2 = ["<label", " class=\"k2b-field__label\"", ">", "", "</label>"],
|
|
7
|
+
_tmpl$3 = ["<p class=\"k2b-field__description\"", ">", "</p>"],
|
|
8
|
+
_tmpl$4 = ["<p class=\"k2b-field__error\"", " role=\"alert\" aria-live=\"polite\">", "</p>"],
|
|
9
|
+
_tmpl$5 = ["<div class=\"", "\"", ">", "", "", "", "</div>"],
|
|
10
|
+
_tmpl$6 = ["<span", " class=\"k2b-field__label\">", "", "</span>"];
|
|
11
|
+
import { createUniqueId, Show } from "solid-js";
|
|
12
|
+
import { resolveMaybeAccessor } from "../inputs/field-contract";
|
|
13
|
+
export const createFieldMeta = id => {
|
|
14
|
+
const generatedId = createUniqueId();
|
|
15
|
+
const controlId = id ?? `k2b-field-${generatedId}`;
|
|
16
|
+
return {
|
|
17
|
+
controlId,
|
|
18
|
+
labelId: `${controlId}-label`,
|
|
19
|
+
descriptionId: `${controlId}-description`,
|
|
20
|
+
errorId: `${controlId}-error`
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export function Field(props) {
|
|
24
|
+
const error = () => resolveMaybeAccessor(props.error);
|
|
25
|
+
return _$ssr(_tmpl$5, `k2b-field ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-disabled", props.disabled ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-fill", props.fill ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-invalid", error() ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
|
|
26
|
+
get when() {
|
|
27
|
+
return props.label;
|
|
28
|
+
},
|
|
29
|
+
get children() {
|
|
30
|
+
return _$createComponent(Show, {
|
|
31
|
+
get when() {
|
|
32
|
+
return props.labelFor !== false;
|
|
33
|
+
},
|
|
34
|
+
get fallback() {
|
|
35
|
+
return _$ssr(_tmpl$6, _$ssrAttribute("id", _$escape(props.meta.labelId, true), false), _$escape(props.label), _$escape(_$createComponent(Show, {
|
|
36
|
+
get when() {
|
|
37
|
+
return props.required;
|
|
38
|
+
},
|
|
39
|
+
get children() {
|
|
40
|
+
return _$ssr(_tmpl$);
|
|
41
|
+
}
|
|
42
|
+
})));
|
|
43
|
+
},
|
|
44
|
+
get children() {
|
|
45
|
+
return _$ssr(_tmpl$2, _$ssrAttribute("id", _$escape(props.meta.labelId, true), false), _$ssrAttribute("for", _$escape(props.labelFor || props.meta.controlId, true), false), _$escape(props.label), _$escape(_$createComponent(Show, {
|
|
46
|
+
get when() {
|
|
47
|
+
return props.required;
|
|
48
|
+
},
|
|
49
|
+
get children() {
|
|
50
|
+
return _$ssr(_tmpl$);
|
|
51
|
+
}
|
|
52
|
+
})));
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
})), _$escape(_$createComponent(Show, {
|
|
57
|
+
get when() {
|
|
58
|
+
return props.description;
|
|
59
|
+
},
|
|
60
|
+
get children() {
|
|
61
|
+
return _$ssr(_tmpl$3, _$ssrAttribute("id", _$escape(props.meta.descriptionId, true), false), _$escape(props.description));
|
|
62
|
+
}
|
|
63
|
+
})), _$escape(props.children), _$escape(_$createComponent(Show, {
|
|
64
|
+
get when() {
|
|
65
|
+
return error();
|
|
66
|
+
},
|
|
67
|
+
get children() {
|
|
68
|
+
return _$ssr(_tmpl$4, _$ssrAttribute("id", _$escape(props.meta.errorId, true), false), _$escape(error()));
|
|
69
|
+
}
|
|
70
|
+
})));
|
|
71
|
+
}
|
|
72
|
+
export const fieldDescribedBy = (meta, owner) => [owner["aria-describedby"], owner.description ? meta.descriptionId : undefined, resolveMaybeAccessor(owner.error) ? meta.errorId : undefined].filter(Boolean).join(" ") || undefined;
|
|
73
|
+
export const fieldControlAria = (meta, owner) => ({
|
|
74
|
+
get "aria-label"() {
|
|
75
|
+
return owner.label ? undefined : owner["aria-label"];
|
|
76
|
+
},
|
|
77
|
+
get "aria-labelledby"() {
|
|
78
|
+
return owner.label ? meta.labelId : undefined;
|
|
79
|
+
},
|
|
80
|
+
get "aria-describedby"() {
|
|
81
|
+
return fieldDescribedBy(meta, owner);
|
|
82
|
+
},
|
|
83
|
+
get "aria-invalid"() {
|
|
84
|
+
return resolveMaybeAccessor(owner.error) ? "true" : undefined;
|
|
85
|
+
},
|
|
86
|
+
get "aria-required"() {
|
|
87
|
+
return owner.required || undefined;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createUniqueId","Show","resolveMaybeAccessor","createFieldMeta","id","generatedId","controlId","labelId","descriptionId","errorId","Field","props","error","_$ssr","_tmpl$5","_$escape","class","_$ssrAttribute","disabled","undefined","fill","_$createComponent","when","label","children","labelFor","fallback","_tmpl$6","meta","required","_tmpl$","_tmpl$2","description","_tmpl$3","_tmpl$4","fieldDescribedBy","owner","filter","Boolean","join","fieldControlAria","aria-label","aria-labelledby","aria-describedby","aria-invalid","aria-required"],"sources":["internal/field.tsx"],"sourcesContent":["import { createUniqueId, type JSX, Show } from \"solid-js\";\nimport type { FieldProps } from \"../inputs/field-contract\";\nimport { resolveMaybeAccessor } from \"../inputs/field-contract\";\n\nexport type FieldMeta = {\n controlId: string;\n labelId: string;\n descriptionId: string;\n errorId: string;\n};\n\nexport const createFieldMeta = (id?: string): FieldMeta => {\n const generatedId = createUniqueId();\n const controlId = id ?? `k2b-field-${generatedId}`;\n\n return {\n controlId,\n labelId: `${controlId}-label`,\n descriptionId: `${controlId}-description`,\n errorId: `${controlId}-error`,\n };\n};\n\ntype FieldLayoutProps = {\n children: JSX.Element;\n meta: FieldMeta;\n fill?: boolean;\n /** Composite controls use aria-labelledby instead of an HTML label target. */\n labelFor?: string | false;\n} & Pick<FieldProps, \"class\" | \"description\" | \"error\" | \"label\" | \"required\" | \"disabled\">;\n\nexport function Field(props: FieldLayoutProps): JSX.Element {\n const error = () => resolveMaybeAccessor(props.error);\n\n return (\n <div\n class={`k2b-field ${props.class ?? \"\"}`}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-fill={props.fill ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n >\n <Show when={props.label}>\n <Show\n when={props.labelFor !== false}\n fallback={\n <span id={props.meta.labelId} class=\"k2b-field__label\">\n {props.label}\n <Show when={props.required}>\n <span class=\"k2b-field__required\" aria-hidden=\"true\">\n *\n </span>\n </Show>\n </span>\n }\n >\n <label id={props.meta.labelId} class=\"k2b-field__label\" for={props.labelFor || props.meta.controlId}>\n {props.label}\n <Show when={props.required}>\n <span class=\"k2b-field__required\" aria-hidden=\"true\">\n *\n </span>\n </Show>\n </label>\n </Show>\n </Show>\n <Show when={props.description}>\n <p class=\"k2b-field__description\" id={props.meta.descriptionId}>\n {props.description}\n </p>\n </Show>\n {props.children}\n <Show when={error()}>\n <p class=\"k2b-field__error\" id={props.meta.errorId} role=\"alert\" aria-live=\"polite\">\n {error()}\n </p>\n </Show>\n </div>\n );\n}\n\ntype FieldAriaOwner = Pick<FieldProps, \"aria-describedby\" | \"aria-label\" | \"description\" | \"error\" | \"label\" | \"required\">;\n\nexport const fieldDescribedBy = (meta: FieldMeta, owner: FieldAriaOwner): string | undefined =>\n [\n owner[\"aria-describedby\"],\n owner.description ? meta.descriptionId : undefined,\n resolveMaybeAccessor(owner.error) ? meta.errorId : undefined,\n ]\n .filter(Boolean)\n .join(\" \") || undefined;\n\nexport const fieldControlAria = (meta: FieldMeta, owner: FieldAriaOwner) => ({\n get \"aria-label\"() {\n return owner.label ? undefined : owner[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return owner.label ? meta.labelId : undefined;\n },\n get \"aria-describedby\"() {\n return fieldDescribedBy(meta, owner);\n },\n get \"aria-invalid\"() {\n return resolveMaybeAccessor(owner.error) ? (\"true\" as const) : undefined;\n },\n get \"aria-required\"() {\n return owner.required || undefined;\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const PORTAL_ATTRIBUTE = "data-k2b-ui-portal";
|
|
2
|
+
const activeScope = () => {
|
|
3
|
+
const active = document.activeElement;
|
|
4
|
+
return active instanceof Element ? active.closest(".k2b-ui") ?? undefined : undefined;
|
|
5
|
+
};
|
|
6
|
+
export const getK2bPortalRoot = scope => {
|
|
7
|
+
const owner = scope ?? activeScope() ?? document.querySelector(".k2b-ui") ?? document.body;
|
|
8
|
+
const existing = Array.from(owner.children).find(child => child instanceof HTMLElement && child.hasAttribute(PORTAL_ATTRIBUTE));
|
|
9
|
+
if (existing instanceof HTMLElement) return existing;
|
|
10
|
+
const root = document.createElement("div");
|
|
11
|
+
root.setAttribute(PORTAL_ATTRIBUTE, "");
|
|
12
|
+
root.classList.add("k2b-ui-portal");
|
|
13
|
+
if (owner === document.body) root.classList.add("k2b-ui");
|
|
14
|
+
owner.appendChild(root);
|
|
15
|
+
return root;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=portal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PORTAL_ATTRIBUTE","activeScope","active","document","activeElement","Element","closest","undefined","getK2bPortalRoot","scope","owner","querySelector","body","existing","Array","from","children","find","child","HTMLElement","hasAttribute","root","createElement","setAttribute","classList","add","appendChild"],"sources":["internal/portal.ts"],"sourcesContent":["const PORTAL_ATTRIBUTE = \"data-k2b-ui-portal\";\n\nconst activeScope = (): HTMLElement | undefined => {\n const active = document.activeElement;\n return active instanceof Element ? ((active.closest(\".k2b-ui\") as HTMLElement | null) ?? undefined) : undefined;\n};\n\nexport const getK2bPortalRoot = (scope?: HTMLElement | null): HTMLElement => {\n const owner = scope ?? activeScope() ?? document.querySelector<HTMLElement>(\".k2b-ui\") ?? document.body;\n const existing = Array.from(owner.children).find((child) => child instanceof HTMLElement && child.hasAttribute(PORTAL_ATTRIBUTE));\n if (existing instanceof HTMLElement) return existing;\n\n const root = document.createElement(\"div\");\n root.setAttribute(PORTAL_ATTRIBUTE, \"\");\n root.classList.add(\"k2b-ui-portal\");\n if (owner === document.body) root.classList.add(\"k2b-ui\");\n owner.appendChild(root);\n return root;\n};\n"],"mappings":"AAAA,MAAMA,gBAAgB,GAAG,oBAAoB;AAE7C,MAAMC,WAAW,GAAGA,CAAA,KAA+B;EACjD,MAAMC,MAAM,GAAGC,QAAQ,CAACC,aAAa;EACrC,OAAOF,MAAM,YAAYG,OAAO,GAAKH,MAAM,CAACI,OAAO,CAAC,SAAS,CAAC,IAA2BC,SAAS,GAAIA,SAAS;AACjH,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIC,KAA0B,IAAkB;EAC3E,MAAMC,KAAK,GAAGD,KAAK,IAAIR,WAAW,CAAC,CAAC,IAAIE,QAAQ,CAACQ,aAAa,CAAc,SAAS,CAAC,IAAIR,QAAQ,CAACS,IAAI;EACvG,MAAMC,QAAQ,GAAGC,KAAK,CAACC,IAAI,CAACL,KAAK,CAACM,QAAQ,CAAC,CAACC,IAAI,CAAEC,KAAK,IAAKA,KAAK,YAAYC,WAAW,IAAID,KAAK,CAACE,YAAY,CAACpB,gBAAgB,CAAC,CAAC;EACjI,IAAIa,QAAQ,YAAYM,WAAW,EAAE,OAAON,QAAQ;EAEpD,MAAMQ,IAAI,GAAGlB,QAAQ,CAACmB,aAAa,CAAC,KAAK,CAAC;EAC1CD,IAAI,CAACE,YAAY,CAACvB,gBAAgB,EAAE,EAAE,CAAC;EACvCqB,IAAI,CAACG,SAAS,CAACC,GAAG,CAAC,eAAe,CAAC;EACnC,IAAIf,KAAK,KAAKP,QAAQ,CAACS,IAAI,EAAES,IAAI,CAACG,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;EACzDf,KAAK,CAACgB,WAAW,CAACL,IAAI,CAAC;EACvB,OAAOA,IAAI;AACb,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { mergeProps as _$mergeProps } from "solid-js/web";
|
|
2
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
3
|
+
import { ssrElement as _$ssrElement } from "solid-js/web";
|
|
4
|
+
import { escape as _$escape } from "solid-js/web";
|
|
5
|
+
import { dates, text } from "@k2b/stdlib";
|
|
6
|
+
import { Show, splitProps } from "solid-js";
|
|
7
|
+
import { useLocale } from "./locale";
|
|
8
|
+
const FALLBACK = "—";
|
|
9
|
+
|
|
10
|
+
// Temporal components render `<time>` for valid values and a `<span>` fallback
|
|
11
|
+
// otherwise, so their native attributes are typed against the shared element
|
|
12
|
+
// base; `ref` is excluded because its value form is element-specific. The
|
|
13
|
+
// `datetime` attribute is owned by the component itself.
|
|
14
|
+
|
|
15
|
+
const toDate = value => {
|
|
16
|
+
if (value == null) return null;
|
|
17
|
+
const date = typeof value === "string" ? new Date(value) : value;
|
|
18
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/** ISO 8601 duration for the `<time datetime>` attribute, e.g. `"PT2H30M"`. */
|
|
22
|
+
const isoDuration = ms => {
|
|
23
|
+
const totalMilliseconds = Math.round(ms);
|
|
24
|
+
if (totalMilliseconds <= 0) return "PT0S";
|
|
25
|
+
const totalSeconds = Math.floor(totalMilliseconds / 1000);
|
|
26
|
+
const milliseconds = totalMilliseconds % 1000;
|
|
27
|
+
const days = Math.floor(totalSeconds / 86_400);
|
|
28
|
+
const hours = Math.floor(totalSeconds % 86_400 / 3_600);
|
|
29
|
+
const minutes = Math.floor(totalSeconds % 3_600 / 60);
|
|
30
|
+
const seconds = totalSeconds % 60;
|
|
31
|
+
const fractionalSeconds = milliseconds ? `${seconds}.${String(milliseconds).padStart(3, "0").replace(/0+$/, "")}S` : "";
|
|
32
|
+
const time = `${hours ? `${hours}H` : ""}${minutes ? `${minutes}M` : ""}${fractionalSeconds || (seconds ? `${seconds}S` : "")}`;
|
|
33
|
+
return `P${days ? `${days}D` : ""}${time ? `T${time}` : ""}`;
|
|
34
|
+
};
|
|
35
|
+
const FormatNumber = props => {
|
|
36
|
+
const [own, rest] = splitProps(props, ["value", "locale", "compact", "decimals", "fallback"]);
|
|
37
|
+
const locale = useLocale();
|
|
38
|
+
return _$ssrElement("span", rest, _$escape(text.pprintNumber(own.value, {
|
|
39
|
+
locale: own.locale ?? locale(),
|
|
40
|
+
compact: own.compact,
|
|
41
|
+
decimals: own.decimals,
|
|
42
|
+
fallback: own.fallback
|
|
43
|
+
})), false);
|
|
44
|
+
};
|
|
45
|
+
const FormatPercent = props => {
|
|
46
|
+
const [own, rest] = splitProps(props, ["value", "locale", "decimals", "clamp", "fallback"]);
|
|
47
|
+
const locale = useLocale();
|
|
48
|
+
return _$ssrElement("span", rest, _$escape(text.pprintPercent(own.value, {
|
|
49
|
+
locale: own.locale ?? locale(),
|
|
50
|
+
decimals: own.decimals,
|
|
51
|
+
clamp: own.clamp,
|
|
52
|
+
fallback: own.fallback
|
|
53
|
+
})), false);
|
|
54
|
+
};
|
|
55
|
+
const FormatCurrency = props => {
|
|
56
|
+
const [own, rest] = splitProps(props, ["value", "currency", "locale", "decimals", "fallback"]);
|
|
57
|
+
const locale = useLocale();
|
|
58
|
+
return _$ssrElement("span", rest, _$escape(text.pprintCurrency(own.value, own.currency, {
|
|
59
|
+
locale: own.locale ?? locale(),
|
|
60
|
+
decimals: own.decimals,
|
|
61
|
+
fallback: own.fallback
|
|
62
|
+
})), false);
|
|
63
|
+
};
|
|
64
|
+
const FormatBytes = props => {
|
|
65
|
+
const [own, rest] = splitProps(props, ["value", "locale", "mode", "fallback"]);
|
|
66
|
+
const locale = useLocale();
|
|
67
|
+
return _$ssrElement("span", rest, typeof own.value === "number" && Number.isFinite(own.value) ? _$escape(text.pprintBytes(own.value, {
|
|
68
|
+
locale: own.locale ?? locale(),
|
|
69
|
+
mode: own.mode
|
|
70
|
+
})) : _$escape(own.fallback ?? FALLBACK), false);
|
|
71
|
+
};
|
|
72
|
+
const temporalComponent = format => props => {
|
|
73
|
+
const [own, rest] = splitProps(props, ["value", "locale", "timeZone", "fallback"]);
|
|
74
|
+
const locale = useLocale();
|
|
75
|
+
return _$createComponent(Show, {
|
|
76
|
+
get when() {
|
|
77
|
+
return toDate(own.value);
|
|
78
|
+
},
|
|
79
|
+
get fallback() {
|
|
80
|
+
return _$ssrElement("span", rest, _$escape(own.fallback ?? FALLBACK), false);
|
|
81
|
+
},
|
|
82
|
+
children: date => _$ssrElement("time", _$mergeProps(rest, {
|
|
83
|
+
get datetime() {
|
|
84
|
+
return date().toISOString();
|
|
85
|
+
}
|
|
86
|
+
}), _$escape(format(date(), {
|
|
87
|
+
locale: own.locale ?? locale(),
|
|
88
|
+
timeZone: own.timeZone ?? "UTC"
|
|
89
|
+
})), false)
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
const FormatDate = temporalComponent((date, context) => dates.formatDate(date, context));
|
|
93
|
+
const FormatTime = temporalComponent((date, context) => dates.formatTime(date, context));
|
|
94
|
+
const FormatDateTime = temporalComponent((date, context) => dates.formatDateTime(date, context));
|
|
95
|
+
const FormatRelativeTime = props => {
|
|
96
|
+
const [own, rest] = splitProps(props, ["value", "locale", "base", "timeZone", "fallback"]);
|
|
97
|
+
const locale = useLocale();
|
|
98
|
+
return _$createComponent(Show, {
|
|
99
|
+
get when() {
|
|
100
|
+
return toDate(own.value);
|
|
101
|
+
},
|
|
102
|
+
get fallback() {
|
|
103
|
+
return _$ssrElement("span", rest, _$escape(own.fallback ?? FALLBACK), false);
|
|
104
|
+
},
|
|
105
|
+
children: date => _$ssrElement("time", _$mergeProps(rest, {
|
|
106
|
+
get datetime() {
|
|
107
|
+
return date().toISOString();
|
|
108
|
+
}
|
|
109
|
+
}), _$escape(dates.formatTimeSpan(date(), {
|
|
110
|
+
locale: own.locale ?? locale(),
|
|
111
|
+
base: own.base,
|
|
112
|
+
timeZone: own.timeZone ?? "UTC"
|
|
113
|
+
})), false)
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
const FormatDuration = props => {
|
|
117
|
+
const [own, rest] = splitProps(props, ["from", "to", "locale", "fallback"]);
|
|
118
|
+
const locale = useLocale();
|
|
119
|
+
const range = () => {
|
|
120
|
+
const from = toDate(own.from);
|
|
121
|
+
const to = toDate(own.to);
|
|
122
|
+
return from && to ? {
|
|
123
|
+
from,
|
|
124
|
+
to
|
|
125
|
+
} : null;
|
|
126
|
+
};
|
|
127
|
+
return _$createComponent(Show, {
|
|
128
|
+
get when() {
|
|
129
|
+
return range();
|
|
130
|
+
},
|
|
131
|
+
get fallback() {
|
|
132
|
+
return _$ssrElement("span", rest, _$escape(own.fallback ?? FALLBACK), false);
|
|
133
|
+
},
|
|
134
|
+
children: value => _$ssrElement("time", _$mergeProps(rest, {
|
|
135
|
+
get datetime() {
|
|
136
|
+
return isoDuration(Math.abs(value().to.getTime() - value().from.getTime()));
|
|
137
|
+
}
|
|
138
|
+
}), _$escape(dates.formatDuration(value().from, value().to, {
|
|
139
|
+
locale: own.locale ?? locale()
|
|
140
|
+
})), false)
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
const FormatDurationMs = props => {
|
|
144
|
+
const [own, rest] = splitProps(props, ["value", "locale", "fallback"]);
|
|
145
|
+
const locale = useLocale();
|
|
146
|
+
// Wrapped in an object because a valid duration of 0ms is falsy.
|
|
147
|
+
const valid = () => {
|
|
148
|
+
const value = own.value;
|
|
149
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? {
|
|
150
|
+
ms: value
|
|
151
|
+
} : null;
|
|
152
|
+
};
|
|
153
|
+
return _$createComponent(Show, {
|
|
154
|
+
get when() {
|
|
155
|
+
return valid();
|
|
156
|
+
},
|
|
157
|
+
get fallback() {
|
|
158
|
+
return _$ssrElement("span", rest, _$escape(own.fallback ?? FALLBACK), false);
|
|
159
|
+
},
|
|
160
|
+
children: duration => _$ssrElement("time", _$mergeProps(rest, {
|
|
161
|
+
get datetime() {
|
|
162
|
+
return isoDuration(duration().ms);
|
|
163
|
+
}
|
|
164
|
+
}), _$escape(text.pprintDurationMs(duration().ms, {
|
|
165
|
+
locale: own.locale ?? locale()
|
|
166
|
+
})), false)
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Unstyled semantic formatter components backed by `@k2b/stdlib`.
|
|
172
|
+
*
|
|
173
|
+
* Numeric components render a plain `<span>`; date/time components render
|
|
174
|
+
* `<time>` with a canonical `datetime` attribute. All components inherit the
|
|
175
|
+
* render locale (see `LocaleProvider` / `useLocale`) and accept an explicit
|
|
176
|
+
* `locale` override. Date, Time, and DateTime format in UTC unless an
|
|
177
|
+
* explicit `timeZone` is given, so server and browser output never diverge
|
|
178
|
+
* with the runtime timezone.
|
|
179
|
+
*/
|
|
180
|
+
export const Format = {
|
|
181
|
+
Number: FormatNumber,
|
|
182
|
+
Percent: FormatPercent,
|
|
183
|
+
Currency: FormatCurrency,
|
|
184
|
+
Bytes: FormatBytes,
|
|
185
|
+
Date: FormatDate,
|
|
186
|
+
Time: FormatTime,
|
|
187
|
+
DateTime: FormatDateTime,
|
|
188
|
+
RelativeTime: FormatRelativeTime,
|
|
189
|
+
Duration: FormatDuration,
|
|
190
|
+
DurationMs: FormatDurationMs
|
|
191
|
+
};
|
|
192
|
+
//# sourceMappingURL=Format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["dates","text","Show","splitProps","useLocale","FALLBACK","toDate","value","date","Date","Number","isNaN","getTime","isoDuration","ms","totalMilliseconds","Math","round","totalSeconds","floor","milliseconds","days","hours","minutes","seconds","fractionalSeconds","String","padStart","replace","time","FormatNumber","props","own","rest","locale","_$ssrElement","_$escape","pprintNumber","compact","decimals","fallback","FormatPercent","pprintPercent","clamp","FormatCurrency","pprintCurrency","currency","FormatBytes","isFinite","pprintBytes","mode","temporalComponent","format","_$createComponent","when","children","_$mergeProps","datetime","toISOString","timeZone","FormatDate","context","formatDate","FormatTime","formatTime","FormatDateTime","formatDateTime","FormatRelativeTime","formatTimeSpan","base","FormatDuration","range","from","to","abs","formatDuration","FormatDurationMs","valid","duration","pprintDurationMs","Format","Percent","Currency","Bytes","Time","DateTime","RelativeTime","Duration","DurationMs"],"sources":["intl/Format.tsx"],"sourcesContent":["import { type ByteMode, dates, text } from \"@k2b/stdlib\";\nimport { type JSX, Show, splitProps } from \"solid-js\";\nimport { useLocale } from \"./locale\";\n\nconst FALLBACK = \"—\";\n\ntype SpanProps = JSX.HTMLAttributes<HTMLSpanElement>;\n// Temporal components render `<time>` for valid values and a `<span>` fallback\n// otherwise, so their native attributes are typed against the shared element\n// base; `ref` is excluded because its value form is element-specific. The\n// `datetime` attribute is owned by the component itself.\ntype TimeElementProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"ref\">;\n\ntype LocaleProp = {\n /** Explicit locale override; defaults to the inherited render locale. */\n locale?: string;\n};\n\ntype FallbackProp = {\n /** Text rendered for null or invalid input. Defaults to `\"—\"`. */\n fallback?: string;\n};\n\nexport type FormatNumberProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n value: number | null | undefined;\n /** Use deterministic compact suffixes (`k`, `M`, `B`, `T`). */\n compact?: boolean;\n /** Fixed fraction digits. */\n decimals?: number;\n };\n\nexport type FormatPercentProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n /** Ratio input: `0.12` renders as `12%`. */\n value: number | null | undefined;\n /** Fixed fraction digits. Defaults to 0. */\n decimals?: number;\n /** Clamp the ratio to 0..1 before formatting. */\n clamp?: boolean;\n };\n\nexport type FormatCurrencyProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n value: number | null | undefined;\n /** ISO 4217 currency code, e.g. `\"EUR\"` or `\"USD\"`. */\n currency: string;\n /** Fixed fraction digits. Defaults to the currency's standard digits. */\n decimals?: number;\n };\n\nexport type FormatBytesProps = SpanProps &\n LocaleProp &\n FallbackProp & {\n value: number | null | undefined;\n /** `\"iec\"` (default, 1024-base) or `\"si\"` (1000-base). */\n mode?: ByteMode;\n };\n\nexport type FormatDateProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n value: Date | string | null | undefined;\n /** IANA timezone. Defaults to `\"UTC\"` so server and browser text agree. */\n timeZone?: string;\n };\n\nexport type FormatTimeProps = FormatDateProps;\nexport type FormatDateTimeProps = FormatDateProps;\n\nexport type FormatRelativeTimeProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n value: Date | string | null | undefined;\n /** Deterministic base timestamp; defaults to now. */\n base?: Date | string;\n /** IANA timezone used to select calendar-relative labels. Defaults to `\"UTC\"`. */\n timeZone?: string;\n };\n\nexport type FormatDurationProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n from: Date | string | null | undefined;\n to: Date | string | null | undefined;\n };\n\nexport type FormatDurationMsProps = TimeElementProps &\n LocaleProp &\n FallbackProp & {\n /** Duration in milliseconds. */\n value: number | null | undefined;\n };\n\nconst toDate = (value: Date | string | null | undefined): Date | null => {\n if (value == null) return null;\n const date = typeof value === \"string\" ? new Date(value) : value;\n return Number.isNaN(date.getTime()) ? null : date;\n};\n\n/** ISO 8601 duration for the `<time datetime>` attribute, e.g. `\"PT2H30M\"`. */\nconst isoDuration = (ms: number): string => {\n const totalMilliseconds = Math.round(ms);\n if (totalMilliseconds <= 0) return \"PT0S\";\n const totalSeconds = Math.floor(totalMilliseconds / 1000);\n const milliseconds = totalMilliseconds % 1000;\n const days = Math.floor(totalSeconds / 86_400);\n const hours = Math.floor((totalSeconds % 86_400) / 3_600);\n const minutes = Math.floor((totalSeconds % 3_600) / 60);\n const seconds = totalSeconds % 60;\n const fractionalSeconds = milliseconds ? `${seconds}.${String(milliseconds).padStart(3, \"0\").replace(/0+$/, \"\")}S` : \"\";\n const time = `${hours ? `${hours}H` : \"\"}${minutes ? `${minutes}M` : \"\"}${fractionalSeconds || (seconds ? `${seconds}S` : \"\")}`;\n return `P${days ? `${days}D` : \"\"}${time ? `T${time}` : \"\"}`;\n};\n\nconst FormatNumber = (props: FormatNumberProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"compact\", \"decimals\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {text.pprintNumber(own.value, {\n locale: own.locale ?? locale(),\n compact: own.compact,\n decimals: own.decimals,\n fallback: own.fallback,\n })}\n </span>\n );\n};\n\nconst FormatPercent = (props: FormatPercentProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"decimals\", \"clamp\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {text.pprintPercent(own.value, {\n locale: own.locale ?? locale(),\n decimals: own.decimals,\n clamp: own.clamp,\n fallback: own.fallback,\n })}\n </span>\n );\n};\n\nconst FormatCurrency = (props: FormatCurrencyProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"currency\", \"locale\", \"decimals\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {text.pprintCurrency(own.value, own.currency, {\n locale: own.locale ?? locale(),\n decimals: own.decimals,\n fallback: own.fallback,\n })}\n </span>\n );\n};\n\nconst FormatBytes = (props: FormatBytesProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"mode\", \"fallback\"]);\n const locale = useLocale();\n return (\n <span {...rest}>\n {typeof own.value === \"number\" && Number.isFinite(own.value)\n ? text.pprintBytes(own.value, { locale: own.locale ?? locale(), mode: own.mode })\n : (own.fallback ?? FALLBACK)}\n </span>\n );\n};\n\ntype TemporalFormatter = (date: Date, context: { locale: string; timeZone: string }) => string;\n\nconst temporalComponent =\n (format: TemporalFormatter) =>\n (props: FormatDateProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"timeZone\", \"fallback\"]);\n const locale = useLocale();\n return (\n <Show when={toDate(own.value)} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(date) => (\n <time {...rest} datetime={date().toISOString()}>\n {format(date(), { locale: own.locale ?? locale(), timeZone: own.timeZone ?? \"UTC\" })}\n </time>\n )}\n </Show>\n );\n };\n\nconst FormatDate = temporalComponent((date, context) => dates.formatDate(date, context));\nconst FormatTime = temporalComponent((date, context) => dates.formatTime(date, context));\nconst FormatDateTime = temporalComponent((date, context) => dates.formatDateTime(date, context));\n\nconst FormatRelativeTime = (props: FormatRelativeTimeProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"base\", \"timeZone\", \"fallback\"]);\n const locale = useLocale();\n return (\n <Show when={toDate(own.value)} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(date) => (\n <time {...rest} datetime={date().toISOString()}>\n {dates.formatTimeSpan(date(), { locale: own.locale ?? locale(), base: own.base, timeZone: own.timeZone ?? \"UTC\" })}\n </time>\n )}\n </Show>\n );\n};\n\nconst FormatDuration = (props: FormatDurationProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"from\", \"to\", \"locale\", \"fallback\"]);\n const locale = useLocale();\n const range = () => {\n const from = toDate(own.from);\n const to = toDate(own.to);\n return from && to ? { from, to } : null;\n };\n return (\n <Show when={range()} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(value) => (\n <time {...rest} datetime={isoDuration(Math.abs(value().to.getTime() - value().from.getTime()))}>\n {dates.formatDuration(value().from, value().to, { locale: own.locale ?? locale() })}\n </time>\n )}\n </Show>\n );\n};\n\nconst FormatDurationMs = (props: FormatDurationMsProps): JSX.Element => {\n const [own, rest] = splitProps(props, [\"value\", \"locale\", \"fallback\"]);\n const locale = useLocale();\n // Wrapped in an object because a valid duration of 0ms is falsy.\n const valid = (): { ms: number } | null => {\n const value = own.value;\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? { ms: value } : null;\n };\n return (\n <Show when={valid()} fallback={<span {...rest}>{own.fallback ?? FALLBACK}</span>}>\n {(duration) => (\n <time {...rest} datetime={isoDuration(duration().ms)}>\n {text.pprintDurationMs(duration().ms, { locale: own.locale ?? locale() })}\n </time>\n )}\n </Show>\n );\n};\n\n/**\n * Unstyled semantic formatter components backed by `@k2b/stdlib`.\n *\n * Numeric components render a plain `<span>`; date/time components render\n * `<time>` with a canonical `datetime` attribute. All components inherit the\n * render locale (see `LocaleProvider` / `useLocale`) and accept an explicit\n * `locale` override. Date, Time, and DateTime format in UTC unless an\n * explicit `timeZone` is given, so server and browser output never diverge\n * with the runtime timezone.\n */\nexport const Format = {\n Number: FormatNumber,\n Percent: FormatPercent,\n Currency: FormatCurrency,\n Bytes: FormatBytes,\n Date: FormatDate,\n Time: FormatTime,\n DateTime: FormatDateTime,\n RelativeTime: FormatRelativeTime,\n Duration: FormatDuration,\n DurationMs: FormatDurationMs,\n} as const;\n"],"mappings":";;;;AAAA,SAAwBA,KAAK,EAAEC,IAAI,QAAQ,aAAa;AACxD,SAAmBC,IAAI,EAAEC,UAAU,QAAQ,UAAU;AACrD,SAASC,SAAS,QAAQ,UAAU;AAEpC,MAAMC,QAAQ,GAAG,GAAG;;AAGpB;AACA;AACA;AACA;;AAuFA,MAAMC,MAAM,GAAIC,KAAuC,IAAkB;EACvE,IAAIA,KAAK,IAAI,IAAI,EAAE,OAAO,IAAI;EAC9B,MAAMC,IAAI,GAAG,OAAOD,KAAK,KAAK,QAAQ,GAAG,IAAIE,IAAI,CAACF,KAAK,CAAC,GAAGA,KAAK;EAChE,OAAOG,MAAM,CAACC,KAAK,CAACH,IAAI,CAACI,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAGJ,IAAI;AACnD,CAAC;;AAED;AACA,MAAMK,WAAW,GAAIC,EAAU,IAAa;EAC1C,MAAMC,iBAAiB,GAAGC,IAAI,CAACC,KAAK,CAACH,EAAE,CAAC;EACxC,IAAIC,iBAAiB,IAAI,CAAC,EAAE,OAAO,MAAM;EACzC,MAAMG,YAAY,GAAGF,IAAI,CAACG,KAAK,CAACJ,iBAAiB,GAAG,IAAI,CAAC;EACzD,MAAMK,YAAY,GAAGL,iBAAiB,GAAG,IAAI;EAC7C,MAAMM,IAAI,GAAGL,IAAI,CAACG,KAAK,CAACD,YAAY,GAAG,MAAM,CAAC;EAC9C,MAAMI,KAAK,GAAGN,IAAI,CAACG,KAAK,CAAED,YAAY,GAAG,MAAM,GAAI,KAAK,CAAC;EACzD,MAAMK,OAAO,GAAGP,IAAI,CAACG,KAAK,CAAED,YAAY,GAAG,KAAK,GAAI,EAAE,CAAC;EACvD,MAAMM,OAAO,GAAGN,YAAY,GAAG,EAAE;EACjC,MAAMO,iBAAiB,GAAGL,YAAY,GAAG,GAAGI,OAAO,IAAIE,MAAM,CAACN,YAAY,CAAC,CAACO,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAACC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE;EACvH,MAAMC,IAAI,GAAG,GAAGP,KAAK,GAAG,GAAGA,KAAK,GAAG,GAAG,EAAE,GAAGC,OAAO,GAAG,GAAGA,OAAO,GAAG,GAAG,EAAE,GAAGE,iBAAiB,KAAKD,OAAO,GAAG,GAAGA,OAAO,GAAG,GAAG,EAAE,CAAC,EAAE;EAC/H,OAAO,IAAIH,IAAI,GAAG,GAAGA,IAAI,GAAG,GAAG,EAAE,GAAGQ,IAAI,GAAG,IAAIA,IAAI,EAAE,GAAG,EAAE,EAAE;AAC9D,CAAC;AAED,MAAMC,YAAY,GAAIC,KAAwB,IAAkB;EAC9D,MAAM,CAACC,GAAG,EAAEC,IAAI,CAAC,GAAG9B,UAAU,CAAC4B,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;EAC7F,MAAMG,MAAM,GAAG9B,SAAS,CAAC,CAAC;EAC1B,OAAA+B,YAAA,SACYF,IAAI,EAAAG,QAAA,CACXnC,IAAI,CAACoC,YAAY,CAACL,GAAG,CAACzB,KAAK,EAAE;IAC5B2B,MAAM,EAAEF,GAAG,CAACE,MAAM,IAAIA,MAAM,CAAC,CAAC;IAC9BI,OAAO,EAAEN,GAAG,CAACM,OAAO;IACpBC,QAAQ,EAAEP,GAAG,CAACO,QAAQ;IACtBC,QAAQ,EAAER,GAAG,CAACQ;EAChB,CAAC,CAAC;AAGR,CAAC;AAED,MAAMC,aAAa,GAAIV,KAAyB,IAAkB;EAChE,MAAM,CAACC,GAAG,EAAEC,IAAI,CAAC,GAAG9B,UAAU,CAAC4B,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;EAC3F,MAAMG,MAAM,GAAG9B,SAAS,CAAC,CAAC;EAC1B,OAAA+B,YAAA,SACYF,IAAI,EAAAG,QAAA,CACXnC,IAAI,CAACyC,aAAa,CAACV,GAAG,CAACzB,KAAK,EAAE;IAC7B2B,MAAM,EAAEF,GAAG,CAACE,MAAM,IAAIA,MAAM,CAAC,CAAC;IAC9BK,QAAQ,EAAEP,GAAG,CAACO,QAAQ;IACtBI,KAAK,EAAEX,GAAG,CAACW,KAAK;IAChBH,QAAQ,EAAER,GAAG,CAACQ;EAChB,CAAC,CAAC;AAGR,CAAC;AAED,MAAMI,cAAc,GAAIb,KAA0B,IAAkB;EAClE,MAAM,CAACC,GAAG,EAAEC,IAAI,CAAC,GAAG9B,UAAU,CAAC4B,KAAK,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;EAC9F,MAAMG,MAAM,GAAG9B,SAAS,CAAC,CAAC;EAC1B,OAAA+B,YAAA,SACYF,IAAI,EAAAG,QAAA,CACXnC,IAAI,CAAC4C,cAAc,CAACb,GAAG,CAACzB,KAAK,EAAEyB,GAAG,CAACc,QAAQ,EAAE;IAC5CZ,MAAM,EAAEF,GAAG,CAACE,MAAM,IAAIA,MAAM,CAAC,CAAC;IAC9BK,QAAQ,EAAEP,GAAG,CAACO,QAAQ;IACtBC,QAAQ,EAAER,GAAG,CAACQ;EAChB,CAAC,CAAC;AAGR,CAAC;AAED,MAAMO,WAAW,GAAIhB,KAAuB,IAAkB;EAC5D,MAAM,CAACC,GAAG,EAAEC,IAAI,CAAC,GAAG9B,UAAU,CAAC4B,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;EAC9E,MAAMG,MAAM,GAAG9B,SAAS,CAAC,CAAC;EAC1B,OAAA+B,YAAA,SACYF,IAAI,EACX,OAAOD,GAAG,CAACzB,KAAK,KAAK,QAAQ,IAAIG,MAAM,CAACsC,QAAQ,CAAChB,GAAG,CAACzB,KAAK,CAAC,GAAA6B,QAAA,CACxDnC,IAAI,CAACgD,WAAW,CAACjB,GAAG,CAACzB,KAAK,EAAE;IAAE2B,MAAM,EAAEF,GAAG,CAACE,MAAM,IAAIA,MAAM,CAAC,CAAC;IAAEgB,IAAI,EAAElB,GAAG,CAACkB;EAAK,CAAC,CAAC,IAAAd,QAAA,CAC9EJ,GAAG,CAACQ,QAAQ,IAAInC,QAAQ,CAAC;AAGpC,CAAC;AAID,MAAM8C,iBAAiB,GACpBC,MAAyB,IACzBrB,KAAsB,IAAkB;EACvC,MAAM,CAACC,GAAG,EAAEC,IAAI,CAAC,GAAG9B,UAAU,CAAC4B,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;EAClF,MAAMG,MAAM,GAAG9B,SAAS,CAAC,CAAC;EAC1B,OAAAiD,iBAAA,CACGnD,IAAI;IAAA,IAACoD,IAAIA,CAAA;MAAA,OAAEhD,MAAM,CAAC0B,GAAG,CAACzB,KAAK,CAAC;IAAA;IAAA,IAAEiC,QAAQA,CAAA;MAAA,OAAAL,YAAA,SAAYF,IAAI,EAAAG,QAAA,CAAGJ,GAAG,CAACQ,QAAQ,IAAInC,QAAQ;IAAA;IAAAkD,QAAA,EAC9E/C,IAAI,IAAA2B,YAAA,SAAAqB,YAAA,CACMvB,IAAI;MAAA,IAAEwB,QAAQA,CAAA;QAAA,OAAEjD,IAAI,CAAC,CAAC,CAACkD,WAAW,CAAC,CAAC;MAAA;IAAA,IAAAtB,QAAA,CAC3CgB,MAAM,CAAC5C,IAAI,CAAC,CAAC,EAAE;MAAE0B,MAAM,EAAEF,GAAG,CAACE,MAAM,IAAIA,MAAM,CAAC,CAAC;MAAEyB,QAAQ,EAAE3B,GAAG,CAAC2B,QAAQ,IAAI;IAAM,CAAC,CAAC;EAEvF;AAGP,CAAC;AAEH,MAAMC,UAAU,GAAGT,iBAAiB,CAAC,CAAC3C,IAAI,EAAEqD,OAAO,KAAK7D,KAAK,CAAC8D,UAAU,CAACtD,IAAI,EAAEqD,OAAO,CAAC,CAAC;AACxF,MAAME,UAAU,GAAGZ,iBAAiB,CAAC,CAAC3C,IAAI,EAAEqD,OAAO,KAAK7D,KAAK,CAACgE,UAAU,CAACxD,IAAI,EAAEqD,OAAO,CAAC,CAAC;AACxF,MAAMI,cAAc,GAAGd,iBAAiB,CAAC,CAAC3C,IAAI,EAAEqD,OAAO,KAAK7D,KAAK,CAACkE,cAAc,CAAC1D,IAAI,EAAEqD,OAAO,CAAC,CAAC;AAEhG,MAAMM,kBAAkB,GAAIpC,KAA8B,IAAkB;EAC1E,MAAM,CAACC,GAAG,EAAEC,IAAI,CAAC,GAAG9B,UAAU,CAAC4B,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;EAC1F,MAAMG,MAAM,GAAG9B,SAAS,CAAC,CAAC;EAC1B,OAAAiD,iBAAA,CACGnD,IAAI;IAAA,IAACoD,IAAIA,CAAA;MAAA,OAAEhD,MAAM,CAAC0B,GAAG,CAACzB,KAAK,CAAC;IAAA;IAAA,IAAEiC,QAAQA,CAAA;MAAA,OAAAL,YAAA,SAAYF,IAAI,EAAAG,QAAA,CAAGJ,GAAG,CAACQ,QAAQ,IAAInC,QAAQ;IAAA;IAAAkD,QAAA,EAC9E/C,IAAI,IAAA2B,YAAA,SAAAqB,YAAA,CACMvB,IAAI;MAAA,IAAEwB,QAAQA,CAAA;QAAA,OAAEjD,IAAI,CAAC,CAAC,CAACkD,WAAW,CAAC,CAAC;MAAA;IAAA,IAAAtB,QAAA,CAC3CpC,KAAK,CAACoE,cAAc,CAAC5D,IAAI,CAAC,CAAC,EAAE;MAAE0B,MAAM,EAAEF,GAAG,CAACE,MAAM,IAAIA,MAAM,CAAC,CAAC;MAAEmC,IAAI,EAAErC,GAAG,CAACqC,IAAI;MAAEV,QAAQ,EAAE3B,GAAG,CAAC2B,QAAQ,IAAI;IAAM,CAAC,CAAC;EAErH;AAGP,CAAC;AAED,MAAMW,cAAc,GAAIvC,KAA0B,IAAkB;EAClE,MAAM,CAACC,GAAG,EAAEC,IAAI,CAAC,GAAG9B,UAAU,CAAC4B,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;EAC3E,MAAMG,MAAM,GAAG9B,SAAS,CAAC,CAAC;EAC1B,MAAMmE,KAAK,GAAGA,CAAA,KAAM;IAClB,MAAMC,IAAI,GAAGlE,MAAM,CAAC0B,GAAG,CAACwC,IAAI,CAAC;IAC7B,MAAMC,EAAE,GAAGnE,MAAM,CAAC0B,GAAG,CAACyC,EAAE,CAAC;IACzB,OAAOD,IAAI,IAAIC,EAAE,GAAG;MAAED,IAAI;MAAEC;IAAG,CAAC,GAAG,IAAI;EACzC,CAAC;EACD,OAAApB,iBAAA,CACGnD,IAAI;IAAA,IAACoD,IAAIA,CAAA;MAAA,OAAEiB,KAAK,CAAC,CAAC;IAAA;IAAA,IAAE/B,QAAQA,CAAA;MAAA,OAAAL,YAAA,SAAYF,IAAI,EAAAG,QAAA,CAAGJ,GAAG,CAACQ,QAAQ,IAAInC,QAAQ;IAAA;IAAAkD,QAAA,EACpEhD,KAAK,IAAA4B,YAAA,SAAAqB,YAAA,CACKvB,IAAI;MAAA,IAAEwB,QAAQA,CAAA;QAAA,OAAE5C,WAAW,CAACG,IAAI,CAAC0D,GAAG,CAACnE,KAAK,CAAC,CAAC,CAACkE,EAAE,CAAC7D,OAAO,CAAC,CAAC,GAAGL,KAAK,CAAC,CAAC,CAACiE,IAAI,CAAC5D,OAAO,CAAC,CAAC,CAAC,CAAC;MAAA;IAAA,IAAAwB,QAAA,CAC3FpC,KAAK,CAAC2E,cAAc,CAACpE,KAAK,CAAC,CAAC,CAACiE,IAAI,EAAEjE,KAAK,CAAC,CAAC,CAACkE,EAAE,EAAE;MAAEvC,MAAM,EAAEF,GAAG,CAACE,MAAM,IAAIA,MAAM,CAAC;IAAE,CAAC,CAAC;EAEtF;AAGP,CAAC;AAED,MAAM0C,gBAAgB,GAAI7C,KAA4B,IAAkB;EACtE,MAAM,CAACC,GAAG,EAAEC,IAAI,CAAC,GAAG9B,UAAU,CAAC4B,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;EACtE,MAAMG,MAAM,GAAG9B,SAAS,CAAC,CAAC;EAC1B;EACA,MAAMyE,KAAK,GAAGA,CAAA,KAA6B;IACzC,MAAMtE,KAAK,GAAGyB,GAAG,CAACzB,KAAK;IACvB,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIG,MAAM,CAACsC,QAAQ,CAACzC,KAAK,CAAC,IAAIA,KAAK,IAAI,CAAC,GAAG;MAAEO,EAAE,EAAEP;IAAM,CAAC,GAAG,IAAI;EACjG,CAAC;EACD,OAAA8C,iBAAA,CACGnD,IAAI;IAAA,IAACoD,IAAIA,CAAA;MAAA,OAAEuB,KAAK,CAAC,CAAC;IAAA;IAAA,IAAErC,QAAQA,CAAA;MAAA,OAAAL,YAAA,SAAYF,IAAI,EAAAG,QAAA,CAAGJ,GAAG,CAACQ,QAAQ,IAAInC,QAAQ;IAAA;IAAAkD,QAAA,EACpEuB,QAAQ,IAAA3C,YAAA,SAAAqB,YAAA,CACEvB,IAAI;MAAA,IAAEwB,QAAQA,CAAA;QAAA,OAAE5C,WAAW,CAACiE,QAAQ,CAAC,CAAC,CAAChE,EAAE,CAAC;MAAA;IAAA,IAAAsB,QAAA,CACjDnC,IAAI,CAAC8E,gBAAgB,CAACD,QAAQ,CAAC,CAAC,CAAChE,EAAE,EAAE;MAAEoB,MAAM,EAAEF,GAAG,CAACE,MAAM,IAAIA,MAAM,CAAC;IAAE,CAAC,CAAC;EAE5E;AAGP,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM8C,MAAM,GAAG;EACpBtE,MAAM,EAAEoB,YAAY;EACpBmD,OAAO,EAAExC,aAAa;EACtByC,QAAQ,EAAEtC,cAAc;EACxBuC,KAAK,EAAEpC,WAAW;EAClBtC,IAAI,EAAEmD,UAAU;EAChBwB,IAAI,EAAErB,UAAU;EAChBsB,QAAQ,EAAEpB,cAAc;EACxBqB,YAAY,EAAEnB,kBAAkB;EAChCoB,QAAQ,EAAEjB,cAAc;EACxBkB,UAAU,EAAEZ;AACd,CAAU","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Format","LocaleProvider","useLocale"],"sources":["intl/index.ts"],"sourcesContent":["export type {\n FormatBytesProps,\n FormatCurrencyProps,\n FormatDateProps,\n FormatDateTimeProps,\n FormatDurationMsProps,\n FormatDurationProps,\n FormatNumberProps,\n FormatPercentProps,\n FormatRelativeTimeProps,\n FormatTimeProps,\n} from \"./Format\";\nexport { Format } from \"./Format\";\nexport type { LocaleProviderProps } from \"./locale\";\nexport { LocaleProvider, useLocale } from \"./locale\";\n"],"mappings":"AAYA,SAASA,MAAM,QAAQ,UAAU;AAEjC,SAASC,cAAc,EAAEC,SAAS,QAAQ,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
2
|
+
import { createContext, useContext } from "solid-js";
|
|
3
|
+
import { isServer } from "solid-js/web";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Deterministic fallback locale used when neither a `LocaleProvider` nor a
|
|
7
|
+
* browser `<html lang>` value is available.
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_LOCALE = "en";
|
|
10
|
+
const LocaleContext = createContext();
|
|
11
|
+
/**
|
|
12
|
+
* Provides the render locale to all descendant `@k2b/ui` components.
|
|
13
|
+
*
|
|
14
|
+
* On the server this is the only locale source, so SSR consumers wrap their
|
|
15
|
+
* page in a provider and emit a matching `<html lang>` attribute. A browser
|
|
16
|
+
* island is an independent Solid root: an outer server-side provider does not
|
|
17
|
+
* survive the island's browser re-render, which instead falls back to
|
|
18
|
+
* `document.documentElement.lang`. Keeping `<html lang>` equal to the server
|
|
19
|
+
* provider locale therefore keeps both passes coherent.
|
|
20
|
+
*/
|
|
21
|
+
export const LocaleProvider = props => _$createComponent(LocaleContext.Provider, {
|
|
22
|
+
value: () => props.locale,
|
|
23
|
+
get children() {
|
|
24
|
+
return props.children;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Resolves the effective render locale as a reactive accessor.
|
|
30
|
+
*
|
|
31
|
+
* Precedence: nearest `LocaleProvider`, then the browser's
|
|
32
|
+
* `document.documentElement.lang`, then `"en"`. Components with an explicit
|
|
33
|
+
* `locale` prop apply it before consulting this hook.
|
|
34
|
+
*/
|
|
35
|
+
export const useLocale = () => {
|
|
36
|
+
const provided = useContext(LocaleContext);
|
|
37
|
+
if (provided) return provided;
|
|
38
|
+
if (isServer) return () => DEFAULT_LOCALE;
|
|
39
|
+
return () => document.documentElement.lang || DEFAULT_LOCALE;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Effective date config for date surfaces: an explicit `dateConfig.locale`
|
|
44
|
+
* wins, otherwise the inherited render locale fills the gap. Timezone and
|
|
45
|
+
* week-start configuration pass through untouched.
|
|
46
|
+
*/
|
|
47
|
+
export const useDateConfigLocale = config => {
|
|
48
|
+
const locale = useLocale();
|
|
49
|
+
return () => {
|
|
50
|
+
const current = config();
|
|
51
|
+
return current?.locale ? current : {
|
|
52
|
+
...current,
|
|
53
|
+
locale: locale()
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The decimal separator `Intl.NumberFormat` uses for a locale, e.g. `"."`
|
|
60
|
+
* for English and `","` for German.
|
|
61
|
+
*/
|
|
62
|
+
export const decimalSeparator = locale => new Intl.NumberFormat(locale).formatToParts(1.1).find(part => part.type === "decimal")?.value ?? ".";
|
|
63
|
+
//# sourceMappingURL=locale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","useContext","isServer","DEFAULT_LOCALE","LocaleContext","LocaleProvider","props","_$createComponent","Provider","value","locale","children","useLocale","provided","document","documentElement","lang","useDateConfigLocale","config","current","decimalSeparator","Intl","NumberFormat","formatToParts","find","part","type"],"sources":["intl/locale.tsx"],"sourcesContent":["import type { DateContext } from \"@k2b/stdlib\";\nimport { createContext, type JSX, useContext } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\n\n/**\n * Deterministic fallback locale used when neither a `LocaleProvider` nor a\n * browser `<html lang>` value is available.\n */\nexport const DEFAULT_LOCALE = \"en\";\n\nconst LocaleContext = createContext<() => string>();\n\nexport type LocaleProviderProps = {\n /** BCP 47 locale tag, e.g. `\"en\"`, `\"de\"`, or `\"de-AT\"`. */\n locale: string;\n children?: JSX.Element;\n};\n\n/**\n * Provides the render locale to all descendant `@k2b/ui` components.\n *\n * On the server this is the only locale source, so SSR consumers wrap their\n * page in a provider and emit a matching `<html lang>` attribute. A browser\n * island is an independent Solid root: an outer server-side provider does not\n * survive the island's browser re-render, which instead falls back to\n * `document.documentElement.lang`. Keeping `<html lang>` equal to the server\n * provider locale therefore keeps both passes coherent.\n */\nexport const LocaleProvider = (props: LocaleProviderProps): JSX.Element => (\n <LocaleContext.Provider value={() => props.locale}>{props.children}</LocaleContext.Provider>\n);\n\n/**\n * Resolves the effective render locale as a reactive accessor.\n *\n * Precedence: nearest `LocaleProvider`, then the browser's\n * `document.documentElement.lang`, then `\"en\"`. Components with an explicit\n * `locale` prop apply it before consulting this hook.\n */\nexport const useLocale = (): (() => string) => {\n const provided = useContext(LocaleContext);\n if (provided) return provided;\n if (isServer) return () => DEFAULT_LOCALE;\n return () => document.documentElement.lang || DEFAULT_LOCALE;\n};\n\n/**\n * Effective date config for date surfaces: an explicit `dateConfig.locale`\n * wins, otherwise the inherited render locale fills the gap. Timezone and\n * week-start configuration pass through untouched.\n */\nexport const useDateConfigLocale = (config: () => DateContext | undefined): (() => DateContext) => {\n const locale = useLocale();\n return () => {\n const current = config();\n return current?.locale ? current : { ...current, locale: locale() };\n };\n};\n\n/**\n * The decimal separator `Intl.NumberFormat` uses for a locale, e.g. `\".\"`\n * for English and `\",\"` for German.\n */\nexport const decimalSeparator = (locale: string): string =>\n new Intl.NumberFormat(locale).formatToParts(1.1).find((part) => part.type === \"decimal\")?.value ?? \".\";\n"],"mappings":";AACA,SAASA,aAAa,EAAYC,UAAU,QAAQ,UAAU;AAC9D,SAASC,QAAQ,QAAQ,cAAc;;AAEvC;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAG,IAAI;AAElC,MAAMC,aAAa,GAAGJ,aAAa,CAAe,CAAC;AAQnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,cAAc,GAAIC,KAA0B,IAAAC,iBAAA,CACtDH,aAAa,CAACI,QAAQ;EAACC,KAAK,EAAEA,CAAA,KAAMH,KAAK,CAACI,MAAM;EAAA,IAAAC,SAAA;IAAA,OAAGL,KAAK,CAACK,QAAQ;EAAA;AAAA,EACnE;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,SAAS,GAAGA,CAAA,KAAsB;EAC7C,MAAMC,QAAQ,GAAGZ,UAAU,CAACG,aAAa,CAAC;EAC1C,IAAIS,QAAQ,EAAE,OAAOA,QAAQ;EAC7B,IAAIX,QAAQ,EAAE,OAAO,MAAMC,cAAc;EACzC,OAAO,MAAMW,QAAQ,CAACC,eAAe,CAACC,IAAI,IAAIb,cAAc;AAC9D,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMc,mBAAmB,GAAIC,MAAqC,IAA0B;EACjG,MAAMR,MAAM,GAAGE,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM;IACX,MAAMO,OAAO,GAAGD,MAAM,CAAC,CAAC;IACxB,OAAOC,OAAO,EAAET,MAAM,GAAGS,OAAO,GAAG;MAAE,GAAGA,OAAO;MAAET,MAAM,EAAEA,MAAM,CAAC;IAAE,CAAC;EACrE,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMU,gBAAgB,GAAIV,MAAc,IAC7C,IAAIW,IAAI,CAACC,YAAY,CAACZ,MAAM,CAAC,CAACa,aAAa,CAAC,GAAG,CAAC,CAACC,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAACC,IAAI,KAAK,SAAS,CAAC,EAAEjB,KAAK,IAAI,GAAG","ignoreList":[]}
|