@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,800 @@
|
|
|
1
|
+
import { memo as _$memo } from "solid-js/web";
|
|
2
|
+
import { ssrStyleProperty as _$ssrStyleProperty } from "solid-js/web";
|
|
3
|
+
import { ssr as _$ssr } from "solid-js/web";
|
|
4
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
5
|
+
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
6
|
+
import { escape as _$escape } from "solid-js/web";
|
|
7
|
+
var _tmpl$ = ["<p class=\"k2b-calendar-days__more\">", "</p>"],
|
|
8
|
+
_tmpl$2 = ["<div class=\"k2b-calendar-days\" data-view=\"day\"", "><div class=\"k2b-calendar-days__scroll\" tabindex=\"-1\"", "><div class=\"k2b-calendar-days__track\">", "", "</div></div><p class=\"k2b-calendar-sr\"", ">", "</p>", "</div>"],
|
|
9
|
+
_tmpl$3 = ["<span class=\"k2b-calendar-days__today\">", "</span>"],
|
|
10
|
+
_tmpl$4 = "<i class=\"ti ti-clock\" aria-hidden=\"true\"></i>",
|
|
11
|
+
_tmpl$5 = ["<span>", "</span>"],
|
|
12
|
+
_tmpl$6 = ["<div class=\"k2b-calendar-days__all-day\" role=\"group\"", ">", "</div>"],
|
|
13
|
+
_tmpl$7 = ["<span class=\"k2b-calendar-night\" style=\"", "\" aria-hidden=\"true\"></span>"],
|
|
14
|
+
_tmpl$8 = ["<button type=\"button\" class=\"k2b-calendar-night__bar\" aria-expanded=\"true\" style=\"", "\"><i class=\"ti ti-moon\" aria-hidden=\"true\"></i><span>", "</span><span class=\"k2b-calendar-night__action\">", "<i class=\"ti ti-chevron-up\" aria-hidden=\"true\"></i></span></button>"],
|
|
15
|
+
_tmpl$9 = ["<div class=\"k2b-calendar-now\" style=\"", "\" aria-hidden=\"true\"><span class=\"k2b-calendar-now__time\">", "</span></div>"],
|
|
16
|
+
_tmpl$0 = ["<section class=\"k2b-calendar-days__day\" data-calendar-group", "><header class=\"k2b-calendar-days__head\"><h2 class=\"k2b-calendar-days__title\"", "><button type=\"button\" class=\"k2b-calendar-days__title-button\"", ">", "<span class=\"k2b-calendar-days__long\">", "</span><span class=\"k2b-calendar-days__short\">", "</span></button></h2><span class=\"k2b-calendar-days__note\"", "><span class=\"k2b-calendar-days__soon\">", "</span><span class=\"k2b-calendar-days__cheer\" aria-hidden=\"true\"><i class=\"ti ti-confetti\" aria-hidden=\"true\"></i>", "</span></span>", "<span class=\"k2b-calendar-days__summary\">", "</span></header>", "<div class=\"k2b-calendar-days__body\"", " style=\"", "\">", "", "", "", "", "", "</div></section>"],
|
|
17
|
+
_tmpl$1 = ["<span class=\"k2b-calendar-days__badge\">", "", "</span>"],
|
|
18
|
+
_tmpl$10 = ["<i class=\"", "\" aria-hidden=\"true\"></i>"],
|
|
19
|
+
_tmpl$11 = ["<span class=\"k2b-calendar-days__line\" style=\"", "\" aria-hidden=\"true\"></span>"],
|
|
20
|
+
_tmpl$12 = ["<span class=\"k2b-calendar-days__hour\"", " style=\"", "\" aria-hidden=\"true\">", "</span>"],
|
|
21
|
+
_tmpl$13 = ["<ul class=\"k2b-calendar-fold__chips\">", "</ul>"],
|
|
22
|
+
_tmpl$14 = ["<div class=\"k2b-calendar-fold\" style=\"", "\"><button type=\"button\" class=\"k2b-calendar-fold__toggle\" aria-expanded=\"false\"", "><i class=\"ti ti-moon\" aria-hidden=\"true\"></i><span>", "</span><i class=\"ti ti-chevron-down\" aria-hidden=\"true\"></i></button>", "</div>"],
|
|
23
|
+
_tmpl$15 = ["<li", " style=\"", "\">", "", "</li>"],
|
|
24
|
+
_tmpl$16 = ["<span class=\"k2b-calendar-days__line\"", " style=\"", "\" aria-hidden=\"true\"></span>"],
|
|
25
|
+
_tmpl$17 = ["<span class=\"k2b-calendar-days__hour\" data-night=\"true\" style=\"", "\" aria-hidden=\"true\">", "</span>"],
|
|
26
|
+
_tmpl$18 = ["<span class=\"k2b-calendar-days__midnight\" style=\"", "\" aria-hidden=\"true\">", "</span>"],
|
|
27
|
+
_tmpl$19 = ["<span class=\"k2b-calendar-hover\" style=\"", "\" aria-hidden=\"true\">", "</span>"],
|
|
28
|
+
_tmpl$20 = ["<section class=\"k2b-calendar-days__day\" data-calendar-group", " data-empty=\"true\"", "><header class=\"k2b-calendar-days__head\"><h2 class=\"k2b-calendar-days__title\"", "><span class=\"k2b-calendar-days__run\">", "</span></h2><span class=\"k2b-calendar-days__note\"></span>", "<span class=\"k2b-calendar-days__summary\">", "</span></header><button type=\"button\" class=\"k2b-calendar-days__empty\" data-calendar-unfold><span>", "</span><span class=\"k2b-calendar-days__empty-action\"><i class=\"ti ti-arrows-vertical\" aria-hidden=\"true\"></i>", "</span></button></section>"],
|
|
29
|
+
_tmpl$21 = ["<span class=\"k2b-calendar-days__badge-day\">", "</span>"],
|
|
30
|
+
_tmpl$22 = ["<span class=\"k2b-calendar-days__badge\" data-run=\"true\">", "", "", "</span>"];
|
|
31
|
+
import { createComputed, createEffect, createMemo, createSignal, createUniqueId, For, on, onCleanup, onMount, Show, untrack } from "solid-js";
|
|
32
|
+
import { brakedScroll, GESTURE_GAP_MS, SETTLE_RADIUS, settleTarget, stopCrossing, stopIndexAt, wheelPixels } from "./calendar-day-scroll";
|
|
33
|
+
import { addDayKeys, DAY_MINUTES, dayGroups, dayHeightTerms, dayKeyRange, dayMinuteAt, dayY, dayYTerms, markerLanes, readDayGeometry, termsCss } from "./calendar-days";
|
|
34
|
+
import { EventChip, eventHref } from "./calendar-shared";
|
|
35
|
+
import { AllDayChips, createTimeView, dayBands, dayGaps, daySummary, eventAccent, foldedEntries, gapAside, isNearNow, longDay, markerAbove, nightHours, reducedMotion, shortDay, soonNote, TimeBand, TimeCheck, TimeGap, TimeMarker, TimeOverlays, TimeQuickCreate } from "./calendar-time-view";
|
|
36
|
+
const groupId = group => group.kind === "day" ? `d:${group.key}` : `e:${group.keys.join(",")}`;
|
|
37
|
+
const groupFirst = group => group.kind === "day" ? group.key : group.keys[0];
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The day view with `dayHours`: the loaded days one below the other in a single scroll, each with its heading kept on
|
|
41
|
+
* top while it is in view. Runs of empty days fold into one row. The view slows down and settles at each day start,
|
|
42
|
+
* and a line at the top of the heading fills while a day start passes.
|
|
43
|
+
*/
|
|
44
|
+
export const CalendarDayView = props => {
|
|
45
|
+
const view = createTimeView(props);
|
|
46
|
+
const [mounted, setMounted] = createSignal(false);
|
|
47
|
+
const [unfolded, setUnfolded] = createSignal(new Set());
|
|
48
|
+
const [topKey, setTopKey] = createSignal(untrack(view.anchorKey));
|
|
49
|
+
const [hover, setHover] = createSignal(null);
|
|
50
|
+
/** Where today's day lies from the view, kept current while scrolling for the Today button's arrow. */
|
|
51
|
+
const [todayPlace, setTodayPlace] = createSignal("");
|
|
52
|
+
let scroller;
|
|
53
|
+
let track;
|
|
54
|
+
const helpId = createUniqueId();
|
|
55
|
+
|
|
56
|
+
// The server and the first render start at the shown day, so the page never flashes the days before it; once
|
|
57
|
+
// mounted the earlier days join above it without moving the view.
|
|
58
|
+
const keys = createMemo(() => {
|
|
59
|
+
const {
|
|
60
|
+
first,
|
|
61
|
+
last
|
|
62
|
+
} = view.range();
|
|
63
|
+
const anchor = view.anchorKey();
|
|
64
|
+
const from = mounted() || anchor < first || anchor > last ? first : anchor;
|
|
65
|
+
return dayKeyRange(from, last);
|
|
66
|
+
});
|
|
67
|
+
// Today and the day the reader opened never fold, so a day opened from the month shows its hours to create in.
|
|
68
|
+
const groups = createMemo(() => dayGroups(keys(), key => view.dayOf(key).empty, new Set([view.nowKey(), view.anchorKey(), ...unfolded()])));
|
|
69
|
+
const unfold = keys => setUnfolded(value => new Set([...value, ...keys]));
|
|
70
|
+
const groupIds = createMemo(() => groups().map(groupId));
|
|
71
|
+
const groupsById = createMemo(() => new Map(groups().map(group => [groupId(group), group])));
|
|
72
|
+
|
|
73
|
+
// Where each group starts in the scroll, measured after every change of the groups and on resize.
|
|
74
|
+
let sections = [];
|
|
75
|
+
let tops = [];
|
|
76
|
+
const measure = () => {
|
|
77
|
+
if (!track) return;
|
|
78
|
+
sections = [...track.querySelectorAll(":scope > [data-calendar-group]")];
|
|
79
|
+
tops = sections.map(section => section.offsetTop);
|
|
80
|
+
};
|
|
81
|
+
const keysOf = section => (section?.dataset.calendarKeys ?? "").split(",").filter(Boolean);
|
|
82
|
+
const sectionOf = key => sections.find(section => keysOf(section).includes(key));
|
|
83
|
+
|
|
84
|
+
/** The group at the top of the view and how far into it the view is, kept across changes above it. */
|
|
85
|
+
let anchor = null;
|
|
86
|
+
/** A day the host moved to before its days loaded; it goes on screen once they arrive. */
|
|
87
|
+
let pendingTarget = null;
|
|
88
|
+
/** The last scroll position the view read, to tell the reader's direction. */
|
|
89
|
+
let lastScrollTop = 0;
|
|
90
|
+
const rememberAnchor = () => {
|
|
91
|
+
if (!scroller || sections.length === 0) return;
|
|
92
|
+
const index = stopIndexAt(tops, scroller.scrollTop);
|
|
93
|
+
const section = sections[index];
|
|
94
|
+
if (section) anchor = {
|
|
95
|
+
key: keysOf(section)[0],
|
|
96
|
+
delta: scroller.scrollTop - tops[index]
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
const restoreAnchor = () => {
|
|
100
|
+
if (!scroller || !anchor) return;
|
|
101
|
+
const saved = anchor;
|
|
102
|
+
let index = sections.findIndex(section => keysOf(section).includes(saved.key));
|
|
103
|
+
if (index < 0) index = sections.findIndex(section => keysOf(section)[0] >= saved.key);
|
|
104
|
+
if (index < 0) return;
|
|
105
|
+
const top = tops[index] + Math.min(saved.delta, sections[index].offsetHeight - 1);
|
|
106
|
+
if (Math.abs(scroller.scrollTop - top) > 0.5) scroller.scrollTop = top;
|
|
107
|
+
lastScrollTop = scroller.scrollTop;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
/** The scroll position of a minute of a day, or of the day's start without a minute. */
|
|
111
|
+
const topFor = (key, minute) => {
|
|
112
|
+
const section = sectionOf(key);
|
|
113
|
+
if (!section) return null;
|
|
114
|
+
const index = sections.indexOf(section);
|
|
115
|
+
const body = section.querySelector("[data-calendar-body]");
|
|
116
|
+
if (minute === undefined || !body) return tops[index];
|
|
117
|
+
const geometry = readDayGeometry(body, view.wake(), body.dataset.expanded === "true");
|
|
118
|
+
return tops[index] + body.offsetTop + dayY(geometry, minute);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// Gliding: arrows, Today, and Go to scroll smoothly; the stops and loading wait until the glide arrived.
|
|
122
|
+
let glideTarget = null;
|
|
123
|
+
let glideTimer = 0;
|
|
124
|
+
const glide = top => {
|
|
125
|
+
if (!scroller) return;
|
|
126
|
+
const target = Math.round(Math.max(0, Math.min(top, scroller.scrollHeight - scroller.clientHeight)));
|
|
127
|
+
glideTarget = target;
|
|
128
|
+
window.clearTimeout(glideTimer);
|
|
129
|
+
glideTimer = window.setTimeout(() => {
|
|
130
|
+
glideTarget = null;
|
|
131
|
+
}, 1600);
|
|
132
|
+
// What the view keeps in place from now on is where the glide arrives, not where it started.
|
|
133
|
+
const index = stopIndexAt(tops, target);
|
|
134
|
+
const section = sections[index];
|
|
135
|
+
if (section) anchor = {
|
|
136
|
+
key: keysOf(section)[0],
|
|
137
|
+
delta: target - tops[index]
|
|
138
|
+
};
|
|
139
|
+
scroller.scrollTo({
|
|
140
|
+
top: target,
|
|
141
|
+
behavior: reducedMotion() ? "instant" : "smooth"
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
/** Puts a day on screen: now in the upper third today, else an hour before its first entry, else its start. */
|
|
146
|
+
const positionAt = key => {
|
|
147
|
+
if (!scroller) return;
|
|
148
|
+
measure();
|
|
149
|
+
if (key === view.nowKey()) {
|
|
150
|
+
const top = topFor(key, view.nowMinute());
|
|
151
|
+
// Now in the upper third, but never showing the end of the day before above the day's own heading.
|
|
152
|
+
if (top !== null) scroller.scrollTop = Math.max(topFor(key) ?? 0, top - scroller.clientHeight / 3);
|
|
153
|
+
lastScrollTop = scroller.scrollTop;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const model = view.dayOf(key);
|
|
157
|
+
const first = Math.min(...model.bands.map(band => band.start), ...model.markers.map(marker => marker.minute), Number.POSITIVE_INFINITY);
|
|
158
|
+
const start = topFor(key);
|
|
159
|
+
if (start === null) return;
|
|
160
|
+
const entry = Number.isFinite(first) && first > 120 ? topFor(key, first - 60) : null;
|
|
161
|
+
scroller.scrollTop = entry === null ? start : Math.max(start, entry - 44);
|
|
162
|
+
lastScrollTop = scroller.scrollTop;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// Input: the wheel brakes at day starts; a resting scroll glides onto a near one.
|
|
166
|
+
let lastInput = "other";
|
|
167
|
+
let fingers = 0;
|
|
168
|
+
let settling = false;
|
|
169
|
+
let restTimer = 0;
|
|
170
|
+
let frame = 0;
|
|
171
|
+
let ready = false;
|
|
172
|
+
let carry = 0;
|
|
173
|
+
let lastWheel = 0;
|
|
174
|
+
const settle = () => {
|
|
175
|
+
if (!scroller || fingers > 0 || settling || glideTarget !== null || view.dragging()) return;
|
|
176
|
+
const target = settleTarget(tops.slice(1), scroller.scrollTop, lastInput === "touch" ? SETTLE_RADIUS.touch : SETTLE_RADIUS.wheel);
|
|
177
|
+
if (target === undefined) return;
|
|
178
|
+
settling = true;
|
|
179
|
+
scroller.scrollTo({
|
|
180
|
+
top: target,
|
|
181
|
+
behavior: reducedMotion() ? "instant" : "smooth"
|
|
182
|
+
});
|
|
183
|
+
window.setTimeout(() => {
|
|
184
|
+
settling = false;
|
|
185
|
+
}, 450);
|
|
186
|
+
};
|
|
187
|
+
const onWheel = event => {
|
|
188
|
+
if (!scroller || event.ctrlKey || Math.abs(event.deltaX) > Math.abs(event.deltaY) || view.dragging()) return;
|
|
189
|
+
const delta = wheelPixels(event.deltaY, event.deltaMode, scroller.clientHeight);
|
|
190
|
+
const top = scroller.scrollTop;
|
|
191
|
+
const max = scroller.scrollHeight - scroller.clientHeight;
|
|
192
|
+
// At the ends the wheel asks for more days instead.
|
|
193
|
+
if (delta > 0 && top >= max - 1 || delta < 0 && top <= 1) {
|
|
194
|
+
loadMore(delta > 0 ? "later" : "earlier");
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (event.timeStamp - lastWheel > GESTURE_GAP_MS) carry = 0;
|
|
198
|
+
// A gesture that goes on takes over from a glide onto a day start; the view settles again once it rests.
|
|
199
|
+
settling = false;
|
|
200
|
+
lastWheel = event.timeStamp;
|
|
201
|
+
const next = brakedScroll(tops, top + carry, delta);
|
|
202
|
+
lastInput = "wheel";
|
|
203
|
+
if (next === undefined) {
|
|
204
|
+
carry = 0;
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
event.preventDefault();
|
|
208
|
+
glideTarget = null;
|
|
209
|
+
const bounded = Math.max(0, Math.min(max, next));
|
|
210
|
+
scroller.scrollTop = bounded;
|
|
211
|
+
// Steps too small for a pixel add up instead of vanishing.
|
|
212
|
+
carry = bounded - scroller.scrollTop;
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
// Loading: each end asks once per range, and only after the view settled at its first position.
|
|
216
|
+
let askedEarlier = "";
|
|
217
|
+
let askedLater = "";
|
|
218
|
+
const loadMore = edge => {
|
|
219
|
+
// Days that come in above move the view, so they wait for a glide to arrive; days below move nothing.
|
|
220
|
+
if (!ready || view.dragging() || edge === "earlier" && glideTarget !== null) return;
|
|
221
|
+
const {
|
|
222
|
+
first,
|
|
223
|
+
last
|
|
224
|
+
} = view.range();
|
|
225
|
+
if (edge === "earlier" && props.owner.onLoadEarlier && askedEarlier !== first) {
|
|
226
|
+
askedEarlier = first;
|
|
227
|
+
void props.owner.onLoadEarlier();
|
|
228
|
+
}
|
|
229
|
+
if (edge === "later" && props.owner.onLoadLater && askedLater !== last) {
|
|
230
|
+
askedLater = last;
|
|
231
|
+
void props.owner.onLoadLater();
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
let reportTimer = 0;
|
|
235
|
+
let reported = "";
|
|
236
|
+
/** Tells the host the days the reader sees once they changed, after the scroll calmed down. */
|
|
237
|
+
const reportVisible = () => {
|
|
238
|
+
const {
|
|
239
|
+
first,
|
|
240
|
+
last
|
|
241
|
+
} = untrack(visibleKeys);
|
|
242
|
+
if (`${first}/${last}` === reported) return;
|
|
243
|
+
reported = `${first}/${last}`;
|
|
244
|
+
window.clearTimeout(reportTimer);
|
|
245
|
+
reportTimer = window.setTimeout(() => props.owner.onVisibleDateChange?.(view.parseKey(first), view.parseKey(last)), 250);
|
|
246
|
+
};
|
|
247
|
+
const updateChrome = () => {
|
|
248
|
+
if (!scroller) return;
|
|
249
|
+
const top = scroller.scrollTop;
|
|
250
|
+
const index = stopIndexAt(tops, top);
|
|
251
|
+
const key = keysOf(sections[index])[0];
|
|
252
|
+
if (key && key !== untrack(topKey)) setTopKey(key);
|
|
253
|
+
reportVisible();
|
|
254
|
+
for (const [position, section] of sections.entries()) {
|
|
255
|
+
const head = section.firstElementChild;
|
|
256
|
+
if (!head) continue;
|
|
257
|
+
const crossing = position > 0 ? stopCrossing(tops[position], top) : 0;
|
|
258
|
+
if (crossing > 0) head.style.setProperty("--k2b-calendar-cross", String(crossing));else if (head.style.getPropertyValue("--k2b-calendar-cross")) head.style.removeProperty("--k2b-calendar-cross");
|
|
259
|
+
}
|
|
260
|
+
setTodayPlace(placeOfToday());
|
|
261
|
+
// Only the reader's own scrolling asks for more: days that came in above push the view down, and runs of empty
|
|
262
|
+
// days are short, so asking whenever the view is near an end would load one empty week after the other.
|
|
263
|
+
const direction = Math.sign(top - lastScrollTop);
|
|
264
|
+
lastScrollTop = top;
|
|
265
|
+
if (direction > 0 && top + scroller.clientHeight > scroller.scrollHeight - 2 * scroller.clientHeight) loadMore("later");else if (direction < 0 && top < scroller.clientHeight) loadMore("earlier");
|
|
266
|
+
rememberAnchor();
|
|
267
|
+
};
|
|
268
|
+
const onScroll = () => {
|
|
269
|
+
if (!scroller) return;
|
|
270
|
+
if (glideTarget !== null && Math.abs(scroller.scrollTop - glideTarget) < 2) glideTarget = null;
|
|
271
|
+
if (!frame) frame = requestAnimationFrame(() => {
|
|
272
|
+
frame = 0;
|
|
273
|
+
updateChrome();
|
|
274
|
+
});
|
|
275
|
+
window.clearTimeout(restTimer);
|
|
276
|
+
restTimer = window.setTimeout(settle, lastInput === "touch" ? 90 : 160);
|
|
277
|
+
};
|
|
278
|
+
onMount(() => {
|
|
279
|
+
setMounted(true);
|
|
280
|
+
queueMicrotask(() => {
|
|
281
|
+
positionAt(view.anchorKey());
|
|
282
|
+
rememberAnchor();
|
|
283
|
+
ready = true;
|
|
284
|
+
updateChrome();
|
|
285
|
+
});
|
|
286
|
+
const observer = typeof ResizeObserver === "undefined" ? undefined : new ResizeObserver(() => {
|
|
287
|
+
measure();
|
|
288
|
+
// A glide owns the scroll until it arrives; putting the view back meanwhile would stop it.
|
|
289
|
+
if (glideTarget === null) restoreAnchor();
|
|
290
|
+
});
|
|
291
|
+
if (track) observer?.observe(track);
|
|
292
|
+
onCleanup(() => {
|
|
293
|
+
observer?.disconnect();
|
|
294
|
+
window.clearTimeout(restTimer);
|
|
295
|
+
window.clearTimeout(reportTimer);
|
|
296
|
+
window.clearTimeout(glideTimer);
|
|
297
|
+
if (frame) cancelAnimationFrame(frame);
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
// Before new days or an unfolded run change the page, note where the reader is from the page as it stands: the
|
|
301
|
+
// place remembered in the last frame can be a scroll behind on a busy page. A computation runs before any render
|
|
302
|
+
// effect touches the page.
|
|
303
|
+
createComputed(on(() => [groupIds(), view.days()], () => {
|
|
304
|
+
if (!untrack(mounted)) return;
|
|
305
|
+
measure();
|
|
306
|
+
rememberAnchor();
|
|
307
|
+
}, {
|
|
308
|
+
defer: true
|
|
309
|
+
}));
|
|
310
|
+
// New days above or below, a folded night, or an unfolded run: keep what the reader looks at in place.
|
|
311
|
+
createEffect(on(() => [groupIds(), view.days()], () => {
|
|
312
|
+
if (!untrack(mounted)) return;
|
|
313
|
+
measure();
|
|
314
|
+
if (pendingTarget && loaded(pendingTarget)) {
|
|
315
|
+
positionAt(pendingTarget);
|
|
316
|
+
pendingTarget = null;
|
|
317
|
+
rememberAnchor();
|
|
318
|
+
} else restoreAnchor();
|
|
319
|
+
updateChrome();
|
|
320
|
+
}, {
|
|
321
|
+
defer: true
|
|
322
|
+
}));
|
|
323
|
+
// Another date from the host puts that day on screen.
|
|
324
|
+
createEffect(on(view.anchorKey, key => {
|
|
325
|
+
if (!untrack(mounted)) return;
|
|
326
|
+
pendingTarget = loaded(key) ? null : key;
|
|
327
|
+
if (pendingTarget) return;
|
|
328
|
+
if (key === untrack(visibleKeys).first) {
|
|
329
|
+
rememberAnchor();
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
queueMicrotask(() => {
|
|
333
|
+
positionAt(key);
|
|
334
|
+
rememberAnchor();
|
|
335
|
+
updateChrome();
|
|
336
|
+
});
|
|
337
|
+
}, {
|
|
338
|
+
defer: true
|
|
339
|
+
}));
|
|
340
|
+
|
|
341
|
+
/** Whether today's day is above, below, or in the view. */
|
|
342
|
+
const placeOfToday = () => {
|
|
343
|
+
const key = view.nowKey();
|
|
344
|
+
if (!scroller) return "";
|
|
345
|
+
const section = sectionOf(key);
|
|
346
|
+
if (!section) return key < untrack(topKey) ? "up" : "down";
|
|
347
|
+
const index = sections.indexOf(section);
|
|
348
|
+
const top = scroller.scrollTop;
|
|
349
|
+
if (tops[index] + section.offsetHeight < top) return "up";
|
|
350
|
+
if (tops[index] > top + scroller.clientHeight) return "down";
|
|
351
|
+
return "";
|
|
352
|
+
};
|
|
353
|
+
const visibleKeys = () => {
|
|
354
|
+
const first = topKey();
|
|
355
|
+
if (!scroller || sections.length === 0) return {
|
|
356
|
+
first,
|
|
357
|
+
last: first
|
|
358
|
+
};
|
|
359
|
+
const bottom = scroller.scrollTop + scroller.clientHeight;
|
|
360
|
+
const index = stopIndexAt(tops, bottom - 1);
|
|
361
|
+
const keysAtBottom = keysOf(sections[index]);
|
|
362
|
+
return {
|
|
363
|
+
first,
|
|
364
|
+
last: keysAtBottom[keysAtBottom.length - 1] ?? first
|
|
365
|
+
};
|
|
366
|
+
};
|
|
367
|
+
const loaded = key => key >= view.range().first && key <= view.range().last;
|
|
368
|
+
const goTo = key => {
|
|
369
|
+
if (!loaded(key) || !scroller) return false;
|
|
370
|
+
// A day inside a run of empty days opens on its own, so the view goes to that day and not to the run.
|
|
371
|
+
if (untrack(groups).some(group => group.kind === "empty" && group.keys.includes(key))) unfold([key]);
|
|
372
|
+
measure();
|
|
373
|
+
const top = topFor(key);
|
|
374
|
+
if (top === null) return false;
|
|
375
|
+
glide(top);
|
|
376
|
+
return true;
|
|
377
|
+
};
|
|
378
|
+
const handle = {
|
|
379
|
+
visibleKeys,
|
|
380
|
+
step: direction => {
|
|
381
|
+
if (!scroller) return false;
|
|
382
|
+
measure();
|
|
383
|
+
const top = scroller.scrollTop;
|
|
384
|
+
const index = stopIndexAt(tops, top);
|
|
385
|
+
const target = direction > 0 ? tops[index + 1] : top - tops[index] > 8 ? tops[index] : tops[index - 1];
|
|
386
|
+
if (target === undefined) return false;
|
|
387
|
+
glide(target);
|
|
388
|
+
return true;
|
|
389
|
+
},
|
|
390
|
+
goTo,
|
|
391
|
+
today: () => {
|
|
392
|
+
const key = view.nowKey();
|
|
393
|
+
if (!loaded(key) || !scroller) return false;
|
|
394
|
+
measure();
|
|
395
|
+
const top = topFor(key, view.nowMinute());
|
|
396
|
+
if (top === null) return false;
|
|
397
|
+
glide(Math.max(topFor(key) ?? 0, top - scroller.clientHeight / 3));
|
|
398
|
+
return true;
|
|
399
|
+
},
|
|
400
|
+
todayDirection: () => {
|
|
401
|
+
const key = view.nowKey();
|
|
402
|
+
const {
|
|
403
|
+
first,
|
|
404
|
+
last
|
|
405
|
+
} = view.range();
|
|
406
|
+
if (key < first) return "up";
|
|
407
|
+
if (key > last) return "down";
|
|
408
|
+
return todayPlace();
|
|
409
|
+
},
|
|
410
|
+
controller: {
|
|
411
|
+
quickCreate: create => {
|
|
412
|
+
const target = view.createTarget(visibleKeys());
|
|
413
|
+
const body = scroller?.querySelector(`[data-calendar-body="${target.key}"]`);
|
|
414
|
+
view.openQuickCreate(target.key, target.start, target.end, anchorFor(target.key, target.start, target.end) ?? body ?? scroller, create);
|
|
415
|
+
},
|
|
416
|
+
createTarget: () => {
|
|
417
|
+
const target = view.createTarget(visibleKeys());
|
|
418
|
+
return view.rangeOfSelection(target);
|
|
419
|
+
},
|
|
420
|
+
dragIn: (event, item, onDrop) => view.dragIn(event, item, onDrop, scroller)
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
/** The place of a slot on screen for the quick create, when it is in view. */
|
|
424
|
+
const anchorFor = (key, start, end) => {
|
|
425
|
+
const body = scroller?.querySelector(`[data-calendar-body="${key}"]`);
|
|
426
|
+
if (!body || !scroller) return null;
|
|
427
|
+
const rect = body.getBoundingClientRect();
|
|
428
|
+
const bounds = scroller.getBoundingClientRect();
|
|
429
|
+
const geometry = readDayGeometry(body, view.wake(), body.dataset.expanded === "true");
|
|
430
|
+
const top = rect.top + dayY(geometry, start);
|
|
431
|
+
const bottom = rect.top + dayY(geometry, end);
|
|
432
|
+
if (bottom < bounds.top + 40 || top > bounds.bottom - 20) return null;
|
|
433
|
+
const left = rect.left + 56;
|
|
434
|
+
const clampedTop = Math.max(bounds.top, top);
|
|
435
|
+
return new DOMRect(left, clampedTop, Math.min(rect.right - left, 320), Math.max(8, Math.min(bottom, bounds.bottom) - clampedTop));
|
|
436
|
+
};
|
|
437
|
+
onMount(() => props.register(handle));
|
|
438
|
+
onCleanup(() => props.register(null));
|
|
439
|
+
|
|
440
|
+
/** Tab into the stream lands on the first stop on screen, not on the first loaded day weeks above. */
|
|
441
|
+
let tabbedAt = -1e9;
|
|
442
|
+
onMount(() => {
|
|
443
|
+
const note = event => {
|
|
444
|
+
if (event.key === "Tab") {
|
|
445
|
+
tabbedAt = performance.now();
|
|
446
|
+
if (scroller) restingTop = scroller.scrollTop;
|
|
447
|
+
}
|
|
448
|
+
};
|
|
449
|
+
window.addEventListener("keydown", note, true);
|
|
450
|
+
onCleanup(() => window.removeEventListener("keydown", note, true));
|
|
451
|
+
});
|
|
452
|
+
let restingTop = 0;
|
|
453
|
+
const onFocusIn = event => {
|
|
454
|
+
if (!scroller) return;
|
|
455
|
+
const from = event.relatedTarget instanceof Node ? event.relatedTarget : null;
|
|
456
|
+
if (performance.now() - tabbedAt > 400 || from && scroller.contains(from)) {
|
|
457
|
+
restingTop = scroller.scrollTop;
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
// Undo the scroll to the focused stop, which some engines make before this runs and some after; a stop on screen
|
|
461
|
+
// keeps the focus.
|
|
462
|
+
if (Math.abs(scroller.scrollTop - restingTop) >= 1) scroller.scrollTop = restingTop;
|
|
463
|
+
const bounds = scroller.getBoundingClientRect();
|
|
464
|
+
const visible = element => {
|
|
465
|
+
const rect = element.getBoundingClientRect();
|
|
466
|
+
return rect.height > 0 && rect.top >= bounds.top - 1 && rect.bottom <= bounds.bottom + 1;
|
|
467
|
+
};
|
|
468
|
+
if (event.target instanceof Element && visible(event.target)) return;
|
|
469
|
+
const stops = [...scroller.querySelectorAll("a[href],button:not([tabindex='-1'])")].filter(visible);
|
|
470
|
+
const back = Boolean(from && scroller.compareDocumentPosition(from) & Node.DOCUMENT_POSITION_FOLLOWING);
|
|
471
|
+
(back ? stops[stops.length - 1] : stops[0])?.focus({
|
|
472
|
+
preventScroll: true
|
|
473
|
+
});
|
|
474
|
+
};
|
|
475
|
+
return _$ssr(_tmpl$2, _$ssrAttribute("data-dragging", _$escape(view.dragging() || undefined, true), false), _$ssrAttribute("aria-describedby", _$escape(helpId, true), false), _$escape(_$createComponent(For, {
|
|
476
|
+
get each() {
|
|
477
|
+
return groupIds();
|
|
478
|
+
},
|
|
479
|
+
children: id => {
|
|
480
|
+
const group = () => groupsById().get(id);
|
|
481
|
+
return _$createComponent(Show, {
|
|
482
|
+
get when() {
|
|
483
|
+
return group();
|
|
484
|
+
},
|
|
485
|
+
children: current => current().kind === "day" ? _$createComponent(DaySection, {
|
|
486
|
+
view: view,
|
|
487
|
+
get dayKey() {
|
|
488
|
+
return groupFirst(current());
|
|
489
|
+
},
|
|
490
|
+
hover: hover,
|
|
491
|
+
setHover: setHover,
|
|
492
|
+
scroller: () => scroller
|
|
493
|
+
}) : _$createComponent(EmptyRun, {
|
|
494
|
+
view: view,
|
|
495
|
+
get keys() {
|
|
496
|
+
return current().keys;
|
|
497
|
+
},
|
|
498
|
+
onUnfold: unfold
|
|
499
|
+
})
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
})), _$escape(_$createComponent(Show, {
|
|
503
|
+
get when() {
|
|
504
|
+
return props.owner.onLoadLater;
|
|
505
|
+
},
|
|
506
|
+
get children() {
|
|
507
|
+
return _$ssr(_tmpl$, _$escape(view.messages().calendarMoreDays));
|
|
508
|
+
}
|
|
509
|
+
})), _$ssrAttribute("id", _$escape(helpId, true), false), _$escape(view.messages().calendarDayKeyboardHelp), _$escape(_$createComponent(TimeQuickCreate, {
|
|
510
|
+
view: view
|
|
511
|
+
})));
|
|
512
|
+
};
|
|
513
|
+
const DaySection = props => {
|
|
514
|
+
const view = props.view;
|
|
515
|
+
const model = createMemo(() => view.dayOf(props.dayKey));
|
|
516
|
+
const expanded = () => view.nightOpen(props.dayKey, model());
|
|
517
|
+
const headingId = createUniqueId();
|
|
518
|
+
const badge = () => view.props.owner.dayBadges?.[props.dayKey];
|
|
519
|
+
const today = () => props.dayKey === view.calendarToday();
|
|
520
|
+
const selectedDay = () => {
|
|
521
|
+
const current = view.selection();
|
|
522
|
+
return Boolean(current && current.key === props.dayKey && current.start === undefined);
|
|
523
|
+
};
|
|
524
|
+
const soon = () => soonNote(view, props.dayKey);
|
|
525
|
+
const wake = () => view.wake();
|
|
526
|
+
const nowMinute = () => props.dayKey === view.nowKey() ? view.nowMinute() : null;
|
|
527
|
+
const bands = createMemo(() => dayBands(view, props.dayKey, expanded()));
|
|
528
|
+
const gaps = createMemo(() => dayGaps(view, props.dayKey));
|
|
529
|
+
const markers = () => model().markers.filter(marker => marker.minute < (expanded() ? DAY_MINUTES : wake()));
|
|
530
|
+
/** Deadlines whose pills would cover each other share the width; keyed by marker, so rows keep their elements. */
|
|
531
|
+
const lanes = createMemo(() => new Map(markerLanes(markers(), wake()).map(entry => [entry.item, entry])));
|
|
532
|
+
const folded = () => expanded() ? [] : foldedEntries(view, props.dayKey);
|
|
533
|
+
const nightLabel = () => view.messages().calendarNight({
|
|
534
|
+
from: shortDay(view, props.dayKey),
|
|
535
|
+
to: shortDay(view, addDayKeys(props.dayKey, 1))
|
|
536
|
+
});
|
|
537
|
+
const foldLabel = () => view.messages().calendarNightHours({
|
|
538
|
+
from: view.clock(wake()).slice(0, 2),
|
|
539
|
+
to: view.clock(DAY_MINUTES).slice(0, 2)
|
|
540
|
+
});
|
|
541
|
+
|
|
542
|
+
// Gaps, bands, and markers in one time order, so Tab runs through the day as it reads. Unchanged rows keep their
|
|
543
|
+
// elements and focus when the clock updates the gaps.
|
|
544
|
+
const timeline = createMemo(previous => [...gaps().map(gap => previous.find(row => row.kind === "gap" && row.gap.start === gap.start && row.gap.end === gap.end && row.gap.past === gap.past) ?? {
|
|
545
|
+
at: gap.start,
|
|
546
|
+
kind: "gap",
|
|
547
|
+
gap
|
|
548
|
+
}), ...bands().map(band => previous.find(row => row.kind === "band" && row.band === band) ?? {
|
|
549
|
+
at: Math.max(0, band.start),
|
|
550
|
+
kind: "band",
|
|
551
|
+
band
|
|
552
|
+
}), ...markers().map(marker => previous.find(row => row.kind === "marker" && row.marker === marker) ?? {
|
|
553
|
+
at: marker.minute,
|
|
554
|
+
kind: "marker",
|
|
555
|
+
marker
|
|
556
|
+
})].sort((left, right) => left.at - right.at), []);
|
|
557
|
+
const isEmptyTarget = target => target instanceof Element && !target.closest("a,button,[data-calendar-event],.k2b-calendar-band,.k2b-calendar-marker,.k2b-calendar-draft,.k2b-calendar-fold");
|
|
558
|
+
const minuteAt = (element, clientY) => {
|
|
559
|
+
const geometry = readDayGeometry(element, wake(), expanded());
|
|
560
|
+
const rect = element.getBoundingClientRect();
|
|
561
|
+
return Math.max(0, Math.min((expanded() ? DAY_MINUTES : wake()) - 15, dayMinuteAt(geometry, clientY - rect.top)));
|
|
562
|
+
};
|
|
563
|
+
let lastPointer = "mouse";
|
|
564
|
+
return _$ssr(_tmpl$0, _$ssrAttribute("data-calendar-keys", _$escape(props.dayKey, true), false) + _$ssrAttribute("aria-labelledby", _$escape(headingId, true), false) + _$ssrAttribute("data-today", today() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-past", props.dayKey < view.nowKey() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-selected", selectedDay() ? "true" : _$escape(undefined, true), false), _$ssrAttribute("id", _$escape(headingId, true), false), _$ssrAttribute("aria-pressed", selectedDay() ? "true" : "false", false), _$escape(_$createComponent(Show, {
|
|
565
|
+
get when() {
|
|
566
|
+
return today();
|
|
567
|
+
},
|
|
568
|
+
get children() {
|
|
569
|
+
return _$ssr(_tmpl$3, _$escape(view.props.labels.today));
|
|
570
|
+
}
|
|
571
|
+
})), _$escape(longDay(view, props.dayKey)), _$escape(shortDay(view, props.dayKey, true)), _$ssrAttribute("data-cheer", view.cheered() === props.dayKey ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
|
|
572
|
+
get when() {
|
|
573
|
+
return soon();
|
|
574
|
+
},
|
|
575
|
+
get children() {
|
|
576
|
+
return [_$ssr(_tmpl$4), _$ssr(_tmpl$5, _$escape(soon()))];
|
|
577
|
+
}
|
|
578
|
+
})), _$escape(view.messages().calendarAllDone), _$escape(_$createComponent(Show, {
|
|
579
|
+
get when() {
|
|
580
|
+
return badge();
|
|
581
|
+
},
|
|
582
|
+
children: current => _$ssr(_tmpl$1, _$escape(_$createComponent(Show, {
|
|
583
|
+
get when() {
|
|
584
|
+
return current().icon;
|
|
585
|
+
},
|
|
586
|
+
children: icon => _$ssr(_tmpl$10, `ti ti-${_$escape(icon(), true)}`)
|
|
587
|
+
})), _$escape(current().label))
|
|
588
|
+
})), _$escape(daySummary(view, props.dayKey)), _$escape(_$createComponent(Show, {
|
|
589
|
+
get when() {
|
|
590
|
+
return model().spans.length > 0;
|
|
591
|
+
},
|
|
592
|
+
get children() {
|
|
593
|
+
return _$ssr(_tmpl$6, _$ssrAttribute("aria-label", _$escape(view.messages().calendarAllDayAndDue, true), false), _$escape(_$createComponent(AllDayChips, {
|
|
594
|
+
view: view,
|
|
595
|
+
get dayKey() {
|
|
596
|
+
return props.dayKey;
|
|
597
|
+
},
|
|
598
|
+
get spans() {
|
|
599
|
+
return model().spans;
|
|
600
|
+
}
|
|
601
|
+
})));
|
|
602
|
+
}
|
|
603
|
+
})), _$ssrAttribute("data-calendar-body", _$escape(props.dayKey, true), false) + _$ssrAttribute("data-expanded", expanded() ? "true" : "false", false), _$ssrStyleProperty("height:", _$escape(termsCss(dayHeightTerms(wake(), expanded())), true)), _$escape(_$createComponent(For, {
|
|
604
|
+
get each() {
|
|
605
|
+
return Array.from({
|
|
606
|
+
length: wake() / 60 + 1
|
|
607
|
+
}, (_, index) => index * 60);
|
|
608
|
+
},
|
|
609
|
+
children: minute => [_$ssr(_tmpl$11, _$ssrStyleProperty("top:", _$escape(termsCss(dayYTerms(wake(), expanded(), minute)), true))), _$ssr(_tmpl$12, _$ssrAttribute("data-near-now", isNearNow(view, props.dayKey, minute) ? "true" : _$escape(undefined, true), false), _$ssrStyleProperty("top:", _$escape(termsCss(dayYTerms(wake(), expanded(), minute)), true)), _$escape(view.clock(minute)))]
|
|
610
|
+
})), _$escape(_$createComponent(Show, {
|
|
611
|
+
get when() {
|
|
612
|
+
return expanded();
|
|
613
|
+
},
|
|
614
|
+
get fallback() {
|
|
615
|
+
return _$ssr(_tmpl$14, _$ssrStyleProperty("top:", `calc(${_$escape(termsCss(dayYTerms(wake(), false, wake())), true)} + 3px)`), _$ssrAttribute("aria-label", _$escape(view.messages().calendarOpenNight, true), false), _$escape(foldLabel()), _$escape(_$createComponent(Show, {
|
|
616
|
+
get when() {
|
|
617
|
+
return folded().length > 0;
|
|
618
|
+
},
|
|
619
|
+
get children() {
|
|
620
|
+
return _$ssr(_tmpl$13, _$escape(_$createComponent(For, {
|
|
621
|
+
get each() {
|
|
622
|
+
return folded();
|
|
623
|
+
},
|
|
624
|
+
children: entry => {
|
|
625
|
+
const checked = () => view.checkedOf(entry.event);
|
|
626
|
+
return _$ssr(_tmpl$15, _$ssrAttribute("data-checkbox", checked() !== undefined ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-checked", checked() ? "true" : _$escape(undefined, true), false), _$ssrStyleProperty("--k2b-calendar-accent:", _$escape(eventAccent(entry.event), true)), _$escape(_$createComponent(Show, {
|
|
627
|
+
get when() {
|
|
628
|
+
return checked() !== undefined;
|
|
629
|
+
},
|
|
630
|
+
get children() {
|
|
631
|
+
return _$createComponent(TimeCheck, {
|
|
632
|
+
view: view,
|
|
633
|
+
get event() {
|
|
634
|
+
return entry.event;
|
|
635
|
+
}
|
|
636
|
+
});
|
|
637
|
+
}
|
|
638
|
+
})), _$escape(_$createComponent(EventChip, {
|
|
639
|
+
get event() {
|
|
640
|
+
return view.normalized(entry.event, props.dayKey);
|
|
641
|
+
},
|
|
642
|
+
get owner() {
|
|
643
|
+
return view.props.owner;
|
|
644
|
+
},
|
|
645
|
+
get href() {
|
|
646
|
+
return eventHref(view.props.owner, entry.event);
|
|
647
|
+
},
|
|
648
|
+
compact: true,
|
|
649
|
+
timeline: true,
|
|
650
|
+
get leadingTime() {
|
|
651
|
+
return entry.time;
|
|
652
|
+
},
|
|
653
|
+
get checkbox() {
|
|
654
|
+
return checked() !== undefined;
|
|
655
|
+
},
|
|
656
|
+
get onCheck() {
|
|
657
|
+
return view.checkOf(entry.event);
|
|
658
|
+
}
|
|
659
|
+
})));
|
|
660
|
+
}
|
|
661
|
+
})));
|
|
662
|
+
}
|
|
663
|
+
})));
|
|
664
|
+
},
|
|
665
|
+
get children() {
|
|
666
|
+
return [_$ssr(_tmpl$7, _$ssrStyleProperty("top:", _$escape(termsCss(dayYTerms(wake(), true, wake())), true)) + _$ssrStyleProperty(";height:", _$escape(termsCss(dayHeightTermsNight(wake())), true))), _$ssr(_tmpl$8, _$ssrStyleProperty("top:", _$escape(termsCss(dayYTerms(wake(), true, wake())), true)), _$escape(nightLabel()), _$escape(view.messages().calendarFoldNight)), _$createComponent(For, {
|
|
667
|
+
get each() {
|
|
668
|
+
return nightHours(wake());
|
|
669
|
+
},
|
|
670
|
+
children: minute => [_$ssr(_tmpl$16, _$ssrAttribute("data-midnight", view.clock(minute) === "00:00" ? "true" : _$escape(undefined, true), false), _$ssrStyleProperty("top:", _$escape(termsCss(dayYTerms(wake(), true, minute)), true))), _$ssr(_tmpl$17, _$ssrStyleProperty("top:", _$escape(termsCss(dayYTerms(wake(), true, minute)), true)), _$escape(view.clock(minute))), _$createComponent(Show, {
|
|
671
|
+
get when() {
|
|
672
|
+
return view.clock(minute) === "00:00";
|
|
673
|
+
},
|
|
674
|
+
get children() {
|
|
675
|
+
return _$ssr(_tmpl$18, _$ssrStyleProperty("top:", _$escape(termsCss(dayYTerms(wake(), true, minute)), true)), _$escape(shortDay(view, addDayKeys(props.dayKey, 1), true)));
|
|
676
|
+
}
|
|
677
|
+
})]
|
|
678
|
+
})];
|
|
679
|
+
}
|
|
680
|
+
})), _$escape(_$createComponent(For, {
|
|
681
|
+
get each() {
|
|
682
|
+
return timeline();
|
|
683
|
+
},
|
|
684
|
+
children: entry => entry.kind === "gap" ? _$createComponent(TimeGap, {
|
|
685
|
+
view: view,
|
|
686
|
+
get gap() {
|
|
687
|
+
return entry.gap;
|
|
688
|
+
},
|
|
689
|
+
get dayKey() {
|
|
690
|
+
return props.dayKey;
|
|
691
|
+
},
|
|
692
|
+
get expanded() {
|
|
693
|
+
return expanded();
|
|
694
|
+
},
|
|
695
|
+
get aside() {
|
|
696
|
+
return gapAside(model(), entry.gap);
|
|
697
|
+
}
|
|
698
|
+
}) : entry.kind === "band" ? _$createComponent(TimeBand, {
|
|
699
|
+
view: view,
|
|
700
|
+
get band() {
|
|
701
|
+
return entry.band;
|
|
702
|
+
},
|
|
703
|
+
get dayKey() {
|
|
704
|
+
return props.dayKey;
|
|
705
|
+
},
|
|
706
|
+
get expanded() {
|
|
707
|
+
return expanded();
|
|
708
|
+
},
|
|
709
|
+
showLocation: true,
|
|
710
|
+
hourPx: 56,
|
|
711
|
+
get scroller() {
|
|
712
|
+
return props.scroller;
|
|
713
|
+
}
|
|
714
|
+
}) : _$createComponent(TimeMarker, {
|
|
715
|
+
view: view,
|
|
716
|
+
get event() {
|
|
717
|
+
return entry.marker.item;
|
|
718
|
+
},
|
|
719
|
+
get minute() {
|
|
720
|
+
return entry.marker.minute;
|
|
721
|
+
},
|
|
722
|
+
get dayKey() {
|
|
723
|
+
return props.dayKey;
|
|
724
|
+
},
|
|
725
|
+
get expanded() {
|
|
726
|
+
return expanded();
|
|
727
|
+
},
|
|
728
|
+
get above() {
|
|
729
|
+
return markerAbove(model(), entry.marker.minute);
|
|
730
|
+
},
|
|
731
|
+
get lane() {
|
|
732
|
+
return lanes().get(entry.marker)?.lane ?? 0;
|
|
733
|
+
},
|
|
734
|
+
get lanes() {
|
|
735
|
+
return lanes().get(entry.marker)?.lanes ?? 1;
|
|
736
|
+
},
|
|
737
|
+
showTime: true,
|
|
738
|
+
get scroller() {
|
|
739
|
+
return props.scroller;
|
|
740
|
+
}
|
|
741
|
+
})
|
|
742
|
+
})), _$escape(_$createComponent(TimeOverlays, {
|
|
743
|
+
view: view,
|
|
744
|
+
get dayKey() {
|
|
745
|
+
return props.dayKey;
|
|
746
|
+
},
|
|
747
|
+
get expanded() {
|
|
748
|
+
return expanded();
|
|
749
|
+
}
|
|
750
|
+
})), _$escape(_$createComponent(Show, {
|
|
751
|
+
get when() {
|
|
752
|
+
return _$memo(() => props.hover()?.key === props.dayKey)() && props.hover();
|
|
753
|
+
},
|
|
754
|
+
children: current => _$ssr(_tmpl$19, _$ssrStyleProperty("top:", _$escape(termsCss(dayYTerms(wake(), expanded(), current().minute)), true)), _$escape(view.clock(current().minute)))
|
|
755
|
+
})), _$escape(_$createComponent(Show, {
|
|
756
|
+
get when() {
|
|
757
|
+
return _$memo(() => !!(nowMinute() !== null && nowMinute() >= 0))() && nowMinute() < (expanded() ? DAY_MINUTES : wake());
|
|
758
|
+
},
|
|
759
|
+
get children() {
|
|
760
|
+
return _$ssr(_tmpl$9, _$ssrStyleProperty("top:", _$escape(termsCss(dayYTerms(wake(), expanded(), nowMinute())), true)), _$escape(view.clock(nowMinute())));
|
|
761
|
+
}
|
|
762
|
+
})));
|
|
763
|
+
};
|
|
764
|
+
const dayHeightTermsNight = wake => {
|
|
765
|
+
const total = dayHeightTerms(wake, true);
|
|
766
|
+
return [0, total[1], total[2], 0];
|
|
767
|
+
};
|
|
768
|
+
const EmptyRun = props => {
|
|
769
|
+
const view = props.view;
|
|
770
|
+
const headingId = createUniqueId();
|
|
771
|
+
const first = () => props.keys[0];
|
|
772
|
+
const last = () => props.keys[props.keys.length - 1];
|
|
773
|
+
const title = () => props.keys.length === 1 ? longDay(view, first()) : `${shortDay(view, first())} – ${shortDay(view, last(), true)}`;
|
|
774
|
+
return _$ssr(_tmpl$20, _$ssrAttribute("data-calendar-keys", _$escape(props.keys.join(","), true), false), _$ssrAttribute("data-past", last() < view.nowKey() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("aria-labelledby", _$escape(headingId, true), false), _$ssrAttribute("id", _$escape(headingId, true), false), _$escape(title()), _$escape(_$createComponent(For, {
|
|
775
|
+
get each() {
|
|
776
|
+
return props.keys.filter(key => view.props.owner.dayBadges?.[key]);
|
|
777
|
+
},
|
|
778
|
+
children: key => {
|
|
779
|
+
const badge = view.props.owner.dayBadges[key];
|
|
780
|
+
return _$ssr(_tmpl$22, _$escape(_$createComponent(Show, {
|
|
781
|
+
get when() {
|
|
782
|
+
return props.keys.length > 1;
|
|
783
|
+
},
|
|
784
|
+
get children() {
|
|
785
|
+
return _$ssr(_tmpl$21, _$escape(shortDay(view, key).split(/[\s,.]/)[0]));
|
|
786
|
+
}
|
|
787
|
+
})), _$escape(_$createComponent(Show, {
|
|
788
|
+
get when() {
|
|
789
|
+
return badge.icon;
|
|
790
|
+
},
|
|
791
|
+
children: icon => _$ssr(_tmpl$10, `ti ti-${_$escape(icon(), true)}`)
|
|
792
|
+
})), _$escape(badge.label));
|
|
793
|
+
}
|
|
794
|
+
})), props.keys.length > 1 ? _$escape(view.messages().calendarDayCount({
|
|
795
|
+
count: props.keys.length
|
|
796
|
+
})) : "", _$escape(view.messages().calendarNothingPlannedShort), _$escape(view.messages().calendarUnfoldDays({
|
|
797
|
+
count: props.keys.length
|
|
798
|
+
})));
|
|
799
|
+
};
|
|
800
|
+
//# sourceMappingURL=CalendarDayView.js.map
|