@k2b/ui 0.21.0 → 0.23.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/ContextMenu.js +3 -1
- package/dist/browser/actions/ContextMenu.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/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 +1096 -1060
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarDayView.js +1187 -0
- package/dist/browser/content/CalendarDayView.js.map +1 -0
- package/dist/browser/content/CalendarWeekView.js +1571 -0
- package/dist/browser/content/CalendarWeekView.js.map +1 -0
- package/dist/browser/content/Chart.js +15 -8
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +185 -85
- 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 +93 -34
- 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 +238 -201
- 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-day-scroll.js +98 -0
- package/dist/browser/content/calendar-day-scroll.js.map +1 -0
- package/dist/browser/content/calendar-days.js +408 -0
- package/dist/browser/content/calendar-days.js.map +1 -0
- package/dist/browser/content/calendar-dialogs.js +236 -0
- package/dist/browser/content/calendar-dialogs.js.map +1 -0
- package/dist/browser/content/calendar-messages.js +249 -3
- package/dist/browser/content/calendar-messages.js.map +1 -1
- package/dist/browser/content/calendar-pointer.js +19 -6
- package/dist/browser/content/calendar-pointer.js.map +1 -1
- package/dist/browser/content/calendar-shared.js +328 -0
- package/dist/browser/content/calendar-shared.js.map +1 -0
- package/dist/browser/content/calendar-time-view.js +1649 -0
- package/dist/browser/content/calendar-time-view.js.map +1 -0
- package/dist/browser/content/chart-messages.js +146 -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 -2
- package/dist/browser/inputs/Combobox.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/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 +6 -1155
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +594 -425
- 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 +373 -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 +821 -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/StatCell.js +18 -6
- package/dist/browser/surfaces/StatCell.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/ContextMenu.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/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 +534 -346
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarDayView.js +800 -0
- package/dist/ssr/content/CalendarDayView.js.map +1 -0
- package/dist/ssr/content/CalendarWeekView.js +1069 -0
- package/dist/ssr/content/CalendarWeekView.js.map +1 -0
- package/dist/ssr/content/Chart.js +12 -5
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +98 -37
- 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 +52 -8
- 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 +77 -53
- 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-day-scroll.js +98 -0
- package/dist/ssr/content/calendar-day-scroll.js.map +1 -0
- package/dist/ssr/content/calendar-days.js +408 -0
- package/dist/ssr/content/calendar-days.js.map +1 -0
- package/dist/ssr/content/calendar-dialogs.js +159 -0
- package/dist/ssr/content/calendar-dialogs.js.map +1 -0
- package/dist/ssr/content/calendar-messages.js +249 -3
- package/dist/ssr/content/calendar-messages.js.map +1 -1
- package/dist/ssr/content/calendar-pointer.js +19 -6
- package/dist/ssr/content/calendar-pointer.js.map +1 -1
- package/dist/ssr/content/calendar-shared.js +261 -0
- package/dist/ssr/content/calendar-shared.js.map +1 -0
- package/dist/ssr/content/calendar-time-view.js +1306 -0
- package/dist/ssr/content/calendar-time-view.js.map +1 -0
- package/dist/ssr/content/chart-messages.js +146 -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/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/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 +6 -1155
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +219 -103
- 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 +256 -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 +821 -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/StatCell.js +2 -2
- package/dist/ssr/surfaces/StatCell.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/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 +91 -0
- package/dist/types/content/CalendarDayView.d.ts +7 -0
- package/dist/types/content/CalendarWeekView.d.ts +7 -0
- package/dist/types/content/ChartExplorer.d.ts +36 -1
- package/dist/types/content/ChartFilterControls.d.ts +6 -1
- package/dist/types/content/DataTable.d.ts +7 -0
- package/dist/types/content/FileView.d.ts +0 -10
- package/dist/types/content/calendar-day-scroll.d.ts +42 -0
- package/dist/types/content/calendar-days.d.ts +192 -0
- package/dist/types/content/calendar-dialogs.d.ts +22 -0
- package/dist/types/content/calendar-messages.d.ts +119 -1
- package/dist/types/content/calendar-pointer.d.ts +9 -0
- package/dist/types/content/calendar-shared.d.ts +69 -0
- package/dist/types/content/calendar-time-view.d.ts +252 -0
- package/dist/types/content/chart-messages.d.ts +37 -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 +2 -2
- 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/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 +3 -544
- package/dist/types/layout/AppWorkspace.d.ts +42 -5
- package/dist/types/layout/PageTitle.d.ts +65 -0
- package/dist/types/layout/app-workspace-controller.d.ts +12 -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/StatCell.d.ts +5 -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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["content/calendar-time-view.tsx"],"sourcesContent":["import { dates as calendar, type DateContext } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, For, on, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { announce } from \"../feedback/announce\";\nimport type { CalendarController, CalendarEvent, CalendarEventTimeChange, CalendarExternalDrag, CalendarLabels } from \"./Calendar\";\nimport {\n addDayKeys,\n buildDays,\n type CalendarDayHours,\n clockAt,\n DAY_MINUTES,\n type DayEntry,\n type DayGap,\n type DayGeometry,\n type DayLane,\n type DayModel,\n type DaySpan,\n dayKeyOf,\n dayLanes,\n dayMinuteAt,\n dayTopTerms,\n dayYTerms,\n freeGaps,\n GAP_LABEL_MINUTES,\n GAP_LONG_MINUTES,\n gapProposal,\n instantInDay,\n instantsInDay,\n minuteInDay,\n readDayGeometry,\n resizedInDay,\n snapMinutes,\n subtractTerms,\n termsCss,\n wakeMinutes,\n} from \"./calendar-days\";\nimport { useCalendarMessages } from \"./calendar-messages\";\nimport { startCalendarPointerSession } from \"./calendar-pointer\";\nimport {\n type CalendarOwner,\n type CalendarStop,\n EventChip,\n eventHref,\n type NormalizedEvent,\n ownerDateConfig,\n parseDate,\n placeCalendarPopover,\n validDate,\n} from \"./calendar-shared\";\n\n/**\n * Shared state and parts of the day and week views with `dayHours`: the time model of the loaded days, the selection,\n * the quick create, pointer gestures, and the pieces both views draw into a day's timeline.\n */\n\nexport type TodayDirection = \"left\" | \"right\" | \"up\" | \"down\" | \"\";\n\n/** What the header and the calendar's controller ask of the active day or week view. */\nexport type TimeViewHandle = {\n /** The first and last day the reader sees. */\n visibleKeys: () => { first: string; last: string };\n /** Moves by a day (day view) or a week (week view) when that is loaded; `false` leaves it to the header's link. */\n step: (direction: -1 | 1) => boolean;\n /** Shows a day when it is loaded; `false` leaves it to navigation. */\n goTo: (key: string) => boolean;\n /** Shows today and now when they are loaded. */\n today: () => boolean;\n todayDirection: () => TodayDirection;\n controller: CalendarController;\n};\n\nexport type TimeViewProps = {\n owner: CalendarOwner;\n view: \"day\" | \"week\";\n date: Date;\n now: Date;\n events: readonly CalendarEvent[];\n labels: Required<CalendarLabels>;\n hours: CalendarDayHours;\n register: (handle: TimeViewHandle | null) => void;\n};\n\nexport type TimeSelection = { key: string; start?: number; end?: number };\n\ntype Ghost = {\n key: string;\n start: number;\n end: number;\n title: string;\n time: string;\n colorHex?: string;\n color?: string;\n warn?: boolean;\n fit?: { fits: boolean; text: string };\n};\n\ntype QuickCreate = {\n range: CalendarEventTimeChange;\n anchor: Element | DOMRect;\n create?: string;\n key: string;\n start?: number;\n end?: number;\n};\n\nexport type BodyHit = { key: string; element: HTMLElement; geometry: DayGeometry; minute: number };\n\nconst COLOR_TOKENS: Record<string, string> = {\n blue: \"#3b82f6\",\n emerald: \"#10b981\",\n amber: \"#f59e0b\",\n red: \"#ef4444\",\n violet: \"#8b5cf6\",\n cyan: \"#06b6d4\",\n zinc: \"#a1a1aa\",\n};\nexport const eventAccent = (event: Pick<CalendarEvent, \"color\" | \"colorHex\">): string =>\n event.colorHex ?? COLOR_TOKENS[event.color ?? \"blue\"]!;\n\n/** Minimum minutes an overlap counts for a band, about the height of its title. */\nconst LANE_MINUTES = 20;\n\nexport const reducedMotion = () =>\n typeof window !== \"undefined\" && typeof window.matchMedia === \"function\" && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n/** Swallows the click a browser sends right after a gesture ends, never the next one. */\nexport const swallowNextClick = () => {\n const stop = (event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n };\n window.addEventListener(\"click\", stop, { capture: true, once: true });\n window.setTimeout(() => window.removeEventListener(\"click\", stop, { capture: true }), 120);\n};\n\nexport const createTimeView = (props: TimeViewProps) => {\n const messages = useCalendarMessages();\n const dateConfig = createMemo((): DateContext => ownerDateConfig(props.owner));\n const hours = () => props.hours;\n const wake = createMemo(() => wakeMinutes(props.hours));\n const keyOf = (date: Date) => calendar.formatDateKey(date, dateConfig());\n const parseKey = (key: string) => calendar.parseCalendarDate(key, dateConfig());\n\n /** The loaded days: the host's range, or the day or the week of the date. */\n const range = createMemo(\n () => {\n const context = dateConfig();\n const loaded = props.owner.range;\n if (loaded) {\n const from = parseDate(loaded.from, context);\n const to = parseDate(loaded.to, context);\n if (validDate(from) && validDate(to)) {\n const first = calendar.formatDateKey(from, context);\n const last = calendar.formatDateKey(new Date(Math.max(from.getTime(), to.getTime() - 1)), context);\n return { first, last };\n }\n }\n const key = calendar.formatDateKey(props.date, context);\n if (props.view === \"day\") return { first: key, last: key };\n const start = calendar.formatDateKey(calendar.startOfWeek(props.date, context), context);\n return { first: start, last: addDayKeys(start, 6) };\n },\n undefined,\n { equals: (left, right) => left.first === right.first && left.last === right.last },\n );\n const anchorKey = createMemo(() => keyOf(props.date));\n\n /** Checkbox states the reader just set, shown until the host's events agree or drop the entry. */\n const [checks, setChecks] = createSignal<Record<string, boolean>>({});\n const [justChecked, setJustChecked] = createSignal<ReadonlySet<string>>(new Set());\n createEffect(\n on(\n () => props.events,\n (events) => {\n const current = untrack(checks);\n const ids = Object.keys(current);\n if (ids.length === 0) return;\n const next = { ...current };\n for (const id of ids) {\n const event = events.find((candidate) => candidate.id === id);\n if (!event || event.checked === current[id]) delete next[id];\n }\n setChecks(next);\n },\n { defer: true },\n ),\n );\n const checkedOf = (event: CalendarEvent): boolean | undefined =>\n event.checked === undefined ? undefined : (checks()[event.id] ?? event.checked);\n /** What Space on an entry's chip does: check its box, where it has one the reader may change. */\n const checkOf = (event: CalendarEvent) =>\n checkedOf(event) !== undefined && props.owner.onEventCheck ? () => toggleCheck(event) : undefined;\n const forgetJustChecked = (id: string) =>\n setJustChecked((value) => {\n if (!value.has(id)) return value;\n const rest = new Set(value);\n rest.delete(id);\n return rest;\n });\n /** Today's day for a moment after its last open to-do was checked off, which its heading celebrates. */\n const [cheered, setCheered] = createSignal<string | null>(null);\n let cheerTimer = 0;\n // The server renders the view too, and has no window.\n onCleanup(() => clearTimeout(cheerTimer));\n /** The entries with a checkbox on a day: its deadlines, the to-dos planned into its hours, and the ones due all day. */\n const dueOn = (key: string) => {\n const model = dayOf(key);\n return [\n ...model.markers.map((marker) => marker.item),\n ...model.bands.map((band) => band.item),\n ...model.spans.filter((span) => span.marker && span.firstKey === key).map((span) => span.item),\n ].filter((item) => item.checked !== undefined);\n };\n const toggleCheck = (event: CalendarEvent) => {\n const current = checkedOf(event);\n if (current === undefined || !props.owner.onEventCheck) return;\n const next = !current;\n setChecks((value) => ({ ...value, [event.id]: next }));\n if (next) {\n setJustChecked((value) => new Set([...value, event.id]));\n window.setTimeout(() => forgetJustChecked(event.id), 1100);\n const today = nowKey();\n const due = dueOn(today);\n if (due.includes(event) && due.every((item) => checkedOf(item))) {\n // The heading shows it only for a moment, so a screen reader hears it once instead.\n announce(messages().calendarAllDone);\n setCheered(today);\n window.clearTimeout(cheerTimer);\n cheerTimer = window.setTimeout(() => setCheered(null), 2200);\n }\n } else setCheered(null);\n // A change the host refuses puts the box back as it was.\n void Promise.resolve(props.owner.onEventCheck(event, next)).catch(() => {\n forgetJustChecked(event.id);\n if (next) setCheered(null);\n setChecks((value) => {\n if (value[event.id] !== next) return value;\n const rest = { ...value };\n delete rest[event.id];\n return rest;\n });\n });\n };\n\n const entries = createMemo((): DayEntry<CalendarEvent>[] => {\n const context = dateConfig();\n return props.events.flatMap((event) => {\n const start = parseDate(event.start, context);\n if (!validDate(start)) return [];\n const marker = event.display === \"marker\";\n const parsedEnd = event.end ? parseDate(event.end, context) : null;\n let end = parsedEnd && validDate(parsedEnd) && parsedEnd > start ? parsedEnd : null;\n if (!end)\n end = event.allDay\n ? calendar.addDays(calendar.startOfDay(start, context), 1, context)\n : marker\n ? start\n : new Date(start.getTime() + 3_600_000);\n return [{ item: event, start, end, allDay: Boolean(event.allDay), marker }];\n });\n });\n const days = createMemo(() => buildDays(range().first, range().last, entries(), props.hours, dateConfig()));\n const emptyModel = (key: string): DayModel<CalendarEvent> => ({ key, bands: [], markers: [], spans: [], night: false, empty: true });\n const dayOf = (key: string) => days().get(key) ?? emptyModel(key);\n const sourceOf = createMemo(() => new Map(entries().map((entry) => [entry.item, entry])));\n\n /** The day that holds now: before the start hour still the day before. */\n const nowKey = createMemo(() => dayKeyOf(props.now, props.hours, dateConfig()));\n const nowMinute = createMemo(() => minuteInDay(nowKey(), props.now, props.hours, dateConfig()));\n /** Now as a minute of a day: past days lie wholly before it, coming days after. */\n const nowIn = (key: string) => (key === nowKey() ? nowMinute() : key < nowKey() ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY);\n const calendarToday = createMemo(() => keyOf(props.now));\n const clock = (minute: number) => clockAt(minute, props.hours);\n const duration = (minutes: number) => messages().calendarDuration({ minutes: Math.max(1, Math.round(minutes)) });\n const instant = (key: string, minute: number) => instantInDay(key, minute, props.hours, dateConfig());\n const slot = (key: string, start: number, end: number) => instantsInDay(key, start, end, props.hours, dateConfig());\n const dayStartMinute = (hour: number) => Math.max(0, (hour - props.hours[0]) * 60);\n\n /** A day's timed piece as the event chip reads it. */\n const normalized = (event: CalendarEvent, key: string): NormalizedEvent => {\n const source = sourceOf().get(event);\n const start = source?.start ?? parseDate(event.start, dateConfig());\n const end = source?.end ?? start;\n return { ...event, startDate: start, endDate: end, sourceStartDate: start, sourceEndDate: end, dayKey: key };\n };\n\n const [selection, setSelection] = createSignal<TimeSelection | null>(null);\n const [touchDraft, setTouchDraft] = createSignal<{ key: string; start: number; end: number } | null>(null);\n const [activeKey, setActiveKey] = createSignal<string | null>(null);\n const [ghost, setGhost] = createSignal<Ghost | null>(null);\n const [movingId, setMovingId] = createSignal(\"\");\n const [dragging, setDragging] = createSignal<\"\" | \"move\" | \"start\" | \"end\" | \"draw\" | \"external\">(\"\");\n const [nightOverrides, setNightOverrides] = createSignal<Record<string, boolean>>({});\n const [quick, setQuick] = createSignal<QuickCreate | null>(null);\n\n const rangeOfSelection = (value: TimeSelection): CalendarEventTimeChange =>\n value.start === undefined || value.end === undefined\n ? { start: parseKey(value.key), end: calendar.addDays(parseKey(value.key), 1, dateConfig()), allDay: true }\n : { ...slot(value.key, value.start, value.end), allDay: false };\n createEffect(on(selection, (value) => props.owner.onSelectionChange?.(value ? rangeOfSelection(value) : null), { defer: true }));\n onCleanup(() => {\n if (untrack(selection)) props.owner.onSelectionChange?.(null);\n });\n\n // Body elements of the days on screen, for pointer positions.\n const bodies = new Map<string, { element: HTMLElement; expanded: () => boolean }>();\n const registerBody = (key: string, element: HTMLElement, expanded: () => boolean) => {\n bodies.set(key, { element, expanded });\n onCleanup(() => {\n if (bodies.get(key)?.element === element) bodies.delete(key);\n });\n };\n const bodyAt = (clientX: number, clientY: number): BodyHit | null => {\n for (const [key, body] of bodies) {\n if (!body.element.isConnected) continue;\n const rect = body.element.getBoundingClientRect();\n if (clientX < rect.left || clientX >= rect.right || clientY < rect.top || clientY >= rect.bottom) continue;\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n return { key, element: body.element, geometry, minute: dayMinuteAt(geometry, clientY - rect.top) };\n }\n return null;\n };\n const limitOf = (key: string) => (bodies.get(key)?.expanded() ? DAY_MINUTES : wake());\n const nightOpen = (key: string, model: DayModel<CalendarEvent>) => nightOverrides()[key] ?? model.night;\n const setNight = (key: string, open: boolean) => setNightOverrides((value) => ({ ...value, [key]: open }));\n\n /** The gap under a minute while dragging, and whether `need` minutes fit it; the gap shows \"fits\" or how much is missing. */\n const fitAt = (key: string, minute: number, need: number, span?: { start: number; end: number }) => {\n const gap = freeGaps(dayOf(key).bands, wake(), Number.NEGATIVE_INFINITY).find(\n (candidate) => minute >= candidate.start && minute < candidate.end,\n );\n if (!gap) return null;\n const fits = gap.end - gap.start >= need;\n if (fits && span && (span.start < gap.start || span.end > gap.end)) return null;\n return {\n gap,\n fits,\n text: fits ? messages().calendarFits : messages().calendarTooShort({ duration: duration(need - (gap.end - gap.start)) }),\n };\n };\n const [gapHit, setGapHit] = createSignal<{ key: string; start: number; fits: boolean; text: string } | null>(null);\n const overlapAt = (key: string, start: number, end: number, except?: string) =>\n dayOf(key).bands.find((band) => band.item.id !== except && band.start < end && band.end > start)?.item ?? null;\n\n const openQuickCreate = (key: string, start: number | undefined, end: number | undefined, anchor: Element | DOMRect, create?: string) => {\n const range = rangeOfSelection({ key, start, end });\n setTouchDraft(null);\n if (!props.owner.renderQuickCreate) {\n props.owner.onSlotActivate?.(range);\n return;\n }\n setSelection({ key, start, end });\n setQuick({ range, anchor, create, key, start, end });\n };\n const canCreate = () => Boolean(props.owner.renderQuickCreate || props.owner.onSlotActivate);\n\n /** The time a new entry takes: the selection, today's next full hour while today shows, else 09:00 of the first day. */\n const createTarget = (visible: { first: string; last: string }): { key: string; start: number; end: number } => {\n const current = selection();\n if (current && current.start !== undefined && current.end !== undefined)\n return { key: current.key, start: current.start, end: current.end };\n const nine = dayStartMinute(9);\n const nextHour = (key: string) => {\n const minute = Math.ceil((nowMinute() + 1) / 60) * 60;\n return key === nowKey() ? (minute <= wake() - 60 ? minute : null) : nine;\n };\n let key: string;\n let start: number | null;\n if (current) {\n key = current.key;\n start = key === nowKey() ? nextHour(key) : nine;\n } else if (nowKey() >= visible.first && nowKey() <= visible.last) {\n key = nowKey();\n start = nextHour(key);\n } else {\n key = visible.first;\n start = nine;\n }\n if (start === null) {\n key = addDayKeys(key, 1);\n start = nine;\n }\n return { key, start, end: start + 60 };\n };\n\n // Pointer gestures: moving and resizing bands and markers, drawing a new event, and dragging entries in.\n let cancelGesture: (() => void) | undefined;\n onCleanup(() => cancelGesture?.());\n const step = (event: { shiftKey: boolean }) => (event.shiftKey ? 5 : 15);\n const shiftHeld = { current: false };\n const trackShift = (event: KeyboardEvent) => {\n shiftHeld.current = event.shiftKey;\n };\n onMount(() => {\n window.addEventListener(\"keydown\", trackShift, true);\n window.addEventListener(\"keyup\", trackShift, true);\n onCleanup(() => {\n window.removeEventListener(\"keydown\", trackShift, true);\n window.removeEventListener(\"keyup\", trackShift, true);\n });\n });\n const endGesture = () => {\n setGhost(null);\n setGapHit(null);\n setMovingId(\"\");\n setDragging(\"\");\n };\n\n const startMove = (pointerEvent: PointerEvent, event: CalendarEvent, key: string, start: number, end: number, scroller?: HTMLElement) => {\n const marker = event.display === \"marker\";\n if (!props.owner.onEventDrop) return;\n const body = bodies.get(key);\n if (!body) return;\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n const grab = dayMinuteAt(geometry, pointerEvent.clientY - rect.top) - start;\n const length = end - start;\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n resolve: (clientX, clientY) => {\n const hit = bodyAt(clientX, clientY);\n if (!hit) return null;\n const limit = limitOf(hit.key);\n const from = Math.max(\n 0,\n Math.min(limit - Math.max(length, 15), snapMinutes(hit.minute - grab, step({ shiftKey: shiftHeld.current }))),\n );\n return { key: hit.key, start: from, end: from + length };\n },\n onActivate: () => {\n setMovingId(event.id);\n setDragging(\"move\");\n setSelection(null);\n },\n onPreview: (next) => {\n const clash = marker ? null : overlapAt(next.key, next.start, next.end, event.id);\n const fit = marker ? null : fitAt(next.key, next.start + (next.end - next.start) / 2, next.end - next.start, next);\n setGapHit(fit ? { key: next.key, start: fit.gap.start, fits: fit.fits, text: fit.text } : null);\n const time = marker\n ? messages().calendarDue({ time: clock(next.start) })\n : `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`;\n setGhost({\n key: next.key,\n start: next.start,\n end: marker ? next.start + 20 : next.end,\n title: event.title,\n time: clash ? `${time} · ${messages().calendarOverlaps({ title: clash.title })}` : time,\n colorHex: eventAccent(event),\n warn: Boolean(clash),\n fit: fit ? { fits: fit.fits, text: fit.text } : undefined,\n });\n },\n onCommit: (next) => {\n endGesture();\n swallowNextClick();\n if (next.key === key && next.start === start && next.end === end) return;\n const source = sourceOf().get(event);\n // A moved entry keeps its real length, also when it lands across a clock change.\n const startDate = instant(next.key, next.start);\n const endDate = marker\n ? startDate\n : source\n ? new Date(startDate.getTime() + source.end.getTime() - source.start.getTime())\n : slot(next.key, next.start, next.end).end;\n if (source && source.start.getTime() === startDate.getTime() && source.end.getTime() === endDate.getTime()) return;\n props.owner.onEventDrop?.(event, { start: startDate, end: endDate, allDay: false });\n },\n onCancel: endGesture,\n });\n };\n\n const startResize = (\n pointerEvent: PointerEvent,\n event: CalendarEvent,\n key: string,\n start: number,\n end: number,\n edge: \"start\" | \"end\",\n scroller?: HTMLElement,\n ) => {\n if (!props.owner.onEventResize) return;\n pointerEvent.preventDefault();\n pointerEvent.stopPropagation();\n const body = bodies.get(key);\n if (!body) return;\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n threshold: 1,\n resolve: (_clientX, clientY) => {\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n const minute = snapMinutes(dayMinuteAt(geometry, clientY - rect.top), step({ shiftKey: shiftHeld.current }));\n const limit = limitOf(key);\n const size = step({ shiftKey: shiftHeld.current });\n return edge === \"end\"\n ? { start, end: Math.max(start + size, Math.min(limit, minute)) }\n : { start: Math.max(0, Math.min(end - size, minute)), end };\n },\n onActivate: () => {\n setMovingId(event.id);\n setDragging(edge);\n },\n onPreview: (next) =>\n setGhost({\n key,\n start: next.start,\n end: next.end,\n title: event.title,\n time: `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`,\n colorHex: eventAccent(event),\n }),\n onCommit: (next) => {\n endGesture();\n swallowNextClick();\n if (next.start === start && next.end === end) return;\n const source = sourceOf().get(event);\n const range = source ? resizedInDay(source, edge, key, next, props.hours, dateConfig()) : slot(key, next.start, next.end);\n props.owner.onEventResize?.(event, { ...range, allDay: false });\n },\n onCancel: endGesture,\n });\n };\n\n /** Drawing on free time: a new event with its live length, on a 15-minute grid, with Shift on 5 minutes. */\n const startDraw = (pointerEvent: PointerEvent, key: string, scroller?: HTMLElement) => {\n if (!canCreate() || pointerEvent.pointerType !== \"mouse\") return;\n const body = bodies.get(key);\n if (!body) return;\n const minuteAt = (clientY: number) => {\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n return Math.max(0, Math.min(limitOf(key), dayMinuteAt(geometry, clientY - rect.top)));\n };\n const origin = minuteAt(pointerEvent.clientY);\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n resolve: (_clientX, clientY) => {\n const size = step({ shiftKey: shiftHeld.current });\n const minute = minuteAt(clientY);\n const from = Math.floor(Math.min(origin, minute) / size) * size;\n let to = Math.ceil(Math.max(origin, minute) / size) * size;\n if (to - from < size) to = from + size;\n return { start: from, end: Math.min(to, limitOf(key)) };\n },\n onActivate: () => {\n setDragging(\"draw\");\n setSelection(null);\n setTouchDraft(null);\n },\n onPreview: (next) =>\n setGhost({\n key,\n start: next.start,\n end: next.end,\n title: messages().calendarNewEvent,\n time: `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`,\n }),\n onCommit: (next) => {\n const anchor = document.querySelector<HTMLElement>(\".k2b-calendar-ghost[data-live]\")?.getBoundingClientRect() ?? body.element;\n endGesture();\n swallowNextClick();\n openQuickCreate(key, next.start, next.end, anchor);\n },\n onCancel: endGesture,\n });\n };\n\n /** Follows a pointer that pressed an entry outside the calendar into its free time. */\n const dragIn = (\n pointerEvent: PointerEvent,\n item: CalendarExternalDrag,\n onDrop: (slot: CalendarEventTimeChange) => void,\n scroller?: HTMLElement,\n ) => {\n if (pointerEvent.button !== 0 || !pointerEvent.isPrimary) return;\n cancelGesture?.();\n cancelGesture = undefined;\n const length = Math.max(15, Math.round(item.minutes));\n const color = item.colorHex ?? COLOR_TOKENS[item.color ?? \"blue\"]!;\n let token: HTMLElement | undefined;\n let spring: { element: Element; timer: number } | undefined;\n const target =\n pointerEvent.target instanceof HTMLElement ? pointerEvent.target.closest<HTMLElement>(\"li, [data-calendar-drag-source]\") : null;\n let held = false;\n let cleaned = false;\n const preventContextMenu = (event: Event) => event.preventDefault();\n const preventScroll = (event: TouchEvent) => {\n if (held) event.preventDefault();\n };\n const cleanup = () => {\n if (cleaned) return;\n cleaned = true;\n document.removeEventListener(\"touchmove\", preventScroll);\n window.removeEventListener(\"contextmenu\", preventContextMenu, true);\n if (pointerEvent.pointerType === \"touch\") held = false;\n if (target) delete target.dataset.lifted;\n token?.remove();\n token = undefined;\n if (spring) window.clearTimeout(spring.timer);\n spring = undefined;\n endGesture();\n };\n const begin = () => {\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n armAutoScroll: true,\n threshold: held && pointerEvent.pointerType !== \"mouse\" ? 1 : 6,\n resolve: (clientX, clientY) => {\n const hit = bodyAt(clientX, clientY);\n if (!hit || hit.minute >= limitOf(hit.key)) return { key: \"\", start: 0, end: 0, clash: null };\n const fit = fitAt(hit.key, hit.minute, length);\n let start = snapMinutes(hit.minute - length / 2, 15);\n if (fit?.fits) start = Math.max(fit.gap.start, Math.min(fit.gap.end - length, start));\n start = Math.max(0, Math.min(limitOf(hit.key) - length, start));\n return { key: hit.key, start, end: start + length, clash: overlapAt(hit.key, start, start + length), fit };\n },\n onActivate: () => {\n setDragging(\"external\");\n setSelection(null);\n token = document.createElement(\"div\");\n token.className = \"k2b-calendar-token\";\n token.textContent = item.title;\n token.style.setProperty(\"--k2b-calendar-accent\", color);\n token.setAttribute(\"aria-hidden\", \"true\");\n document.body.append(token);\n },\n onMove: (clientX, clientY) => {\n if (token) token.style.transform = `translate(${clientX + 12}px, ${clientY + 10}px)`;\n // A folded run of empty days opens when the entry rests on it.\n const empty = document.elementFromPoint(clientX, clientY)?.closest(\"[data-calendar-unfold]\");\n if (empty && spring?.element !== empty) {\n if (spring) window.clearTimeout(spring.timer);\n spring = { element: empty, timer: window.setTimeout(() => (empty as HTMLElement).click(), 650) };\n } else if (!empty && spring) {\n window.clearTimeout(spring.timer);\n spring = undefined;\n }\n },\n onPreview: (next) => {\n if (token) token.dataset.hidden = next.key ? \"true\" : \"false\";\n if (!next.key) {\n setGhost(null);\n setGapHit(null);\n return;\n }\n setGapHit(next.fit ? { key: next.key, start: next.fit.gap.start, fits: next.fit.fits, text: next.fit.text } : null);\n const time = `${clock(next.start)}–${clock(next.end)} · ${duration(length)}`;\n setGhost({\n key: next.key,\n start: next.start,\n end: next.end,\n title: item.title,\n time: next.clash ? `${time} · ${messages().calendarOverlaps({ title: next.clash.title })}` : time,\n colorHex: color,\n warn: Boolean(next.clash),\n fit: next.fit ? { fits: next.fit.fits, text: next.fit.text } : undefined,\n });\n },\n onCommit: (next) => {\n swallowNextClick();\n if (next.key) onDrop({ ...slot(next.key, next.start, next.end), allDay: false });\n },\n onEnd: cleanup,\n });\n };\n if (pointerEvent.pointerType === \"mouse\") {\n begin();\n return;\n }\n // A finger first holds the entry still, so a short swipe keeps scrolling the list it sits in.\n const origin = { x: pointerEvent.clientX, y: pointerEvent.clientY };\n const abort = () => {\n window.clearTimeout(timer);\n window.removeEventListener(\"pointermove\", watch);\n window.removeEventListener(\"pointerup\", abort);\n window.removeEventListener(\"pointercancel\", abort);\n window.removeEventListener(\"contextmenu\", preventContextMenu, true);\n if (target) delete target.dataset.lifted;\n if (cancelGesture === abort) cancelGesture = undefined;\n };\n const watch = (event: PointerEvent) => {\n if (event.pointerId === pointerEvent.pointerId && Math.hypot(event.clientX - origin.x, event.clientY - origin.y) > 10) abort();\n };\n const timer = window.setTimeout(() => {\n abort();\n held = true;\n if (target) target.dataset.lifted = \"true\";\n navigator.vibrate?.(8);\n document.addEventListener(\"touchmove\", preventScroll, { passive: false });\n window.addEventListener(\"contextmenu\", preventContextMenu, true);\n begin();\n }, 420);\n window.addEventListener(\"pointermove\", watch);\n window.addEventListener(\"pointerup\", abort);\n window.addEventListener(\"pointercancel\", abort);\n window.addEventListener(\"contextmenu\", preventContextMenu, true);\n cancelGesture = abort;\n };\n\n return {\n props,\n messages,\n dateConfig,\n hours,\n wake,\n range,\n anchorKey,\n days,\n dayOf,\n keyOf,\n parseKey,\n nowKey,\n nowMinute,\n nowIn,\n calendarToday,\n clock,\n duration,\n instant,\n normalized,\n checkedOf,\n toggleCheck,\n checkOf,\n justChecked,\n cheered,\n selection,\n setSelection,\n touchDraft,\n setTouchDraft,\n activeKey,\n setActiveKey,\n ghost,\n gapHit,\n movingId,\n dragging,\n nightOpen,\n setNight,\n quick,\n setQuick,\n openQuickCreate,\n canCreate,\n createTarget,\n rangeOfSelection,\n registerBody,\n bodyAt,\n limitOf,\n startMove,\n startResize,\n startDraw,\n dragIn,\n dayStartMinute,\n };\n};\n\nexport type TimeView = ReturnType<typeof createTimeView>;\n\n/**\n * German short dates read \"Fr 9. Okt\", without the dots of the abbreviations; with `comma`, a title such as\n * \"Fr, 9. Okt 2026\" keeps the comma after the day.\n */\nexport const compactGermanDate = (text: string, locale: string | undefined, comma = false) =>\n locale?.startsWith(\"de\")\n ? text\n .replace(comma ? /\\b(Mo|Di|Mi|Do|Fr|Sa|So)\\./g : /\\b(Mo|Di|Mi|Do|Fr|Sa|So)\\.,?/g, \"$1\")\n .replace(/\\b(Jan|Feb|Mär|Apr|Jun|Jul|Aug|Sep|Sept|Okt|Nov|Dez)\\./g, \"$1\")\n : text;\n\n/** A short day such as \"Fri 9\" or \"Fr 9.\", in the calendar's locale. */\nexport const shortDay = (view: TimeView, key: string, withMonth = false) =>\n compactGermanDate(\n view.parseKey(key).toLocaleDateString(view.dateConfig().locale ?? \"en\", {\n weekday: \"short\",\n day: \"numeric\",\n ...(withMonth ? { month: \"short\" } : {}),\n timeZone: view.dateConfig().timeZone,\n }),\n view.dateConfig().locale,\n );\n\n/** A long day such as \"Friday, October 9\", with the year when it is not this year's. */\nexport const longDay = (view: TimeView, key: string) =>\n view.parseKey(key).toLocaleDateString(view.dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n ...(key.slice(0, 4) !== view.calendarToday().slice(0, 4) ? { year: \"numeric\" } : {}),\n timeZone: view.dateConfig().timeZone,\n });\n\nconst CHECK_PATH = \"M4.6 8.3l2.3 2.3 4.6-4.9\";\n\n/** A to-do's checkbox: it draws its check, and the title beside it strikes through. */\nexport const TimeCheck = (props: { view: TimeView; event: CalendarEvent; tabIndex?: number }) => {\n const checked = () => props.view.checkedOf(props.event) ?? false;\n const box = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <rect x=\"1.75\" y=\"1.75\" width=\"12.5\" height=\"12.5\" rx=\"3.5\" />\n <path d={CHECK_PATH} />\n </svg>\n );\n return (\n <Show\n when={props.view.props.owner.onEventCheck}\n fallback={\n <span class=\"k2b-calendar-check\" data-checked={checked() ? \"true\" : undefined} aria-hidden=\"true\">\n {box}\n </span>\n }\n >\n <button\n type=\"button\"\n class=\"k2b-calendar-check\"\n role=\"checkbox\"\n aria-checked={checked() ? \"true\" : \"false\"}\n aria-label={props.view.messages().calendarDone({ title: props.event.title })}\n tabIndex={props.tabIndex}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={props.view.justChecked().has(props.event.id) ? \"true\" : undefined}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n props.view.toggleCheck(props.event);\n }}\n >\n {box}\n </button>\n </Show>\n );\n};\n\n/** A timed entry in a day's timeline: a band as long as the entry, side by side with overlapping ones. */\nexport const TimeBand = (props: {\n view: TimeView;\n band: DayLane<CalendarEvent>;\n dayKey: string;\n expanded: boolean;\n compact?: boolean;\n /** Day view: a tall band shows its place. */\n showLocation?: boolean;\n /** The height of an hour on a wide screen, for the band's size class and title lines. */\n hourPx: number;\n tabIndex?: number;\n stop?: CalendarStop;\n scroller?: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const event = () => props.band.item;\n const wake = () => view.wake();\n const limit = () => (props.expanded ? DAY_MINUTES : wake());\n const visibleStart = () => Math.max(0, props.band.start);\n const visibleEnd = () => Math.min(limit(), props.band.end);\n const top = () => dayTopTerms(wake(), props.expanded, visibleStart());\n const bottom = () => dayYTerms(wake(), props.expanded, visibleEnd());\n const now = () => view.nowIn(props.dayKey);\n const running = () => now() >= props.band.start && now() < props.band.end && Number.isFinite(now());\n const past = () => now() >= props.band.end;\n const length = () => props.band.end - props.band.start;\n const pixels = () => (length() / 60) * props.hourPx - 2;\n const size = () => (pixels() < 27 ? \"xs\" : pixels() < 40 ? \"s\" : \"m\");\n const checked = () => view.checkedOf(event());\n const remaining = () => (running() ? view.messages().calendarRemaining({ duration: view.duration(props.band.end - now()) }) : undefined);\n const lines = () => Math.max(1, Math.floor((pixels() - 24) / 15));\n return (\n <div\n class=\"k2b-calendar-band\"\n data-calendar-entry={event().id}\n data-size={size()}\n data-past={past() ? \"true\" : undefined}\n data-running={running() ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event().id) ? \"true\" : undefined}\n data-cut-bottom={props.band.end > limit() ? \"true\" : undefined}\n data-moving={view.movingId() === event().id ? \"true\" : undefined}\n data-display={event().display}\n style={{\n \"--k2b-calendar-accent\": eventAccent(event()),\n \"--k2b-calendar-lane\": String(props.band.lane),\n \"--k2b-calendar-lanes\": String(props.band.lanes),\n \"--k2b-calendar-lines\": String(lines()),\n \"--k2b-calendar-progress\": running() ? `${(((now() - props.band.start) / length()) * 100).toFixed(1)}%` : undefined,\n top: `calc(${termsCss(top())} + 1px)`,\n height: `max(var(--k2b-calendar-band-min), calc(${termsCss(subtractTerms(bottom(), top()))} - 2px))`,\n }}\n >\n <Show when={running()}>\n <span class=\"k2b-calendar-band__fill\" aria-hidden=\"true\" />\n </Show>\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event()} tabIndex={props.tabIndex === undefined ? undefined : -1} />\n </Show>\n <EventChip\n event={view.normalized(event(), props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, event())}\n fill\n timeline\n compact={props.compact}\n timeLabel={`${view.clock(props.band.start)}–${view.clock(props.band.end)}`}\n showLocation={props.showLocation && size() === \"m\" && pixels() >= 64}\n remaining={remaining()}\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event())}\n moving={view.movingId() === event().id}\n tabIndex={props.tabIndex}\n stop={props.stop}\n onMovePointerDown={\n view.props.owner.onEventDrop\n ? (pointerEvent) => view.startMove(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, props.scroller?.())\n : undefined\n }\n />\n <Show when={view.props.owner.onEventResize}>\n <span\n class=\"k2b-calendar-band__grip\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n onPointerDown={(pointerEvent) =>\n view.startResize(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, \"start\", props.scroller?.())\n }\n />\n <Show when={props.band.end <= limit()}>\n <span\n class=\"k2b-calendar-band__grip\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n onPointerDown={(pointerEvent) =>\n view.startResize(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, \"end\", props.scroller?.())\n }\n />\n </Show>\n </Show>\n </div>\n );\n};\n\n/** A point in time such as a deadline: a dashed line across the day and a pill with its checkbox and title. */\nexport const TimeMarker = (props: {\n view: TimeView;\n event: CalendarEvent;\n minute: number;\n dayKey: string;\n expanded: boolean;\n above: boolean;\n /** The pill's place among deadlines whose pills would cover each other, from the left. */\n lane: number;\n lanes: number;\n showTime: boolean;\n tabIndex?: number;\n stop?: CalendarStop;\n scroller?: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const checked = () => view.checkedOf(props.event);\n const past = () => view.nowIn(props.dayKey) >= props.minute;\n return (\n <div\n class=\"k2b-calendar-marker\"\n data-calendar-entry={props.event.id}\n data-past={past() ? \"true\" : undefined}\n data-overdue={past() && checked() === false ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(props.event.id) ? \"true\" : undefined}\n data-above={props.above ? \"true\" : undefined}\n data-moving={view.movingId() === props.event.id ? \"true\" : undefined}\n style={{\n \"--k2b-calendar-accent\": eventAccent(props.event),\n \"--k2b-calendar-marker-lane\": String(props.lane),\n \"--k2b-calendar-marker-lanes\": String(props.lanes),\n top: termsCss(dayTopTerms(view.wake(), props.expanded, props.minute)),\n }}\n >\n <span class=\"k2b-calendar-marker__line\" aria-hidden=\"true\" />\n <span class=\"k2b-calendar-marker__pill\">\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={props.event} tabIndex={props.tabIndex === undefined ? undefined : -1} />\n </Show>\n <EventChip\n event={view.normalized(props.event, props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, props.event)}\n compact\n timeline\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(props.event)}\n tabIndex={props.tabIndex}\n stop={props.stop}\n trailing={\n <Show when={props.showTime}>\n <span class=\"k2b-calendar-marker__time\">{view.clock(props.minute)}</span>\n </Show>\n }\n onMovePointerDown={\n view.props.owner.onEventDrop\n ? (pointerEvent) => view.startMove(pointerEvent, props.event, props.dayKey, props.minute, props.minute, props.scroller?.())\n : undefined\n }\n />\n </span>\n </div>\n );\n};\n\n/** Free time between entries, labelled from an hour on; activating it creates there. */\nexport const TimeGap = (props: {\n view: TimeView;\n gap: DayGap;\n dayKey: string;\n expanded: boolean;\n /** A deadline pill near the middle moves the label aside. */\n aside: boolean;\n tabIndex?: number;\n stop?: CalendarStop;\n}) => {\n const view = props.view;\n const length = () => props.gap.end - props.gap.start;\n const proposal = () => gapProposal(props.gap, view.hours());\n const label = () => view.messages().calendarFree({ duration: view.duration(length()) });\n const hit = () => {\n const current = view.gapHit();\n return current && current.key === props.dayKey && current.start === props.gap.start ? current : null;\n };\n const top = () => dayYTerms(view.wake(), props.expanded, props.gap.start);\n /**\n * Shorter free time is hidden until something is dragged into it, and past free time has no label, so neither is a\n * keyboard stop.\n */\n const labelled = () => length() >= GAP_LABEL_MINUTES;\n const stop = () => (labelled() && !props.gap.past ? props.stop : undefined);\n return (\n <div\n class=\"k2b-calendar-gap\"\n data-short={labelled() ? undefined : \"true\"}\n data-long={length() >= GAP_LONG_MINUTES ? \"true\" : undefined}\n data-past={props.gap.past ? \"true\" : undefined}\n data-aside={props.aside ? \"true\" : undefined}\n data-hit={hit() ? (hit()!.fits ? \"fit\" : \"short\") : undefined}\n style={{ top: termsCss(top()), height: termsCss(subtractTerms(dayYTerms(view.wake(), props.expanded, props.gap.end), top())) }}\n >\n <span class=\"k2b-calendar-gap__zone\" aria-hidden=\"true\" />\n <Show when={view.canCreate()}>\n <button\n type=\"button\"\n class=\"k2b-calendar-gap__button\"\n tabIndex={labelled() ? (props.tabIndex ?? (props.gap.past ? -1 : 0)) : -1}\n data-stop={stop()?.id}\n data-col={stop()?.column}\n data-minute={stop()?.minute}\n aria-label={view.messages().calendarFreeAction({\n duration: view.duration(length()),\n from: view.clock(props.gap.start),\n to: view.clock(props.gap.end),\n start: view.clock(proposal()[0]),\n end: view.clock(proposal()[1]),\n })}\n title={view.messages().calendarCreateAt({ start: view.clock(proposal()[0]), end: view.clock(proposal()[1]) })}\n onClick={(event) => {\n event.stopPropagation();\n view.openQuickCreate(props.dayKey, proposal()[0], proposal()[1], event.currentTarget);\n }}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span class=\"k2b-calendar-gap__text\">{hit() ? hit()!.text : label()}</span>\n </button>\n </Show>\n </div>\n );\n};\n\n/** The preview of a drag, a draw, or an entry dragged in, and the selected slot. */\nexport const TimeOverlays = (props: { view: TimeView; dayKey: string; expanded: boolean }) => {\n const view = props.view;\n const ghost = () => {\n const current = view.ghost();\n return current && current.key === props.dayKey ? current : null;\n };\n const selected = () => {\n const current = view.selection();\n return current && current.key === props.dayKey && current.start !== undefined && current.end !== undefined ? current : null;\n };\n const draft = () => {\n const current = view.touchDraft();\n return current && current.key === props.dayKey ? current : null;\n };\n const box = (start: number, end: number) => {\n const top = dayTopTerms(view.wake(), props.expanded, start);\n return { top: termsCss(top), height: termsCss(subtractTerms(dayYTerms(view.wake(), props.expanded, end), top)) };\n };\n return (\n <>\n <Show when={selected()}>\n {(slot) => <span class=\"k2b-calendar-slot\" style={box(slot().start!, slot().end!)} aria-hidden=\"true\" />}\n </Show>\n <Show when={draft()}>\n {(slot) => (\n <div class=\"k2b-calendar-draft\" style={box(slot().start, slot().end)}>\n <span\n class=\"k2b-calendar-draft__grip\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n onPointerDown={(event) => startDraftResize(view, event, \"start\")}\n />\n <button\n type=\"button\"\n class=\"k2b-calendar-draft__open\"\n aria-label={view.messages().calendarCreateAt({ start: view.clock(slot().start), end: view.clock(slot().end) })}\n onClick={(event) => view.openQuickCreate(slot().key, slot().start, slot().end, event.currentTarget)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span>\n {view.clock(slot().start)}–{view.clock(slot().end)} · {view.duration(slot().end - slot().start)}\n </span>\n </button>\n <span\n class=\"k2b-calendar-draft__grip\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n onPointerDown={(event) => startDraftResize(view, event, \"end\")}\n />\n </div>\n )}\n </Show>\n <Show when={ghost()}>\n {(current) => (\n <div\n class=\"k2b-calendar-ghost\"\n data-live=\"true\"\n data-size={current().end - current().start < 40 ? \"s\" : \"m\"}\n data-warn={current().warn ? \"true\" : undefined}\n style={{ ...box(current().start, current().end), \"--k2b-calendar-accent\": current().colorHex ?? \"var(--k2b-action)\" }}\n aria-hidden=\"true\"\n >\n <span class=\"k2b-calendar-ghost__title\">{current().title}</span>\n <span class=\"k2b-calendar-ghost__time\">{current().time}</span>\n <Show when={current().fit}>\n {(fit) => (\n <span class=\"k2b-calendar-ghost__fit\" data-fit={fit().fits ? \"fit\" : \"short\"}>\n {fit().text}\n </span>\n )}\n </Show>\n </div>\n )}\n </Show>\n </>\n );\n};\n\n/** The handles of a tapped slot change its start or end. */\nconst startDraftResize = (view: TimeView, pointerEvent: PointerEvent, edge: \"start\" | \"end\") => {\n const draft = view.touchDraft();\n if (!draft) return;\n pointerEvent.preventDefault();\n pointerEvent.stopPropagation();\n startCalendarPointerSession({\n event: pointerEvent,\n threshold: 1,\n resolve: (clientX, clientY) => {\n const hit = view.bodyAt(clientX, clientY);\n if (!hit || hit.key !== draft.key) return null;\n const minute = snapMinutes(hit.minute, 15);\n const current = view.touchDraft() ?? draft;\n return edge === \"end\"\n ? { ...current, end: Math.max(current.start + 15, Math.min(view.limitOf(draft.key), minute)) }\n : { ...current, start: Math.max(0, Math.min(current.end - 15, minute)) };\n },\n onPreview: (next) => {\n view.setTouchDraft(next);\n view.setSelection({ key: next.key, start: next.start, end: next.end });\n },\n onCommit: () => swallowNextClick(),\n });\n};\n\n/** Free time of a day with the gap of now trimmed, as both views draw it. */\nexport const dayGaps = (view: TimeView, key: string) => freeGaps(view.dayOf(key).bands, view.wake(), view.nowIn(key));\n\n/** The bands of a day with their lanes, cut to what its timeline draws. */\nexport const dayBands = (view: TimeView, key: string, expanded: boolean) => {\n const limit = expanded ? DAY_MINUTES : view.wake();\n const visible = view.dayOf(key).bands.filter((band) => Math.min(limit, band.end) > Math.max(0, band.start));\n return dayLanes(visible, LANE_MINUTES);\n};\n\n/** Entries the folded night hides, as chips with their time. */\nexport const foldedEntries = (view: TimeView, key: string) => {\n const model = view.dayOf(key);\n const wake = view.wake();\n return [\n ...model.bands\n .filter((band) => band.end > wake)\n .map((band) => ({\n event: band.item,\n time: band.start >= wake ? view.clock(band.start) : view.messages().calendarUntil({ time: view.clock(band.end) }),\n })),\n ...model.markers.filter((marker) => marker.minute >= wake).map((marker) => ({ event: marker.item, time: view.clock(marker.minute) })),\n ];\n};\n\n/** The quick create at a slot or gap, as in the month view. */\nexport const TimeQuickCreate = (props: { view: TimeView }) => {\n const view = props.view;\n let element: HTMLDivElement | undefined;\n let returnFocus: HTMLElement | null = null;\n createEffect(() => {\n const current = view.quick();\n if (!element) return;\n if (!current) {\n if (element.matches(\":popover-open\")) element.hidePopover();\n return;\n }\n returnFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n if (!element.matches(\":popover-open\")) element.showPopover();\n queueMicrotask(() => {\n if (view.quick() !== current || !element?.isConnected) return;\n placeCalendarPopover(current.anchor, element);\n element.querySelector<HTMLElement>(\"input,textarea,select,button,a[href],[tabindex]:not([tabindex='-1'])\")?.focus();\n });\n });\n const close = (restore: boolean) => {\n if (!view.quick()) return;\n view.setQuick(null);\n view.setSelection(null);\n if (restore && returnFocus?.isConnected) returnFocus.focus({ preventScroll: true });\n };\n return (\n <div\n ref={element}\n class=\"k2b-calendar-popover\"\n popover=\"auto\"\n role=\"dialog\"\n aria-label={view.messages().calendarQuickCreate}\n data-kind=\"create\"\n onToggle={(event) => {\n if (event.newState !== \"closed\" || !view.quick() || event.currentTarget.matches(\":popover-open\")) return;\n close(event.currentTarget.contains(document.activeElement) || document.activeElement === document.body);\n }}\n >\n <Show when={view.quick()} keyed>\n {(value) =>\n view.props.owner.renderQuickCreate?.(value.range, {\n create: value.create,\n close: () => {\n if (view.quick() === value) close(true);\n },\n })\n }\n </Show>\n </div>\n );\n};\n\n/** All-day entries of a day as chips: bars with torn ends where they go on, and points due that day. */\nexport const AllDayChips = (props: { view: TimeView; dayKey: string; spans: readonly DaySpan<CalendarEvent>[] }) => {\n const view = props.view;\n return (\n <For each={props.spans}>\n {(span) => {\n const event = span.item;\n const checked = () => view.checkedOf(event);\n return (\n <span\n class=\"k2b-calendar-allday-chip\"\n data-bar={span.marker ? undefined : \"true\"}\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event.id) ? \"true\" : undefined}\n style={{ \"--k2b-calendar-accent\": eventAccent(event) }}\n >\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event} />\n </Show>\n <EventChip\n event={view.normalized(event, props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, event)}\n compact\n timeline\n bar={!span.marker}\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event)}\n continuesBefore={span.firstKey < props.dayKey}\n continuesAfter={span.lastKey > props.dayKey}\n />\n </span>\n );\n }}\n </For>\n );\n};\n\n/** Hour labels and lines of a day's timeline with the night open, and the date at midnight. */\nexport const nightHours = (wake: number) => {\n const hours: number[] = [];\n for (let minute = wake + 60; minute < DAY_MINUTES; minute += 60) hours.push(minute);\n return hours;\n};\n\nexport const isNearNow = (view: TimeView, key: string, minute: number) => key === view.nowKey() && Math.abs(view.nowMinute() - minute) < 14;\n\n/** Whether a marker sits right above a band's start, so its pill goes above the line. */\nexport const markerAbove = (model: DayModel<CalendarEvent>, minute: number) =>\n model.bands.some((band) => band.start >= minute - 10 && band.start <= minute + 20);\n\n/** Whether a deadline pill sits near the middle of a gap, so the gap's label moves aside. */\nexport const gapAside = (model: DayModel<CalendarEvent>, gap: DayGap) => {\n const middle = (gap.start + gap.end) / 2;\n return model.markers.some(\n (marker) => marker.minute > gap.start - 10 && marker.minute < gap.end + 10 && Math.abs(marker.minute - middle) < 25,\n );\n};\n\n/** A day's counts for its header: events and all-day entries, to-dos and deadlines. */\nexport const daySummary = (view: TimeView, key: string) => {\n const model = view.dayOf(key);\n const isTask = (event: CalendarEvent) => event.display === \"marker\" || event.checked !== undefined;\n const all = [\n ...model.bands.map((band) => band.item),\n ...model.markers.map((marker) => marker.item),\n ...model.spans.map((span) => span.item),\n ];\n const tasks = all.filter(isTask).length;\n return view.messages().calendarDaySummary({ events: all.length - tasks, tasks });\n};\n\n/** What starts within the next hour today, such as \"Planning in 12 min\". */\nexport const soonNote = (view: TimeView, key: string) => {\n if (key !== view.nowKey()) return \"\";\n const now = view.nowMinute();\n const next = view\n .dayOf(key)\n .bands.filter((band) => band.start > now && band.start - now <= 60 && !view.checkedOf(band.item))\n .sort((left, right) => left.start - right.start)[0];\n return next ? view.messages().calendarSoon({ title: next.item.title, duration: view.duration(next.start - now) }) : \"\";\n};\n\n/** The busy minutes of a day's waking hours, merged, with the color of the first entry, for the thin load line. */\nexport const dayLoad = (view: TimeView, key: string) => {\n const pieces = view\n .dayOf(key)\n .bands.map((band) => ({ start: Math.max(0, band.start), end: Math.min(view.wake(), band.end), color: eventAccent(band.item) }))\n .filter((piece) => piece.end > piece.start)\n .sort((left, right) => left.start - right.start);\n const merged: typeof pieces = [];\n for (const piece of pieces) {\n const last = merged[merged.length - 1];\n if (last && piece.start <= last.end) last.end = Math.max(last.end, piece.end);\n else merged.push({ ...piece });\n }\n return merged;\n};\n\n/** Day keys of the week that holds a day, from its first day. */\nexport const weekKeysOf = (view: TimeView, key: string) => {\n const start = view.keyOf(calendar.startOfWeek(view.parseKey(key), view.dateConfig()));\n return Array.from({ length: 7 }, (_, index) => addDayKeys(start, index));\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { i18n } from "@k2b/stdlib";
|
|
2
|
+
import { useLocale } from "../intl/locale";
|
|
3
|
+
const chartMessages = i18n.define({
|
|
4
|
+
baseLocale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
en: {
|
|
7
|
+
chartView: "Chart view",
|
|
8
|
+
chartDiagram: "Diagram",
|
|
9
|
+
chartData: "Table",
|
|
10
|
+
chartSeries: "Series visibility",
|
|
11
|
+
chartOnly: "Only",
|
|
12
|
+
chartShowAll: "Show all",
|
|
13
|
+
chartShowing: "Showing",
|
|
14
|
+
chartSelectedDatum: "Selected data point",
|
|
15
|
+
chartReference: "Reference",
|
|
16
|
+
chartCurrent: "Current",
|
|
17
|
+
chartPinReference: "Pin as reference",
|
|
18
|
+
chartRemoveComparison: "Remove comparison",
|
|
19
|
+
chartPreviousData: "The chart and table still show the last loaded filters",
|
|
20
|
+
chartCopyData: "Copy data",
|
|
21
|
+
chartCopyFailed: "Could not copy data",
|
|
22
|
+
chartLegend: "Legend",
|
|
23
|
+
chartRowsShown: ({
|
|
24
|
+
shown,
|
|
25
|
+
total
|
|
26
|
+
}) => `Showing ${shown} of ${total} rows. Sort to see others; Copy data copies all of them.`,
|
|
27
|
+
interactiveLineChart: "Interactive line chart",
|
|
28
|
+
interactiveChart: "Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.",
|
|
29
|
+
chartFields: ({
|
|
30
|
+
key
|
|
31
|
+
}) => {
|
|
32
|
+
const labels = {
|
|
33
|
+
x: "X",
|
|
34
|
+
y: "Y",
|
|
35
|
+
value: "Value",
|
|
36
|
+
percent: "Share",
|
|
37
|
+
total: "Total",
|
|
38
|
+
from: "From",
|
|
39
|
+
to: "To",
|
|
40
|
+
upperInclusive: "Includes upper bound",
|
|
41
|
+
count: "Count",
|
|
42
|
+
q1: "Lower quartile",
|
|
43
|
+
q2: "Median",
|
|
44
|
+
q3: "Upper quartile",
|
|
45
|
+
whiskerLow: "Lower whisker",
|
|
46
|
+
whiskerHigh: "Upper whisker",
|
|
47
|
+
min: "Minimum",
|
|
48
|
+
max: "Maximum",
|
|
49
|
+
threshold: "Threshold",
|
|
50
|
+
delta: "Change",
|
|
51
|
+
latitude: "Latitude",
|
|
52
|
+
longitude: "Longitude",
|
|
53
|
+
size: "Size",
|
|
54
|
+
state: "State",
|
|
55
|
+
duration: "Duration",
|
|
56
|
+
detail: "Detail",
|
|
57
|
+
errY: "Y error",
|
|
58
|
+
errYHigh: "Upper Y error",
|
|
59
|
+
errYLow: "Lower Y error",
|
|
60
|
+
errX: "X error",
|
|
61
|
+
errXHigh: "Upper X error",
|
|
62
|
+
errXLow: "Lower X error"
|
|
63
|
+
};
|
|
64
|
+
return labels[key] ?? key;
|
|
65
|
+
},
|
|
66
|
+
interactiveMap: "Interactive map",
|
|
67
|
+
interactiveTimeline: "Interactive timeline",
|
|
68
|
+
series: "Series",
|
|
69
|
+
resetMapView: "Reset map view",
|
|
70
|
+
resetTimelineView: "Reset timeline view"
|
|
71
|
+
},
|
|
72
|
+
de: {
|
|
73
|
+
chartView: "Diagrammansicht",
|
|
74
|
+
chartDiagram: "Diagramm",
|
|
75
|
+
chartData: "Tabelle",
|
|
76
|
+
chartSeries: "Sichtbare Datenreihen",
|
|
77
|
+
chartOnly: "Nur diese",
|
|
78
|
+
chartShowAll: "Alle anzeigen",
|
|
79
|
+
chartShowing: "Angezeigt",
|
|
80
|
+
chartSelectedDatum: "Ausgewählter Datenpunkt",
|
|
81
|
+
chartReference: "Vergleich",
|
|
82
|
+
chartCurrent: "Aktuell",
|
|
83
|
+
chartPinReference: "Als Vergleich merken",
|
|
84
|
+
chartRemoveComparison: "Vergleich entfernen",
|
|
85
|
+
chartPreviousData: "Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter",
|
|
86
|
+
chartCopyData: "Daten kopieren",
|
|
87
|
+
chartCopyFailed: "Daten konnten nicht kopiert werden",
|
|
88
|
+
chartLegend: "Legende",
|
|
89
|
+
chartRowsShown: ({
|
|
90
|
+
shown,
|
|
91
|
+
total
|
|
92
|
+
}) => `${shown} von ${total} Zeilen werden angezeigt. Sortiere, um andere zu sehen; „Daten kopieren“ kopiert alle.`,
|
|
93
|
+
interactiveLineChart: "Interaktives Liniendiagramm",
|
|
94
|
+
interactiveChart: "Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.",
|
|
95
|
+
chartFields: ({
|
|
96
|
+
key
|
|
97
|
+
}) => {
|
|
98
|
+
const labels = {
|
|
99
|
+
x: "X",
|
|
100
|
+
y: "Y",
|
|
101
|
+
value: "Wert",
|
|
102
|
+
percent: "Anteil",
|
|
103
|
+
total: "Gesamt",
|
|
104
|
+
from: "Von",
|
|
105
|
+
to: "Bis",
|
|
106
|
+
upperInclusive: "Obergrenze enthalten",
|
|
107
|
+
count: "Anzahl",
|
|
108
|
+
q1: "Unteres Quartil",
|
|
109
|
+
q2: "Median",
|
|
110
|
+
q3: "Oberes Quartil",
|
|
111
|
+
whiskerLow: "Unterer Whisker",
|
|
112
|
+
whiskerHigh: "Oberer Whisker",
|
|
113
|
+
min: "Minimum",
|
|
114
|
+
max: "Maximum",
|
|
115
|
+
threshold: "Schwellenwert",
|
|
116
|
+
delta: "Änderung",
|
|
117
|
+
latitude: "Breitengrad",
|
|
118
|
+
longitude: "Längengrad",
|
|
119
|
+
size: "Größe",
|
|
120
|
+
state: "Zustand",
|
|
121
|
+
duration: "Dauer",
|
|
122
|
+
detail: "Details",
|
|
123
|
+
errY: "Y-Fehler",
|
|
124
|
+
errYHigh: "Oberer Y-Fehler",
|
|
125
|
+
errYLow: "Unterer Y-Fehler",
|
|
126
|
+
errX: "X-Fehler",
|
|
127
|
+
errXHigh: "Oberer X-Fehler",
|
|
128
|
+
errXLow: "Unterer X-Fehler"
|
|
129
|
+
};
|
|
130
|
+
return labels[key] ?? key;
|
|
131
|
+
},
|
|
132
|
+
interactiveMap: "Interaktive Karte",
|
|
133
|
+
interactiveTimeline: "Interaktive Zeitachse",
|
|
134
|
+
series: "Datenreihe",
|
|
135
|
+
resetMapView: "Kartenansicht zurücksetzen",
|
|
136
|
+
resetTimelineView: "Zeitachsenansicht zurücksetzen"
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
/** Resolved from the inherited render locale. */
|
|
141
|
+
export const useChartMessages = () => {
|
|
142
|
+
const locale = useLocale();
|
|
143
|
+
return () => chartMessages.resolve([locale()]).t;
|
|
144
|
+
};
|
|
145
|
+
export const checkChartMessages = () => chartMessages.check();
|
|
146
|
+
//# sourceMappingURL=chart-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["content/chart-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst chartMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n chartView: \"Chart view\",\n chartDiagram: \"Diagram\",\n chartData: \"Table\",\n chartSeries: \"Series visibility\",\n chartOnly: \"Only\",\n chartShowAll: \"Show all\",\n chartShowing: \"Showing\",\n chartSelectedDatum: \"Selected data point\",\n chartReference: \"Reference\",\n chartCurrent: \"Current\",\n chartPinReference: \"Pin as reference\",\n chartRemoveComparison: \"Remove comparison\",\n chartPreviousData: \"The chart and table still show the last loaded filters\",\n chartCopyData: \"Copy data\",\n chartCopyFailed: \"Could not copy data\",\n chartLegend: \"Legend\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `Showing ${shown} of ${total} rows. Sort to see others; Copy data copies all of them.`,\n interactiveLineChart: \"Interactive line chart\",\n interactiveChart:\n \"Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Value\",\n percent: \"Share\",\n total: \"Total\",\n from: \"From\",\n to: \"To\",\n upperInclusive: \"Includes upper bound\",\n count: \"Count\",\n q1: \"Lower quartile\",\n q2: \"Median\",\n q3: \"Upper quartile\",\n whiskerLow: \"Lower whisker\",\n whiskerHigh: \"Upper whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Threshold\",\n delta: \"Change\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n size: \"Size\",\n state: \"State\",\n duration: \"Duration\",\n detail: \"Detail\",\n errY: \"Y error\",\n errYHigh: \"Upper Y error\",\n errYLow: \"Lower Y error\",\n errX: \"X error\",\n errXHigh: \"Upper X error\",\n errXLow: \"Lower X error\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interactive map\",\n interactiveTimeline: \"Interactive timeline\",\n series: \"Series\",\n resetMapView: \"Reset map view\",\n resetTimelineView: \"Reset timeline view\",\n },\n de: {\n chartView: \"Diagrammansicht\",\n chartDiagram: \"Diagramm\",\n chartData: \"Tabelle\",\n chartSeries: \"Sichtbare Datenreihen\",\n chartOnly: \"Nur diese\",\n chartShowAll: \"Alle anzeigen\",\n chartShowing: \"Angezeigt\",\n chartSelectedDatum: \"Ausgewählter Datenpunkt\",\n chartReference: \"Vergleich\",\n chartCurrent: \"Aktuell\",\n chartPinReference: \"Als Vergleich merken\",\n chartRemoveComparison: \"Vergleich entfernen\",\n chartPreviousData: \"Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter\",\n chartCopyData: \"Daten kopieren\",\n chartCopyFailed: \"Daten konnten nicht kopiert werden\",\n chartLegend: \"Legende\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `${shown} von ${total} Zeilen werden angezeigt. Sortiere, um andere zu sehen; „Daten kopieren“ kopiert alle.`,\n interactiveLineChart: \"Interaktives Liniendiagramm\",\n interactiveChart:\n \"Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Wert\",\n percent: \"Anteil\",\n total: \"Gesamt\",\n from: \"Von\",\n to: \"Bis\",\n upperInclusive: \"Obergrenze enthalten\",\n count: \"Anzahl\",\n q1: \"Unteres Quartil\",\n q2: \"Median\",\n q3: \"Oberes Quartil\",\n whiskerLow: \"Unterer Whisker\",\n whiskerHigh: \"Oberer Whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Schwellenwert\",\n delta: \"Änderung\",\n latitude: \"Breitengrad\",\n longitude: \"Längengrad\",\n size: \"Größe\",\n state: \"Zustand\",\n duration: \"Dauer\",\n detail: \"Details\",\n errY: \"Y-Fehler\",\n errYHigh: \"Oberer Y-Fehler\",\n errYLow: \"Unterer Y-Fehler\",\n errX: \"X-Fehler\",\n errXHigh: \"Oberer X-Fehler\",\n errXLow: \"Unterer X-Fehler\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interaktive Karte\",\n interactiveTimeline: \"Interaktive Zeitachse\",\n series: \"Datenreihe\",\n resetMapView: \"Kartenansicht zurücksetzen\",\n resetTimelineView: \"Zeitachsenansicht zurücksetzen\",\n },\n },\n});\n\nexport type ChartMessages = ReturnType<(typeof chartMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useChartMessages = (): (() => ChartMessages) => {\n const locale = useLocale();\n return () => chartMessages.resolve([locale()]).t;\n};\n\nexport const checkChartMessages = () => chartMessages.check();\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -67,6 +67,8 @@ export function createCollectionSelection(options) {
|
|
|
67
67
|
});
|
|
68
68
|
};
|
|
69
69
|
const keyDown = (event, id, columns = 1) => {
|
|
70
|
+
// Alt combinations belong to the host, for example Alt+↑ to the page above.
|
|
71
|
+
if (event.altKey) return false;
|
|
70
72
|
const ids = options.ids();
|
|
71
73
|
const index = ids.indexOf(id);
|
|
72
74
|
let next;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/collection-selection.ts"],"sourcesContent":["import { batch, createEffect, createSignal, onCleanup } from \"solid-js\";\n\nexport type SelectionModifiers = { shiftKey?: boolean; ctrlKey?: boolean; metaKey?: boolean };\nexport type CollectionSelection = ReturnType<typeof createCollectionSelection>;\n\n/**\n * One selection and focus model shared by alternate presentations of a collection.\n *\n * `ids` is the collection in display order. `isDisabled` marks items that stay in focus order, so the keyboard and\n * screen readers still reach them, but can never be selected. `multiple: false` keeps at most one ID selected: a\n * click, toggle, or arrow key selects only that item, and ranges and select-all do nothing.\n *\n * `checklist: true` suits choosing on touch screens: a plain click or tap toggles one item, and arrow keys only move\n * focus. Space still toggles; Shift-click still selects a range.\n */\nexport function createCollectionSelection(options: {\n ids: () => readonly string[];\n isDisabled?: (id: string) => boolean;\n initial?: readonly string[];\n onChange?: (ids: readonly string[]) => void;\n multiple?: boolean;\n checklist?: boolean;\n}) {\n const multiple = options.multiple ?? true;\n const checklist = options.checklist ?? false;\n const [selected, setSelected] = createSignal<ReadonlySet<string>>(new Set(multiple ? options.initial : options.initial?.slice(0, 1)));\n const [focused, setFocused] = createSignal<string | null>(options.initial?.[0] ?? null);\n let anchor: string | null = options.initial?.[0] ?? null;\n const elements = new Map<string, HTMLElement>();\n const disabled = (id: string) => options.isDisabled?.(id) ?? false;\n const replace = (ids: readonly string[]) => {\n const allowed = new Set(options.ids());\n const next = new Set(ids.filter((id) => allowed.has(id) && !disabled(id)).slice(multiple ? 0 : -1));\n if (next.size === selected().size && [...next].every((id) => selected().has(id))) return;\n setSelected(next);\n options.onChange?.([...next]);\n };\n createEffect(() => {\n const ids = options.ids();\n replace([...selected()]);\n if (!focused() || !ids.includes(focused()!)) setFocused(ids[0] ?? null);\n if (anchor && !ids.includes(anchor)) anchor = null;\n });\n const toggle = (id: string) => {\n if (disabled(id)) return;\n const next = new Set(multiple ? selected() : []);\n selected().has(id) ? next.delete(id) : next.add(id);\n batch(() => {\n setFocused(id);\n replace([...next]);\n });\n anchor = id;\n };\n const select = (id: string, modifiers: SelectionModifiers = {}) => {\n if (!options.ids().includes(id)) return;\n batch(() => {\n setFocused(id);\n if (multiple && modifiers.shiftKey && anchor) {\n const ids = options.ids();\n const from = ids.indexOf(anchor);\n const to = ids.indexOf(id);\n const range = ids.slice(Math.min(from, to), Math.max(from, to) + 1);\n replace(modifiers.ctrlKey || modifiers.metaKey ? [...selected(), ...range] : range);\n } else if (disabled(id)) return;\n else if (checklist || (multiple && (modifiers.ctrlKey || modifiers.metaKey))) toggle(id);\n else {\n anchor = id;\n replace([id]);\n }\n });\n };\n const focus = (id: string) => {\n setFocused(id);\n elements.get(id)?.focus({ preventScroll: true });\n elements.get(id)?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n };\n const keyDown = (event: KeyboardEvent, id: string, columns = 1) => {\n const ids = options.ids();\n const index = ids.indexOf(id);\n let next: number | undefined;\n if (event.key === \"ArrowDown\") next = index + columns;\n if (event.key === \"ArrowUp\") next = index - columns;\n if (columns > 1 && event.key === \"ArrowRight\") next = index + 1;\n if (columns > 1 && event.key === \"ArrowLeft\") next = index - 1;\n if (event.key === \"Home\") next = 0;\n if (event.key === \"End\") next = ids.length - 1;\n if (next !== undefined && ids.length) {\n event.preventDefault();\n const target = ids[Math.max(0, Math.min(next, ids.length - 1))]!;\n if (event.shiftKey ? multiple || !checklist : !checklist && !event.ctrlKey && !event.metaKey) select(target, event);\n focus(target);\n return true;\n }\n if (event.key === \" \") {\n event.preventDefault();\n toggle(id);\n return true;\n }\n if (multiple && (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"a\") {\n event.preventDefault();\n replace(ids);\n return true;\n }\n // With nothing selected, Escape belongs to the host, for example to close a dialog.\n if (event.key === \"Escape\" && selected().size > 0) {\n event.preventDefault();\n replace([]);\n return true;\n }\n return false;\n };\n return {\n multiple,\n selected,\n focused,\n isDisabled: disabled,\n select,\n toggle,\n replace,\n focus,\n keyDown,\n clear: () => replace([]),\n all: () => (multiple ? replace(options.ids()) : undefined),\n markFocused: (id: string) => setFocused(id),\n register: (id: string, element: HTMLElement) => {\n elements.set(id, element);\n onCleanup(() => {\n if (elements.get(id) === element) elements.delete(id);\n });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/collection-selection.ts"],"sourcesContent":["import { batch, createEffect, createSignal, onCleanup } from \"solid-js\";\n\nexport type SelectionModifiers = { shiftKey?: boolean; ctrlKey?: boolean; metaKey?: boolean };\nexport type CollectionSelection = ReturnType<typeof createCollectionSelection>;\n\n/**\n * One selection and focus model shared by alternate presentations of a collection.\n *\n * `ids` is the collection in display order. `isDisabled` marks items that stay in focus order, so the keyboard and\n * screen readers still reach them, but can never be selected. `multiple: false` keeps at most one ID selected: a\n * click, toggle, or arrow key selects only that item, and ranges and select-all do nothing.\n *\n * `checklist: true` suits choosing on touch screens: a plain click or tap toggles one item, and arrow keys only move\n * focus. Space still toggles; Shift-click still selects a range.\n */\nexport function createCollectionSelection(options: {\n ids: () => readonly string[];\n isDisabled?: (id: string) => boolean;\n initial?: readonly string[];\n onChange?: (ids: readonly string[]) => void;\n multiple?: boolean;\n checklist?: boolean;\n}) {\n const multiple = options.multiple ?? true;\n const checklist = options.checklist ?? false;\n const [selected, setSelected] = createSignal<ReadonlySet<string>>(new Set(multiple ? options.initial : options.initial?.slice(0, 1)));\n const [focused, setFocused] = createSignal<string | null>(options.initial?.[0] ?? null);\n let anchor: string | null = options.initial?.[0] ?? null;\n const elements = new Map<string, HTMLElement>();\n const disabled = (id: string) => options.isDisabled?.(id) ?? false;\n const replace = (ids: readonly string[]) => {\n const allowed = new Set(options.ids());\n const next = new Set(ids.filter((id) => allowed.has(id) && !disabled(id)).slice(multiple ? 0 : -1));\n if (next.size === selected().size && [...next].every((id) => selected().has(id))) return;\n setSelected(next);\n options.onChange?.([...next]);\n };\n createEffect(() => {\n const ids = options.ids();\n replace([...selected()]);\n if (!focused() || !ids.includes(focused()!)) setFocused(ids[0] ?? null);\n if (anchor && !ids.includes(anchor)) anchor = null;\n });\n const toggle = (id: string) => {\n if (disabled(id)) return;\n const next = new Set(multiple ? selected() : []);\n selected().has(id) ? next.delete(id) : next.add(id);\n batch(() => {\n setFocused(id);\n replace([...next]);\n });\n anchor = id;\n };\n const select = (id: string, modifiers: SelectionModifiers = {}) => {\n if (!options.ids().includes(id)) return;\n batch(() => {\n setFocused(id);\n if (multiple && modifiers.shiftKey && anchor) {\n const ids = options.ids();\n const from = ids.indexOf(anchor);\n const to = ids.indexOf(id);\n const range = ids.slice(Math.min(from, to), Math.max(from, to) + 1);\n replace(modifiers.ctrlKey || modifiers.metaKey ? [...selected(), ...range] : range);\n } else if (disabled(id)) return;\n else if (checklist || (multiple && (modifiers.ctrlKey || modifiers.metaKey))) toggle(id);\n else {\n anchor = id;\n replace([id]);\n }\n });\n };\n const focus = (id: string) => {\n setFocused(id);\n elements.get(id)?.focus({ preventScroll: true });\n elements.get(id)?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n };\n const keyDown = (event: KeyboardEvent, id: string, columns = 1) => {\n // Alt combinations belong to the host, for example Alt+↑ to the page above.\n if (event.altKey) return false;\n const ids = options.ids();\n const index = ids.indexOf(id);\n let next: number | undefined;\n if (event.key === \"ArrowDown\") next = index + columns;\n if (event.key === \"ArrowUp\") next = index - columns;\n if (columns > 1 && event.key === \"ArrowRight\") next = index + 1;\n if (columns > 1 && event.key === \"ArrowLeft\") next = index - 1;\n if (event.key === \"Home\") next = 0;\n if (event.key === \"End\") next = ids.length - 1;\n if (next !== undefined && ids.length) {\n event.preventDefault();\n const target = ids[Math.max(0, Math.min(next, ids.length - 1))]!;\n if (event.shiftKey ? multiple || !checklist : !checklist && !event.ctrlKey && !event.metaKey) select(target, event);\n focus(target);\n return true;\n }\n if (event.key === \" \") {\n event.preventDefault();\n toggle(id);\n return true;\n }\n if (multiple && (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"a\") {\n event.preventDefault();\n replace(ids);\n return true;\n }\n // With nothing selected, Escape belongs to the host, for example to close a dialog.\n if (event.key === \"Escape\" && selected().size > 0) {\n event.preventDefault();\n replace([]);\n return true;\n }\n return false;\n };\n return {\n multiple,\n selected,\n focused,\n isDisabled: disabled,\n select,\n toggle,\n replace,\n focus,\n keyDown,\n clear: () => replace([]),\n all: () => (multiple ? replace(options.ids()) : undefined),\n markFocused: (id: string) => setFocused(id),\n register: (id: string, element: HTMLElement) => {\n elements.set(id, element);\n onCleanup(() => {\n if (elements.get(id) === element) elements.delete(id);\n });\n },\n };\n}\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 dataTableMessages = i18n.define({
|
|
4
|
+
baseLocale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
en: {
|
|
7
|
+
dataTable: "Data table",
|
|
8
|
+
noColumns: "No columns.",
|
|
9
|
+
noRecords: "No records"
|
|
10
|
+
},
|
|
11
|
+
de: {
|
|
12
|
+
dataTable: "Datentabelle",
|
|
13
|
+
noColumns: "Keine Spalten.",
|
|
14
|
+
noRecords: "Keine Einträge"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
/** Resolved from the inherited render locale. */
|
|
19
|
+
export const useDataTableMessages = () => {
|
|
20
|
+
const locale = useLocale();
|
|
21
|
+
return () => dataTableMessages.resolve([locale()]).t;
|
|
22
|
+
};
|
|
23
|
+
export const checkDataTableMessages = () => dataTableMessages.check();
|
|
24
|
+
//# sourceMappingURL=data-table-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["content/data-table-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst dataTableMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n dataTable: \"Data table\",\n noColumns: \"No columns.\",\n noRecords: \"No records\",\n },\n de: {\n dataTable: \"Datentabelle\",\n noColumns: \"Keine Spalten.\",\n noRecords: \"Keine Einträge\",\n },\n },\n});\n\nexport type DataTableMessages = ReturnType<(typeof dataTableMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useDataTableMessages = (): (() => DataTableMessages) => {\n const locale = useLocale();\n return () => dataTableMessages.resolve([locale()]).t;\n};\n\nexport const checkDataTableMessages = () => dataTableMessages.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,SAAS,EAAE,YAAY;MACvB,SAAS,EAAE,aAAa;MACxB,SAAS,EAAE;IACb,CAAC;IACD,EAAE,EAAE;MACF,SAAS,EAAE,cAAc;MACzB,SAAS,EAAE,gBAAgB;MAC3B,SAAS,EAAE;IACb;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,24 @@
|
|
|
1
|
+
import { i18n } from "@k2b/stdlib";
|
|
2
|
+
import { useLocale } from "../intl/locale";
|
|
3
|
+
const docsMessages = i18n.define({
|
|
4
|
+
baseLocale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
en: {
|
|
7
|
+
codeLabel: ({
|
|
8
|
+
title
|
|
9
|
+
}) => `${title} code`
|
|
10
|
+
},
|
|
11
|
+
de: {
|
|
12
|
+
codeLabel: ({
|
|
13
|
+
title
|
|
14
|
+
}) => `Code von ${title}`
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
/** Resolved from the inherited render locale. */
|
|
19
|
+
export const useDocsMessages = () => {
|
|
20
|
+
const locale = useLocale();
|
|
21
|
+
return () => docsMessages.resolve([locale()]).t;
|
|
22
|
+
};
|
|
23
|
+
export const checkDocsMessages = () => docsMessages.check();
|
|
24
|
+
//# sourceMappingURL=docs-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["content/docs-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst docsMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n codeLabel: ({ title }: { title: string }) => `${title} code`,\n },\n de: {\n codeLabel: ({ title }) => `Code von ${title}`,\n },\n },\n});\n\nexport type DocsMessages = ReturnType<(typeof docsMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useDocsMessages = (): (() => DocsMessages) => {\n const locale = useLocale();\n return () => docsMessages.resolve([locale()]).t;\n};\n\nexport const checkDocsMessages = () => docsMessages.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,SAAS,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,GAAG,KAAK;IACvD,CAAC;IACD,EAAE,EAAE;MACF,SAAS,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,YAAY,KAAK;IAC7C;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,34 @@
|
|
|
1
|
+
import { i18n } from "@k2b/stdlib";
|
|
2
|
+
import { useLocale } from "../intl/locale";
|
|
3
|
+
const feedMessages = i18n.define({
|
|
4
|
+
baseLocale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
en: {
|
|
7
|
+
feedJumpToLatest: "Jump to latest",
|
|
8
|
+
feedJumpToLatestCount: ({
|
|
9
|
+
count
|
|
10
|
+
}) => `Jump to latest, ${count} new`,
|
|
11
|
+
feedNewItems: ({
|
|
12
|
+
count
|
|
13
|
+
}) => count === 1 ? "1 new item" : `${count} new items`,
|
|
14
|
+
feedNewMarker: "New"
|
|
15
|
+
},
|
|
16
|
+
de: {
|
|
17
|
+
feedJumpToLatest: "Zum Neuesten",
|
|
18
|
+
feedJumpToLatestCount: ({
|
|
19
|
+
count
|
|
20
|
+
}) => `Zum Neuesten, ${count} neu`,
|
|
21
|
+
feedNewItems: ({
|
|
22
|
+
count
|
|
23
|
+
}) => count === 1 ? "1 neuer Eintrag" : `${count} neue Einträge`,
|
|
24
|
+
feedNewMarker: "Neu"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
/** Resolved from the inherited render locale. */
|
|
29
|
+
export const useFeedMessages = () => {
|
|
30
|
+
const locale = useLocale();
|
|
31
|
+
return () => feedMessages.resolve([locale()]).t;
|
|
32
|
+
};
|
|
33
|
+
export const checkFeedMessages = () => feedMessages.check();
|
|
34
|
+
//# sourceMappingURL=feed-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["content/feed-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst feedMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n feedJumpToLatest: \"Jump to latest\",\n feedJumpToLatestCount: ({ count }: { count: number }) => `Jump to latest, ${count} new`,\n feedNewItems: ({ count }: { count: number }) => (count === 1 ? \"1 new item\" : `${count} new items`),\n feedNewMarker: \"New\",\n },\n de: {\n feedJumpToLatest: \"Zum Neuesten\",\n feedJumpToLatestCount: ({ count }) => `Zum Neuesten, ${count} neu`,\n feedNewItems: ({ count }) => (count === 1 ? \"1 neuer Eintrag\" : `${count} neue Einträge`),\n feedNewMarker: \"Neu\",\n },\n },\n});\n\nexport type FeedMessages = ReturnType<(typeof feedMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useFeedMessages = (): (() => FeedMessages) => {\n const locale = useLocale();\n return () => feedMessages.resolve([locale()]).t;\n};\n\nexport const checkFeedMessages = () => feedMessages.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,gBAAgB,EAAE,gBAAgB;MAClC,qBAAqB,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,mBAAmB,KAAK,MAAM;MACvF,YAAY,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAM,KAAK,KAAK,CAAC,GAAG,YAAY,GAAG,GAAG,KAAK,YAAa;MACnG,aAAa,EAAE;IACjB,CAAC;IACD,EAAE,EAAE;MACF,gBAAgB,EAAE,cAAc;MAChC,qBAAqB,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,iBAAiB,KAAK,MAAM;MAClE,YAAY,EAAE,CAAC;QAAE;MAAM,CAAC,KAAM,KAAK,KAAK,CAAC,GAAG,iBAAiB,GAAG,GAAG,KAAK,gBAAiB;MACzF,aAAa,EAAE;IACjB;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":[]}
|