@k2b/ui 0.28.0 → 0.30.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/README.md +1 -1
- package/dist/base.css +2 -2
- package/dist/browser/actions/ContextMenu.js +5 -0
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/DragAndDrop.js +89 -0
- package/dist/browser/actions/DragAndDrop.js.map +1 -0
- package/dist/browser/actions/Dropdown.js +6 -3
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +137 -7
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/GestureMenu.js +26 -3
- package/dist/browser/actions/GestureMenu.js.map +1 -1
- package/dist/browser/actions/SegmentedControl.js +5 -9
- package/dist/browser/actions/SegmentedControl.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js +6 -3
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/Tabs.js +5 -2
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/actions/ViewTabs.js +294 -0
- package/dist/browser/actions/ViewTabs.js.map +1 -0
- package/dist/browser/actions/drag-and-drop-messages.js +75 -0
- package/dist/browser/actions/drag-and-drop-messages.js.map +1 -0
- package/dist/browser/actions/drag-and-drop.js +692 -0
- package/dist/browser/actions/drag-and-drop.js.map +1 -0
- package/dist/browser/actions/filter-messages.js +6 -2
- package/dist/browser/actions/filter-messages.js.map +1 -1
- package/dist/browser/actions/index.js +3 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +1229 -605
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatDecision.js +814 -0
- package/dist/browser/chat/ChatDecision.js.map +1 -0
- package/dist/browser/chat/ChatPrimitives.js +292 -153
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/ChatTimeline.js.map +1 -1
- package/dist/browser/chat/chat-messages.js +14 -0
- package/dist/browser/chat/chat-messages.js.map +1 -1
- package/dist/browser/chat/command-search.js +35 -17
- package/dist/browser/chat/command-search.js.map +1 -1
- package/dist/browser/chat/index.js +10 -3
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/chat/types.js.map +1 -1
- package/dist/browser/content/Calendar.js +146 -119
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarWeekView.js +291 -266
- package/dist/browser/content/CalendarWeekView.js.map +1 -1
- package/dist/browser/content/Chart.js +54 -71
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/DataTable.js +224 -155
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/FileBrowser.js +2 -2
- package/dist/browser/content/FileBrowser.js.map +1 -1
- package/dist/browser/content/FileTree.js +42 -36
- package/dist/browser/content/FileTree.js.map +1 -1
- package/dist/browser/content/FileTypeIcon.js +72 -0
- package/dist/browser/content/FileTypeIcon.js.map +1 -0
- package/dist/browser/content/FileView.js +2 -2
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/ReferenceChip.js +162 -0
- package/dist/browser/content/ReferenceChip.js.map +1 -0
- package/dist/browser/content/calendar-pointer.js +9 -0
- package/dist/browser/content/calendar-pointer.js.map +1 -1
- package/dist/browser/content/calendar-time-view.js +6 -3
- package/dist/browser/content/calendar-time-view.js.map +1 -1
- package/dist/browser/content/data-table-messages.js +4 -2
- package/dist/browser/content/data-table-messages.js.map +1 -1
- package/dist/browser/content/index.js +2 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/feedback/MovedHint.js +197 -0
- package/dist/browser/feedback/MovedHint.js.map +1 -0
- package/dist/browser/feedback/dialog-core.js +66 -9
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/index.js +1 -0
- package/dist/browser/feedback/index.js.map +1 -1
- package/dist/browser/feedback/prompts.js +6 -1
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +337 -212
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/date-picker.js +59 -5
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/intl/messages.js +12 -0
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/intl/weekend.js +39 -0
- package/dist/browser/intl/weekend.js.map +1 -0
- package/dist/browser/layout/AppOverview.js +1 -2
- package/dist/browser/layout/AppOverview.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +947 -531
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +3 -2
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/PanelDialog.js +88 -86
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/ResizeSeparator.js +81 -0
- package/dist/browser/layout/ResizeSeparator.js.map +1 -0
- package/dist/browser/layout/SettingsModal.js +2 -2
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/layout/SidebarSwitcher.js +19 -11
- package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
- package/dist/browser/layout/TabBar.js +16 -13
- package/dist/browser/layout/TabBar.js.map +1 -1
- package/dist/browser/layout/app-host-width.js +44 -0
- package/dist/browser/layout/app-host-width.js.map +1 -0
- package/dist/browser/layout/app-workspace-controller.js +337 -44
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/index.js +4 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/resize-separator.js +90 -0
- package/dist/browser/layout/resize-separator.js.map +1 -0
- package/dist/browser/layout/workspace-messages.js +12 -2
- package/dist/browser/layout/workspace-messages.js.map +1 -1
- package/dist/browser/surfaces/LinkCard.js +1 -1
- package/dist/browser/surfaces/LinkCard.js.map +1 -1
- package/dist/browser/surfaces/Placeholder.js +45 -11
- package/dist/browser/surfaces/Placeholder.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js +23 -0
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/widgets/Widget.js +1 -1
- package/dist/browser/widgets/Widget.js.map +1 -1
- package/dist/ssr/actions/ContextMenu.js +5 -0
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/DragAndDrop.js +63 -0
- package/dist/ssr/actions/DragAndDrop.js.map +1 -0
- package/dist/ssr/actions/Dropdown.js +5 -2
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +59 -7
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/GestureMenu.js +26 -3
- package/dist/ssr/actions/GestureMenu.js.map +1 -1
- package/dist/ssr/actions/SegmentedControl.js +1 -2
- package/dist/ssr/actions/SegmentedControl.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js +2 -2
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/Tabs.js +2 -2
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/actions/ViewTabs.js +211 -0
- package/dist/ssr/actions/ViewTabs.js.map +1 -0
- package/dist/ssr/actions/drag-and-drop-messages.js +75 -0
- package/dist/ssr/actions/drag-and-drop-messages.js.map +1 -0
- package/dist/ssr/actions/drag-and-drop.js +692 -0
- package/dist/ssr/actions/drag-and-drop.js.map +1 -0
- package/dist/ssr/actions/filter-messages.js +6 -2
- package/dist/ssr/actions/filter-messages.js.map +1 -1
- package/dist/ssr/actions/index.js +3 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +668 -136
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatDecision.js +479 -0
- package/dist/ssr/chat/ChatDecision.js.map +1 -0
- package/dist/ssr/chat/ChatPrimitives.js +95 -24
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/ChatTimeline.js.map +1 -1
- package/dist/ssr/chat/chat-messages.js +14 -0
- package/dist/ssr/chat/chat-messages.js.map +1 -1
- package/dist/ssr/chat/command-search.js +35 -17
- package/dist/ssr/chat/command-search.js.map +1 -1
- package/dist/ssr/chat/index.js +10 -3
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/chat/types.js.map +1 -1
- package/dist/ssr/content/Calendar.js +112 -103
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarWeekView.js +42 -28
- package/dist/ssr/content/CalendarWeekView.js.map +1 -1
- package/dist/ssr/content/Chart.js +19 -23
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/DataTable.js +78 -31
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/FileBrowser.js +2 -2
- package/dist/ssr/content/FileBrowser.js.map +1 -1
- package/dist/ssr/content/FileTree.js +21 -14
- package/dist/ssr/content/FileTree.js.map +1 -1
- package/dist/ssr/content/FileTypeIcon.js +50 -0
- package/dist/ssr/content/FileTypeIcon.js.map +1 -0
- package/dist/ssr/content/FileView.js +2 -2
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/ReferenceChip.js +121 -0
- package/dist/ssr/content/ReferenceChip.js.map +1 -0
- package/dist/ssr/content/calendar-pointer.js +9 -0
- package/dist/ssr/content/calendar-pointer.js.map +1 -1
- package/dist/ssr/content/calendar-time-view.js +6 -3
- package/dist/ssr/content/calendar-time-view.js.map +1 -1
- package/dist/ssr/content/data-table-messages.js +4 -2
- package/dist/ssr/content/data-table-messages.js.map +1 -1
- package/dist/ssr/content/index.js +2 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/feedback/MovedHint.js +166 -0
- package/dist/ssr/feedback/MovedHint.js.map +1 -0
- package/dist/ssr/feedback/dialog-core.js +66 -9
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/index.js +1 -0
- package/dist/ssr/feedback/index.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +6 -1
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +138 -69
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js +59 -5
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/intl/messages.js +12 -0
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/intl/weekend.js +39 -0
- package/dist/ssr/intl/weekend.js.map +1 -0
- package/dist/ssr/layout/AppOverview.js +1 -2
- package/dist/ssr/layout/AppOverview.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +457 -116
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +3 -2
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/PanelDialog.js +7 -6
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/ResizeSeparator.js +45 -0
- package/dist/ssr/layout/ResizeSeparator.js.map +1 -0
- package/dist/ssr/layout/SettingsModal.js +2 -2
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/layout/SidebarSwitcher.js +19 -11
- package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
- package/dist/ssr/layout/TabBar.js +2 -2
- package/dist/ssr/layout/TabBar.js.map +1 -1
- package/dist/ssr/layout/app-host-width.js +44 -0
- package/dist/ssr/layout/app-host-width.js.map +1 -0
- package/dist/ssr/layout/app-workspace-controller.js +337 -44
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/index.js +4 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/resize-separator.js +90 -0
- package/dist/ssr/layout/resize-separator.js.map +1 -0
- package/dist/ssr/layout/workspace-messages.js +12 -2
- package/dist/ssr/layout/workspace-messages.js.map +1 -1
- package/dist/ssr/surfaces/LinkCard.js +1 -1
- package/dist/ssr/surfaces/LinkCard.js.map +1 -1
- package/dist/ssr/surfaces/Placeholder.js +25 -6
- package/dist/ssr/surfaces/Placeholder.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +23 -0
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/widgets/Widget.js +1 -1
- package/dist/ssr/widgets/Widget.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/ContextMenu.d.ts +1 -0
- package/dist/types/actions/DragAndDrop.d.ts +29 -0
- package/dist/types/actions/Dropdown.d.ts +4 -0
- package/dist/types/actions/FilterChip.d.ts +22 -0
- package/dist/types/actions/ViewTabs.d.ts +30 -0
- package/dist/types/actions/drag-and-drop-messages.d.ts +35 -0
- package/dist/types/actions/drag-and-drop.d.ts +36 -0
- package/dist/types/actions/filter-messages.d.ts +2 -0
- package/dist/types/actions/index.d.ts +6 -2
- package/dist/types/chat/ChatComposer.d.ts +71 -1
- package/dist/types/chat/ChatDecision.d.ts +149 -0
- package/dist/types/chat/ChatPrimitives.d.ts +14 -1
- package/dist/types/chat/ChatTimeline.d.ts +2 -1
- package/dist/types/chat/chat-messages.d.ts +7 -0
- package/dist/types/chat/command-search.d.ts +5 -0
- package/dist/types/chat/index.d.ts +28 -5
- package/dist/types/chat/types.d.ts +54 -1
- package/dist/types/content/Chart.d.ts +9 -3
- package/dist/types/content/DataTable.d.ts +3 -0
- package/dist/types/content/FileTypeIcon.d.ts +27 -0
- package/dist/types/content/ReferenceChip.d.ts +49 -0
- package/dist/types/content/calendar-pointer.d.ts +6 -0
- package/dist/types/content/data-table-messages.d.ts +1 -0
- package/dist/types/content/index.d.ts +3 -0
- package/dist/types/feedback/MovedHint.d.ts +25 -0
- package/dist/types/feedback/dialog-core.d.ts +5 -2
- package/dist/types/feedback/index.d.ts +2 -0
- package/dist/types/feedback/prompts.d.ts +2 -0
- package/dist/types/inputs/DatePicker.d.ts +7 -0
- package/dist/types/inputs/date-picker.d.ts +25 -1
- package/dist/types/intl/messages.d.ts +6 -0
- package/dist/types/intl/weekend.d.ts +12 -0
- package/dist/types/layout/AppWorkspace.d.ts +48 -10
- package/dist/types/layout/ResizeSeparator.d.ts +9 -0
- package/dist/types/layout/TabBar.d.ts +7 -0
- package/dist/types/layout/app-host-width.d.ts +6 -0
- package/dist/types/layout/app-workspace-controller.d.ts +2 -0
- package/dist/types/layout/index.d.ts +5 -2
- package/dist/types/layout/resize-separator.d.ts +18 -0
- package/dist/types/layout/workspace-messages.d.ts +5 -0
- package/dist/types/surfaces/Placeholder.d.ts +2 -1
- package/dist/types/surfaces/StatCell.d.ts +6 -0
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarCommand,\n CalendarController,\n CalendarCustomView,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarExternalDrag,\n CalendarLabels,\n CalendarProps,\n CalendarQuickCreateControls,\n CalendarRange,\n CalendarRecurrence,\n CalendarResource,\n CalendarSelectionControls,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { ChartExplorerColumn, ChartExplorerProps, ChartLegendEntry } from \"./ChartExplorer\";\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport { type ChartCursor, createChartCursor } from \"./chart-cursor\";\nexport type {\n ChartExplorerCharts,\n ChartExplorerController,\n ChartExplorerData,\n ChartExplorerOptions,\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerSnapshot,\n} from \"./chart-explorer\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection-core\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\nexport type { KbdProps } from \"./Kbd\";\nexport { Kbd } from \"./Kbd\";\nexport type { LabelChipProps } from \"./LabelChip\";\nexport { LabelChip } from \"./LabelChip\";\nexport type { LightboxAction, LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { default as MarkdownView, type MarkdownRenderOptions, type MarkdownViewProps, renderSafeMarkdown } from \"./MarkdownView\";\nexport type {\n MessageGroupEntry,\n MessageRowAction,\n MessageRowAttachment,\n MessageRowAuthor,\n MessageRowFile,\n MessageRowMedia,\n MessageRowProgress,\n MessageRowProps,\n MessageRowQuote,\n MessageRowReaction,\n MessageRowStatus,\n MessageRowThread,\n MessageSystemRowProps,\n} from \"./MessageRow\";\nexport { MessageRow, MessageSystemRow, startsMessageGroup } from \"./MessageRow\";\nexport {\n MARKDOWN_CALLOUT_CLASSES,\n MARKDOWN_CALLOUT_ICON_ATTRIBUTES,\n type MarkdownInfoBlock,\n type MarkdownInfoBlockRenderInput,\n type MarkdownInfoBlockType,\n markdownInfoBlocks,\n renderMarkdownInfoBlock,\n scanMarkdownInfoBlock,\n} from \"./markdown-info-blocks\";\nexport {\n type MarkdownLinkInput,\n type MarkdownReference,\n type MarkdownReferenceKind,\n type MarkdownReferenceType,\n markdownLinkReference,\n markdownReferenceIcon,\n markdownReferenceType,\n markdownReferenceTypeLabel,\n markStandaloneLinks,\n renderMarkdownLink,\n} from \"./markdown-links\";\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport { ReactionBar, type ReactionBarItem, type ReactionBarProps } from \"./ReactionBar\";\nexport type { StepsProps } from \"./Steps\";\nexport { Steps } from \"./Steps\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\nexport type { TimelineColor, TimelineController, TimelineItem, TimelineProps } from \"./Timeline\";\nexport { default as Timeline } from \"./Timeline\";\nexport { VideoPlayer, type VideoPlayerProps } from \"./VideoPlayer\";\nexport type { VirtualFeedController, VirtualFeedProps, VirtualFeedScrollOptions } from \"./VirtualFeed\";\nexport { VirtualFeed } from \"./VirtualFeed\";\nexport type { ZoomPanAction, ZoomPanFullscreen, ZoomPanViewportProps } from \"./ZoomPanViewport\";\nexport { ZoomPanViewport } from \"./ZoomPanViewport\";\n"],"mappings":"AAoBA,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAGhD,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,qBAAqB,QAAQ,yBAAyB;AAC/D,SAAS,mBAAmB,QAAuC,uBAAuB;AAC1F,SAAS,iBAAiB,QAAQ,qBAAqB;AAEvD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAA2B,iBAAiB,QAAQ,gBAAgB;AAUpE,SAAS,mBAAmB,QAAQ,kBAAkB;AAGtD,SAAS,oBAAoB,QAAQ,kBAAkB;AAQvD,SAAmC,yBAAyB,QAAiC,wBAAwB;AAarH,SAAS,OAAO,IAAI,SAAS,QAAQ,aAAa;AAElD,SAAS,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,QAAQ,QAAQ;AAC/G,SAAS,gBAAgB,EAA+C,eAAe,QAAQ,eAAe;AAC9G,SAAS,QAAQ,QAA4B,YAAY;AACzD,SAAS,OAAO,IAAI,QAAQ,QAAsE,YAAY;AAC9G,SACE,cAAc,EACd,OAAO,IAAI,QAAQ,EAOnB,kBAAkB,EAClB,sBAAsB,QACjB,YAAY;AAEnB,SAAS,GAAG,QAAQ,OAAO;AAE3B,SAAS,SAAS,QAAQ,aAAa;AAEvC,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAEhD,SAAS,OAAO,IAAI,eAAe,QAAQ,mBAAmB;AAC9D,SAAS,OAAO,IAAI,YAAY,EAAsD,kBAAkB,QAAQ,gBAAgB;AAgBhI,SAAS,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,QAAQ,cAAc;AAC/E,SACE,wBAAwB,EACxB,gCAAgC,EAIhC,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,QAChB,wBAAwB;AAC/B,SAKE,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,QACb,kBAAkB;AACzB,SAAS,UAAU,QAA8B,cAAc;AAE/D,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAEpD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAAS,WAAW,QAAqD,eAAe;
|
|
1
|
+
{"version":3,"names":[],"sources":["content/index.ts"],"sourcesContent":["export type {\n CalendarAttendee,\n CalendarCommand,\n CalendarController,\n CalendarCustomView,\n CalendarDayBadge,\n CalendarEvent,\n CalendarEventColor,\n CalendarEventRenderContext,\n CalendarEventTimeChange,\n CalendarExternalDrag,\n CalendarLabels,\n CalendarProps,\n CalendarQuickCreateControls,\n CalendarRange,\n CalendarRecurrence,\n CalendarResource,\n CalendarSelectionControls,\n CalendarView,\n} from \"./Calendar\";\nexport { default as Calendar } from \"./Calendar\";\n\nexport type { ChartKind, ChartLabels, ChartProps, ChartRenderOptions } from \"./Chart\";\nexport { default as Chart } from \"./Chart\";\nexport type { ChartExplorerColumn, ChartExplorerProps, ChartLegendEntry } from \"./ChartExplorer\";\nexport { ChartExplorer } from \"./ChartExplorer\";\nexport type { ChartExplorerControlsProps } from \"./ChartExplorerControls\";\nexport { ChartExplorerControls } from \"./ChartExplorerControls\";\nexport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nexport { ChartSnapshotView } from \"./ChartSnapshotView\";\nexport type { CodeDisplayLanguage, CodeDisplayProps } from \"./CodeDisplay\";\nexport { default as CodeDisplay } from \"./CodeDisplay\";\nexport { type ChartCursor, createChartCursor } from \"./chart-cursor\";\nexport type {\n ChartExplorerCharts,\n ChartExplorerController,\n ChartExplorerData,\n ChartExplorerOptions,\n ChartExplorerRequest,\n ChartExplorerRow,\n ChartExplorerSnapshot,\n} from \"./chart-explorer\";\nexport { createChartExplorer } from \"./chart-explorer\";\nexport type { ChartDatumRef, ChartSelection, ChartTooltip, ChartTooltipFormatter } from \"./chart-inspection-core\";\nexport type { ChartSnapshot } from \"./chart-snapshot\";\nexport { prepareChartSnapshot } from \"./chart-snapshot\";\nexport type {\n StateTimelineChartOptions,\n StateTimelineDomain,\n StateTimelineInterval,\n StateTimelineRow,\n StateTimelineState,\n} from \"./chart-state-timeline\";\nexport { type CollectionSelection, createCollectionSelection, type SelectionModifiers } from \"./collection-selection\";\nexport type {\n DataTableColumn,\n DataTableControlsProps,\n DataTableFooter,\n DataTableHeaderProps,\n DataTablePanelFooterProps,\n DataTablePanelProps,\n DataTableProps,\n DataTableRenderCell,\n DataTableRenderHeader,\n DataTableSort,\n} from \"./DataTable\";\nexport { default as DataTable } from \"./DataTable\";\nexport type { DocCodeHighlighter, DocCodeProps, DocConcept, DocNoteVariant, DocRow } from \"./Docs\";\nexport { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocRows, DocSection } from \"./Docs\";\nexport { FileBrowserPanel, type FileBrowserPanelProps, type FileSource, openFileBrowser } from \"./FileBrowser\";\nexport { FileGrid, type FileGridProps } from \"./FileGrid\";\nexport { default as FileTree, type FileTreeActions, type FileTreeEntry, type FileTreeProps } from \"./FileTree\";\nexport { type FileType, FileTypeIcon, type FileTypeIconProps, fileTypeOf } from \"./FileTypeIcon\";\nexport {\n canPreviewFile,\n default as FileView,\n type FileViewContent,\n type FileViewFile,\n type FileViewPreviewKind,\n type FileViewProps,\n type FileViewRenderer,\n type FileViewRendererProps,\n formatFileViewSize,\n getFileViewPreviewKind,\n} from \"./FileView\";\nexport type { KbdProps } from \"./Kbd\";\nexport { Kbd } from \"./Kbd\";\nexport type { LabelChipProps } from \"./LabelChip\";\nexport { LabelChip } from \"./LabelChip\";\nexport type { LightboxAction, LightboxImage } from \"./Lightbox\";\nexport { default as Lightbox } from \"./Lightbox\";\nexport type { LogTableEntry } from \"./LogEntriesTable\";\nexport { default as LogEntriesTable } from \"./LogEntriesTable\";\nexport { default as MarkdownView, type MarkdownRenderOptions, type MarkdownViewProps, renderSafeMarkdown } from \"./MarkdownView\";\nexport type {\n MessageGroupEntry,\n MessageRowAction,\n MessageRowAttachment,\n MessageRowAuthor,\n MessageRowFile,\n MessageRowMedia,\n MessageRowProgress,\n MessageRowProps,\n MessageRowQuote,\n MessageRowReaction,\n MessageRowStatus,\n MessageRowThread,\n MessageSystemRowProps,\n} from \"./MessageRow\";\nexport { MessageRow, MessageSystemRow, startsMessageGroup } from \"./MessageRow\";\nexport {\n MARKDOWN_CALLOUT_CLASSES,\n MARKDOWN_CALLOUT_ICON_ATTRIBUTES,\n type MarkdownInfoBlock,\n type MarkdownInfoBlockRenderInput,\n type MarkdownInfoBlockType,\n markdownInfoBlocks,\n renderMarkdownInfoBlock,\n scanMarkdownInfoBlock,\n} from \"./markdown-info-blocks\";\nexport {\n type MarkdownLinkInput,\n type MarkdownReference,\n type MarkdownReferenceKind,\n type MarkdownReferenceType,\n markdownLinkReference,\n markdownReferenceIcon,\n markdownReferenceType,\n markdownReferenceTypeLabel,\n markStandaloneLinks,\n renderMarkdownLink,\n} from \"./markdown-links\";\nexport { Pagination, type PaginationProps } from \"./Pagination\";\nexport type { PdfPreviewProps, PdfPreviewRequest } from \"./PdfPreview\";\nexport { default as PdfPreview } from \"./PdfPreview\";\nexport type { RangeOption, RangePickerProps } from \"./RangePicker\";\nexport { default as RangePicker } from \"./RangePicker\";\nexport { ReactionBar, type ReactionBarItem, type ReactionBarProps } from \"./ReactionBar\";\nexport type {\n ReferenceChipObjectProps,\n ReferenceChipPersonProps,\n ReferenceChipProps,\n ReferenceChipTimeProps,\n} from \"./ReferenceChip\";\nexport { REFERENCE_CHIP_MAX_CHARACTERS, ReferenceChip, truncateMiddle } from \"./ReferenceChip\";\nexport type { StepsProps } from \"./Steps\";\nexport { Steps } from \"./Steps\";\nexport type { StructuredDataPreviewMode, StructuredDataPreviewProps, StructuredDataValue } from \"./StructuredDataPreview\";\nexport { default as StructuredDataPreview, isStructuredDataValue } from \"./StructuredDataPreview\";\nexport type { TimelineColor, TimelineController, TimelineItem, TimelineProps } from \"./Timeline\";\nexport { default as Timeline } from \"./Timeline\";\nexport { VideoPlayer, type VideoPlayerProps } from \"./VideoPlayer\";\nexport type { VirtualFeedController, VirtualFeedProps, VirtualFeedScrollOptions } from \"./VirtualFeed\";\nexport { VirtualFeed } from \"./VirtualFeed\";\nexport type { ZoomPanAction, ZoomPanFullscreen, ZoomPanViewportProps } from \"./ZoomPanViewport\";\nexport { ZoomPanViewport } from \"./ZoomPanViewport\";\n"],"mappings":"AAoBA,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAGhD,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,qBAAqB,QAAQ,yBAAyB;AAC/D,SAAS,mBAAmB,QAAuC,uBAAuB;AAC1F,SAAS,iBAAiB,QAAQ,qBAAqB;AAEvD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAA2B,iBAAiB,QAAQ,gBAAgB;AAUpE,SAAS,mBAAmB,QAAQ,kBAAkB;AAGtD,SAAS,oBAAoB,QAAQ,kBAAkB;AAQvD,SAAmC,yBAAyB,QAAiC,wBAAwB;AAarH,SAAS,OAAO,IAAI,SAAS,QAAQ,aAAa;AAElD,SAAS,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,QAAQ,QAAQ;AAC/G,SAAS,gBAAgB,EAA+C,eAAe,QAAQ,eAAe;AAC9G,SAAS,QAAQ,QAA4B,YAAY;AACzD,SAAS,OAAO,IAAI,QAAQ,QAAsE,YAAY;AAC9G,SAAwB,YAAY,EAA0B,UAAU,QAAQ,gBAAgB;AAChG,SACE,cAAc,EACd,OAAO,IAAI,QAAQ,EAOnB,kBAAkB,EAClB,sBAAsB,QACjB,YAAY;AAEnB,SAAS,GAAG,QAAQ,OAAO;AAE3B,SAAS,SAAS,QAAQ,aAAa;AAEvC,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAEhD,SAAS,OAAO,IAAI,eAAe,QAAQ,mBAAmB;AAC9D,SAAS,OAAO,IAAI,YAAY,EAAsD,kBAAkB,QAAQ,gBAAgB;AAgBhI,SAAS,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,QAAQ,cAAc;AAC/E,SACE,wBAAwB,EACxB,gCAAgC,EAIhC,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,QAChB,wBAAwB;AAC/B,SAKE,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,QACb,kBAAkB;AACzB,SAAS,UAAU,QAA8B,cAAc;AAE/D,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAEpD,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AACtD,SAAS,WAAW,QAAqD,eAAe;AAOxF,SAAS,6BAA6B,EAAE,aAAa,EAAE,cAAc,QAAQ,iBAAiB;AAE9F,SAAS,KAAK,QAAQ,SAAS;AAE/B,SAAS,OAAO,IAAI,qBAAqB,EAAE,qBAAqB,QAAQ,yBAAyB;AAEjG,SAAS,OAAO,IAAI,QAAQ,QAAQ,YAAY;AAChD,SAAS,WAAW,QAA+B,eAAe;AAElE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { template as _$template } from "solid-js/web";
|
|
2
|
+
import { className as _$className } from "solid-js/web";
|
|
3
|
+
import { effect as _$effect } from "solid-js/web";
|
|
4
|
+
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
5
|
+
import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
6
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
7
|
+
import { insert as _$insert } from "solid-js/web";
|
|
8
|
+
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
9
|
+
import { use as _$use } from "solid-js/web";
|
|
10
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<div popover=manual role=group><p class=k2b-moved-hint__text></p><div class=k2b-moved-hint__actions><!$><!/><!$><!/>`);
|
|
11
|
+
import { createEffect, createSignal, createUniqueId, onCleanup, onMount, Show } from "solid-js";
|
|
12
|
+
import { Button, ButtonLink } from "../actions/Button";
|
|
13
|
+
import { useUiMessages } from "../intl/messages";
|
|
14
|
+
import { announce } from "./announce";
|
|
15
|
+
import { positionTooltipSurface } from "./tooltip-position";
|
|
16
|
+
export function MovedHint(props) {
|
|
17
|
+
const messages = useUiMessages();
|
|
18
|
+
const textId = `k2b-moved-hint-${createUniqueId()}`;
|
|
19
|
+
const [mounted, setMounted] = createSignal(false);
|
|
20
|
+
const [dismissed, setDismissed] = createSignal(false);
|
|
21
|
+
let surface;
|
|
22
|
+
let text;
|
|
23
|
+
let previousFocus;
|
|
24
|
+
let shown = false;
|
|
25
|
+
let announced = false;
|
|
26
|
+
const hide = () => {
|
|
27
|
+
if (!shown) return;
|
|
28
|
+
shown = false;
|
|
29
|
+
try {
|
|
30
|
+
surface?.hidePopover?.();
|
|
31
|
+
} catch {
|
|
32
|
+
// Cleanup can run after the surface disconnects.
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const dismiss = restoreFocus => {
|
|
36
|
+
if (!props.open || dismissed()) return false;
|
|
37
|
+
const focusInside = surface?.contains(document.activeElement);
|
|
38
|
+
const target = props.target();
|
|
39
|
+
const returnTo = previousFocus?.isConnected && !previousFocus.matches(":disabled") ? previousFocus : target && (target.tabIndex >= 0 || target.hasAttribute("tabindex")) && !target.matches(":disabled") ? target : undefined;
|
|
40
|
+
hide();
|
|
41
|
+
if (restoreFocus && focusInside && returnTo) {
|
|
42
|
+
returnTo.focus({
|
|
43
|
+
preventScroll: true
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
setDismissed(true);
|
|
47
|
+
props.onDismiss();
|
|
48
|
+
return true;
|
|
49
|
+
};
|
|
50
|
+
createEffect(() => {
|
|
51
|
+
if (!props.open) {
|
|
52
|
+
setDismissed(false);
|
|
53
|
+
previousFocus = undefined;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
onMount(() => setMounted(true));
|
|
57
|
+
createEffect(() => {
|
|
58
|
+
if (!mounted() || !props.open || dismissed()) return;
|
|
59
|
+
const anchor = props.target();
|
|
60
|
+
const placement = props.placement ?? "bottom";
|
|
61
|
+
if (!surface || !anchor) return;
|
|
62
|
+
|
|
63
|
+
// A target scrolled out of view, or clipped by its scroller, takes the hint along instead of leaving it
|
|
64
|
+
// pinned to the viewport edge over unrelated content.
|
|
65
|
+
let inView = typeof IntersectionObserver === "undefined";
|
|
66
|
+
const position = () => {
|
|
67
|
+
if (!props.open || dismissed() || !inView || !anchor.isConnected || anchor.getClientRects().length === 0) {
|
|
68
|
+
hide();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (!surface || typeof surface.showPopover !== "function") return;
|
|
72
|
+
if (!shown) {
|
|
73
|
+
try {
|
|
74
|
+
surface.showPopover();
|
|
75
|
+
shown = true;
|
|
76
|
+
} catch {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
positionTooltipSurface(surface, anchor, placement);
|
|
81
|
+
if (!announced) {
|
|
82
|
+
announced = true;
|
|
83
|
+
announce(text?.textContent ?? "");
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const focusIn = event => {
|
|
87
|
+
if (!(event.relatedTarget instanceof Node) || !surface?.contains(event.relatedTarget)) {
|
|
88
|
+
previousFocus = event.relatedTarget instanceof HTMLElement ? event.relatedTarget : undefined;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const keydown = event => {
|
|
92
|
+
if (event.defaultPrevented || event.isComposing) return;
|
|
93
|
+
if (event.key !== "Escape" || !(event.target instanceof Node)) return;
|
|
94
|
+
if (!surface?.contains(event.target) && !anchor.contains(event.target)) return;
|
|
95
|
+
event.preventDefault();
|
|
96
|
+
dismiss(true);
|
|
97
|
+
};
|
|
98
|
+
const observer = typeof ResizeObserver === "undefined" ? undefined : new ResizeObserver(position);
|
|
99
|
+
observer?.observe(anchor);
|
|
100
|
+
const visibility = typeof IntersectionObserver === "undefined" ? undefined : new IntersectionObserver(entries => {
|
|
101
|
+
inView = entries.at(-1)?.isIntersecting ?? inView;
|
|
102
|
+
position();
|
|
103
|
+
});
|
|
104
|
+
visibility?.observe(anchor);
|
|
105
|
+
surface.addEventListener("focusin", focusIn);
|
|
106
|
+
document.addEventListener("keydown", keydown);
|
|
107
|
+
window.addEventListener("resize", position);
|
|
108
|
+
window.addEventListener("scroll", position, {
|
|
109
|
+
capture: true,
|
|
110
|
+
passive: true
|
|
111
|
+
});
|
|
112
|
+
position();
|
|
113
|
+
onCleanup(() => {
|
|
114
|
+
observer?.disconnect();
|
|
115
|
+
visibility?.disconnect();
|
|
116
|
+
surface?.removeEventListener("focusin", focusIn);
|
|
117
|
+
document.removeEventListener("keydown", keydown);
|
|
118
|
+
window.removeEventListener("resize", position);
|
|
119
|
+
window.removeEventListener("scroll", position, true);
|
|
120
|
+
hide();
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
return _$createComponent(Show, {
|
|
124
|
+
get when() {
|
|
125
|
+
return props.open;
|
|
126
|
+
},
|
|
127
|
+
get children() {
|
|
128
|
+
var _el$ = _$getNextElement(_tmpl$),
|
|
129
|
+
_el$2 = _el$.firstChild,
|
|
130
|
+
_el$3 = _el$2.nextSibling,
|
|
131
|
+
_el$4 = _el$3.firstChild,
|
|
132
|
+
[_el$5, _co$] = _$getNextMarker(_el$4.nextSibling),
|
|
133
|
+
_el$6 = _el$5.nextSibling,
|
|
134
|
+
[_el$7, _co$2] = _$getNextMarker(_el$6.nextSibling);
|
|
135
|
+
var _ref$ = surface;
|
|
136
|
+
typeof _ref$ === "function" ? _$use(_ref$, _el$) : surface = _el$;
|
|
137
|
+
_$setAttribute(_el$, "aria-labelledby", textId);
|
|
138
|
+
var _ref$2 = text;
|
|
139
|
+
typeof _ref$2 === "function" ? _$use(_ref$2, _el$2) : text = _el$2;
|
|
140
|
+
_$setAttribute(_el$2, "id", textId);
|
|
141
|
+
_$insert(_el$2, () => props.children);
|
|
142
|
+
_$insert(_el$3, _$createComponent(Show, {
|
|
143
|
+
get when() {
|
|
144
|
+
return props.action.href !== undefined;
|
|
145
|
+
},
|
|
146
|
+
get fallback() {
|
|
147
|
+
return _$createComponent(Button, {
|
|
148
|
+
size: "sm",
|
|
149
|
+
variant: "secondary",
|
|
150
|
+
type: "button",
|
|
151
|
+
onClick: () => {
|
|
152
|
+
const action = props.action;
|
|
153
|
+
if (dismiss(false)) action.onClick?.();
|
|
154
|
+
},
|
|
155
|
+
get children() {
|
|
156
|
+
return props.action.label;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
},
|
|
160
|
+
get children() {
|
|
161
|
+
return _$createComponent(ButtonLink, {
|
|
162
|
+
size: "sm",
|
|
163
|
+
variant: "secondary",
|
|
164
|
+
get href() {
|
|
165
|
+
return props.action.href;
|
|
166
|
+
},
|
|
167
|
+
onClick: () => dismiss(false),
|
|
168
|
+
get children() {
|
|
169
|
+
return props.action.label;
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}), _el$5, _co$);
|
|
174
|
+
_$insert(_el$3, _$createComponent(Button, {
|
|
175
|
+
size: "sm",
|
|
176
|
+
variant: "ghost",
|
|
177
|
+
type: "button",
|
|
178
|
+
onClick: () => dismiss(true),
|
|
179
|
+
get children() {
|
|
180
|
+
return messages().movedHintDismiss;
|
|
181
|
+
}
|
|
182
|
+
}), _el$7, _co$2);
|
|
183
|
+
_$effect(_p$ => {
|
|
184
|
+
var _v$ = `k2b-moved-hint${props.class ? ` ${props.class}` : ""}`,
|
|
185
|
+
_v$2 = props.placement ?? "bottom";
|
|
186
|
+
_v$ !== _p$.e && _$className(_el$, _p$.e = _v$);
|
|
187
|
+
_v$2 !== _p$.t && _$setAttribute(_el$, "data-placement", _p$.t = _v$2);
|
|
188
|
+
return _p$;
|
|
189
|
+
}, {
|
|
190
|
+
e: undefined,
|
|
191
|
+
t: undefined
|
|
192
|
+
});
|
|
193
|
+
return _el$;
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=MovedHint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["feedback/MovedHint.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { Button, ButtonLink } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { announce } from \"./announce\";\nimport { positionTooltipSurface, type TooltipPlacement } from \"./tooltip-position\";\n\nexport type MovedHintAction = { label: string; href: string; onClick?: never } | { label: string; onClick: () => void; href?: never };\n\nexport type MovedHintProps = {\n /** The owner decides this on the server, so a dismissed hint never renders again. */\n open: boolean;\n /** Called once per open period when the person closes the hint or uses its action. */\n onDismiss: () => void;\n /** Render the hint directly after this element to preserve keyboard order. */\n target: () => HTMLElement | undefined;\n /** Short text naming the new place. */\n children: JSX.Element;\n action: MovedHintAction;\n placement?: TooltipPlacement;\n class?: string;\n};\n\nexport function MovedHint(props: MovedHintProps): JSX.Element {\n const messages = useUiMessages();\n const textId = `k2b-moved-hint-${createUniqueId()}`;\n const [mounted, setMounted] = createSignal(false);\n const [dismissed, setDismissed] = createSignal(false);\n let surface: HTMLDivElement | undefined;\n let text: HTMLParagraphElement | undefined;\n let previousFocus: HTMLElement | undefined;\n let shown = false;\n let announced = false;\n\n const hide = () => {\n if (!shown) return;\n shown = false;\n try {\n surface?.hidePopover?.();\n } catch {\n // Cleanup can run after the surface disconnects.\n }\n };\n\n const dismiss = (restoreFocus: boolean): boolean => {\n if (!props.open || dismissed()) return false;\n const focusInside = surface?.contains(document.activeElement);\n const target = props.target();\n const returnTo =\n previousFocus?.isConnected && !previousFocus.matches(\":disabled\")\n ? previousFocus\n : target && (target.tabIndex >= 0 || target.hasAttribute(\"tabindex\")) && !target.matches(\":disabled\")\n ? target\n : undefined;\n hide();\n if (restoreFocus && focusInside && returnTo) {\n returnTo.focus({ preventScroll: true });\n }\n setDismissed(true);\n props.onDismiss();\n return true;\n };\n\n createEffect(() => {\n if (!props.open) {\n setDismissed(false);\n previousFocus = undefined;\n }\n });\n onMount(() => setMounted(true));\n\n createEffect(() => {\n if (!mounted() || !props.open || dismissed()) return;\n const anchor = props.target();\n const placement = props.placement ?? \"bottom\";\n if (!surface || !anchor) return;\n\n // A target scrolled out of view, or clipped by its scroller, takes the hint along instead of leaving it\n // pinned to the viewport edge over unrelated content.\n let inView = typeof IntersectionObserver === \"undefined\";\n const position = () => {\n if (!props.open || dismissed() || !inView || !anchor.isConnected || anchor.getClientRects().length === 0) {\n hide();\n return;\n }\n if (!surface || typeof surface.showPopover !== \"function\") return;\n if (!shown) {\n try {\n surface.showPopover();\n shown = true;\n } catch {\n return;\n }\n }\n positionTooltipSurface(surface, anchor, placement);\n if (!announced) {\n announced = true;\n announce(text?.textContent ?? \"\");\n }\n };\n const focusIn = (event: FocusEvent) => {\n if (!(event.relatedTarget instanceof Node) || !surface?.contains(event.relatedTarget)) {\n previousFocus = event.relatedTarget instanceof HTMLElement ? event.relatedTarget : undefined;\n }\n };\n const keydown = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.isComposing) return;\n if (event.key !== \"Escape\" || !(event.target instanceof Node)) return;\n if (!surface?.contains(event.target) && !anchor.contains(event.target)) return;\n event.preventDefault();\n dismiss(true);\n };\n const observer = typeof ResizeObserver === \"undefined\" ? undefined : new ResizeObserver(position);\n observer?.observe(anchor);\n const visibility =\n typeof IntersectionObserver === \"undefined\"\n ? undefined\n : new IntersectionObserver((entries) => {\n inView = entries.at(-1)?.isIntersecting ?? inView;\n position();\n });\n visibility?.observe(anchor);\n surface.addEventListener(\"focusin\", focusIn);\n document.addEventListener(\"keydown\", keydown);\n window.addEventListener(\"resize\", position);\n window.addEventListener(\"scroll\", position, { capture: true, passive: true });\n position();\n onCleanup(() => {\n observer?.disconnect();\n visibility?.disconnect();\n surface?.removeEventListener(\"focusin\", focusIn);\n document.removeEventListener(\"keydown\", keydown);\n window.removeEventListener(\"resize\", position);\n window.removeEventListener(\"scroll\", position, true);\n hide();\n });\n });\n\n return (\n <Show when={props.open}>\n <div\n ref={surface}\n class={`k2b-moved-hint${props.class ? ` ${props.class}` : \"\"}`}\n popover=\"manual\"\n role=\"group\"\n aria-labelledby={textId}\n data-placement={props.placement ?? \"bottom\"}\n >\n <p ref={text} class=\"k2b-moved-hint__text\" id={textId}>\n {props.children}\n </p>\n <div class=\"k2b-moved-hint__actions\">\n <Show\n when={props.action.href !== undefined}\n fallback={\n <Button\n size=\"sm\"\n variant=\"secondary\"\n type=\"button\"\n onClick={() => {\n const action = props.action;\n if (dismiss(false)) action.onClick?.();\n }}\n >\n {props.action.label}\n </Button>\n }\n >\n <ButtonLink size=\"sm\" variant=\"secondary\" href={props.action.href} onClick={() => dismiss(false)}>\n {props.action.label}\n </ButtonLink>\n </Show>\n <Button size=\"sm\" variant=\"ghost\" type=\"button\" onClick={() => dismiss(true)}>\n {messages().movedHintDismiss}\n </Button>\n </div>\n </div>\n </Show>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -65,17 +65,26 @@ export const createDialogCore = () => {
|
|
|
65
65
|
/** Markers of this core's entries in the browser history, oldest first. */
|
|
66
66
|
let historyIds = [];
|
|
67
67
|
const issued = new Set();
|
|
68
|
+
/**
|
|
69
|
+
* Markers forgotten during island disposal. Their entries stay in `historyIds` as barriers: a synthetic Back never
|
|
70
|
+
* crosses one, because the router may have replaced that entry with another page.
|
|
71
|
+
*/
|
|
72
|
+
const forgotten = new Set();
|
|
73
|
+
const deadMarker = marker => typeof marker === "number" && forgotten.has(marker);
|
|
74
|
+
/** How often islands were disposed, so a dialog that waits to open notices that a content swap happened meanwhile. */
|
|
75
|
+
let disposals = 0;
|
|
68
76
|
const ownMarker = marker => typeof marker === "number" && issued.has(marker);
|
|
69
77
|
let seen;
|
|
70
78
|
let traversalFrom;
|
|
71
79
|
let syntheticFrom;
|
|
72
80
|
const historyHolders = new Set();
|
|
73
81
|
let historySyncScheduled = false;
|
|
82
|
+
let disposingIslands = false;
|
|
74
83
|
/** Settles when the synthetic Back that removes closed dialogs' entries has arrived. */
|
|
75
84
|
let returning;
|
|
76
85
|
let resolveReturning;
|
|
77
86
|
|
|
78
|
-
/**
|
|
87
|
+
/** Outside island disposal, closed entries leave with one Back to the newest live dialog or holder, or to the page. */
|
|
79
88
|
const syncHistory = () => {
|
|
80
89
|
if (returning) {
|
|
81
90
|
void returning.then(() => {
|
|
@@ -87,7 +96,7 @@ export const createDialogCore = () => {
|
|
|
87
96
|
const openIds = new Set([...state.stack, ...historyHolders].map(entry => entry.historyId));
|
|
88
97
|
const current = historyIds.at(-1);
|
|
89
98
|
let steps = 0;
|
|
90
|
-
while (historyIds.length > 0 && !openIds.has(historyIds.at(-1))) {
|
|
99
|
+
while (historyIds.length > 0 && !openIds.has(historyIds.at(-1)) && !deadMarker(historyIds.at(-1))) {
|
|
91
100
|
historyIds.pop();
|
|
92
101
|
steps++;
|
|
93
102
|
}
|
|
@@ -107,7 +116,16 @@ export const createDialogCore = () => {
|
|
|
107
116
|
history.go(-steps);
|
|
108
117
|
};
|
|
109
118
|
const releaseHistory = entry => {
|
|
110
|
-
if (entry.historyId === undefined
|
|
119
|
+
if (entry.historyId === undefined) return;
|
|
120
|
+
// During a content swap the router owns history. Forget the marker without moving history; its entry stays a
|
|
121
|
+
// barrier for later synthetic Backs and is left for the router to replace.
|
|
122
|
+
if (disposingIslands) {
|
|
123
|
+
issued.delete(entry.historyId);
|
|
124
|
+
forgotten.add(entry.historyId);
|
|
125
|
+
entry.historyId = undefined;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (historySyncScheduled) return;
|
|
111
129
|
historySyncScheduled = true;
|
|
112
130
|
queueMicrotask(syncHistory);
|
|
113
131
|
};
|
|
@@ -126,8 +144,8 @@ export const createDialogCore = () => {
|
|
|
126
144
|
event.stopImmediatePropagation();
|
|
127
145
|
}
|
|
128
146
|
// Own entries are ordered by id. A retired entry reached by Forward stays tracked, so closing the dialogs
|
|
129
|
-
// beneath it also removes it.
|
|
130
|
-
historyIds = ownMarker(marker) ? [...historyIds.filter(id => id < marker), marker] : [];
|
|
147
|
+
// beneath it also removes it. A forgotten entry keeps the holders opened before it and stays a barrier.
|
|
148
|
+
historyIds = ownMarker(marker) || deadMarker(marker) ? [...historyIds.filter(id => id < marker), marker] : [];
|
|
131
149
|
const gone = entry => entry.historyId !== undefined && !historyIds.includes(entry.historyId);
|
|
132
150
|
while (state.stack.some(gone)) popTop(undefined);
|
|
133
151
|
for (const holder of [...historyHolders].reverse()) {
|
|
@@ -141,6 +159,30 @@ export const createDialogCore = () => {
|
|
|
141
159
|
resolveBack?.();
|
|
142
160
|
}
|
|
143
161
|
};
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Island disposal means the page content changes, as a document load would. Every dialog closes, top first, whichever
|
|
165
|
+
* code opened it: which island calls open() is not knowable after an await, in onMount or from a timer, and a modal
|
|
166
|
+
* left over the new content would block it.
|
|
167
|
+
*/
|
|
168
|
+
const onIslandDispose = () => {
|
|
169
|
+
if (!disposingIslands) {
|
|
170
|
+
disposingIslands = true;
|
|
171
|
+
queueMicrotask(() => {
|
|
172
|
+
disposingIslands = false;
|
|
173
|
+
});
|
|
174
|
+
// Entries released just before, whose Back has not started yet, stay as well: the router owns history now.
|
|
175
|
+
// A Back already on its way still settles through `returning`.
|
|
176
|
+
historySyncScheduled = false;
|
|
177
|
+
const live = new Set([...state.stack, ...historyHolders].map(entry => entry.historyId));
|
|
178
|
+
for (const id of historyIds) {
|
|
179
|
+
if (live.has(id) || !issued.delete(id)) continue;
|
|
180
|
+
forgotten.add(id);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
disposals++;
|
|
184
|
+
while (state.stack.length > 0) popTop(undefined);
|
|
185
|
+
};
|
|
144
186
|
const onNavigate = event => {
|
|
145
187
|
if (event.navigationType === "traverse") traversalFrom = {
|
|
146
188
|
href: location.href,
|
|
@@ -154,10 +196,17 @@ export const createDialogCore = () => {
|
|
|
154
196
|
listening?.window.removeEventListener("popstate", onPopState, {
|
|
155
197
|
capture: true
|
|
156
198
|
});
|
|
199
|
+
listening?.window.removeEventListener("ssr:island-dispose", onIslandDispose, {
|
|
200
|
+
capture: true
|
|
201
|
+
});
|
|
157
202
|
listening?.navigation?.removeEventListener("navigate", onNavigate);
|
|
158
203
|
window.addEventListener("popstate", onPopState, {
|
|
159
204
|
capture: true
|
|
160
205
|
});
|
|
206
|
+
// Capture opens the disposal window before target listeners can release history holders.
|
|
207
|
+
window.addEventListener("ssr:island-dispose", onIslandDispose, {
|
|
208
|
+
capture: true
|
|
209
|
+
});
|
|
161
210
|
const current = typeof navigation !== "undefined" ? navigation : undefined;
|
|
162
211
|
current?.addEventListener("navigate", onNavigate);
|
|
163
212
|
listening = {
|
|
@@ -206,7 +255,7 @@ export const createDialogCore = () => {
|
|
|
206
255
|
};
|
|
207
256
|
|
|
208
257
|
/**
|
|
209
|
-
* Settles once released entries have left
|
|
258
|
+
* Settles once released entries have left history or were forgotten during island disposal. A caller that navigates waits
|
|
210
259
|
* for it, as a dialog's result waits: a Back still on its way would otherwise land behind the new entry.
|
|
211
260
|
*/
|
|
212
261
|
const historySettled = async () => {
|
|
@@ -386,13 +435,19 @@ export const createDialogCore = () => {
|
|
|
386
435
|
});
|
|
387
436
|
};
|
|
388
437
|
const open = (view, options = {}) => {
|
|
438
|
+
return openAfter(view, options, disposals);
|
|
439
|
+
};
|
|
440
|
+
const openAfter = (view, options, requested) => {
|
|
389
441
|
if (options.signal?.aborted) return Promise.resolve(undefined);
|
|
390
442
|
if (options.history) {
|
|
391
443
|
// Dialogs closed just now leave the history first, or this dialog's entry would be the one removed.
|
|
392
444
|
if (historySyncScheduled) syncHistory();
|
|
393
|
-
if (returning) return returning.then(() =>
|
|
445
|
+
if (returning) return returning.then(() => openAfter(view, options, requested));
|
|
394
446
|
}
|
|
447
|
+
// A dialog that waited for history while islands were disposed would open over content it was never meant for.
|
|
448
|
+
if (disposals !== requested) return Promise.resolve(undefined);
|
|
395
449
|
const dialog = ensureDialogElement();
|
|
450
|
+
listen();
|
|
396
451
|
const previousTop = state.stack[state.stack.length - 1];
|
|
397
452
|
if (previousTop) previousTop.container.style.display = "none";
|
|
398
453
|
const activeElement = document.activeElement;
|
|
@@ -427,11 +482,12 @@ export const createDialogCore = () => {
|
|
|
427
482
|
};
|
|
428
483
|
entry.resolve = value => {
|
|
429
484
|
options.signal?.removeEventListener("abort", abort);
|
|
430
|
-
if (
|
|
485
|
+
if (!options.history) {
|
|
431
486
|
resolve(value);
|
|
432
487
|
return;
|
|
433
488
|
}
|
|
434
489
|
// After every pending history sync, so a caller that navigates or opens the next dialog finds the history settled.
|
|
490
|
+
// This holds for a marker forgotten during island disposal too, while an earlier synthetic Back is on its way.
|
|
435
491
|
queueMicrotask(() => void historySettled().then(() => resolve(value)));
|
|
436
492
|
};
|
|
437
493
|
const closeTyped = result => {
|
|
@@ -522,8 +578,9 @@ export const dialogCore = publicDialogCore;
|
|
|
522
578
|
/**
|
|
523
579
|
* Internal: transient UI shares dialogs' Back handling without exposing another public dialog capability.
|
|
524
580
|
* Same-URL traversals are suppressed with the Navigation API; without it, only the synthetic Back on release is suppressed.
|
|
581
|
+
* Release during island disposal forgets the marker without traversing; the router may replace the remaining entry.
|
|
525
582
|
*/
|
|
526
583
|
export const holdDialogHistory = holdHistory;
|
|
527
|
-
/** Internal: waits until
|
|
584
|
+
/** Internal: waits until released holders have left history or were forgotten during island disposal. */
|
|
528
585
|
export const dialogHistorySettled = historySettled;
|
|
529
586
|
//# sourceMappingURL=dialog-core.js.map
|