@k2b/ui 0.20.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/actions/Button.js +20 -31
- package/dist/browser/actions/Button.js.map +1 -1
- package/dist/browser/actions/ContextMenu.js +10 -4
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/CopyButton.js +10 -8
- package/dist/browser/actions/CopyButton.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +3 -1
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/GestureMenu.js +4 -0
- package/dist/browser/actions/GestureMenu.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js +3 -1
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/filter-messages.js +20 -0
- package/dist/browser/actions/filter-messages.js.map +1 -0
- package/dist/browser/actions/spotlight-messages.js +16 -0
- package/dist/browser/actions/spotlight-messages.js.map +1 -0
- package/dist/browser/chat/ChatComposer.js +47 -41
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +25 -23
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/ChatRoot.js +3 -3
- package/dist/browser/chat/ChatRoot.js.map +1 -1
- package/dist/browser/chat/ChatTimeline.js +12 -12
- package/dist/browser/chat/ChatTimeline.js.map +1 -1
- package/dist/browser/chat/chat-messages.js +236 -0
- package/dist/browser/chat/chat-messages.js.map +1 -0
- package/dist/browser/content/Calendar.js +1960 -575
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/Chart.js +15 -8
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +20 -12
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/ChartExplorerControls.js +9 -7
- package/dist/browser/content/ChartExplorerControls.js.map +1 -1
- package/dist/browser/content/ChartFilterControls.js +4 -2
- package/dist/browser/content/ChartFilterControls.js.map +1 -1
- package/dist/browser/content/ChartSnapshotView.js +3 -3
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/DataTable.js +68 -59
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/Docs.js +3 -1
- package/dist/browser/content/Docs.js.map +1 -1
- package/dist/browser/content/FileBrowser.js +30 -26
- package/dist/browser/content/FileBrowser.js.map +1 -1
- package/dist/browser/content/FileTree.js +9 -7
- package/dist/browser/content/FileTree.js.map +1 -1
- package/dist/browser/content/FileView.js +37 -28
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/Lightbox.js +9 -7
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/LogEntriesTable.js +3 -3
- package/dist/browser/content/LogEntriesTable.js.map +1 -1
- package/dist/browser/content/MessageRow.js +24 -22
- package/dist/browser/content/MessageRow.js.map +1 -1
- package/dist/browser/content/Pagination.js +7 -7
- package/dist/browser/content/Pagination.js.map +1 -1
- package/dist/browser/content/PdfPreview.js +15 -13
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/RangePicker.js +3 -1
- package/dist/browser/content/RangePicker.js.map +1 -1
- package/dist/browser/content/StructuredDataPreview.js +3 -1
- package/dist/browser/content/StructuredDataPreview.js.map +1 -1
- package/dist/browser/content/Timeline.js +13 -11
- package/dist/browser/content/Timeline.js.map +1 -1
- package/dist/browser/content/VideoPlayer.js +5 -5
- package/dist/browser/content/VideoPlayer.js.map +1 -1
- package/dist/browser/content/VirtualFeed.js +6 -4
- package/dist/browser/content/VirtualFeed.js.map +1 -1
- package/dist/browser/content/ZoomPanViewport.js +10 -7
- package/dist/browser/content/ZoomPanViewport.js.map +1 -1
- package/dist/browser/content/calendar-messages.js +121 -0
- package/dist/browser/content/calendar-messages.js.map +1 -0
- package/dist/browser/content/calendar-month-layout.js +108 -0
- package/dist/browser/content/calendar-month-layout.js.map +1 -0
- package/dist/browser/content/calendar-pointer.js +4 -3
- package/dist/browser/content/calendar-pointer.js.map +1 -1
- package/dist/browser/content/chart-messages.js +136 -0
- package/dist/browser/content/chart-messages.js.map +1 -0
- package/dist/browser/content/collection-selection.js +2 -0
- package/dist/browser/content/collection-selection.js.map +1 -1
- package/dist/browser/content/data-table-messages.js +24 -0
- package/dist/browser/content/data-table-messages.js.map +1 -0
- package/dist/browser/content/docs-messages.js +24 -0
- package/dist/browser/content/docs-messages.js.map +1 -0
- package/dist/browser/content/feed-messages.js +34 -0
- package/dist/browser/content/feed-messages.js.map +1 -0
- package/dist/browser/content/file-browser-messages.js +69 -0
- package/dist/browser/content/file-browser-messages.js.map +1 -0
- package/dist/browser/content/file-view-messages.js +64 -0
- package/dist/browser/content/file-view-messages.js.map +1 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/lightbox-messages.js +36 -0
- package/dist/browser/content/lightbox-messages.js.map +1 -0
- package/dist/browser/content/log-entries-messages.js +20 -0
- package/dist/browser/content/log-entries-messages.js.map +1 -0
- package/dist/browser/content/markdown-info-block-messages.js +24 -0
- package/dist/browser/content/markdown-info-block-messages.js.map +1 -0
- package/dist/browser/content/markdown-info-blocks.js +3 -3
- package/dist/browser/content/markdown-info-blocks.js.map +1 -1
- package/dist/browser/content/markdown-links.js +2 -2
- package/dist/browser/content/markdown-links.js.map +1 -1
- package/dist/browser/content/markdown-reference-messages.js +30 -0
- package/dist/browser/content/markdown-reference-messages.js.map +1 -0
- package/dist/browser/content/pagination-messages.js +38 -0
- package/dist/browser/content/pagination-messages.js.map +1 -0
- package/dist/browser/content/pdf-messages.js +43 -0
- package/dist/browser/content/pdf-messages.js.map +1 -0
- package/dist/browser/content/range-picker-messages.js +20 -0
- package/dist/browser/content/range-picker-messages.js.map +1 -0
- package/dist/browser/content/structured-data-messages.js +22 -0
- package/dist/browser/content/structured-data-messages.js.map +1 -0
- package/dist/browser/content/timeline-messages.js +62 -0
- package/dist/browser/content/timeline-messages.js.map +1 -0
- package/dist/browser/content/video-messages.js +24 -0
- package/dist/browser/content/video-messages.js.map +1 -0
- package/dist/browser/content/viewport-messages.js +28 -0
- package/dist/browser/content/viewport-messages.js.map +1 -0
- package/dist/browser/feedback/HoverPreview.js +34 -6
- package/dist/browser/feedback/HoverPreview.js.map +1 -1
- package/dist/browser/feedback/InstallGuide.js +18 -18
- package/dist/browser/feedback/InstallGuide.js.map +1 -1
- package/dist/browser/feedback/install-messages.js +104 -0
- package/dist/browser/feedback/install-messages.js.map +1 -0
- package/dist/browser/feedback/prompt-messages.js +65 -0
- package/dist/browser/feedback/prompt-messages.js.map +1 -0
- package/dist/browser/feedback/prompts.js +14 -11
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/feedback/toast-messages.js +18 -0
- package/dist/browser/feedback/toast-messages.js.map +1 -0
- package/dist/browser/feedback/toast.js +4 -3
- package/dist/browser/feedback/toast.js.map +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/inputs/AutocompleteEditor.js +6 -4
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/browser/inputs/AutocompleteSelect.js +10 -8
- package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/browser/inputs/ChoiceGroups.js +4 -0
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
- package/dist/browser/inputs/ChoiceInputs.js +5 -5
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
- package/dist/browser/inputs/Combobox.js +3 -1
- package/dist/browser/inputs/Combobox.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +46 -10
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/FileDropTarget.js +6 -6
- package/dist/browser/inputs/FileDropTarget.js.map +1 -1
- package/dist/browser/inputs/FileInputs.js +30 -21
- package/dist/browser/inputs/FileInputs.js.map +1 -1
- package/dist/browser/inputs/MultiSelectInput.js +7 -5
- package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
- package/dist/browser/inputs/NumberInput.js +4 -2
- package/dist/browser/inputs/NumberInput.js.map +1 -1
- package/dist/browser/inputs/QrScanner.js +5 -5
- package/dist/browser/inputs/QrScanner.js.map +1 -1
- package/dist/browser/inputs/Select.js +7 -5
- package/dist/browser/inputs/Select.js.map +1 -1
- package/dist/browser/inputs/SelectChip.js +3 -3
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/SignatureInput.js +9 -3
- package/dist/browser/inputs/SignatureInput.js.map +1 -1
- package/dist/browser/inputs/SpecialInputs.js +4 -2
- package/dist/browser/inputs/SpecialInputs.js.map +1 -1
- package/dist/browser/inputs/TagEditor.js +8 -6
- package/dist/browser/inputs/TagEditor.js.map +1 -1
- package/dist/browser/inputs/TagsInput.js +5 -5
- package/dist/browser/inputs/TagsInput.js.map +1 -1
- package/dist/browser/inputs/TemplateEditor.js +5 -5
- package/dist/browser/inputs/TemplateEditor.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +3 -1
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/completion-messages.js +24 -0
- package/dist/browser/inputs/completion-messages.js.map +1 -0
- package/dist/browser/inputs/date-picker.js +24 -0
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/inputs/file-drop-messages.js +63 -0
- package/dist/browser/inputs/file-drop-messages.js.map +1 -0
- package/dist/browser/inputs/file-drop.js.map +1 -1
- package/dist/browser/inputs/file-input-messages.js +60 -0
- package/dist/browser/inputs/file-input-messages.js.map +1 -0
- package/dist/browser/inputs/icon-messages.js +22 -0
- package/dist/browser/inputs/icon-messages.js.map +1 -0
- package/dist/browser/inputs/input-messages.js +38 -0
- package/dist/browser/inputs/input-messages.js.map +1 -0
- package/dist/browser/inputs/markdown/MarkdownEditor.js +10 -6
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/Toolbar.js +13 -13
- package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/browser/inputs/markdown/editor-messages.js +43 -0
- package/dist/browser/inputs/markdown/editor-messages.js.map +1 -0
- package/dist/browser/inputs/markdown/toolbar-messages.js +40 -0
- package/dist/browser/inputs/markdown/toolbar-messages.js.map +1 -0
- package/dist/browser/inputs/qr-messages.js +26 -0
- package/dist/browser/inputs/qr-messages.js.map +1 -0
- package/dist/browser/inputs/select-messages.js +63 -0
- package/dist/browser/inputs/select-messages.js.map +1 -0
- package/dist/browser/inputs/tag-messages.js +44 -0
- package/dist/browser/inputs/tag-messages.js.map +1 -0
- package/dist/browser/inputs/template-messages.js +22 -0
- package/dist/browser/inputs/template-messages.js.map +1 -0
- package/dist/browser/internal/render-error-messages.js +20 -0
- package/dist/browser/internal/render-error-messages.js.map +1 -0
- package/dist/browser/internal/render-error.js +3 -1
- package/dist/browser/internal/render-error.js.map +1 -1
- package/dist/browser/internal/text-selection.js +101 -0
- package/dist/browser/internal/text-selection.js.map +1 -0
- package/dist/browser/intl/messages.js +12 -1155
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +561 -418
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js +6 -1
- package/dist/browser/layout/BottomSheet.js.map +1 -1
- package/dist/browser/layout/Discussion.js +8 -5
- package/dist/browser/layout/Discussion.js.map +1 -1
- package/dist/browser/layout/FloatingWindow.js +8 -5
- package/dist/browser/layout/FloatingWindow.js.map +1 -1
- package/dist/browser/layout/Navigation.js +7 -6
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +370 -0
- package/dist/browser/layout/PageTitle.js.map +1 -0
- package/dist/browser/layout/PanelDialog.js +8 -6
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/Panes.js +23 -15
- package/dist/browser/layout/Panes.js.map +1 -1
- package/dist/browser/layout/PullToRefresh.js +13 -4
- package/dist/browser/layout/PullToRefresh.js.map +1 -1
- package/dist/browser/layout/Settings.js +14 -12
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SettingsCollection.js +6 -5
- package/dist/browser/layout/SettingsCollection.js.map +1 -1
- package/dist/browser/layout/SettingsModal.js +3 -1
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +743 -12
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/app-workspace-state.js +3 -2
- package/dist/browser/layout/app-workspace-state.js.map +1 -1
- package/dist/browser/layout/floating-window-messages.js +28 -0
- package/dist/browser/layout/floating-window-messages.js.map +1 -0
- package/dist/browser/layout/index.js +2 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/layout/page-title-controller.js +169 -0
- package/dist/browser/layout/page-title-controller.js.map +1 -0
- package/dist/browser/layout/panel-dialog-messages.js +20 -0
- package/dist/browser/layout/panel-dialog-messages.js.map +1 -0
- package/dist/browser/layout/panes-messages.js +48 -0
- package/dist/browser/layout/panes-messages.js.map +1 -0
- package/dist/browser/layout/refresh-messages.js +20 -0
- package/dist/browser/layout/refresh-messages.js.map +1 -0
- package/dist/browser/layout/settings-messages.js +54 -0
- package/dist/browser/layout/settings-messages.js.map +1 -0
- package/dist/browser/layout/workspace-messages.js +56 -0
- package/dist/browser/layout/workspace-messages.js.map +1 -0
- package/dist/browser/surfaces/Avatar.js +5 -5
- package/dist/browser/surfaces/Avatar.js.map +1 -1
- package/dist/browser/surfaces/ResourceCard.js +4 -2
- package/dist/browser/surfaces/ResourceCard.js.map +1 -1
- package/dist/browser/surfaces/Tag.js +3 -3
- package/dist/browser/surfaces/Tag.js.map +1 -1
- package/dist/browser/surfaces/avatar-messages.js +26 -0
- package/dist/browser/surfaces/avatar-messages.js.map +1 -0
- package/dist/browser/surfaces/resource-messages.js +26 -0
- package/dist/browser/surfaces/resource-messages.js.map +1 -0
- package/dist/browser/widgets/Widget.js +6 -0
- package/dist/browser/widgets/Widget.js.map +1 -1
- package/dist/ssr/actions/Button.js +21 -32
- package/dist/ssr/actions/Button.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js +7 -3
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/CopyButton.js +9 -7
- package/dist/ssr/actions/CopyButton.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +3 -1
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/GestureMenu.js +4 -0
- package/dist/ssr/actions/GestureMenu.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js +3 -1
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/filter-messages.js +20 -0
- package/dist/ssr/actions/filter-messages.js.map +1 -0
- package/dist/ssr/actions/spotlight-messages.js +16 -0
- package/dist/ssr/actions/spotlight-messages.js.map +1 -0
- package/dist/ssr/chat/ChatComposer.js +47 -41
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +23 -21
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/ChatRoot.js +3 -3
- package/dist/ssr/chat/ChatRoot.js.map +1 -1
- package/dist/ssr/chat/ChatTimeline.js +11 -11
- package/dist/ssr/chat/ChatTimeline.js.map +1 -1
- package/dist/ssr/chat/chat-messages.js +236 -0
- package/dist/ssr/chat/chat-messages.js.map +1 -0
- package/dist/ssr/content/Calendar.js +1232 -115
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/Chart.js +12 -5
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +10 -8
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/ChartExplorerControls.js +9 -7
- package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
- package/dist/ssr/content/ChartFilterControls.js +4 -2
- package/dist/ssr/content/ChartFilterControls.js.map +1 -1
- package/dist/ssr/content/ChartSnapshotView.js +3 -3
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/DataTable.js +10 -4
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/Docs.js +3 -1
- package/dist/ssr/content/Docs.js.map +1 -1
- package/dist/ssr/content/FileBrowser.js +30 -26
- package/dist/ssr/content/FileBrowser.js.map +1 -1
- package/dist/ssr/content/FileTree.js +9 -7
- package/dist/ssr/content/FileTree.js.map +1 -1
- package/dist/ssr/content/FileView.js +37 -28
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +8 -6
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/LogEntriesTable.js +3 -3
- package/dist/ssr/content/LogEntriesTable.js.map +1 -1
- package/dist/ssr/content/MessageRow.js +24 -22
- package/dist/ssr/content/MessageRow.js.map +1 -1
- package/dist/ssr/content/Pagination.js +6 -6
- package/dist/ssr/content/Pagination.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js +15 -13
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/RangePicker.js +3 -1
- package/dist/ssr/content/RangePicker.js.map +1 -1
- package/dist/ssr/content/StructuredDataPreview.js +3 -1
- package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
- package/dist/ssr/content/Timeline.js +13 -11
- package/dist/ssr/content/Timeline.js.map +1 -1
- package/dist/ssr/content/VideoPlayer.js +5 -5
- package/dist/ssr/content/VideoPlayer.js.map +1 -1
- package/dist/ssr/content/VirtualFeed.js +6 -4
- package/dist/ssr/content/VirtualFeed.js.map +1 -1
- package/dist/ssr/content/ZoomPanViewport.js +7 -4
- package/dist/ssr/content/ZoomPanViewport.js.map +1 -1
- package/dist/ssr/content/calendar-messages.js +121 -0
- package/dist/ssr/content/calendar-messages.js.map +1 -0
- package/dist/ssr/content/calendar-month-layout.js +108 -0
- package/dist/ssr/content/calendar-month-layout.js.map +1 -0
- package/dist/ssr/content/calendar-pointer.js +4 -3
- package/dist/ssr/content/calendar-pointer.js.map +1 -1
- package/dist/ssr/content/chart-messages.js +136 -0
- package/dist/ssr/content/chart-messages.js.map +1 -0
- package/dist/ssr/content/collection-selection.js +2 -0
- package/dist/ssr/content/collection-selection.js.map +1 -1
- package/dist/ssr/content/data-table-messages.js +24 -0
- package/dist/ssr/content/data-table-messages.js.map +1 -0
- package/dist/ssr/content/docs-messages.js +24 -0
- package/dist/ssr/content/docs-messages.js.map +1 -0
- package/dist/ssr/content/feed-messages.js +34 -0
- package/dist/ssr/content/feed-messages.js.map +1 -0
- package/dist/ssr/content/file-browser-messages.js +69 -0
- package/dist/ssr/content/file-browser-messages.js.map +1 -0
- package/dist/ssr/content/file-view-messages.js +64 -0
- package/dist/ssr/content/file-view-messages.js.map +1 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/lightbox-messages.js +36 -0
- package/dist/ssr/content/lightbox-messages.js.map +1 -0
- package/dist/ssr/content/log-entries-messages.js +20 -0
- package/dist/ssr/content/log-entries-messages.js.map +1 -0
- package/dist/ssr/content/markdown-info-block-messages.js +24 -0
- package/dist/ssr/content/markdown-info-block-messages.js.map +1 -0
- package/dist/ssr/content/markdown-info-blocks.js +3 -3
- package/dist/ssr/content/markdown-info-blocks.js.map +1 -1
- package/dist/ssr/content/markdown-links.js +2 -2
- package/dist/ssr/content/markdown-links.js.map +1 -1
- package/dist/ssr/content/markdown-reference-messages.js +30 -0
- package/dist/ssr/content/markdown-reference-messages.js.map +1 -0
- package/dist/ssr/content/pagination-messages.js +38 -0
- package/dist/ssr/content/pagination-messages.js.map +1 -0
- package/dist/ssr/content/pdf-messages.js +43 -0
- package/dist/ssr/content/pdf-messages.js.map +1 -0
- package/dist/ssr/content/range-picker-messages.js +20 -0
- package/dist/ssr/content/range-picker-messages.js.map +1 -0
- package/dist/ssr/content/structured-data-messages.js +22 -0
- package/dist/ssr/content/structured-data-messages.js.map +1 -0
- package/dist/ssr/content/timeline-messages.js +62 -0
- package/dist/ssr/content/timeline-messages.js.map +1 -0
- package/dist/ssr/content/video-messages.js +24 -0
- package/dist/ssr/content/video-messages.js.map +1 -0
- package/dist/ssr/content/viewport-messages.js +28 -0
- package/dist/ssr/content/viewport-messages.js.map +1 -0
- package/dist/ssr/feedback/HoverPreview.js +34 -6
- package/dist/ssr/feedback/HoverPreview.js.map +1 -1
- package/dist/ssr/feedback/InstallGuide.js +18 -18
- package/dist/ssr/feedback/InstallGuide.js.map +1 -1
- package/dist/ssr/feedback/install-messages.js +104 -0
- package/dist/ssr/feedback/install-messages.js.map +1 -0
- package/dist/ssr/feedback/prompt-messages.js +65 -0
- package/dist/ssr/feedback/prompt-messages.js.map +1 -0
- package/dist/ssr/feedback/prompts.js +14 -11
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/feedback/toast-messages.js +18 -0
- package/dist/ssr/feedback/toast-messages.js.map +1 -0
- package/dist/ssr/feedback/toast.js +4 -3
- package/dist/ssr/feedback/toast.js.map +1 -1
- package/dist/ssr/index.js +1 -1
- package/dist/ssr/index.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteEditor.js +5 -3
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteSelect.js +10 -8
- package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
- package/dist/ssr/inputs/ChoiceGroups.js +4 -0
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
- package/dist/ssr/inputs/ChoiceInputs.js +5 -5
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
- package/dist/ssr/inputs/Combobox.js +3 -1
- package/dist/ssr/inputs/Combobox.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +34 -4
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/FileDropTarget.js +6 -6
- package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
- package/dist/ssr/inputs/FileInputs.js +29 -20
- package/dist/ssr/inputs/FileInputs.js.map +1 -1
- package/dist/ssr/inputs/MultiSelectInput.js +7 -5
- package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
- package/dist/ssr/inputs/NumberInput.js +4 -2
- package/dist/ssr/inputs/NumberInput.js.map +1 -1
- package/dist/ssr/inputs/QrScanner.js +4 -4
- package/dist/ssr/inputs/QrScanner.js.map +1 -1
- package/dist/ssr/inputs/Select.js +7 -5
- package/dist/ssr/inputs/Select.js.map +1 -1
- package/dist/ssr/inputs/SelectChip.js +3 -3
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/SignatureInput.js +9 -3
- package/dist/ssr/inputs/SignatureInput.js.map +1 -1
- package/dist/ssr/inputs/SpecialInputs.js +4 -2
- package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
- package/dist/ssr/inputs/TagEditor.js +8 -6
- package/dist/ssr/inputs/TagEditor.js.map +1 -1
- package/dist/ssr/inputs/TagsInput.js +5 -5
- package/dist/ssr/inputs/TagsInput.js.map +1 -1
- package/dist/ssr/inputs/TemplateEditor.js +5 -5
- package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js +3 -1
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/completion-messages.js +24 -0
- package/dist/ssr/inputs/completion-messages.js.map +1 -0
- package/dist/ssr/inputs/date-picker.js +24 -0
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/inputs/file-drop-messages.js +63 -0
- package/dist/ssr/inputs/file-drop-messages.js.map +1 -0
- package/dist/ssr/inputs/file-drop.js.map +1 -1
- package/dist/ssr/inputs/file-input-messages.js +60 -0
- package/dist/ssr/inputs/file-input-messages.js.map +1 -0
- package/dist/ssr/inputs/icon-messages.js +22 -0
- package/dist/ssr/inputs/icon-messages.js.map +1 -0
- package/dist/ssr/inputs/input-messages.js +38 -0
- package/dist/ssr/inputs/input-messages.js.map +1 -0
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +9 -5
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/Toolbar.js +13 -13
- package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
- package/dist/ssr/inputs/markdown/editor-messages.js +43 -0
- package/dist/ssr/inputs/markdown/editor-messages.js.map +1 -0
- package/dist/ssr/inputs/markdown/toolbar-messages.js +40 -0
- package/dist/ssr/inputs/markdown/toolbar-messages.js.map +1 -0
- package/dist/ssr/inputs/qr-messages.js +26 -0
- package/dist/ssr/inputs/qr-messages.js.map +1 -0
- package/dist/ssr/inputs/select-messages.js +63 -0
- package/dist/ssr/inputs/select-messages.js.map +1 -0
- package/dist/ssr/inputs/tag-messages.js +44 -0
- package/dist/ssr/inputs/tag-messages.js.map +1 -0
- package/dist/ssr/inputs/template-messages.js +22 -0
- package/dist/ssr/inputs/template-messages.js.map +1 -0
- package/dist/ssr/internal/render-error-messages.js +20 -0
- package/dist/ssr/internal/render-error-messages.js.map +1 -0
- package/dist/ssr/internal/render-error.js +3 -1
- package/dist/ssr/internal/render-error.js.map +1 -1
- package/dist/ssr/internal/text-selection.js +101 -0
- package/dist/ssr/internal/text-selection.js.map +1 -0
- package/dist/ssr/intl/messages.js +12 -1155
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +203 -96
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js +1 -0
- package/dist/ssr/layout/BottomSheet.js.map +1 -1
- package/dist/ssr/layout/Discussion.js +8 -5
- package/dist/ssr/layout/Discussion.js.map +1 -1
- package/dist/ssr/layout/FloatingWindow.js +8 -5
- package/dist/ssr/layout/FloatingWindow.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +6 -5
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +253 -0
- package/dist/ssr/layout/PageTitle.js.map +1 -0
- package/dist/ssr/layout/PanelDialog.js +8 -6
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/Panes.js +22 -14
- package/dist/ssr/layout/Panes.js.map +1 -1
- package/dist/ssr/layout/PullToRefresh.js +13 -4
- package/dist/ssr/layout/PullToRefresh.js.map +1 -1
- package/dist/ssr/layout/Settings.js +14 -12
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SettingsCollection.js +6 -5
- package/dist/ssr/layout/SettingsCollection.js.map +1 -1
- package/dist/ssr/layout/SettingsModal.js +3 -1
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +743 -12
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/app-workspace-state.js +3 -2
- package/dist/ssr/layout/app-workspace-state.js.map +1 -1
- package/dist/ssr/layout/floating-window-messages.js +28 -0
- package/dist/ssr/layout/floating-window-messages.js.map +1 -0
- package/dist/ssr/layout/index.js +2 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/layout/page-title-controller.js +169 -0
- package/dist/ssr/layout/page-title-controller.js.map +1 -0
- package/dist/ssr/layout/panel-dialog-messages.js +20 -0
- package/dist/ssr/layout/panel-dialog-messages.js.map +1 -0
- package/dist/ssr/layout/panes-messages.js +48 -0
- package/dist/ssr/layout/panes-messages.js.map +1 -0
- package/dist/ssr/layout/refresh-messages.js +20 -0
- package/dist/ssr/layout/refresh-messages.js.map +1 -0
- package/dist/ssr/layout/settings-messages.js +54 -0
- package/dist/ssr/layout/settings-messages.js.map +1 -0
- package/dist/ssr/layout/workspace-messages.js +56 -0
- package/dist/ssr/layout/workspace-messages.js.map +1 -0
- package/dist/ssr/surfaces/Avatar.js +5 -5
- package/dist/ssr/surfaces/Avatar.js.map +1 -1
- package/dist/ssr/surfaces/ResourceCard.js +4 -2
- package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
- package/dist/ssr/surfaces/Tag.js +3 -3
- package/dist/ssr/surfaces/Tag.js.map +1 -1
- package/dist/ssr/surfaces/avatar-messages.js +26 -0
- package/dist/ssr/surfaces/avatar-messages.js.map +1 -0
- package/dist/ssr/surfaces/resource-messages.js +26 -0
- package/dist/ssr/surfaces/resource-messages.js.map +1 -0
- package/dist/ssr/widgets/Widget.js +6 -0
- package/dist/ssr/widgets/Widget.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/GestureMenu.d.ts +2 -0
- package/dist/types/actions/filter-messages.d.ts +8 -0
- package/dist/types/actions/spotlight-messages.d.ts +8 -0
- package/dist/types/chat/chat-messages.d.ts +116 -0
- package/dist/types/content/Calendar.d.ts +32 -0
- package/dist/types/content/DataTable.d.ts +2 -0
- package/dist/types/content/FileView.d.ts +0 -10
- package/dist/types/content/calendar-messages.d.ts +60 -0
- package/dist/types/content/calendar-month-layout.d.ts +52 -0
- package/dist/types/content/chart-messages.d.ts +32 -0
- package/dist/types/content/data-table-messages.d.ts +10 -0
- package/dist/types/content/docs-messages.d.ts +10 -0
- package/dist/types/content/feed-messages.d.ts +15 -0
- package/dist/types/content/file-browser-messages.d.ts +33 -0
- package/dist/types/content/file-view-messages.d.ts +30 -0
- package/dist/types/content/index.d.ts +1 -1
- package/dist/types/content/lightbox-messages.d.ts +16 -0
- package/dist/types/content/log-entries-messages.d.ts +8 -0
- package/dist/types/content/markdown-info-block-messages.d.ts +12 -0
- package/dist/types/content/markdown-reference-messages.d.ts +15 -0
- package/dist/types/content/pagination-messages.d.ts +17 -0
- package/dist/types/content/pdf-messages.d.ts +20 -0
- package/dist/types/content/range-picker-messages.d.ts +8 -0
- package/dist/types/content/structured-data-messages.d.ts +9 -0
- package/dist/types/content/timeline-messages.d.ts +29 -0
- package/dist/types/content/video-messages.d.ts +10 -0
- package/dist/types/content/viewport-messages.d.ts +12 -0
- package/dist/types/feedback/install-messages.d.ts +50 -0
- package/dist/types/feedback/prompt-messages.d.ts +31 -0
- package/dist/types/feedback/toast-messages.d.ts +9 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/inputs/completion-messages.d.ts +10 -0
- package/dist/types/inputs/date-picker.d.ts +7 -0
- package/dist/types/inputs/file-drop-messages.d.ts +30 -0
- package/dist/types/inputs/file-drop.d.ts +3 -3
- package/dist/types/inputs/file-input-messages.d.ts +28 -0
- package/dist/types/inputs/icon-messages.d.ts +9 -0
- package/dist/types/inputs/input-messages.d.ts +17 -0
- package/dist/types/inputs/markdown/editor-messages.d.ts +20 -0
- package/dist/types/inputs/markdown/toolbar-messages.d.ts +18 -0
- package/dist/types/inputs/qr-messages.d.ts +11 -0
- package/dist/types/inputs/select-messages.d.ts +30 -0
- package/dist/types/inputs/tag-messages.d.ts +20 -0
- package/dist/types/inputs/template-messages.d.ts +9 -0
- package/dist/types/internal/render-error-messages.d.ts +8 -0
- package/dist/types/internal/text-selection.d.ts +18 -0
- package/dist/types/intl/messages.d.ts +6 -544
- package/dist/types/layout/AppWorkspace.d.ts +19 -4
- package/dist/types/layout/PageTitle.d.ts +64 -0
- package/dist/types/layout/app-workspace-controller.d.ts +4 -0
- package/dist/types/layout/app-workspace-state.d.ts +3 -2
- package/dist/types/layout/floating-window-messages.d.ts +12 -0
- package/dist/types/layout/index.d.ts +3 -0
- package/dist/types/layout/navigation-model.d.ts +7 -0
- package/dist/types/layout/page-title-controller.d.ts +13 -0
- package/dist/types/layout/panel-dialog-messages.d.ts +8 -0
- package/dist/types/layout/panes-messages.d.ts +22 -0
- package/dist/types/layout/refresh-messages.d.ts +8 -0
- package/dist/types/layout/settings-messages.d.ts +25 -0
- package/dist/types/layout/workspace-messages.d.ts +26 -0
- package/dist/types/surfaces/avatar-messages.d.ts +11 -0
- package/dist/types/surfaces/resource-messages.d.ts +11 -0
- package/dist/types/widgets/Widget.d.ts +5 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/TextInput.tsx"],"sourcesContent":["import { createSignal, type JSX, Show, splitProps } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { Completion } from \"./completion\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { MarkdownEditor } from \"./markdown/MarkdownEditor\";\n\nexport type TextInputProps = Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"onInput\" | \"prefix\" | \"suffix\" | \"type\" | \"value\" | keyof ValueFieldProps<string>\n> &\n ValueFieldProps<string> & {\n minLength?: number;\n maxLength?: number;\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"tel\";\n variant?: \"default\" | \"ai\";\n icon?: string;\n activeIcon?: string;\n prefix?: JSX.Element;\n suffix?: JSX.Element;\n clearable?: boolean;\n onClear?: () => void;\n clearLabel?: string;\n multiline?: boolean;\n monospace?: boolean;\n password?: boolean;\n markdown?: boolean;\n onSubmit?: () => void;\n lines?: number;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n };\n\nexport function TextInput(props: TextInputProps): JSX.Element {\n const messages = useUiMessages();\n const [local, rest] = splitProps(props, [\n \"activeIcon\",\n \"aria-describedby\",\n \"aria-label\",\n \"class\",\n \"clearLabel\",\n \"clearable\",\n \"completions\",\n \"description\",\n \"error\",\n \"icon\",\n \"id\",\n \"label\",\n \"lines\",\n \"markdown\",\n \"minLength\",\n \"maxLength\",\n \"monospace\",\n \"multiline\",\n \"onClear\",\n \"onValueCommit\",\n \"onSubmit\",\n \"onValueChange\",\n \"password\",\n \"prefix\",\n \"required\",\n \"suffix\",\n \"type\",\n \"value\",\n \"variant\",\n \"abbreviations\",\n ]);\n const meta = createFieldMeta(local.id);\n const value = () => resolveMaybeAccessor(local.value) ?? \"\";\n const error = () => resolveMaybeAccessor(local.error);\n const [passwordVisible, setPasswordVisible] = createSignal(false);\n const multiline = () => Boolean(local.multiline || local.markdown);\n const icon = () => local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : local.markdown ? \"ti ti-markdown\" : \"ti ti-cursor-text\");\n // A custom icon stays while typing (a search field keeps its magnifier); only the default icon switches to the pencil.\n const activeIcon = () => local.activeIcon ?? local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : \"ti ti-pencil\");\n // Names, addresses and passwords are typed exactly: phone keyboards must not capitalize or \"correct\" them.\n const verbatim = () =>\n local.password || local.type === \"email\" || local.type === \"url\" || /\\b(username|email|url)\\b/.test(String(rest.autocomplete ?? \"\"));\n const input = (next: string) => local.onValueChange?.(next);\n const commit = (next: string) => local.onValueCommit?.(next);\n const clear = () => {\n if (local.onClear) {\n local.onClear();\n return;\n }\n commitFieldValue(local, \"\");\n };\n\n return (\n <Show\n when={local.markdown}\n fallback={\n <Field\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n meta={meta}\n required={local.required}\n disabled={rest.disabled}\n >\n <div\n class=\"k2b-input-shell k2b-text-input\"\n data-invalid={error() ? \"true\" : undefined}\n data-ai={local.variant === \"ai\" ? \"true\" : undefined}\n data-multiline={multiline() ? \"true\" : undefined}\n data-monospace={local.monospace ? \"true\" : undefined}\n style={multiline() ? { \"--k2b-editor-lines\": String(local.lines ?? 3) } : undefined}\n >\n <span class=\"k2b-input-shell__icon k2b-text-input__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n <i class={activeIcon()} />\n </span>\n <Show when={local.prefix}>\n <span class=\"k2b-input-shell__affix\">{local.prefix}</span>\n </Show>\n <Show\n when={multiline()}\n fallback={\n <input\n autocapitalize={verbatim() ? \"none\" : undefined}\n autocorrect={verbatim() ? \"off\" : undefined}\n spellcheck={verbatim() ? false : undefined}\n {...rest}\n id={meta.controlId}\n class=\"k2b-input\"\n type={local.password && !passwordVisible() ? \"password\" : (local.type ?? \"text\")}\n value={value()}\n minlength={local.minLength}\n maxlength={local.maxLength}\n required={local.required}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n }\n >\n <textarea\n {...(rest as unknown as JSX.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n id={meta.controlId}\n class=\"k2b-input k2b-text-input__textarea\"\n value={value()}\n rows={local.lines ?? 3}\n required={local.required}\n minlength={local.minLength}\n maxlength={local.maxLength}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n </Show>\n <Show when={local.suffix}>\n <span class=\"k2b-input-shell__affix\">{local.suffix}</span>\n </Show>\n <Show when={local.clearable && value() && !multiline() && !local.password && !rest.disabled && !rest.readOnly}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear k2b-input-clear-action\"\n aria-label={local.clearLabel ?? messages().clear}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <Show when={local.password && !multiline()}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear\"\n aria-label={passwordVisible() ? messages().hidePassword : messages().showPassword}\n aria-pressed={passwordVisible()}\n disabled={rest.disabled}\n onClick={() => setPasswordVisible((visible) => !visible)}\n >\n <i class={passwordVisible() ? \"ti ti-eye-off\" : \"ti ti-eye\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Field>\n }\n >\n <MarkdownEditor\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n id={meta.controlId}\n name={rest.name}\n value={value()}\n onValueChange={input}\n onValueCommit={local.onValueCommit}\n onSubmit={local.onSubmit}\n placeholder={rest.placeholder}\n disabled={rest.disabled}\n required={local.required}\n lines={local.lines}\n maxLength={local.maxLength}\n spellcheck={rest.spellcheck === undefined ? undefined : rest.spellcheck === true || rest.spellcheck === \"true\"}\n abbreviations={local.abbreviations}\n completions={local.completions}\n aria-label={local[\"aria-label\"]}\n aria-describedby={local[\"aria-describedby\"]}\n />\n </Show>\n );\n}\n\nexport default TextInput;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/TextInput.tsx"],"sourcesContent":["import { createSignal, type JSX, Show, splitProps } from \"solid-js\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../internal/field\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { Completion } from \"./completion\";\nimport type { ValueFieldProps } from \"./field-contract\";\nimport { commitFieldValue, resolveMaybeAccessor } from \"./field-contract\";\nimport { useInputMessages } from \"./input-messages\";\nimport { MarkdownEditor } from \"./markdown/MarkdownEditor\";\n\nexport type TextInputProps = Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"onInput\" | \"prefix\" | \"suffix\" | \"type\" | \"value\" | keyof ValueFieldProps<string>\n> &\n ValueFieldProps<string> & {\n minLength?: number;\n maxLength?: number;\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"tel\";\n variant?: \"default\" | \"ai\";\n icon?: string;\n activeIcon?: string;\n prefix?: JSX.Element;\n suffix?: JSX.Element;\n clearable?: boolean;\n onClear?: () => void;\n clearLabel?: string;\n multiline?: boolean;\n monospace?: boolean;\n password?: boolean;\n markdown?: boolean;\n onSubmit?: () => void;\n lines?: number;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n };\n\nexport function TextInput(props: TextInputProps): JSX.Element {\n const messages = useUiMessages();\n const inputMessages = useInputMessages();\n const [local, rest] = splitProps(props, [\n \"activeIcon\",\n \"aria-describedby\",\n \"aria-label\",\n \"class\",\n \"clearLabel\",\n \"clearable\",\n \"completions\",\n \"description\",\n \"error\",\n \"icon\",\n \"id\",\n \"label\",\n \"lines\",\n \"markdown\",\n \"minLength\",\n \"maxLength\",\n \"monospace\",\n \"multiline\",\n \"onClear\",\n \"onValueCommit\",\n \"onSubmit\",\n \"onValueChange\",\n \"password\",\n \"prefix\",\n \"required\",\n \"suffix\",\n \"type\",\n \"value\",\n \"variant\",\n \"abbreviations\",\n ]);\n const meta = createFieldMeta(local.id);\n const value = () => resolveMaybeAccessor(local.value) ?? \"\";\n const error = () => resolveMaybeAccessor(local.error);\n const [passwordVisible, setPasswordVisible] = createSignal(false);\n const multiline = () => Boolean(local.multiline || local.markdown);\n const icon = () => local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : local.markdown ? \"ti ti-markdown\" : \"ti ti-cursor-text\");\n // A custom icon stays while typing (a search field keeps its magnifier); only the default icon switches to the pencil.\n const activeIcon = () => local.activeIcon ?? local.icon ?? (local.variant === \"ai\" ? \"ti ti-sparkles\" : \"ti ti-pencil\");\n // Names, addresses and passwords are typed exactly: phone keyboards must not capitalize or \"correct\" them.\n const verbatim = () =>\n local.password || local.type === \"email\" || local.type === \"url\" || /\\b(username|email|url)\\b/.test(String(rest.autocomplete ?? \"\"));\n const input = (next: string) => local.onValueChange?.(next);\n const commit = (next: string) => local.onValueCommit?.(next);\n const clear = () => {\n if (local.onClear) {\n local.onClear();\n return;\n }\n commitFieldValue(local, \"\");\n };\n\n return (\n <Show\n when={local.markdown}\n fallback={\n <Field\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n meta={meta}\n required={local.required}\n disabled={rest.disabled}\n >\n <div\n class=\"k2b-input-shell k2b-text-input\"\n data-invalid={error() ? \"true\" : undefined}\n data-ai={local.variant === \"ai\" ? \"true\" : undefined}\n data-multiline={multiline() ? \"true\" : undefined}\n data-monospace={local.monospace ? \"true\" : undefined}\n style={multiline() ? { \"--k2b-editor-lines\": String(local.lines ?? 3) } : undefined}\n >\n <span class=\"k2b-input-shell__icon k2b-text-input__icon\" aria-hidden=\"true\">\n <i class={icon()} />\n <i class={activeIcon()} />\n </span>\n <Show when={local.prefix}>\n <span class=\"k2b-input-shell__affix\">{local.prefix}</span>\n </Show>\n <Show\n when={multiline()}\n fallback={\n <input\n autocapitalize={verbatim() ? \"none\" : undefined}\n autocorrect={verbatim() ? \"off\" : undefined}\n spellcheck={verbatim() ? false : undefined}\n {...rest}\n id={meta.controlId}\n class=\"k2b-input\"\n type={local.password && !passwordVisible() ? \"password\" : (local.type ?? \"text\")}\n value={value()}\n minlength={local.minLength}\n maxlength={local.maxLength}\n required={local.required}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n }\n >\n <textarea\n {...(rest as unknown as JSX.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n id={meta.controlId}\n class=\"k2b-input k2b-text-input__textarea\"\n value={value()}\n rows={local.lines ?? 3}\n required={local.required}\n minlength={local.minLength}\n maxlength={local.maxLength}\n {...fieldControlAria(meta, local)}\n onInput={(event) => {\n input(event.currentTarget.value);\n }}\n onChange={(event) => commit(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (local.onSubmit && event.key === \"Enter\" && !event.shiftKey && !event.metaKey) {\n event.preventDefault();\n local.onSubmit();\n }\n }}\n />\n </Show>\n <Show when={local.suffix}>\n <span class=\"k2b-input-shell__affix\">{local.suffix}</span>\n </Show>\n <Show when={local.clearable && value() && !multiline() && !local.password && !rest.disabled && !rest.readOnly}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear k2b-input-clear-action\"\n aria-label={local.clearLabel ?? messages().clear}\n onClick={clear}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </button>\n </Show>\n <Show when={local.password && !multiline()}>\n <button\n type=\"button\"\n class=\"k2b-input-shell__clear\"\n aria-label={passwordVisible() ? inputMessages().hidePassword : inputMessages().showPassword}\n aria-pressed={passwordVisible()}\n disabled={rest.disabled}\n onClick={() => setPasswordVisible((visible) => !visible)}\n >\n <i class={passwordVisible() ? \"ti ti-eye-off\" : \"ti ti-eye\"} aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </Field>\n }\n >\n <MarkdownEditor\n class={local.class}\n label={local.label}\n description={local.description}\n error={error()}\n id={meta.controlId}\n name={rest.name}\n value={value()}\n onValueChange={input}\n onValueCommit={local.onValueCommit}\n onSubmit={local.onSubmit}\n placeholder={rest.placeholder}\n disabled={rest.disabled}\n required={local.required}\n lines={local.lines}\n maxLength={local.maxLength}\n spellcheck={rest.spellcheck === undefined ? undefined : rest.spellcheck === true || rest.spellcheck === \"true\"}\n abbreviations={local.abbreviations}\n completions={local.completions}\n aria-label={local[\"aria-label\"]}\n aria-describedby={local[\"aria-describedby\"]}\n />\n </Show>\n );\n}\n\nexport default TextInput;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { i18n } from "@k2b/stdlib";
|
|
2
|
+
import { useLocale } from "../intl/locale";
|
|
3
|
+
const completionMessages = i18n.define({
|
|
4
|
+
baseLocale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
en: {
|
|
7
|
+
suggestions: "Suggestions",
|
|
8
|
+
suggestionsCouldNotLoad: "Suggestions could not be loaded",
|
|
9
|
+
completionSuggestions: "Completion suggestions"
|
|
10
|
+
},
|
|
11
|
+
de: {
|
|
12
|
+
suggestions: "Vorschläge",
|
|
13
|
+
suggestionsCouldNotLoad: "Vorschläge konnten nicht geladen werden",
|
|
14
|
+
completionSuggestions: "Vervollständigungsvorschläge"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
/** Resolved from the inherited render locale. */
|
|
19
|
+
export const useCompletionMessages = () => {
|
|
20
|
+
const locale = useLocale();
|
|
21
|
+
return () => completionMessages.resolve([locale()]).t;
|
|
22
|
+
};
|
|
23
|
+
export const checkCompletionMessages = () => completionMessages.check();
|
|
24
|
+
//# sourceMappingURL=completion-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/completion-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst completionMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n suggestions: \"Suggestions\",\n suggestionsCouldNotLoad: \"Suggestions could not be loaded\",\n completionSuggestions: \"Completion suggestions\",\n },\n de: {\n suggestions: \"Vorschläge\",\n suggestionsCouldNotLoad: \"Vorschläge konnten nicht geladen werden\",\n completionSuggestions: \"Vervollständigungsvorschläge\",\n },\n },\n});\n\nexport type CompletionMessages = ReturnType<(typeof completionMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useCompletionMessages = (): (() => CompletionMessages) => {\n const locale = useLocale();\n return () => completionMessages.resolve([locale()]).t;\n};\n\nexport const checkCompletionMessages = () => completionMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;EACrC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,WAAW,EAAE,aAAa;MAC1B,uBAAuB,EAAE,iCAAiC;MAC1D,qBAAqB,EAAE;IACzB,CAAC;IACD,EAAE,EAAE;MACF,WAAW,EAAE,YAAY;MACzB,uBAAuB,EAAE,yCAAyC;MAClE,qBAAqB,EAAE;IACzB;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,qBAAqB,GAAG,MAAkC;EACrE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,OAAO,MAAM,uBAAuB,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
|
|
@@ -44,6 +44,30 @@ export const monthDate = (year, month, context) => {
|
|
|
44
44
|
}
|
|
45
45
|
return new Date(year, month, 1, 12);
|
|
46
46
|
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Milliseconds from `now` until the next calendar day starts in the picker's
|
|
50
|
+
* time zone, so a panel left open past midnight moves its today mark on time.
|
|
51
|
+
* The next day's start is resolved from its date key: where a DST change skips
|
|
52
|
+
* or repeats midnight, the day starts at its first existing instant.
|
|
53
|
+
*/
|
|
54
|
+
export const msUntilNextDay = (now, context) => {
|
|
55
|
+
const merged = pickerContext(context);
|
|
56
|
+
const {
|
|
57
|
+
timeZone
|
|
58
|
+
} = merged;
|
|
59
|
+
const next = timeZone ? Date.parse(dates.zonedDateTimeToInstant(dates.addZoned(`${dateKey(now, merged)}T00:00`, {
|
|
60
|
+
timeZone,
|
|
61
|
+
days: 1
|
|
62
|
+
}), timeZone, {
|
|
63
|
+
disambiguation: "compatible"
|
|
64
|
+
})) : dates.addDays(now, 1, merged).getTime();
|
|
65
|
+
const delay = next - now.getTime();
|
|
66
|
+
// The timer re-arms after every tick, so it must never fire at once. Should a
|
|
67
|
+
// zone's rules still put the next day behind `now`, look again in a minute,
|
|
68
|
+
// the finest unit the pickers show.
|
|
69
|
+
return delay > 0 ? delay : 60_000;
|
|
70
|
+
};
|
|
47
71
|
export const parseDateValue = (value, context) => {
|
|
48
72
|
if (!value) return dates.today(pickerContext(context));
|
|
49
73
|
return dates.parseCalendarDate(value.slice(0, 10), pickerContext(context));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"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":"AAAA,SAA2B,KAAK,QAAQ,aAAa;AAOrD,OAAO,MAAM,aAAa,GAAI,OAAqB,KAAmB;EACpE,YAAY,EAAE,CAAC;EACf,GAAG;AACL,CAAC,CAAC;AAEF,OAAO,MAAM,gBAAgB,GAAI,KAAa,IAAc,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC;AAEzG,OAAO,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,OAAqB,KAAa,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;;AAEhI;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,UAAU,GAAI,OAAqB,IAAe;EAC7D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;EACrC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,OAAO;IAAE,QAAQ,EAAE;EAAM,CAAC,CAAC;EAC7F,OAAO,KAAK,CAAC,IAAI,CAAC;IAAE,MAAM,EAAE;EAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9F,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,eAAe,GAAG,CAAC,YAA+B,EAAE,SAAoC,KACnG,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;AAE7E,OAAO,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,OAAqB,KAAsC;EAC/F,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EACtE,OAAO;IAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;EAAE,CAAC;AACzD,CAAC;AAED,OAAO,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,OAAqB,KAAW;EACrF,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW;EACtE,IAAI,OAAO,EAAE,QAAQ,EAAE;IACrB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;MAAE,cAAc,EAAE;IAAa,CAAC,CAAC,CAAC;EAC1G;EACA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;AACrC,CAAC;AAED,OAAO,MAAM,cAAc,GAAG,CAAC,KAAgC,EAAE,OAAqB,KAAW;EAC/F,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EACtD,OAAO,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED,OAAO,MAAM,WAAW,GAAG,CAAC,KAAgC,EAAE,OAAqB,KACjF,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AAEtF,MAAM,kBAAkB,GAAI,KAAa,IAAa;EACpD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;EACvD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;EAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;EAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACtD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAC1D,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,EAAE;AACtD,CAAC;AAED,OAAO,MAAM,aAAa,GAAG,CAAC,KAAgC,EAAE,OAAqB,KAAa;EAChG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;EACrB,IAAI,OAAO,EAAE,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;EAC3G,OAAO,kBAAkB,CAAC,KAAK,CAAC;AAClC,CAAC;AAED,OAAO,MAAM,aAAa,GAAG,CAAC,KAAgC,EAAE,OAAqB,KAAqC;EACxH,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC;EAC3C,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;EAC/C,OAAO;IAAE,IAAI;IAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;EAAE,CAAC;AACzC,CAAC;AAED,OAAO,MAAM,cAAc,GAAI,KAAa,IAAc;EACxD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK;EAC9C,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;EACrD,OAAO,KAAK,IAAK,CAAC,IAAI,KAAK,IAAK,EAAE,IAAI,OAAO,IAAK,CAAC,IAAI,OAAO,IAAK,EAAE;AACvE,CAAC;AAED,OAAO,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,OAAqB,KAAoB;EACnG,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI;EACtB,MAAM,YAAY,GAAG,IAAI,IAAI,OAAO;EACpC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,OAAO,IAAI;EAC9C,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,YAAY,EAAE;EACvC,IAAI,OAAO,EAAE,QAAQ,EAAE;IACrB,OAAO,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;MAAE,cAAc,EAAE;IAAa,CAAC,CAAC;EAChG;EACA,OAAO,KAAK;AACd,CAAC;AAED,OAAO,MAAM,mBAAmB,GAAG,CAAC,KAAgC,EAAE,OAAqB,KACzF,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AAElE,OAAO,MAAM,kBAAkB,GAAI,KAAa,IAAa;EAC3D,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;EACnD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;EAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;EAC9D,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAC9E,CAAC;AAED,OAAO,MAAM,eAAe,GAAI,KAAa,IAAa;EACxD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;EACnD,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACjF,CAAC;AAED,OAAO,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,GAAW,KACrD,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;EAAE,KAAK,EAAE,GAAG;EAAE,GAAG,EAAE;AAAM,CAAC,GAAG;EAAE,KAAK;EAAE;AAAI,CAAC;AAE5E,OAAO,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAE,OAAsB,KAAqB;EAC7F,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK;EACvD,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;AAC3C,CAAC;AAED,OAAO,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAqB,KACxD,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;AAE7E,OAAO,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,KAAqB,KAAc,GAAG,KAAK,KAAK,CAAC,KAAK,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG;AAEpH,OAAO,MAAM,2BAA2B,GAAG,CAAC,KAAqB,EAAE,OAAqB,KAAa;EACnG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE;EACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;EAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC;EACtE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;EAC/D,OAAO,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE;AACjD,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"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\n/**\n * Milliseconds from `now` until the next calendar day starts in the picker's\n * time zone, so a panel left open past midnight moves its today mark on time.\n * The next day's start is resolved from its date key: where a DST change skips\n * or repeats midnight, the day starts at its first existing instant.\n */\nexport const msUntilNextDay = (now: Date, context?: DateContext): number => {\n const merged = pickerContext(context);\n const { timeZone } = merged;\n const next = timeZone\n ? Date.parse(\n dates.zonedDateTimeToInstant(dates.addZoned(`${dateKey(now, merged)}T00:00`, { timeZone, days: 1 }), timeZone, {\n disambiguation: \"compatible\",\n }),\n )\n : dates.addDays(now, 1, merged).getTime();\n const delay = next - now.getTime();\n // The timer re-arms after every tick, so it must never fire at once. Should a\n // zone's rules still put the next day behind `now`, look again in a minute,\n // the finest unit the pickers show.\n return delay > 0 ? delay : 60_000;\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,63 @@
|
|
|
1
|
+
import { i18n } from "@k2b/stdlib";
|
|
2
|
+
import { useLocale } from "../intl/locale";
|
|
3
|
+
const fileDropMessages = i18n.define({
|
|
4
|
+
baseLocale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
en: {
|
|
7
|
+
fileTypeNotAccepted: "File type not accepted",
|
|
8
|
+
fileDropDropped: ({
|
|
9
|
+
count
|
|
10
|
+
}) => `Dropped ${count} files`,
|
|
11
|
+
fileDropDroppedOne: ({
|
|
12
|
+
name
|
|
13
|
+
}) => `Dropped ${name}`,
|
|
14
|
+
fileDropMore: ({
|
|
15
|
+
count
|
|
16
|
+
}) => `and ${count} more`,
|
|
17
|
+
fileDropRejectedType: ({
|
|
18
|
+
names
|
|
19
|
+
}) => `Not added, this file type is not accepted here: ${names}`,
|
|
20
|
+
fileDropRejectedSize: ({
|
|
21
|
+
names,
|
|
22
|
+
limit
|
|
23
|
+
}) => `Not added, larger than ${limit}: ${names}`,
|
|
24
|
+
fileDropRejectedCount: ({
|
|
25
|
+
names,
|
|
26
|
+
max
|
|
27
|
+
}) => max === 1 ? `Only one file at a time. Not added: ${names}` : `Up to ${max} files at a time. Not added: ${names}`
|
|
28
|
+
},
|
|
29
|
+
de: {
|
|
30
|
+
fileTypeNotAccepted: "Dateityp wird nicht akzeptiert",
|
|
31
|
+
fileDropDropped: ({
|
|
32
|
+
count
|
|
33
|
+
}) => `${count} Dateien abgelegt`,
|
|
34
|
+
fileDropDroppedOne: ({
|
|
35
|
+
name
|
|
36
|
+
}) => `${name} abgelegt`,
|
|
37
|
+
fileDropMore: ({
|
|
38
|
+
count
|
|
39
|
+
}) => `und ${count} weitere`,
|
|
40
|
+
fileDropRejectedType: ({
|
|
41
|
+
names
|
|
42
|
+
}) => `Nicht hinzugefügt, dieser Dateityp wird hier nicht angenommen: ${names}`,
|
|
43
|
+
fileDropRejectedSize: ({
|
|
44
|
+
names,
|
|
45
|
+
limit
|
|
46
|
+
}) => `Nicht hinzugefügt, größer als ${limit}: ${names}`,
|
|
47
|
+
fileDropRejectedCount: ({
|
|
48
|
+
names,
|
|
49
|
+
max
|
|
50
|
+
}) => max === 1 ? `Nur eine Datei auf einmal. Nicht hinzugefügt: ${names}` : `Höchstens ${max} Dateien auf einmal. Nicht hinzugefügt: ${names}`
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
/** Resolved from the inherited render locale. */
|
|
55
|
+
export const useFileDropMessages = () => {
|
|
56
|
+
const locale = useLocale();
|
|
57
|
+
return () => fileDropMessages.resolve([locale()]).t;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/** Imperative UI inherits the document locale when no locale is supplied. */
|
|
61
|
+
export const resolveFileDropMessages = locale => fileDropMessages.resolve([locale ?? (typeof document === "undefined" ? fileDropMessages.baseLocale : document.documentElement.lang)]).t;
|
|
62
|
+
export const checkFileDropMessages = () => fileDropMessages.check();
|
|
63
|
+
//# sourceMappingURL=file-drop-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/file-drop-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst fileDropMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n fileTypeNotAccepted: \"File type not accepted\",\n fileDropDropped: ({ count }: { count: number }) => `Dropped ${count} files`,\n fileDropDroppedOne: ({ name }: { name: string }) => `Dropped ${name}`,\n fileDropMore: ({ count }: { count: number }) => `and ${count} more`,\n fileDropRejectedType: ({ names }: { names: string }) => `Not added, this file type is not accepted here: ${names}`,\n fileDropRejectedSize: ({ names, limit }: { names: string; limit: string }) => `Not added, larger than ${limit}: ${names}`,\n fileDropRejectedCount: ({ names, max }: { names: string; max: number }) =>\n max === 1 ? `Only one file at a time. Not added: ${names}` : `Up to ${max} files at a time. Not added: ${names}`,\n },\n de: {\n fileTypeNotAccepted: \"Dateityp wird nicht akzeptiert\",\n fileDropDropped: ({ count }: { count: number }) => `${count} Dateien abgelegt`,\n fileDropDroppedOne: ({ name }: { name: string }) => `${name} abgelegt`,\n fileDropMore: ({ count }: { count: number }) => `und ${count} weitere`,\n fileDropRejectedType: ({ names }: { names: string }) => `Nicht hinzugefügt, dieser Dateityp wird hier nicht angenommen: ${names}`,\n fileDropRejectedSize: ({ names, limit }: { names: string; limit: string }) => `Nicht hinzugefügt, größer als ${limit}: ${names}`,\n fileDropRejectedCount: ({ names, max }: { names: string; max: number }) =>\n max === 1\n ? `Nur eine Datei auf einmal. Nicht hinzugefügt: ${names}`\n : `Höchstens ${max} Dateien auf einmal. Nicht hinzugefügt: ${names}`,\n },\n },\n});\n\nexport type FileDropMessages = ReturnType<(typeof fileDropMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useFileDropMessages = (): (() => FileDropMessages) => {\n const locale = useLocale();\n return () => fileDropMessages.resolve([locale()]).t;\n};\n\n/** Imperative UI inherits the document locale when no locale is supplied. */\nexport const resolveFileDropMessages = (locale?: string): FileDropMessages =>\n fileDropMessages.resolve([locale ?? (typeof document === \"undefined\" ? fileDropMessages.baseLocale : document.documentElement.lang)]).t;\n\nexport const checkFileDropMessages = () => fileDropMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;EACnC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,mBAAmB,EAAE,wBAAwB;MAC7C,eAAe,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,WAAW,KAAK,QAAQ;MAC3E,kBAAkB,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,WAAW,IAAI,EAAE;MACrE,YAAY,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,OAAO,KAAK,OAAO;MACnE,oBAAoB,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,mDAAmD,KAAK,EAAE;MAClH,oBAAoB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAwC,CAAC,KAAK,0BAA0B,KAAK,KAAK,KAAK,EAAE;MACzH,qBAAqB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAoC,CAAC,KACpE,GAAG,KAAK,CAAC,GAAG,uCAAuC,KAAK,EAAE,GAAG,SAAS,GAAG,gCAAgC,KAAK;IAClH,CAAC;IACD,EAAE,EAAE;MACF,mBAAmB,EAAE,gCAAgC;MACrD,eAAe,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,GAAG,KAAK,mBAAmB;MAC9E,kBAAkB,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,GAAG,IAAI,WAAW;MACtE,YAAY,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,OAAO,KAAK,UAAU;MACtE,oBAAoB,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,kEAAkE,KAAK,EAAE;MACjI,oBAAoB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAwC,CAAC,KAAK,iCAAiC,KAAK,KAAK,KAAK,EAAE;MAChI,qBAAqB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAoC,CAAC,KACpE,GAAG,KAAK,CAAC,GACL,iDAAiD,KAAK,EAAE,GACxD,aAAa,GAAG,2CAA2C,KAAK;IACxE;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,mBAAmB,GAAG,MAAgC;EACjE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;;AAED;AACA,OAAO,MAAM,uBAAuB,GAAI,MAAe,IACrD,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG,gBAAgB,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzI,OAAO,MAAM,qBAAqB,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["inputs/file-drop.ts"],"sourcesContent":["import { text } from \"@k2b/stdlib\";\nimport { checkMimeType } from \"@k2b/stdlib/browser\";\nimport { type Accessor, createSignal } from \"solid-js\";\nimport { announce } from \"../feedback/announce\";\nimport { toast } from \"../feedback/toast\";\nimport type { UiMessages } from \"../intl/messages\";\n\nexport type FileDropRejection = {\n file: File;\n /** `type` misses `accept`, `size` exceeds `maxSize`, `count` is past `maxFiles` or the single file of `multiple={false}`. */\n reason: \"type\" | \"size\" | \"count\";\n};\n\nexport type FileDropDetails = {\n /** The drop's data, readable only while `onDrop` runs synchronously; read folder entries before the first `await`. */\n dataTransfer: DataTransfer;\n /** Files left out by `accept`, `maxSize`, or the file count; the user has already been told. */\n rejected: readonly FileDropRejection[];\n};\n\nexport type FileDropOptions = {\n /** One sentence that says what dropping does here, such as \"Drop to attach to the message\". */\n label: string;\n /** `<input accept>` syntax, such as `\"image/*,.pdf\"`. */\n accept?: string;\n /** Defaults to `true`; `false` takes the first fitting file. */\n multiple?: boolean;\n /** The most files one drop hands over. */\n maxFiles?: number;\n /** The largest file in bytes. */\n maxSize?: number;\n disabled?: boolean;\n /**\n * Called synchronously in the drop with the files that fit. `files` is empty only when the drop carried no file\n * objects at all, as some engines hand over dropped folders; `details.dataTransfer.items` still has their entries.\n */\n onDrop: (files: File[], details: FileDropDetails) => void | Promise<void>;\n};\n\nexport type FileDropTargetEntry = {\n options: FileDropOptions;\n messages: () => UiMessages;\n locale: () => string;\n /** Set for regions: the area the overlay covers. Specific targets are keyed by their element. */\n region?: () => Element | undefined;\n /** Set for regions: where the target itself is rendered; a region whose host is hidden takes no drops. */\n host?: () => Element | undefined;\n};\n\nexport type FileDropHover = { entry: FileDropTargetEntry; element: Element; invalid: boolean };\n\nexport type FileDropSession = {\n /** Regions that show their overlay during this drag: eligible, visible, and not inside another shown region. */\n shown: readonly FileDropTargetEntry[];\n hover: FileDropHover | null;\n};\n\nexport type FileDropEngine = {\n session: Accessor<FileDropSession | null>;\n /** Changes on every drag movement, so overlays can follow a region that moved or resized. */\n frame: Accessor<number>;\n addRegion: (entry: FileDropTargetEntry) => () => void;\n setTarget: (element: Element, entry: FileDropTargetEntry) => void;\n};\n\n/** The marker a hovered specific target carries for its ring; regions show their own overlay instead. */\nexport const FILE_DROP_ATTRIBUTE = \"data-file-drop\";\n\n/** Where a region without `for` looks for its area: the nearest dialog, workspace detail, or workspace main area. */\nexport const FILE_DROP_DEFAULT_REGION = \"dialog, .k2b-app-workspace__detail, .k2b-app-workspace__main\";\n\n/**\n * The type every drag that starts in a page carries. Such a drag holds page content, never files from outside, even\n * an image that carries one. Marking the drag itself leaves nothing behind when it never reports its end, as when its\n * start is cancelled or its source is removed.\n */\nconst PAGE_DRAG_TYPE = \"application/x-k2b-page-drag\";\n\n/** How long after the last drag event a pointer move means the drag ended; a drag over the page repeats them sooner. */\nconst DRAG_SILENCE_MS = 600;\n\nconst engines = new WeakMap<Document, FileDropEngine>();\n\nconst isFileDrag = (event: DragEvent) => {\n const types = Array.from(event.dataTransfer?.types ?? []);\n return types.includes(\"Files\") && !types.includes(PAGE_DRAG_TYPE);\n};\n\nconst elementOf = (target: EventTarget | null): Element | null =>\n target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n\nconst isModal = (dialog: Element) => {\n try {\n return dialog.matches(\":modal\");\n } catch {\n // An engine without `:modal` has no modal dialogs to defer to.\n return false;\n }\n};\n\n/**\n * The topmost modal dialog. Everything outside of it is inert, so a drag over the page lands inside it; only a drag\n * over other top-layer content falls back to the last modal dialog in the document.\n */\nconst topModal = (doc: Document, target: EventTarget | null): Element | null => {\n for (let dialog = elementOf(target)?.closest(\"dialog\"); dialog; dialog = dialog.parentElement?.closest(\"dialog\"))\n if (isModal(dialog)) return dialog;\n return Array.from(doc.querySelectorAll(\"dialog[open]\")).filter(isModal).at(-1) ?? null;\n};\n\n/** Sorts dropped files into the ones a target takes and the ones it leaves out, in drop order. */\nexport const partitionDroppedFiles = (\n files: readonly File[],\n options: Pick<FileDropOptions, \"accept\" | \"multiple\" | \"maxFiles\" | \"maxSize\">,\n): { accepted: File[]; rejected: FileDropRejection[] } => {\n const limit = options.multiple === false ? 1 : (options.maxFiles ?? Number.POSITIVE_INFINITY);\n const accepted: File[] = [];\n const rejected: FileDropRejection[] = [];\n for (const file of files) {\n if (options.accept && !checkMimeType(file, options.accept)) rejected.push({ file, reason: \"type\" });\n else if (options.maxSize !== undefined && file.size > options.maxSize) rejected.push({ file, reason: \"size\" });\n else if (accepted.length >= limit) rejected.push({ file, reason: \"count\" });\n else accepted.push(file);\n }\n return { accepted, rejected };\n};\n\n/**\n * During a drag only the types are readable, and only in some engines. A drag is refused when none of them can fit.\n * An extension in `accept` matches by file name, and systems report differing types for one extension (a `.csv` may be\n * `application/vnd.ms-excel`), so with one the drop decides.\n */\nexport const refusesDraggedTypes = (types: readonly string[], accept: string | undefined): boolean => {\n if (!accept || accept.split(\",\").some((entry) => entry.trim().startsWith(\".\"))) return false;\n return types.length > 0 && types.every((type) => type !== \"\" && !checkMimeType(type, accept));\n};\n\nconst invalidDrag = (event: DragEvent, options: FileDropOptions) =>\n refusesDraggedTypes(\n Array.from(event.dataTransfer?.items ?? [])\n .filter((item) => item.kind === \"file\")\n .map((item) => item.type),\n options.accept,\n );\n\nconst MAX_NAMES = 3;\nconst nameList = (files: readonly File[], messages: UiMessages) => {\n const names = files.slice(0, MAX_NAMES).map((file) => file.name);\n return files.length > MAX_NAMES ? `${names.join(\", \")} ${messages.fileDropMore({ count: files.length - MAX_NAMES })}` : names.join(\", \");\n};\n\nexport const fileDropRejectionMessage = (\n rejected: readonly FileDropRejection[],\n options: Pick<FileDropOptions, \"multiple\" | \"maxFiles\" | \"maxSize\">,\n messages: UiMessages,\n locale: string,\n): string => {\n const lines: string[] = [];\n const of = (reason: FileDropRejection[\"reason\"]) => rejected.filter((entry) => entry.reason === reason).map((entry) => entry.file);\n const type = of(\"type\");\n const size = of(\"size\");\n const count = of(\"count\");\n if (type.length) lines.push(messages.fileDropRejectedType({ names: nameList(type, messages) }));\n if (size.length)\n lines.push(\n messages.fileDropRejectedSize({ names: nameList(size, messages), limit: text.pprintBytes(options.maxSize ?? 0, { locale }) }),\n );\n if (count.length)\n lines.push(\n messages.fileDropRejectedCount({ names: nameList(count, messages), max: options.multiple === false ? 1 : (options.maxFiles ?? 1) }),\n );\n return lines.join(\"\\n\");\n};\n\nconst createEngine = (doc: Document): FileDropEngine => {\n const view = doc.defaultView;\n const regions = new Set<FileDropTargetEntry>();\n const targets = new WeakMap<Element, FileDropTargetEntry>();\n const [session, setSession] = createSignal<FileDropSession | null>(null);\n const [frame, setFrame] = createSignal(0);\n /** Elements the drag has entered and not yet left; the drag is over the window while any remains. */\n const entered = new Set<EventTarget>();\n let lastDragEvent = 0;\n let marked: Element | null = null;\n let frameRequest = 0;\n\n const mark = (hover: FileDropHover | null) => {\n if (marked && marked !== hover?.element) marked.removeAttribute(FILE_DROP_ATTRIBUTE);\n marked = null;\n if (!hover || hover.entry.region) return;\n marked = hover.element;\n marked.setAttribute(FILE_DROP_ATTRIBUTE, hover.invalid ? \"invalid\" : \"over\");\n };\n\n const regionElement = (entry: FileDropTargetEntry) => {\n const element = entry.region?.();\n return element?.isConnected ? element : undefined;\n };\n\n /** Whether nothing between the target's host and its area hides it, as a dialog stack hides its lower levels. */\n const displayed = (host: Element | undefined, area: Element) => {\n for (let element: Element | null | undefined = host; element && element !== area; element = element.parentElement)\n if (view?.getComputedStyle(element).display === \"none\") return false;\n return true;\n };\n\n /** A region takes part when it is enabled, displayed, and not behind a modal dialog it is not inside of. */\n const eligible = (entry: FileDropTargetEntry, modal: Element | null) => {\n const element = regionElement(entry);\n if (!element || entry.options.disabled) return false;\n return (!modal || modal.contains(element)) && displayed(entry.host?.(), element);\n };\n const rendered = (element: Element) => element === doc.documentElement || element.getClientRects().length > 0;\n\n const begin = (target: EventTarget | null) => {\n const modal = topModal(doc, target);\n const candidates = [...regions].filter((entry) => eligible(entry, modal) && rendered(regionElement(entry)!));\n // The latest region on an element replaces earlier ones; a region inside another shown one acts as a specific target.\n const byElement = new Map<Element, FileDropTargetEntry>();\n for (const entry of candidates) byElement.set(regionElement(entry)!, entry);\n const shown = [...byElement].filter(\n ([element]) => ![...byElement.keys()].some((other) => other !== element && other.contains(element)),\n );\n setSession({ shown: shown.map(([, entry]) => entry), hover: null });\n const first = shown[0]?.[1];\n if (first) announce(first.options.label);\n };\n\n const end = () => {\n entered.clear();\n mark(null);\n if (session()) setSession(null);\n };\n\n const resolve = (target: EventTarget | null): { entry: FileDropTargetEntry; element: Element } | null => {\n const modal = topModal(doc, target);\n for (let element = elementOf(target); element; element = element.parentElement) {\n const specific = targets.get(element);\n if (specific && !specific.options.disabled) return { entry: specific, element };\n let region: FileDropTargetEntry | undefined;\n for (const entry of regions) if (regionElement(entry) === element && eligible(entry, modal)) region = entry;\n if (region) return { entry: region, element };\n }\n return null;\n };\n\n const hoverFrom = (event: DragEvent) => {\n const current = session();\n if (!current) return null;\n const found = resolve(event.target);\n const hover = found ? { ...found, invalid: invalidDrag(event, found.entry.options) } : null;\n const previous = current.hover;\n if (previous?.entry !== hover?.entry || previous?.element !== hover?.element || previous?.invalid !== hover?.invalid) {\n mark(hover);\n setSession({ ...current, hover });\n }\n return hover;\n };\n\n /** Over a page with a region, a file never falls through to the browser, which would open it and leave the page. */\n const guarding = () => [...regions].some((entry) => regionElement(entry));\n\n const accept = (event: DragEvent, hover: FileDropHover | null) => {\n if (!hover && !guarding()) return;\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = hover && !hover.invalid ? \"copy\" : \"none\";\n };\n\n const requestFrame = () => {\n if (frameRequest || !view) return;\n frameRequest = view.requestAnimationFrame(() => {\n frameRequest = 0;\n setFrame((value) => value + 1);\n });\n };\n\n const deliver = (entry: FileDropTargetEntry, dataTransfer: DataTransfer) => {\n const { options } = entry;\n const files = Array.from(dataTransfer.files);\n const { accepted, rejected } = partitionDroppedFiles(files, options);\n const messages = entry.messages();\n if (rejected.length) toast.error(fileDropRejectionMessage(rejected, options, messages, entry.locale()));\n if (!accepted.length && files.length) return;\n if (accepted.length)\n announce(\n accepted.length === 1\n ? messages.fileDropDroppedOne({ name: accepted[0]!.name })\n : messages.fileDropDropped({ count: accepted.length }),\n );\n void options.onDrop(accepted, { dataTransfer, rejected });\n };\n\n const listeners: Record<string, (event: Event) => void> = {\n dragstart: (event) => {\n (event as DragEvent).dataTransfer?.setData(PAGE_DRAG_TYPE, \"\");\n },\n dragenter: (event) => {\n const drag = event as DragEvent;\n if (!isFileDrag(drag)) return;\n lastDragEvent = event.timeStamp;\n if (event.target) entered.add(event.target);\n if (!session()) begin(event.target);\n accept(drag, hoverFrom(drag));\n },\n dragover: (event) => {\n const drag = event as DragEvent;\n if (!isFileDrag(drag)) return;\n lastDragEvent = event.timeStamp;\n // An engine may skip the first dragenter; the drag still counts as over the window.\n if (!session()) {\n if (event.target) entered.add(event.target);\n begin(event.target);\n }\n accept(drag, hoverFrom(drag));\n requestFrame();\n },\n dragleave: (event) => {\n if (!session()) return;\n if (event.target) entered.delete(event.target);\n // An element removed during the drag never reports leaving.\n for (const target of entered) if (target instanceof Node && !target.isConnected) entered.delete(target);\n if (entered.size === 0) end();\n },\n drop: (event) => {\n const drag = event as DragEvent;\n if (!isFileDrag(drag)) return;\n const found = resolve(event.target);\n end();\n if (!found) {\n if (guarding()) event.preventDefault();\n return;\n }\n // The most specific target owns the drop; editors and other handlers below it never see the files.\n event.preventDefault();\n event.stopPropagation();\n if (drag.dataTransfer) deliver(found.entry, drag.dataTransfer);\n },\n keydown: (event) => {\n if ((event as KeyboardEvent).key === \"Escape\" && session()) end();\n },\n // Engines send no pointer moves during a drag: one long after the last drag event means the drag ended somewhere the\n // page did not see. One right after it belongs to another pointer, such as a second finger on a touch screen.\n pointermove: (event) => {\n if (session() && event.timeStamp - lastDragEvent > DRAG_SILENCE_MS) end();\n },\n visibilitychange: () => {\n if (doc.visibilityState === \"hidden\") end();\n },\n };\n\n let installed = false;\n const install = () => {\n if (installed || !view) return;\n installed = true;\n for (const [type, listener] of Object.entries(listeners))\n (type === \"visibilitychange\" ? doc : view).addEventListener(type, listener, { capture: true });\n };\n\n return {\n session,\n frame,\n addRegion: (entry) => {\n install();\n regions.add(entry);\n return () => {\n regions.delete(entry);\n const current = session();\n if (current?.hover?.entry === entry) {\n mark(null);\n setSession({ ...current, hover: null });\n }\n };\n },\n setTarget: (element, entry) => {\n install();\n targets.set(element, entry);\n },\n };\n};\n\n/**\n * The document an element lives in. A freshly rendered element still belongs to the inert document of the template it\n * was cloned from; until it is inserted, that is the page's document.\n */\nexport const liveDocument = (element: Element): Document => (element.ownerDocument.defaultView ? element.ownerDocument : document);\n\n/** The one drag tracker of a document, shared by every drop target in it. */\nexport const fileDropEngine = (doc: Document): FileDropEngine => {\n let engine = engines.get(doc);\n if (!engine) {\n engine = createEngine(doc);\n engines.set(doc, engine);\n }\n return engine;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/file-drop.ts"],"sourcesContent":["import { text } from \"@k2b/stdlib\";\nimport { checkMimeType } from \"@k2b/stdlib/browser\";\nimport { type Accessor, createSignal } from \"solid-js\";\nimport { announce } from \"../feedback/announce\";\nimport { toast } from \"../feedback/toast\";\nimport type { FileDropMessages } from \"./file-drop-messages\";\n\nexport type FileDropRejection = {\n file: File;\n /** `type` misses `accept`, `size` exceeds `maxSize`, `count` is past `maxFiles` or the single file of `multiple={false}`. */\n reason: \"type\" | \"size\" | \"count\";\n};\n\nexport type FileDropDetails = {\n /** The drop's data, readable only while `onDrop` runs synchronously; read folder entries before the first `await`. */\n dataTransfer: DataTransfer;\n /** Files left out by `accept`, `maxSize`, or the file count; the user has already been told. */\n rejected: readonly FileDropRejection[];\n};\n\nexport type FileDropOptions = {\n /** One sentence that says what dropping does here, such as \"Drop to attach to the message\". */\n label: string;\n /** `<input accept>` syntax, such as `\"image/*,.pdf\"`. */\n accept?: string;\n /** Defaults to `true`; `false` takes the first fitting file. */\n multiple?: boolean;\n /** The most files one drop hands over. */\n maxFiles?: number;\n /** The largest file in bytes. */\n maxSize?: number;\n disabled?: boolean;\n /**\n * Called synchronously in the drop with the files that fit. `files` is empty only when the drop carried no file\n * objects at all, as some engines hand over dropped folders; `details.dataTransfer.items` still has their entries.\n */\n onDrop: (files: File[], details: FileDropDetails) => void | Promise<void>;\n};\n\nexport type FileDropTargetEntry = {\n options: FileDropOptions;\n messages: () => FileDropMessages;\n locale: () => string;\n /** Set for regions: the area the overlay covers. Specific targets are keyed by their element. */\n region?: () => Element | undefined;\n /** Set for regions: where the target itself is rendered; a region whose host is hidden takes no drops. */\n host?: () => Element | undefined;\n};\n\nexport type FileDropHover = { entry: FileDropTargetEntry; element: Element; invalid: boolean };\n\nexport type FileDropSession = {\n /** Regions that show their overlay during this drag: eligible, visible, and not inside another shown region. */\n shown: readonly FileDropTargetEntry[];\n hover: FileDropHover | null;\n};\n\nexport type FileDropEngine = {\n session: Accessor<FileDropSession | null>;\n /** Changes on every drag movement, so overlays can follow a region that moved or resized. */\n frame: Accessor<number>;\n addRegion: (entry: FileDropTargetEntry) => () => void;\n setTarget: (element: Element, entry: FileDropTargetEntry) => void;\n};\n\n/** The marker a hovered specific target carries for its ring; regions show their own overlay instead. */\nexport const FILE_DROP_ATTRIBUTE = \"data-file-drop\";\n\n/** Where a region without `for` looks for its area: the nearest dialog, workspace detail, or workspace main area. */\nexport const FILE_DROP_DEFAULT_REGION = \"dialog, .k2b-app-workspace__detail, .k2b-app-workspace__main\";\n\n/**\n * The type every drag that starts in a page carries. Such a drag holds page content, never files from outside, even\n * an image that carries one. Marking the drag itself leaves nothing behind when it never reports its end, as when its\n * start is cancelled or its source is removed.\n */\nconst PAGE_DRAG_TYPE = \"application/x-k2b-page-drag\";\n\n/** How long after the last drag event a pointer move means the drag ended; a drag over the page repeats them sooner. */\nconst DRAG_SILENCE_MS = 600;\n\nconst engines = new WeakMap<Document, FileDropEngine>();\n\nconst isFileDrag = (event: DragEvent) => {\n const types = Array.from(event.dataTransfer?.types ?? []);\n return types.includes(\"Files\") && !types.includes(PAGE_DRAG_TYPE);\n};\n\nconst elementOf = (target: EventTarget | null): Element | null =>\n target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n\nconst isModal = (dialog: Element) => {\n try {\n return dialog.matches(\":modal\");\n } catch {\n // An engine without `:modal` has no modal dialogs to defer to.\n return false;\n }\n};\n\n/**\n * The topmost modal dialog. Everything outside of it is inert, so a drag over the page lands inside it; only a drag\n * over other top-layer content falls back to the last modal dialog in the document.\n */\nconst topModal = (doc: Document, target: EventTarget | null): Element | null => {\n for (let dialog = elementOf(target)?.closest(\"dialog\"); dialog; dialog = dialog.parentElement?.closest(\"dialog\"))\n if (isModal(dialog)) return dialog;\n return Array.from(doc.querySelectorAll(\"dialog[open]\")).filter(isModal).at(-1) ?? null;\n};\n\n/** Sorts dropped files into the ones a target takes and the ones it leaves out, in drop order. */\nexport const partitionDroppedFiles = (\n files: readonly File[],\n options: Pick<FileDropOptions, \"accept\" | \"multiple\" | \"maxFiles\" | \"maxSize\">,\n): { accepted: File[]; rejected: FileDropRejection[] } => {\n const limit = options.multiple === false ? 1 : (options.maxFiles ?? Number.POSITIVE_INFINITY);\n const accepted: File[] = [];\n const rejected: FileDropRejection[] = [];\n for (const file of files) {\n if (options.accept && !checkMimeType(file, options.accept)) rejected.push({ file, reason: \"type\" });\n else if (options.maxSize !== undefined && file.size > options.maxSize) rejected.push({ file, reason: \"size\" });\n else if (accepted.length >= limit) rejected.push({ file, reason: \"count\" });\n else accepted.push(file);\n }\n return { accepted, rejected };\n};\n\n/**\n * During a drag only the types are readable, and only in some engines. A drag is refused when none of them can fit.\n * An extension in `accept` matches by file name, and systems report differing types for one extension (a `.csv` may be\n * `application/vnd.ms-excel`), so with one the drop decides.\n */\nexport const refusesDraggedTypes = (types: readonly string[], accept: string | undefined): boolean => {\n if (!accept || accept.split(\",\").some((entry) => entry.trim().startsWith(\".\"))) return false;\n return types.length > 0 && types.every((type) => type !== \"\" && !checkMimeType(type, accept));\n};\n\nconst invalidDrag = (event: DragEvent, options: FileDropOptions) =>\n refusesDraggedTypes(\n Array.from(event.dataTransfer?.items ?? [])\n .filter((item) => item.kind === \"file\")\n .map((item) => item.type),\n options.accept,\n );\n\nconst MAX_NAMES = 3;\nconst nameList = (files: readonly File[], messages: FileDropMessages) => {\n const names = files.slice(0, MAX_NAMES).map((file) => file.name);\n return files.length > MAX_NAMES ? `${names.join(\", \")} ${messages.fileDropMore({ count: files.length - MAX_NAMES })}` : names.join(\", \");\n};\n\nexport const fileDropRejectionMessage = (\n rejected: readonly FileDropRejection[],\n options: Pick<FileDropOptions, \"multiple\" | \"maxFiles\" | \"maxSize\">,\n messages: FileDropMessages,\n locale: string,\n): string => {\n const lines: string[] = [];\n const of = (reason: FileDropRejection[\"reason\"]) => rejected.filter((entry) => entry.reason === reason).map((entry) => entry.file);\n const type = of(\"type\");\n const size = of(\"size\");\n const count = of(\"count\");\n if (type.length) lines.push(messages.fileDropRejectedType({ names: nameList(type, messages) }));\n if (size.length)\n lines.push(\n messages.fileDropRejectedSize({ names: nameList(size, messages), limit: text.pprintBytes(options.maxSize ?? 0, { locale }) }),\n );\n if (count.length)\n lines.push(\n messages.fileDropRejectedCount({ names: nameList(count, messages), max: options.multiple === false ? 1 : (options.maxFiles ?? 1) }),\n );\n return lines.join(\"\\n\");\n};\n\nconst createEngine = (doc: Document): FileDropEngine => {\n const view = doc.defaultView;\n const regions = new Set<FileDropTargetEntry>();\n const targets = new WeakMap<Element, FileDropTargetEntry>();\n const [session, setSession] = createSignal<FileDropSession | null>(null);\n const [frame, setFrame] = createSignal(0);\n /** Elements the drag has entered and not yet left; the drag is over the window while any remains. */\n const entered = new Set<EventTarget>();\n let lastDragEvent = 0;\n let marked: Element | null = null;\n let frameRequest = 0;\n\n const mark = (hover: FileDropHover | null) => {\n if (marked && marked !== hover?.element) marked.removeAttribute(FILE_DROP_ATTRIBUTE);\n marked = null;\n if (!hover || hover.entry.region) return;\n marked = hover.element;\n marked.setAttribute(FILE_DROP_ATTRIBUTE, hover.invalid ? \"invalid\" : \"over\");\n };\n\n const regionElement = (entry: FileDropTargetEntry) => {\n const element = entry.region?.();\n return element?.isConnected ? element : undefined;\n };\n\n /** Whether nothing between the target's host and its area hides it, as a dialog stack hides its lower levels. */\n const displayed = (host: Element | undefined, area: Element) => {\n for (let element: Element | null | undefined = host; element && element !== area; element = element.parentElement)\n if (view?.getComputedStyle(element).display === \"none\") return false;\n return true;\n };\n\n /** A region takes part when it is enabled, displayed, and not behind a modal dialog it is not inside of. */\n const eligible = (entry: FileDropTargetEntry, modal: Element | null) => {\n const element = regionElement(entry);\n if (!element || entry.options.disabled) return false;\n return (!modal || modal.contains(element)) && displayed(entry.host?.(), element);\n };\n const rendered = (element: Element) => element === doc.documentElement || element.getClientRects().length > 0;\n\n const begin = (target: EventTarget | null) => {\n const modal = topModal(doc, target);\n const candidates = [...regions].filter((entry) => eligible(entry, modal) && rendered(regionElement(entry)!));\n // The latest region on an element replaces earlier ones; a region inside another shown one acts as a specific target.\n const byElement = new Map<Element, FileDropTargetEntry>();\n for (const entry of candidates) byElement.set(regionElement(entry)!, entry);\n const shown = [...byElement].filter(\n ([element]) => ![...byElement.keys()].some((other) => other !== element && other.contains(element)),\n );\n setSession({ shown: shown.map(([, entry]) => entry), hover: null });\n const first = shown[0]?.[1];\n if (first) announce(first.options.label);\n };\n\n const end = () => {\n entered.clear();\n mark(null);\n if (session()) setSession(null);\n };\n\n const resolve = (target: EventTarget | null): { entry: FileDropTargetEntry; element: Element } | null => {\n const modal = topModal(doc, target);\n for (let element = elementOf(target); element; element = element.parentElement) {\n const specific = targets.get(element);\n if (specific && !specific.options.disabled) return { entry: specific, element };\n let region: FileDropTargetEntry | undefined;\n for (const entry of regions) if (regionElement(entry) === element && eligible(entry, modal)) region = entry;\n if (region) return { entry: region, element };\n }\n return null;\n };\n\n const hoverFrom = (event: DragEvent) => {\n const current = session();\n if (!current) return null;\n const found = resolve(event.target);\n const hover = found ? { ...found, invalid: invalidDrag(event, found.entry.options) } : null;\n const previous = current.hover;\n if (previous?.entry !== hover?.entry || previous?.element !== hover?.element || previous?.invalid !== hover?.invalid) {\n mark(hover);\n setSession({ ...current, hover });\n }\n return hover;\n };\n\n /** Over a page with a region, a file never falls through to the browser, which would open it and leave the page. */\n const guarding = () => [...regions].some((entry) => regionElement(entry));\n\n const accept = (event: DragEvent, hover: FileDropHover | null) => {\n if (!hover && !guarding()) return;\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = hover && !hover.invalid ? \"copy\" : \"none\";\n };\n\n const requestFrame = () => {\n if (frameRequest || !view) return;\n frameRequest = view.requestAnimationFrame(() => {\n frameRequest = 0;\n setFrame((value) => value + 1);\n });\n };\n\n const deliver = (entry: FileDropTargetEntry, dataTransfer: DataTransfer) => {\n const { options } = entry;\n const files = Array.from(dataTransfer.files);\n const { accepted, rejected } = partitionDroppedFiles(files, options);\n const messages = entry.messages();\n if (rejected.length) toast.error(fileDropRejectionMessage(rejected, options, messages, entry.locale()));\n if (!accepted.length && files.length) return;\n if (accepted.length)\n announce(\n accepted.length === 1\n ? messages.fileDropDroppedOne({ name: accepted[0]!.name })\n : messages.fileDropDropped({ count: accepted.length }),\n );\n void options.onDrop(accepted, { dataTransfer, rejected });\n };\n\n const listeners: Record<string, (event: Event) => void> = {\n dragstart: (event) => {\n (event as DragEvent).dataTransfer?.setData(PAGE_DRAG_TYPE, \"\");\n },\n dragenter: (event) => {\n const drag = event as DragEvent;\n if (!isFileDrag(drag)) return;\n lastDragEvent = event.timeStamp;\n if (event.target) entered.add(event.target);\n if (!session()) begin(event.target);\n accept(drag, hoverFrom(drag));\n },\n dragover: (event) => {\n const drag = event as DragEvent;\n if (!isFileDrag(drag)) return;\n lastDragEvent = event.timeStamp;\n // An engine may skip the first dragenter; the drag still counts as over the window.\n if (!session()) {\n if (event.target) entered.add(event.target);\n begin(event.target);\n }\n accept(drag, hoverFrom(drag));\n requestFrame();\n },\n dragleave: (event) => {\n if (!session()) return;\n if (event.target) entered.delete(event.target);\n // An element removed during the drag never reports leaving.\n for (const target of entered) if (target instanceof Node && !target.isConnected) entered.delete(target);\n if (entered.size === 0) end();\n },\n drop: (event) => {\n const drag = event as DragEvent;\n if (!isFileDrag(drag)) return;\n const found = resolve(event.target);\n end();\n if (!found) {\n if (guarding()) event.preventDefault();\n return;\n }\n // The most specific target owns the drop; editors and other handlers below it never see the files.\n event.preventDefault();\n event.stopPropagation();\n if (drag.dataTransfer) deliver(found.entry, drag.dataTransfer);\n },\n keydown: (event) => {\n if ((event as KeyboardEvent).key === \"Escape\" && session()) end();\n },\n // Engines send no pointer moves during a drag: one long after the last drag event means the drag ended somewhere the\n // page did not see. One right after it belongs to another pointer, such as a second finger on a touch screen.\n pointermove: (event) => {\n if (session() && event.timeStamp - lastDragEvent > DRAG_SILENCE_MS) end();\n },\n visibilitychange: () => {\n if (doc.visibilityState === \"hidden\") end();\n },\n };\n\n let installed = false;\n const install = () => {\n if (installed || !view) return;\n installed = true;\n for (const [type, listener] of Object.entries(listeners))\n (type === \"visibilitychange\" ? doc : view).addEventListener(type, listener, { capture: true });\n };\n\n return {\n session,\n frame,\n addRegion: (entry) => {\n install();\n regions.add(entry);\n return () => {\n regions.delete(entry);\n const current = session();\n if (current?.hover?.entry === entry) {\n mark(null);\n setSession({ ...current, hover: null });\n }\n };\n },\n setTarget: (element, entry) => {\n install();\n targets.set(element, entry);\n },\n };\n};\n\n/**\n * The document an element lives in. A freshly rendered element still belongs to the inert document of the template it\n * was cloned from; until it is inserted, that is the page's document.\n */\nexport const liveDocument = (element: Element): Document => (element.ownerDocument.defaultView ? element.ownerDocument : document);\n\n/** The one drag tracker of a document, shared by every drop target in it. */\nexport const fileDropEngine = (doc: Document): FileDropEngine => {\n let engine = engines.get(doc);\n if (!engine) {\n engine = createEngine(doc);\n engines.set(doc, engine);\n }\n return engine;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { i18n } from "@k2b/stdlib";
|
|
2
|
+
import { useLocale } from "../intl/locale";
|
|
3
|
+
const fileInputMessages = i18n.define({
|
|
4
|
+
baseLocale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
en: {
|
|
7
|
+
addImage: "Add image",
|
|
8
|
+
dropFiles: "Drop files or click to choose",
|
|
9
|
+
dropToUpload: "Drop to upload",
|
|
10
|
+
uploading: "Uploading…",
|
|
11
|
+
chooseFile: "Choose file",
|
|
12
|
+
chooseFiles: "Choose files",
|
|
13
|
+
chooseMatchingFile: "Choose a file that matches this field.",
|
|
14
|
+
changeImage: "Change image",
|
|
15
|
+
cropArea: "Crop area. Use arrow keys to move; hold Shift for larger steps.",
|
|
16
|
+
cropPreview: "Crop preview",
|
|
17
|
+
failedLoadFiles: "Failed to load files",
|
|
18
|
+
failedLoadImage: "Failed to load image.",
|
|
19
|
+
imageProcessingFailed: "Image could not be processed.",
|
|
20
|
+
preparingImage: "Preparing image…",
|
|
21
|
+
processingImage: "Processing image",
|
|
22
|
+
removeImage: "Remove image",
|
|
23
|
+
rotateRight: "Rotate right",
|
|
24
|
+
selectedImage: "Selected image",
|
|
25
|
+
resizeCrop: ({
|
|
26
|
+
handle
|
|
27
|
+
}) => `Resize crop ${handle}`
|
|
28
|
+
},
|
|
29
|
+
de: {
|
|
30
|
+
addImage: "Bild hinzufügen",
|
|
31
|
+
dropFiles: "Dateien ablegen oder zum Auswählen klicken",
|
|
32
|
+
dropToUpload: "Zum Hochladen ablegen",
|
|
33
|
+
uploading: "Wird hochgeladen…",
|
|
34
|
+
chooseFile: "Datei auswählen",
|
|
35
|
+
chooseFiles: "Dateien auswählen",
|
|
36
|
+
chooseMatchingFile: "Wähle eine zu diesem Feld passende Datei aus.",
|
|
37
|
+
changeImage: "Bild ändern",
|
|
38
|
+
cropArea: "Zuschneidebereich. Mit Pfeiltasten verschieben; Umschalt für größere Schritte halten.",
|
|
39
|
+
cropPreview: "Zuschneidevorschau",
|
|
40
|
+
failedLoadFiles: "Dateien konnten nicht geladen werden",
|
|
41
|
+
failedLoadImage: "Bild konnte nicht geladen werden.",
|
|
42
|
+
imageProcessingFailed: "Bild konnte nicht verarbeitet werden.",
|
|
43
|
+
preparingImage: "Bild wird vorbereitet…",
|
|
44
|
+
processingImage: "Bild wird verarbeitet",
|
|
45
|
+
removeImage: "Bild entfernen",
|
|
46
|
+
rotateRight: "Nach rechts drehen",
|
|
47
|
+
selectedImage: "Ausgewähltes Bild",
|
|
48
|
+
resizeCrop: ({
|
|
49
|
+
handle
|
|
50
|
+
}) => `Zuschneidebereich am Griff ${handle} skalieren`
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
/** Resolved from the inherited render locale. */
|
|
55
|
+
export const useFileInputMessages = () => {
|
|
56
|
+
const locale = useLocale();
|
|
57
|
+
return () => fileInputMessages.resolve([locale()]).t;
|
|
58
|
+
};
|
|
59
|
+
export const checkFileInputMessages = () => fileInputMessages.check();
|
|
60
|
+
//# sourceMappingURL=file-input-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/file-input-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst fileInputMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n addImage: \"Add image\",\n dropFiles: \"Drop files or click to choose\",\n dropToUpload: \"Drop to upload\",\n uploading: \"Uploading…\",\n chooseFile: \"Choose file\",\n chooseFiles: \"Choose files\",\n chooseMatchingFile: \"Choose a file that matches this field.\",\n changeImage: \"Change image\",\n cropArea: \"Crop area. Use arrow keys to move; hold Shift for larger steps.\",\n cropPreview: \"Crop preview\",\n failedLoadFiles: \"Failed to load files\",\n failedLoadImage: \"Failed to load image.\",\n imageProcessingFailed: \"Image could not be processed.\",\n preparingImage: \"Preparing image…\",\n processingImage: \"Processing image\",\n removeImage: \"Remove image\",\n rotateRight: \"Rotate right\",\n selectedImage: \"Selected image\",\n resizeCrop: ({ handle }: { handle: string }) => `Resize crop ${handle}`,\n },\n de: {\n addImage: \"Bild hinzufügen\",\n dropFiles: \"Dateien ablegen oder zum Auswählen klicken\",\n dropToUpload: \"Zum Hochladen ablegen\",\n uploading: \"Wird hochgeladen…\",\n chooseFile: \"Datei auswählen\",\n chooseFiles: \"Dateien auswählen\",\n chooseMatchingFile: \"Wähle eine zu diesem Feld passende Datei aus.\",\n changeImage: \"Bild ändern\",\n cropArea: \"Zuschneidebereich. Mit Pfeiltasten verschieben; Umschalt für größere Schritte halten.\",\n cropPreview: \"Zuschneidevorschau\",\n failedLoadFiles: \"Dateien konnten nicht geladen werden\",\n failedLoadImage: \"Bild konnte nicht geladen werden.\",\n imageProcessingFailed: \"Bild konnte nicht verarbeitet werden.\",\n preparingImage: \"Bild wird vorbereitet…\",\n processingImage: \"Bild wird verarbeitet\",\n removeImage: \"Bild entfernen\",\n rotateRight: \"Nach rechts drehen\",\n selectedImage: \"Ausgewähltes Bild\",\n resizeCrop: ({ handle }) => `Zuschneidebereich am Griff ${handle} skalieren`,\n },\n },\n});\n\nexport type FileInputMessages = ReturnType<(typeof fileInputMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useFileInputMessages = (): (() => FileInputMessages) => {\n const locale = useLocale();\n return () => fileInputMessages.resolve([locale()]).t;\n};\n\nexport const checkFileInputMessages = () => fileInputMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;EACpC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,QAAQ,EAAE,WAAW;MACrB,SAAS,EAAE,+BAA+B;MAC1C,YAAY,EAAE,gBAAgB;MAC9B,SAAS,EAAE,YAAY;MACvB,UAAU,EAAE,aAAa;MACzB,WAAW,EAAE,cAAc;MAC3B,kBAAkB,EAAE,wCAAwC;MAC5D,WAAW,EAAE,cAAc;MAC3B,QAAQ,EAAE,iEAAiE;MAC3E,WAAW,EAAE,cAAc;MAC3B,eAAe,EAAE,sBAAsB;MACvC,eAAe,EAAE,uBAAuB;MACxC,qBAAqB,EAAE,+BAA+B;MACtD,cAAc,EAAE,kBAAkB;MAClC,eAAe,EAAE,kBAAkB;MACnC,WAAW,EAAE,cAAc;MAC3B,WAAW,EAAE,cAAc;MAC3B,aAAa,EAAE,gBAAgB;MAC/B,UAAU,EAAE,CAAC;QAAE;MAA2B,CAAC,KAAK,eAAe,MAAM;IACvE,CAAC;IACD,EAAE,EAAE;MACF,QAAQ,EAAE,iBAAiB;MAC3B,SAAS,EAAE,4CAA4C;MACvD,YAAY,EAAE,uBAAuB;MACrC,SAAS,EAAE,mBAAmB;MAC9B,UAAU,EAAE,iBAAiB;MAC7B,WAAW,EAAE,mBAAmB;MAChC,kBAAkB,EAAE,+CAA+C;MACnE,WAAW,EAAE,aAAa;MAC1B,QAAQ,EAAE,uFAAuF;MACjG,WAAW,EAAE,oBAAoB;MACjC,eAAe,EAAE,sCAAsC;MACvD,eAAe,EAAE,mCAAmC;MACpD,qBAAqB,EAAE,uCAAuC;MAC9D,cAAc,EAAE,wBAAwB;MACxC,eAAe,EAAE,uBAAuB;MACxC,WAAW,EAAE,gBAAgB;MAC7B,WAAW,EAAE,oBAAoB;MACjC,aAAa,EAAE,mBAAmB;MAClC,UAAU,EAAE,CAAC;QAAE;MAAO,CAAC,KAAK,8BAA8B,MAAM;IAClE;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,oBAAoB,GAAG,MAAiC;EACnE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,OAAO,MAAM,sBAAsB,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { i18n } from "@k2b/stdlib";
|
|
2
|
+
import { useLocale } from "../intl/locale";
|
|
3
|
+
const iconMessages = i18n.define({
|
|
4
|
+
baseLocale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
en: {
|
|
7
|
+
filterIcons: "Filter icons",
|
|
8
|
+
pickIcon: "Pick an icon..."
|
|
9
|
+
},
|
|
10
|
+
de: {
|
|
11
|
+
filterIcons: "Symbole filtern",
|
|
12
|
+
pickIcon: "Symbol auswählen..."
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
/** Resolved from the inherited render locale. */
|
|
17
|
+
export const useIconMessages = () => {
|
|
18
|
+
const locale = useLocale();
|
|
19
|
+
return () => iconMessages.resolve([locale()]).t;
|
|
20
|
+
};
|
|
21
|
+
export const checkIconMessages = () => iconMessages.check();
|
|
22
|
+
//# sourceMappingURL=icon-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/icon-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst iconMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n filterIcons: \"Filter icons\",\n pickIcon: \"Pick an icon...\",\n },\n de: {\n filterIcons: \"Symbole filtern\",\n pickIcon: \"Symbol auswählen...\",\n },\n },\n});\n\nexport type IconMessages = ReturnType<(typeof iconMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useIconMessages = (): (() => IconMessages) => {\n const locale = useLocale();\n return () => iconMessages.resolve([locale()]).t;\n};\n\nexport const checkIconMessages = () => iconMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;EAC/B,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,WAAW,EAAE,cAAc;MAC3B,QAAQ,EAAE;IACZ,CAAC;IACD,EAAE,EAAE;MACF,WAAW,EAAE,iBAAiB;MAC9B,QAAQ,EAAE;IACZ;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,eAAe,GAAG,MAA4B;EACzD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,OAAO,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { i18n } from "@k2b/stdlib";
|
|
2
|
+
import { useLocale } from "../intl/locale";
|
|
3
|
+
const inputMessages = i18n.define({
|
|
4
|
+
baseLocale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
en: {
|
|
7
|
+
decreaseValue: "Decrease value",
|
|
8
|
+
increaseValue: "Increase value",
|
|
9
|
+
hidePassword: "Hide password",
|
|
10
|
+
showPassword: "Show password",
|
|
11
|
+
useColor: "Use a color",
|
|
12
|
+
useTransparent: "Use transparent",
|
|
13
|
+
pinDigit: ({
|
|
14
|
+
index,
|
|
15
|
+
total
|
|
16
|
+
}) => `PIN digit ${index} of ${total}`
|
|
17
|
+
},
|
|
18
|
+
de: {
|
|
19
|
+
decreaseValue: "Wert verringern",
|
|
20
|
+
increaseValue: "Wert erhöhen",
|
|
21
|
+
hidePassword: "Passwort ausblenden",
|
|
22
|
+
showPassword: "Passwort anzeigen",
|
|
23
|
+
useColor: "Farbe verwenden",
|
|
24
|
+
useTransparent: "Transparent verwenden",
|
|
25
|
+
pinDigit: ({
|
|
26
|
+
index,
|
|
27
|
+
total
|
|
28
|
+
}) => `PIN-Ziffer ${index} von ${total}`
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
/** Resolved from the inherited render locale. */
|
|
33
|
+
export const useInputMessages = () => {
|
|
34
|
+
const locale = useLocale();
|
|
35
|
+
return () => inputMessages.resolve([locale()]).t;
|
|
36
|
+
};
|
|
37
|
+
export const checkInputMessages = () => inputMessages.check();
|
|
38
|
+
//# sourceMappingURL=input-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["inputs/input-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst inputMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n decreaseValue: \"Decrease value\",\n increaseValue: \"Increase value\",\n hidePassword: \"Hide password\",\n showPassword: \"Show password\",\n useColor: \"Use a color\",\n useTransparent: \"Use transparent\",\n pinDigit: ({ index, total }: { index: number; total: number }) => `PIN digit ${index} of ${total}`,\n },\n de: {\n decreaseValue: \"Wert verringern\",\n increaseValue: \"Wert erhöhen\",\n hidePassword: \"Passwort ausblenden\",\n showPassword: \"Passwort anzeigen\",\n useColor: \"Farbe verwenden\",\n useTransparent: \"Transparent verwenden\",\n pinDigit: ({ index, total }) => `PIN-Ziffer ${index} von ${total}`,\n },\n },\n});\n\nexport type InputMessages = ReturnType<(typeof inputMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useInputMessages = (): (() => InputMessages) => {\n const locale = useLocale();\n return () => inputMessages.resolve([locale()]).t;\n};\n\nexport const checkInputMessages = () => inputMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;EAChC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,aAAa,EAAE,gBAAgB;MAC/B,aAAa,EAAE,gBAAgB;MAC/B,YAAY,EAAE,eAAe;MAC7B,YAAY,EAAE,eAAe;MAC7B,QAAQ,EAAE,aAAa;MACvB,cAAc,EAAE,iBAAiB;MACjC,QAAQ,EAAE,CAAC;QAAE,KAAK;QAAE;MAAwC,CAAC,KAAK,aAAa,KAAK,OAAO,KAAK;IAClG,CAAC;IACD,EAAE,EAAE;MACF,aAAa,EAAE,iBAAiB;MAChC,aAAa,EAAE,cAAc;MAC7B,YAAY,EAAE,qBAAqB;MACnC,YAAY,EAAE,mBAAmB;MACjC,QAAQ,EAAE,iBAAiB;MAC3B,cAAc,EAAE,uBAAuB;MACvC,QAAQ,EAAE,CAAC;QAAE,KAAK;QAAE;MAAM,CAAC,KAAK,cAAc,KAAK,QAAQ,KAAK;IAClE;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,gBAAgB,GAAG,MAA6B;EAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,OAAO,MAAM,kBAAkB,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
|