@k2b/ui 0.31.0 → 0.33.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/base.css +2 -0
- package/dist/browser/actions/Dropdown.js +159 -99
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +113 -56
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/ViewTabs.js +8 -0
- package/dist/browser/actions/ViewTabs.js.map +1 -1
- package/dist/browser/actions/filter-messages.js +26 -2
- package/dist/browser/actions/filter-messages.js.map +1 -1
- package/dist/browser/actions/menu-rows.js +23 -3
- package/dist/browser/actions/menu-rows.js.map +1 -1
- package/dist/browser/actions/menu-sheet.js +2 -7
- package/dist/browser/actions/menu-sheet.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +480 -403
- package/dist/browser/chat/ChatComposer.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/index.js.map +1 -1
- package/dist/browser/content/Calendar.js +39 -29
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarDayView.js +159 -165
- package/dist/browser/content/CalendarDayView.js.map +1 -1
- package/dist/browser/content/Chart.js +104 -55
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +5 -3
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/MapView.js +4 -4
- package/dist/browser/content/MapView.js.map +1 -1
- package/dist/browser/content/MessageRow.js +607 -343
- package/dist/browser/content/MessageRow.js.map +1 -1
- package/dist/browser/content/ReactionBar.js +17 -0
- package/dist/browser/content/ReactionBar.js.map +1 -1
- package/dist/browser/content/chart-inspection-core.js +4 -1
- package/dist/browser/content/chart-inspection-core.js.map +1 -1
- package/dist/browser/content/code-highlight.js +66 -0
- package/dist/browser/content/code-highlight.js.map +1 -1
- package/dist/browser/content/index.js +2 -1
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/map-view-live.js +47 -10
- package/dist/browser/content/map-view-live.js.map +1 -1
- package/dist/browser/content/map-view-types.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js +6 -0
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/inputs/AutocompleteEditor.js +167 -104
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/browser/inputs/RichSelect.js +1474 -0
- package/dist/browser/inputs/RichSelect.js.map +1 -0
- package/dist/browser/inputs/TextInput.js +99 -61
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/choice.js +19 -8
- package/dist/browser/inputs/choice.js.map +1 -1
- package/dist/browser/inputs/index.js +1 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/rich-select-messages.js +46 -0
- package/dist/browser/inputs/rich-select-messages.js.map +1 -0
- package/dist/browser/intl/shortcut-messages.js +4 -0
- package/dist/browser/intl/shortcut-messages.js.map +1 -1
- package/dist/browser/intl/shortcut.js +4 -0
- package/dist/browser/intl/shortcut.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +624 -565
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +10 -1
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/MobileShell.js +213 -38
- package/dist/browser/layout/MobileShell.js.map +1 -1
- package/dist/browser/layout/Navigation.js +14 -5
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +9 -3
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/ResizeSeparator.js +8 -2
- package/dist/browser/layout/ResizeSeparator.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +192 -31
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/index.js +1 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/layout/resize-separator.js +25 -1
- package/dist/browser/layout/resize-separator.js.map +1 -1
- package/dist/browser/layout/scroll-fade.js +32 -5
- package/dist/browser/layout/scroll-fade.js.map +1 -1
- package/dist/browser/surfaces/NoticeCard.js +46 -30
- package/dist/browser/surfaces/NoticeCard.js.map +1 -1
- package/dist/browser/surfaces/Skeleton.js +14 -0
- package/dist/browser/surfaces/Skeleton.js.map +1 -0
- package/dist/browser/surfaces/index.js +1 -0
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/surfaces/resource-messages.js +2 -2
- package/dist/browser/surfaces/resource-messages.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +51 -27
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +67 -16
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/ViewTabs.js +8 -0
- package/dist/ssr/actions/ViewTabs.js.map +1 -1
- package/dist/ssr/actions/filter-messages.js +26 -2
- package/dist/ssr/actions/filter-messages.js.map +1 -1
- package/dist/ssr/actions/menu-rows.js +23 -3
- package/dist/ssr/actions/menu-rows.js.map +1 -1
- package/dist/ssr/actions/menu-sheet.js +2 -7
- package/dist/ssr/actions/menu-sheet.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +96 -67
- package/dist/ssr/chat/ChatComposer.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/index.js.map +1 -1
- package/dist/ssr/content/Calendar.js +40 -31
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarDayView.js +40 -48
- package/dist/ssr/content/CalendarDayView.js.map +1 -1
- package/dist/ssr/content/Chart.js +27 -7
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +5 -3
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/MapView.js +4 -4
- package/dist/ssr/content/MapView.js.map +1 -1
- package/dist/ssr/content/MessageRow.js +264 -91
- package/dist/ssr/content/MessageRow.js.map +1 -1
- package/dist/ssr/content/ReactionBar.js +17 -0
- package/dist/ssr/content/ReactionBar.js.map +1 -1
- package/dist/ssr/content/chart-inspection-core.js +4 -1
- package/dist/ssr/content/chart-inspection-core.js.map +1 -1
- package/dist/ssr/content/code-highlight.js +66 -0
- package/dist/ssr/content/code-highlight.js.map +1 -1
- package/dist/ssr/content/index.js +2 -1
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/map-view-types.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js +6 -0
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/ssr/inputs/RichSelect.js +950 -0
- package/dist/ssr/inputs/RichSelect.js.map +1 -0
- package/dist/ssr/inputs/TextInput.js +44 -17
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/choice.js +19 -8
- package/dist/ssr/inputs/choice.js.map +1 -1
- package/dist/ssr/inputs/index.js +1 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/rich-select-messages.js +46 -0
- package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
- package/dist/ssr/intl/shortcut-messages.js +4 -0
- package/dist/ssr/intl/shortcut-messages.js.map +1 -1
- package/dist/ssr/intl/shortcut.js +4 -0
- package/dist/ssr/intl/shortcut.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +166 -125
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +1 -1
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/MobileShell.js +100 -20
- package/dist/ssr/layout/MobileShell.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +1 -1
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +9 -3
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/ResizeSeparator.js +4 -1
- package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +192 -31
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/index.js +1 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/layout/resize-separator.js +25 -1
- package/dist/ssr/layout/resize-separator.js.map +1 -1
- package/dist/ssr/layout/scroll-fade.js +32 -5
- package/dist/ssr/layout/scroll-fade.js.map +1 -1
- package/dist/ssr/surfaces/NoticeCard.js +21 -12
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
- package/dist/ssr/surfaces/Skeleton.js +8 -0
- package/dist/ssr/surfaces/Skeleton.js.map +1 -0
- package/dist/ssr/surfaces/index.js +1 -0
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/surfaces/resource-messages.js +2 -2
- package/dist/ssr/surfaces/resource-messages.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +14 -0
- package/dist/types/actions/FilterChip.d.ts +11 -0
- package/dist/types/actions/filter-messages.d.ts +12 -0
- package/dist/types/actions/menu-rows.d.ts +7 -2
- package/dist/types/chat/ChatComposer.d.ts +13 -0
- package/dist/types/chat/chat-messages.d.ts +7 -0
- package/dist/types/chat/index.d.ts +1 -1
- package/dist/types/content/Calendar.d.ts +7 -0
- package/dist/types/content/Chart.d.ts +4 -2
- package/dist/types/content/ChartExplorer.d.ts +0 -1
- package/dist/types/content/MessageRow.d.ts +64 -2
- package/dist/types/content/code-highlight.d.ts +3 -1
- package/dist/types/content/index.d.ts +3 -2
- package/dist/types/content/map-view-live.d.ts +1 -1
- package/dist/types/content/map-view-types.d.ts +2 -0
- package/dist/types/feedback/dialog-core.d.ts +3 -0
- package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
- package/dist/types/inputs/RichSelect.d.ts +93 -0
- package/dist/types/inputs/TextInput.d.ts +5 -2
- package/dist/types/inputs/choice.d.ts +24 -4
- package/dist/types/inputs/index.d.ts +2 -0
- package/dist/types/inputs/rich-select-messages.d.ts +21 -0
- package/dist/types/intl/shortcut-messages.d.ts +2 -0
- package/dist/types/layout/AppWorkspace.d.ts +9 -0
- package/dist/types/layout/DetailPanel.d.ts +2 -0
- package/dist/types/layout/MobileShell.d.ts +52 -5
- package/dist/types/layout/app-workspace-controller.d.ts +2 -0
- package/dist/types/layout/index.d.ts +2 -1
- package/dist/types/layout/navigation-model.d.ts +2 -0
- package/dist/types/layout/resize-separator.d.ts +1 -0
- package/dist/types/layout/scroll-fade.d.ts +5 -0
- package/dist/types/surfaces/NoticeCard.d.ts +3 -0
- package/dist/types/surfaces/Skeleton.d.ts +6 -0
- package/dist/types/surfaces/index.d.ts +1 -0
- package/package.json +4 -4
package/dist/ssr/layout/index.js
CHANGED
|
@@ -25,6 +25,7 @@ export { readSettingsError, SettingsField, SettingsGroup, SettingsPage, Settings
|
|
|
25
25
|
export { default as SettingsCollection } from "./SettingsCollection";
|
|
26
26
|
export { default as SettingsModal } from "./SettingsModal";
|
|
27
27
|
export { APP_WORKSPACE_SWITCHER_SEARCH_FROM } from "./SidebarSwitcher";
|
|
28
|
+
export { measureScrollFade } from "./scroll-fade";
|
|
28
29
|
export { default as TabBar } from "./TabBar";
|
|
29
30
|
export { TableOfContents } from "./TableOfContents";
|
|
30
31
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/index.ts"],"sourcesContent":["export type {\n AppOverviewCardsProps,\n AppOverviewEmptyStateProps,\n AppOverviewPanelProps,\n AppOverviewProps,\n} from \"./AppOverview\";\nexport { default as AppOverview } from \"./AppOverview\";\nexport type {\n AppWorkspaceBottomDrawerHeight,\n AppWorkspaceBottomDrawerProps,\n AppWorkspaceContentProps,\n AppWorkspaceDetailProps,\n AppWorkspaceDetailWidth,\n AppWorkspaceHeadProps,\n AppWorkspaceMainPaneProps,\n AppWorkspaceMainProps,\n AppWorkspaceNavTreeItemProps,\n AppWorkspaceNavTreeMove,\n AppWorkspaceNavTreeProps,\n AppWorkspaceProps,\n AppWorkspaceSidebarAccessoryVisibility,\n AppWorkspaceSidebarBodyProps,\n AppWorkspaceSidebarIconActionProps,\n AppWorkspaceSidebarIconActionTone,\n AppWorkspaceSidebarIconGridProps,\n AppWorkspaceSidebarItemActionProps,\n AppWorkspaceSidebarItemActionsProps,\n AppWorkspaceSidebarItemIconProps,\n AppWorkspaceSidebarItemLabelProps,\n AppWorkspaceSidebarItemMetaProps,\n AppWorkspaceSidebarItemProps,\n AppWorkspaceSidebarItemStatusProps,\n AppWorkspaceSidebarItemTone,\n AppWorkspaceSidebarProps,\n AppWorkspaceSidebarSectionProps,\n AppWorkspaceSidebarVisibility,\n AppWorkspaceWidthShare,\n} from \"./AppWorkspace\";\nexport { appWorkspaceDetailElementId, default as AppWorkspace } from \"./AppWorkspace\";\nexport { watchAppHostWidth } from \"./app-host-width\";\nexport type { AppWorkspaceControllerOptions } from \"./app-workspace-controller\";\nexport { installAppWorkspaceController, parkWorkspaceDetailDrawers } from \"./app-workspace-controller\";\nexport type {\n AppWorkspaceLayoutState,\n AppWorkspaceResizeKind,\n} from \"./app-workspace-state\";\nexport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_DEFAULT,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_MAIN_MIN_HEIGHT,\n APP_WORKSPACE_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_DEFAULT,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n appWorkspaceLayoutStyle,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n normalizeAppWorkspaceLayoutState,\n parseAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n serializeAppWorkspaceLayoutState,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nexport { type BottomSheetProps, bottomSheetAdaptiveOptions, bottomSheetOptions, default as BottomSheet } from \"./BottomSheet\";\nexport type { DataPanelProps } from \"./DataPanel\";\nexport { DataPanel } from \"./DataPanel\";\nexport type {\n DetailPanelActionButtonProps,\n DetailPanelActionLinkProps,\n DetailPanelActionProps,\n DetailPanelActionSecondary,\n DetailPanelBodyProps,\n DetailPanelGroupProps,\n DetailPanelHeaderProps,\n DetailPanelProps,\n DetailPanelSectionProps,\n DetailPanelSummaryProps,\n DetailPanelTone,\n} from \"./DetailPanel\";\nexport { default as DetailPanel } from \"./DetailPanel\";\nexport type { DiscussionComposerProps, DiscussionItemProps, DiscussionListProps, DiscussionProps } from \"./Discussion\";\nexport { default as Discussion } from \"./Discussion\";\nexport type {\n FloatingWindowClose,\n FloatingWindowProps,\n OpenFloatingWindowOptions,\n} from \"./FloatingWindow\";\nexport {\n default as FloatingWindow,\n type FloatingWindowRect,\n fitFloatingWindowRect,\n openFloatingWindow,\n} from \"./FloatingWindow\";\nexport type { MobileShellHeaderProps, MobileShellProps } from \"./MobileShell\";\nexport { default as MobileShell, observeMobileShell } from \"./MobileShell\";\nexport { default as Navigation, type NavigationProps } from \"./Navigation\";\nexport {\n createNavigation,\n findNavigationItem,\n type NavigationController,\n type NavigationItem,\n type NavigationOptions,\n type NavigationStatus,\n} from \"./navigation-model\";\nexport type { PageTitleProps, PageTrailLink, PageTrailState } from \"./PageTitle\";\nexport { followPageTrail, PAGE_TRAIL_EVENT, PageTitle, PageTrailProvider, readPageTrail, setPageTrail, usePageTrail } from \"./PageTitle\";\nexport type {\n PanelDialogBodyProps,\n PanelDialogFooterProps,\n PanelDialogHeaderProps,\n PanelDialogProps,\n PanelDialogSectionProps,\n PanelDialogSurface,\n PanelDialogTabOption,\n PanelDialogTabsProps,\n} from \"./PanelDialog\";\nexport {\n confirmDiscardIfDirty,\n default as PanelDialog,\n panelDialogFixedOptions,\n panelDialogFixedPanelClass,\n panelDialogOptions,\n panelDialogPanelClass,\n panelDialogWideOptions,\n panelDialogWidePanelClass,\n panelDialogWorkspaceOptions,\n panelDialogWorkspacePanelClass,\n} from \"./PanelDialog\";\nexport type { PanelHeaderProps } from \"./PanelHeader\";\nexport { PanelHeader } from \"./PanelHeader\";\nexport type { PanesItem, PanesProps } from \"./Panes\";\nexport { default as Panes } from \"./Panes\";\nexport type { PullToRefreshProps, PullToRefreshState } from \"./PullToRefresh\";\nexport { default as PullToRefresh } from \"./PullToRefresh\";\nexport { installPageTitleController } from \"./page-title-controller\";\nexport type {\n AddPanesItemOptions,\n PanesDirection,\n PanesGroup,\n PanesIntent,\n PanesLayout,\n PanesNode,\n PanesPath,\n PanesPathSegment,\n PanesSide,\n PanesSplit,\n} from \"./panes-layout\";\nexport {\n activatePanesItem,\n addPanesItem,\n applyPanesIntent,\n createPanesLayout,\n isPanesItemVisible,\n PANES_LAYOUT_VERSION,\n parsePanesLayout,\n reconcilePanesLayout,\n removePanesItem,\n resizePanesSplit,\n} from \"./panes-layout\";\nexport { default as ResizeSeparator, type ResizeSeparatorProps } from \"./ResizeSeparator\";\nexport { attachResizeSeparator, type ResizeSeparatorOptions } from \"./resize-separator\";\nexport type { ScrollAreaProps } from \"./ScrollArea\";\nexport { default as ScrollArea } from \"./ScrollArea\";\nexport type {\n SettingsFieldControlProps,\n SettingsFieldProps,\n SettingsGroupActionProps,\n SettingsGroupProps,\n SettingsPageProps,\n SettingsPanelFooterProps,\n SettingsSaveBarProps,\n SettingsSectionProps,\n} from \"./Settings\";\nexport {\n readSettingsError,\n SettingsField,\n SettingsGroup,\n SettingsPage,\n SettingsPanelFooter,\n SettingsSaveBar,\n SettingsSection,\n sameSettingValue,\n} from \"./Settings\";\nexport type {\n SettingsCollectionActionProps,\n SettingsCollectionItemActionsProps,\n SettingsCollectionItemProps,\n SettingsCollectionItemReorderProps,\n SettingsCollectionItemStatusProps,\n SettingsCollectionProps,\n} from \"./SettingsCollection\";\nexport { default as SettingsCollection } from \"./SettingsCollection\";\nexport type {\n SettingsModalFooterProps,\n SettingsModalGroupProps,\n SettingsModalProps,\n SettingsModalTabProps,\n SettingsModalTabTone,\n} from \"./SettingsModal\";\nexport { default as SettingsModal } from \"./SettingsModal\";\nexport {\n APP_WORKSPACE_SWITCHER_SEARCH_FROM,\n type AppWorkspaceSidebarSwitcherProps,\n type AppWorkspaceSwitcherAction,\n type AppWorkspaceSwitcherOption,\n} from \"./SidebarSwitcher\";\nexport type { TabBarItem, TabBarProps } from \"./TabBar\";\nexport { default as TabBar } from \"./TabBar\";\nexport type { TableOfContentsItem, TableOfContentsProps } from \"./TableOfContents\";\nexport { TableOfContents } from \"./TableOfContents\";\n"],"mappings":"AAMA,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAgCtD,SAAS,2BAA2B,EAAE,OAAO,IAAI,YAAY,QAAQ,gBAAgB;AACrF,SAAS,iBAAiB,QAAQ,kBAAkB;AAEpD,SAAS,6BAA6B,EAAE,0BAA0B,QAAQ,4BAA4B;AAKtG,SACE,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,wCAAwC,EACxC,+BAA+B,EAC/B,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,uBAAuB,EACvB,gCAAgC,EAChC,iCAAiC,QAC5B,uBAAuB;AAC9B,SAAgC,0BAA0B,EAAE,kBAAkB,EAAE,OAAO,IAAI,WAAW,QAAQ,eAAe;AAE7H,SAAS,SAAS,QAAQ,aAAa;AAcvC,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAMpD,SACE,OAAO,IAAI,cAAc,EAEzB,qBAAqB,EACrB,kBAAkB,QACb,kBAAkB;AAEzB,SAAS,OAAO,IAAI,WAAW,EAAE,kBAAkB,QAAQ,eAAe;AAC1E,SAAS,OAAO,IAAI,UAAU,QAA8B,cAAc;AAC1E,SACE,gBAAgB,EAChB,kBAAkB,QAKb,oBAAoB;AAE3B,SAAS,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,QAAQ,aAAa;AAWxI,SACE,qBAAqB,EACrB,OAAO,IAAI,WAAW,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,QACzB,eAAe;AAEtB,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,OAAO,IAAI,aAAa,QAAQ,iBAAiB;AAC1D,SAAS,0BAA0B,QAAQ,yBAAyB;AAapE,SACE,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,QACX,gBAAgB;AACvB,SAAS,OAAO,IAAI,eAAe,QAAmC,mBAAmB;AACzF,SAAS,qBAAqB,QAAqC,oBAAoB;AAEvF,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAWpD,SACE,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,gBAAgB,QACX,YAAY;AASnB,SAAS,OAAO,IAAI,kBAAkB,QAAQ,sBAAsB;AAQpE,SAAS,OAAO,IAAI,aAAa,QAAQ,iBAAiB;AAC1D,SACE,kCAAkC,QAI7B,mBAAmB;
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/index.ts"],"sourcesContent":["export type {\n AppOverviewCardsProps,\n AppOverviewEmptyStateProps,\n AppOverviewPanelProps,\n AppOverviewProps,\n} from \"./AppOverview\";\nexport { default as AppOverview } from \"./AppOverview\";\nexport type {\n AppWorkspaceBottomDrawerHeight,\n AppWorkspaceBottomDrawerProps,\n AppWorkspaceContentProps,\n AppWorkspaceDetailProps,\n AppWorkspaceDetailWidth,\n AppWorkspaceHeadProps,\n AppWorkspaceMainPaneProps,\n AppWorkspaceMainProps,\n AppWorkspaceNavTreeItemProps,\n AppWorkspaceNavTreeMove,\n AppWorkspaceNavTreeProps,\n AppWorkspaceProps,\n AppWorkspaceSidebarAccessoryVisibility,\n AppWorkspaceSidebarBodyProps,\n AppWorkspaceSidebarIconActionProps,\n AppWorkspaceSidebarIconActionTone,\n AppWorkspaceSidebarIconGridProps,\n AppWorkspaceSidebarItemActionProps,\n AppWorkspaceSidebarItemActionsProps,\n AppWorkspaceSidebarItemIconProps,\n AppWorkspaceSidebarItemLabelProps,\n AppWorkspaceSidebarItemMetaProps,\n AppWorkspaceSidebarItemProps,\n AppWorkspaceSidebarItemStatusProps,\n AppWorkspaceSidebarItemTone,\n AppWorkspaceSidebarProps,\n AppWorkspaceSidebarSectionProps,\n AppWorkspaceSidebarVisibility,\n AppWorkspaceWidthShare,\n} from \"./AppWorkspace\";\nexport { appWorkspaceDetailElementId, default as AppWorkspace } from \"./AppWorkspace\";\nexport { watchAppHostWidth } from \"./app-host-width\";\nexport type { AppWorkspaceControllerOptions } from \"./app-workspace-controller\";\nexport { installAppWorkspaceController, parkWorkspaceDetailDrawers } from \"./app-workspace-controller\";\nexport type {\n AppWorkspaceLayoutState,\n AppWorkspaceResizeKind,\n} from \"./app-workspace-state\";\nexport {\n APP_WORKSPACE_DETAIL_DEFAULT,\n APP_WORKSPACE_DETAIL_MAX,\n APP_WORKSPACE_DETAIL_MIN,\n APP_WORKSPACE_DRAWER_DEFAULT,\n APP_WORKSPACE_DRAWER_MAX,\n APP_WORKSPACE_DRAWER_MIN,\n APP_WORKSPACE_MAIN_MIN,\n APP_WORKSPACE_MAIN_MIN_HEIGHT,\n APP_WORKSPACE_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSE_THRESHOLD,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_DEFAULT,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n appWorkspaceLayoutStyle,\n appWorkspacePanelVariable,\n appWorkspaceResizeLimits,\n normalizeAppWorkspaceLayoutState,\n parseAppWorkspaceLayoutState,\n resolveAppWorkspaceSidebarWidth,\n safeAppWorkspacePanelId,\n serializeAppWorkspaceLayoutState,\n shouldCollapseAppWorkspaceSidebar,\n} from \"./app-workspace-state\";\nexport { type BottomSheetProps, bottomSheetAdaptiveOptions, bottomSheetOptions, default as BottomSheet } from \"./BottomSheet\";\nexport type { DataPanelProps } from \"./DataPanel\";\nexport { DataPanel } from \"./DataPanel\";\nexport type {\n DetailPanelActionButtonProps,\n DetailPanelActionLinkProps,\n DetailPanelActionProps,\n DetailPanelActionSecondary,\n DetailPanelBodyProps,\n DetailPanelGroupProps,\n DetailPanelHeaderProps,\n DetailPanelProps,\n DetailPanelSectionProps,\n DetailPanelSummaryProps,\n DetailPanelTone,\n} from \"./DetailPanel\";\nexport { default as DetailPanel } from \"./DetailPanel\";\nexport type { DiscussionComposerProps, DiscussionItemProps, DiscussionListProps, DiscussionProps } from \"./Discussion\";\nexport { default as Discussion } from \"./Discussion\";\nexport type {\n FloatingWindowClose,\n FloatingWindowProps,\n OpenFloatingWindowOptions,\n} from \"./FloatingWindow\";\nexport {\n default as FloatingWindow,\n type FloatingWindowRect,\n fitFloatingWindowRect,\n openFloatingWindow,\n} from \"./FloatingWindow\";\nexport type { MobileShellHeaderProps, MobileShellProps, MobileShellSidebarItem, MobileShellSidebarProps } from \"./MobileShell\";\nexport { default as MobileShell, observeMobileShell } from \"./MobileShell\";\nexport { default as Navigation, type NavigationProps } from \"./Navigation\";\nexport {\n createNavigation,\n findNavigationItem,\n type NavigationController,\n type NavigationItem,\n type NavigationOptions,\n type NavigationStatus,\n} from \"./navigation-model\";\nexport type { PageTitleProps, PageTrailLink, PageTrailState } from \"./PageTitle\";\nexport { followPageTrail, PAGE_TRAIL_EVENT, PageTitle, PageTrailProvider, readPageTrail, setPageTrail, usePageTrail } from \"./PageTitle\";\nexport type {\n PanelDialogBodyProps,\n PanelDialogFooterProps,\n PanelDialogHeaderProps,\n PanelDialogProps,\n PanelDialogSectionProps,\n PanelDialogSurface,\n PanelDialogTabOption,\n PanelDialogTabsProps,\n} from \"./PanelDialog\";\nexport {\n confirmDiscardIfDirty,\n default as PanelDialog,\n panelDialogFixedOptions,\n panelDialogFixedPanelClass,\n panelDialogOptions,\n panelDialogPanelClass,\n panelDialogWideOptions,\n panelDialogWidePanelClass,\n panelDialogWorkspaceOptions,\n panelDialogWorkspacePanelClass,\n} from \"./PanelDialog\";\nexport type { PanelHeaderProps } from \"./PanelHeader\";\nexport { PanelHeader } from \"./PanelHeader\";\nexport type { PanesItem, PanesProps } from \"./Panes\";\nexport { default as Panes } from \"./Panes\";\nexport type { PullToRefreshProps, PullToRefreshState } from \"./PullToRefresh\";\nexport { default as PullToRefresh } from \"./PullToRefresh\";\nexport { installPageTitleController } from \"./page-title-controller\";\nexport type {\n AddPanesItemOptions,\n PanesDirection,\n PanesGroup,\n PanesIntent,\n PanesLayout,\n PanesNode,\n PanesPath,\n PanesPathSegment,\n PanesSide,\n PanesSplit,\n} from \"./panes-layout\";\nexport {\n activatePanesItem,\n addPanesItem,\n applyPanesIntent,\n createPanesLayout,\n isPanesItemVisible,\n PANES_LAYOUT_VERSION,\n parsePanesLayout,\n reconcilePanesLayout,\n removePanesItem,\n resizePanesSplit,\n} from \"./panes-layout\";\nexport { default as ResizeSeparator, type ResizeSeparatorProps } from \"./ResizeSeparator\";\nexport { attachResizeSeparator, type ResizeSeparatorOptions } from \"./resize-separator\";\nexport type { ScrollAreaProps } from \"./ScrollArea\";\nexport { default as ScrollArea } from \"./ScrollArea\";\nexport type {\n SettingsFieldControlProps,\n SettingsFieldProps,\n SettingsGroupActionProps,\n SettingsGroupProps,\n SettingsPageProps,\n SettingsPanelFooterProps,\n SettingsSaveBarProps,\n SettingsSectionProps,\n} from \"./Settings\";\nexport {\n readSettingsError,\n SettingsField,\n SettingsGroup,\n SettingsPage,\n SettingsPanelFooter,\n SettingsSaveBar,\n SettingsSection,\n sameSettingValue,\n} from \"./Settings\";\nexport type {\n SettingsCollectionActionProps,\n SettingsCollectionItemActionsProps,\n SettingsCollectionItemProps,\n SettingsCollectionItemReorderProps,\n SettingsCollectionItemStatusProps,\n SettingsCollectionProps,\n} from \"./SettingsCollection\";\nexport { default as SettingsCollection } from \"./SettingsCollection\";\nexport type {\n SettingsModalFooterProps,\n SettingsModalGroupProps,\n SettingsModalProps,\n SettingsModalTabProps,\n SettingsModalTabTone,\n} from \"./SettingsModal\";\nexport { default as SettingsModal } from \"./SettingsModal\";\nexport {\n APP_WORKSPACE_SWITCHER_SEARCH_FROM,\n type AppWorkspaceSidebarSwitcherProps,\n type AppWorkspaceSwitcherAction,\n type AppWorkspaceSwitcherOption,\n} from \"./SidebarSwitcher\";\nexport { measureScrollFade } from \"./scroll-fade\";\nexport type { TabBarItem, TabBarProps } from \"./TabBar\";\nexport { default as TabBar } from \"./TabBar\";\nexport type { TableOfContentsItem, TableOfContentsProps } from \"./TableOfContents\";\nexport { TableOfContents } from \"./TableOfContents\";\n"],"mappings":"AAMA,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAgCtD,SAAS,2BAA2B,EAAE,OAAO,IAAI,YAAY,QAAQ,gBAAgB;AACrF,SAAS,iBAAiB,QAAQ,kBAAkB;AAEpD,SAAS,6BAA6B,EAAE,0BAA0B,QAAQ,4BAA4B;AAKtG,SACE,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,wCAAwC,EACxC,+BAA+B,EAC/B,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,uBAAuB,EACvB,gCAAgC,EAChC,iCAAiC,QAC5B,uBAAuB;AAC9B,SAAgC,0BAA0B,EAAE,kBAAkB,EAAE,OAAO,IAAI,WAAW,QAAQ,eAAe;AAE7H,SAAS,SAAS,QAAQ,aAAa;AAcvC,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAMpD,SACE,OAAO,IAAI,cAAc,EAEzB,qBAAqB,EACrB,kBAAkB,QACb,kBAAkB;AAEzB,SAAS,OAAO,IAAI,WAAW,EAAE,kBAAkB,QAAQ,eAAe;AAC1E,SAAS,OAAO,IAAI,UAAU,QAA8B,cAAc;AAC1E,SACE,gBAAgB,EAChB,kBAAkB,QAKb,oBAAoB;AAE3B,SAAS,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,QAAQ,aAAa;AAWxI,SACE,qBAAqB,EACrB,OAAO,IAAI,WAAW,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,QACzB,eAAe;AAEtB,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,OAAO,IAAI,KAAK,QAAQ,SAAS;AAE1C,SAAS,OAAO,IAAI,aAAa,QAAQ,iBAAiB;AAC1D,SAAS,0BAA0B,QAAQ,yBAAyB;AAapE,SACE,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,QACX,gBAAgB;AACvB,SAAS,OAAO,IAAI,eAAe,QAAmC,mBAAmB;AACzF,SAAS,qBAAqB,QAAqC,oBAAoB;AAEvF,SAAS,OAAO,IAAI,UAAU,QAAQ,cAAc;AAWpD,SACE,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,gBAAgB,QACX,YAAY;AASnB,SAAS,OAAO,IAAI,kBAAkB,QAAQ,sBAAsB;AAQpE,SAAS,OAAO,IAAI,aAAa,QAAQ,iBAAiB;AAC1D,SACE,kCAAkC,QAI7B,mBAAmB;AAC1B,SAAS,iBAAiB,QAAQ,eAAe;AAEjD,SAAS,OAAO,IAAI,MAAM,QAAQ,UAAU;AAE5C,SAAS,eAAe,QAAQ,mBAAmB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/navigation-model.ts"],"sourcesContent":["import type { LinkNavigateEvent, NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport type { Accessor } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\nimport type { AppWorkspaceSidebarSwitcherProps } from \"./SidebarSwitcher\";\n\n/** A status icon at a row's end, such as \"running\". `label` names it for screen readers and as its tooltip. */\nexport type NavigationStatus = { icon: string; label: string; tone?: IntentTone };\n\ntype NavigationEntry = {\n id: string;\n label: string;\n icon?: string;\n /** Names a meaningful icon for screen readers, such as \"Homepage\"; without it the icon is decorative. */\n iconLabel?: string;\n badge?: string | number;\n description?: string;\n /**\n * Status icon in a fixed-size slot at the row's end. Set `null` on a row whose status comes and goes: the empty slot\n * keeps its place, so a status change never rewraps the label or moves the rows below.\n */\n status?: NavigationStatus | null;\n active?: boolean;\n disabled?: boolean;\n color?: string;\n children?: readonly NavigationItem[];\n /** Initial disclosure state; subsequent toggles remain local to the renderer. */\n defaultExpanded?: boolean;\n /** Owner-held disclosure state. The renderer shows it and reports toggles through `onExpandedChange`. */\n expanded?: boolean;\n actions?: readonly NavigationItem[];\n /**\n * Square icon buttons in the row, before the `actions` menu. They run an `action`; a destination belongs in a row,\n * where its link keeps modified clicks and new tabs.\n */\n inlineActions?: readonly { id: string; label: string; icon: string; action: string; disabled?: boolean }[];\n};\n\n/** Serializable presentation. Functions stay with the controller's owning island. */\nexport type NavigationItem = NavigationEntry &\n (\n | {\n href: string;\n action?: string;\n navigation?: \"document\" | \"enhanced\";\n scroll?: NavigationScrollMode;\n section?: never;\n keepOpen?: never;\n }\n | {\n action: string;\n href?: never;\n navigation?: never;\n scroll?: never;\n section?: never;\n /**\n * Runs the action while the host's menu stays open, without `beforeSelect`. Only for an action that changes\n * what the menu shows, such as a filter or a sort order; an action that opens something lets the menu close.\n */\n keepOpen?: boolean;\n }\n | {\n href?: never;\n action?: never;\n navigation?: never;\n scroll?: never;\n keepOpen?: never;\n children: readonly NavigationItem[];\n /** Shows the group as a plain heading over its rows, always open and not indented, instead of a disclosure. */\n section?: boolean;\n }\n );\n\nexport type NavigationOptions = {\n items: Accessor<readonly NavigationItem[]>;\n /** The container the navigation works in, shown above the items with the same switcher as the sidebar's head. */\n switcher?: Accessor<AppWorkspaceSidebarSwitcherProps>;\n onAction?: (action: string) => void | Promise<void>;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n /** Receives disclosure toggles of items that carry `expanded`; the owner decides the next state. */\n onExpandedChange?: (id: string, expanded: boolean) => void;\n};\n\nexport function findNavigationItem(items: readonly NavigationItem[], id: string): NavigationItem | undefined {\n for (const item of items) {\n if (item.disabled) continue;\n if (item.id === id) return item;\n const found =\n findNavigationItem(item.children ?? [], id) ??\n findNavigationItem(item.inlineActions ?? [], id) ??\n findNavigationItem(item.actions ?? [], id);\n if (found) return found;\n }\n}\n\n/** One live source for renderers; no router, registry, fetching or persisted state. */\nexport function createNavigation(options: NavigationOptions) {\n return {\n items: options.items,\n switcher: options.switcher,\n onNavigate: options.onNavigate,\n onExpandedChange: options.onExpandedChange,\n async activate(id: string) {\n const item = findNavigationItem(options.items(), id);\n if (item?.action) await options.onAction?.(item.action);\n },\n };\n}\n\nexport type NavigationController = ReturnType<typeof createNavigation>;\n"],"mappings":"AAKA;;
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/navigation-model.ts"],"sourcesContent":["import type { LinkNavigateEvent, NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport type { Accessor } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\nimport type { AppWorkspaceSidebarSwitcherProps } from \"./SidebarSwitcher\";\n\n/** A status icon at a row's end, such as \"running\". `label` names it for screen readers and as its tooltip. */\nexport type NavigationStatus = { icon: string; label: string; tone?: IntentTone };\n\ntype NavigationEntry = {\n id: string;\n label: string;\n icon?: string;\n /** Names a meaningful icon for screen readers, such as \"Homepage\"; without it the icon is decorative. */\n iconLabel?: string;\n badge?: string | number;\n description?: string;\n /**\n * Status icon in a fixed-size slot at the row's end. Set `null` on a row whose status comes and goes: the empty slot\n * keeps its place, so a status change never rewraps the label or moves the rows below.\n */\n status?: NavigationStatus | null;\n active?: boolean;\n /** Current container, independently of its active destination. `false` quiets this row; omitted keeps the default ink. */\n context?: boolean;\n disabled?: boolean;\n color?: string;\n children?: readonly NavigationItem[];\n /** Initial disclosure state; subsequent toggles remain local to the renderer. */\n defaultExpanded?: boolean;\n /** Owner-held disclosure state. The renderer shows it and reports toggles through `onExpandedChange`. */\n expanded?: boolean;\n actions?: readonly NavigationItem[];\n /**\n * Square icon buttons in the row, before the `actions` menu. They run an `action`; a destination belongs in a row,\n * where its link keeps modified clicks and new tabs.\n */\n inlineActions?: readonly { id: string; label: string; icon: string; action: string; disabled?: boolean }[];\n};\n\n/** Serializable presentation. Functions stay with the controller's owning island. */\nexport type NavigationItem = NavigationEntry &\n (\n | {\n href: string;\n action?: string;\n navigation?: \"document\" | \"enhanced\";\n scroll?: NavigationScrollMode;\n section?: never;\n keepOpen?: never;\n }\n | {\n action: string;\n href?: never;\n navigation?: never;\n scroll?: never;\n section?: never;\n /**\n * Runs the action while the host's menu stays open, without `beforeSelect`. Only for an action that changes\n * what the menu shows, such as a filter or a sort order; an action that opens something lets the menu close.\n */\n keepOpen?: boolean;\n }\n | {\n href?: never;\n action?: never;\n navigation?: never;\n scroll?: never;\n keepOpen?: never;\n children: readonly NavigationItem[];\n /** Shows the group as a plain heading over its rows, always open and not indented, instead of a disclosure. */\n section?: boolean;\n }\n );\n\nexport type NavigationOptions = {\n items: Accessor<readonly NavigationItem[]>;\n /** The container the navigation works in, shown above the items with the same switcher as the sidebar's head. */\n switcher?: Accessor<AppWorkspaceSidebarSwitcherProps>;\n onAction?: (action: string) => void | Promise<void>;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n /** Receives disclosure toggles of items that carry `expanded`; the owner decides the next state. */\n onExpandedChange?: (id: string, expanded: boolean) => void;\n};\n\nexport function findNavigationItem(items: readonly NavigationItem[], id: string): NavigationItem | undefined {\n for (const item of items) {\n if (item.disabled) continue;\n if (item.id === id) return item;\n const found =\n findNavigationItem(item.children ?? [], id) ??\n findNavigationItem(item.inlineActions ?? [], id) ??\n findNavigationItem(item.actions ?? [], id);\n if (found) return found;\n }\n}\n\n/** One live source for renderers; no router, registry, fetching or persisted state. */\nexport function createNavigation(options: NavigationOptions) {\n return {\n items: options.items,\n switcher: options.switcher,\n onNavigate: options.onNavigate,\n onExpandedChange: options.onExpandedChange,\n async activate(id: string) {\n const item = findNavigationItem(options.items(), id);\n if (item?.action) await options.onAction?.(item.action);\n },\n };\n}\n\nexport type NavigationController = ReturnType<typeof createNavigation>;\n"],"mappings":"AAKA;;AAkCA;;AA6CA,OAAO,SAAS,kBAAkB,CAAC,KAAgC,EAAE,EAAU,EAA8B;EAC3G,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;IACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;IACnB,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,IAAI;IAC/B,MAAM,KAAK,GACT,kBAAkB,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,CAAC,IAC3C,kBAAkB,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,EAAE,CAAC,IAChD,kBAAkB,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC;IAC5C,IAAI,KAAK,EAAE,OAAO,KAAK;EACzB;AACF;;AAEA;AACA,OAAO,SAAS,gBAAgB,CAAC,OAA0B,EAAE;EAC3D,OAAO;IACL,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;IAC9B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;IAC1C,MAAM,QAAQ,CAAC,EAAU,EAAE;MACzB,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;MACpD,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IACzD;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import { suppressTextSelection } from "../internal/text-selection";
|
|
2
2
|
/** Adds resizing to a server-rendered separator; orientation comes from aria-orientation. */
|
|
3
3
|
export function attachResizeSeparator(element, options) {
|
|
4
|
+
element.dataset.resizeEdge = options.grow;
|
|
4
5
|
const clamp = value => Math.min(options.max, Math.max(options.min, value));
|
|
5
6
|
const setAria = value => element.setAttribute("aria-valuenow", String(Math.round(value * 100) / 100));
|
|
6
7
|
const vertical = () => element.getAttribute("aria-orientation") !== "horizontal";
|
|
7
|
-
const direction = () =>
|
|
8
|
+
const direction = () => {
|
|
9
|
+
const value = (options.grow === "end" ? 1 : -1) * (vertical() && getComputedStyle(element).direction === "rtl" ? -1 : 1);
|
|
10
|
+
element.dataset.orientation = vertical() ? "vertical" : "horizontal";
|
|
11
|
+
element.dataset.resizePhysicalEdge = value < 0 ? "start" : "end";
|
|
12
|
+
return value;
|
|
13
|
+
};
|
|
14
|
+
const syncCue = () => {
|
|
15
|
+
direction();
|
|
16
|
+
};
|
|
17
|
+
syncCue();
|
|
8
18
|
let drag;
|
|
9
19
|
const resize = raw => {
|
|
10
20
|
const value = clamp(raw);
|
|
@@ -57,8 +67,16 @@ export function attachResizeSeparator(element, options) {
|
|
|
57
67
|
if (event.pointerId === drag?.id) finish(false);
|
|
58
68
|
};
|
|
59
69
|
const cancel = () => finish(false);
|
|
70
|
+
const reset = () => {
|
|
71
|
+
if (!drag) options.onReset?.();
|
|
72
|
+
};
|
|
60
73
|
const key = event => {
|
|
61
74
|
if (event.defaultPrevented || event.isComposing || event.altKey || event.ctrlKey || event.metaKey || drag) return;
|
|
75
|
+
if (event.key === "Enter" && options.onReset) {
|
|
76
|
+
event.preventDefault();
|
|
77
|
+
reset();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
62
80
|
const decrease = vertical() ? "ArrowLeft" : "ArrowUp";
|
|
63
81
|
const increase = vertical() ? "ArrowRight" : "ArrowDown";
|
|
64
82
|
const step = event.shiftKey ? options.largeStep ?? (options.step ?? 1) * 4 : options.step ?? 1;
|
|
@@ -75,6 +93,9 @@ export function attachResizeSeparator(element, options) {
|
|
|
75
93
|
window.addEventListener("pointercancel", cancelPointer);
|
|
76
94
|
element.addEventListener("lostpointercapture", cancelPointer);
|
|
77
95
|
element.addEventListener("keydown", key);
|
|
96
|
+
element.addEventListener("dblclick", reset);
|
|
97
|
+
element.addEventListener("pointerenter", syncCue);
|
|
98
|
+
element.addEventListener("focusin", syncCue);
|
|
78
99
|
window.addEventListener("blur", cancel);
|
|
79
100
|
return () => {
|
|
80
101
|
cancel();
|
|
@@ -84,6 +105,9 @@ export function attachResizeSeparator(element, options) {
|
|
|
84
105
|
window.removeEventListener("pointercancel", cancelPointer);
|
|
85
106
|
element.removeEventListener("lostpointercapture", cancelPointer);
|
|
86
107
|
element.removeEventListener("keydown", key);
|
|
108
|
+
element.removeEventListener("dblclick", reset);
|
|
109
|
+
element.removeEventListener("pointerenter", syncCue);
|
|
110
|
+
element.removeEventListener("focusin", syncCue);
|
|
87
111
|
window.removeEventListener("blur", cancel);
|
|
88
112
|
};
|
|
89
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/resize-separator.ts"],"sourcesContent":["import { suppressTextSelection } from \"../internal/text-selection\";\n\nexport type ResizeSeparatorOptions = {\n min: number;\n max: number;\n value: () => number;\n /** Pixels per value unit. Defaults to 1. */\n unit?: number;\n step?: number;\n largeStep?: number;\n grow: \"start\" | \"end\";\n collapseBelow?: number;\n onResize: (value: number) => void;\n onResizeEnd?: (value: number) => void;\n onCollapseIntent?: (armed: boolean) => void;\n onCollapse?: () => void;\n onDragChange?: (dragging: boolean) => void;\n};\n\n/** Adds resizing to a server-rendered separator; orientation comes from aria-orientation. */\nexport function attachResizeSeparator(element: HTMLElement, options: ResizeSeparatorOptions): () => void {\n const clamp = (value: number) => Math.min(options.max, Math.max(options.min, value));\n const setAria = (value: number) => element.setAttribute(\"aria-valuenow\", String(Math.round(value * 100) / 100));\n const vertical = () => element.getAttribute(\"aria-orientation\") !== \"horizontal\";\n const direction = () => (options.grow === \"end\" ? 1 : -1) * (vertical() && getComputedStyle(element).direction === \"rtl\" ? -1 : 1);\n let drag: { id: number; start: number; value: number; current: number; armed: boolean; releaseSelection: () => void } | undefined;\n const resize = (raw: number) => {\n const value = clamp(raw);\n setAria(value);\n options.onResize(value);\n return value;\n };\n const finish = (commit: boolean) => {\n if (!drag) return;\n const ended = drag;\n drag = undefined;\n element.removeAttribute(\"data-active\");\n ended.releaseSelection();\n if (element.hasPointerCapture?.(ended.id)) element.releasePointerCapture(ended.id);\n options.onDragChange?.(false);\n if (ended.armed) options.onCollapseIntent?.(false);\n if (!commit) resize(ended.value);\n else if (ended.armed) options.onCollapse?.();\n else options.onResizeEnd?.(ended.current);\n };\n const down = (event: PointerEvent) => {\n if (event.button !== 0 || event.isPrimary === false || drag) return;\n event.preventDefault();\n element.focus();\n drag = {\n id: event.pointerId,\n start: vertical() ? event.clientX : event.clientY,\n value: options.value(),\n current: options.value(),\n armed: false,\n releaseSelection: suppressTextSelection(event.pointerId),\n };\n element.setPointerCapture?.(event.pointerId);\n element.dataset.active = \"true\";\n options.onDragChange?.(true);\n };\n const move = (event: PointerEvent) => {\n if (!drag || event.pointerId !== drag.id) return;\n event.preventDefault();\n const raw = drag.value + (((vertical() ? event.clientX : event.clientY) - drag.start) * direction()) / (options.unit ?? 1);\n const armed = options.collapseBelow !== undefined && raw < options.collapseBelow;\n if (armed !== drag.armed) {\n drag.armed = armed;\n options.onCollapseIntent?.(armed);\n }\n drag.current = resize(raw);\n };\n const up = (event: PointerEvent) => {\n if (event.pointerId === drag?.id) finish(true);\n };\n const cancelPointer = (event: PointerEvent) => {\n if (event.pointerId === drag?.id) finish(false);\n };\n const cancel = () => finish(false);\n const key = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.isComposing || event.altKey || event.ctrlKey || event.metaKey || drag) return;\n const decrease = vertical() ? \"ArrowLeft\" : \"ArrowUp\";\n const increase = vertical() ? \"ArrowRight\" : \"ArrowDown\";\n const step = event.shiftKey ? (options.largeStep ?? (options.step ?? 1) * 4) : (options.step ?? 1);\n let value: number;\n if (event.key === \"Home\") value = options.min;\n else if (event.key === \"End\") value = options.max;\n else if (event.key === decrease || event.key === increase)\n value = options.value() + (event.key === increase ? 1 : -1) * direction() * step;\n else return;\n event.preventDefault();\n const resized = resize(value);\n options.onResizeEnd?.(resized);\n };\n setAria(clamp(options.value()));\n element.addEventListener(\"pointerdown\", down);\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n window.addEventListener(\"pointercancel\", cancelPointer);\n element.addEventListener(\"lostpointercapture\", cancelPointer);\n element.addEventListener(\"keydown\", key);\n window.addEventListener(\"blur\", cancel);\n return () => {\n cancel();\n element.removeEventListener(\"pointerdown\", down);\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n window.removeEventListener(\"pointercancel\", cancelPointer);\n element.removeEventListener(\"lostpointercapture\", cancelPointer);\n element.removeEventListener(\"keydown\", key);\n window.removeEventListener(\"blur\", cancel);\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/resize-separator.ts"],"sourcesContent":["import { suppressTextSelection } from \"../internal/text-selection\";\n\nexport type ResizeSeparatorOptions = {\n min: number;\n max: number;\n value: () => number;\n /** Pixels per value unit. Defaults to 1. */\n unit?: number;\n step?: number;\n largeStep?: number;\n grow: \"start\" | \"end\";\n collapseBelow?: number;\n onResize: (value: number) => void;\n onResizeEnd?: (value: number) => void;\n onReset?: () => void;\n onCollapseIntent?: (armed: boolean) => void;\n onCollapse?: () => void;\n onDragChange?: (dragging: boolean) => void;\n};\n\n/** Adds resizing to a server-rendered separator; orientation comes from aria-orientation. */\nexport function attachResizeSeparator(element: HTMLElement, options: ResizeSeparatorOptions): () => void {\n element.dataset.resizeEdge = options.grow;\n const clamp = (value: number) => Math.min(options.max, Math.max(options.min, value));\n const setAria = (value: number) => element.setAttribute(\"aria-valuenow\", String(Math.round(value * 100) / 100));\n const vertical = () => element.getAttribute(\"aria-orientation\") !== \"horizontal\";\n const direction = () => {\n const value = (options.grow === \"end\" ? 1 : -1) * (vertical() && getComputedStyle(element).direction === \"rtl\" ? -1 : 1);\n element.dataset.orientation = vertical() ? \"vertical\" : \"horizontal\";\n element.dataset.resizePhysicalEdge = value < 0 ? \"start\" : \"end\";\n return value;\n };\n const syncCue = () => {\n direction();\n };\n syncCue();\n let drag: { id: number; start: number; value: number; current: number; armed: boolean; releaseSelection: () => void } | undefined;\n const resize = (raw: number) => {\n const value = clamp(raw);\n setAria(value);\n options.onResize(value);\n return value;\n };\n const finish = (commit: boolean) => {\n if (!drag) return;\n const ended = drag;\n drag = undefined;\n element.removeAttribute(\"data-active\");\n ended.releaseSelection();\n if (element.hasPointerCapture?.(ended.id)) element.releasePointerCapture(ended.id);\n options.onDragChange?.(false);\n if (ended.armed) options.onCollapseIntent?.(false);\n if (!commit) resize(ended.value);\n else if (ended.armed) options.onCollapse?.();\n else options.onResizeEnd?.(ended.current);\n };\n const down = (event: PointerEvent) => {\n if (event.button !== 0 || event.isPrimary === false || drag) return;\n event.preventDefault();\n element.focus();\n drag = {\n id: event.pointerId,\n start: vertical() ? event.clientX : event.clientY,\n value: options.value(),\n current: options.value(),\n armed: false,\n releaseSelection: suppressTextSelection(event.pointerId),\n };\n element.setPointerCapture?.(event.pointerId);\n element.dataset.active = \"true\";\n options.onDragChange?.(true);\n };\n const move = (event: PointerEvent) => {\n if (!drag || event.pointerId !== drag.id) return;\n event.preventDefault();\n const raw = drag.value + (((vertical() ? event.clientX : event.clientY) - drag.start) * direction()) / (options.unit ?? 1);\n const armed = options.collapseBelow !== undefined && raw < options.collapseBelow;\n if (armed !== drag.armed) {\n drag.armed = armed;\n options.onCollapseIntent?.(armed);\n }\n drag.current = resize(raw);\n };\n const up = (event: PointerEvent) => {\n if (event.pointerId === drag?.id) finish(true);\n };\n const cancelPointer = (event: PointerEvent) => {\n if (event.pointerId === drag?.id) finish(false);\n };\n const cancel = () => finish(false);\n const reset = () => {\n if (!drag) options.onReset?.();\n };\n const key = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.isComposing || event.altKey || event.ctrlKey || event.metaKey || drag) return;\n if (event.key === \"Enter\" && options.onReset) {\n event.preventDefault();\n reset();\n return;\n }\n const decrease = vertical() ? \"ArrowLeft\" : \"ArrowUp\";\n const increase = vertical() ? \"ArrowRight\" : \"ArrowDown\";\n const step = event.shiftKey ? (options.largeStep ?? (options.step ?? 1) * 4) : (options.step ?? 1);\n let value: number;\n if (event.key === \"Home\") value = options.min;\n else if (event.key === \"End\") value = options.max;\n else if (event.key === decrease || event.key === increase)\n value = options.value() + (event.key === increase ? 1 : -1) * direction() * step;\n else return;\n event.preventDefault();\n const resized = resize(value);\n options.onResizeEnd?.(resized);\n };\n setAria(clamp(options.value()));\n element.addEventListener(\"pointerdown\", down);\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n window.addEventListener(\"pointercancel\", cancelPointer);\n element.addEventListener(\"lostpointercapture\", cancelPointer);\n element.addEventListener(\"keydown\", key);\n element.addEventListener(\"dblclick\", reset);\n element.addEventListener(\"pointerenter\", syncCue);\n element.addEventListener(\"focusin\", syncCue);\n window.addEventListener(\"blur\", cancel);\n return () => {\n cancel();\n element.removeEventListener(\"pointerdown\", down);\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n window.removeEventListener(\"pointercancel\", cancelPointer);\n element.removeEventListener(\"lostpointercapture\", cancelPointer);\n element.removeEventListener(\"keydown\", key);\n element.removeEventListener(\"dblclick\", reset);\n element.removeEventListener(\"pointerenter\", syncCue);\n element.removeEventListener(\"focusin\", syncCue);\n window.removeEventListener(\"blur\", cancel);\n };\n}\n"],"mappings":"AAAA,SAAS,qBAAqB,QAAQ,4BAA4B;AAoBlE;AACA,OAAO,SAAS,qBAAqB,CAAC,OAAoB,EAAE,OAA+B,EAAc;EACvG,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI;EACzC,MAAM,KAAK,GAAI,KAAa,IAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;EACpF,MAAM,OAAO,GAAI,KAAa,IAAK,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;EAC/G,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,YAAY;EAChF,MAAM,SAAS,GAAG,MAAM;IACtB,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACxH,OAAO,CAAC,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,GAAG,UAAU,GAAG,YAAY;IACpE,OAAO,CAAC,OAAO,CAAC,kBAAkB,GAAG,KAAK,GAAG,CAAC,GAAG,OAAO,GAAG,KAAK;IAChE,OAAO,KAAK;EACd,CAAC;EACD,MAAM,OAAO,GAAG,MAAM;IACpB,SAAS,CAAC,CAAC;EACb,CAAC;EACD,OAAO,CAAC,CAAC;EACT,IAAI,IAA6H;EACjI,MAAM,MAAM,GAAI,GAAW,IAAK;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;IACxB,OAAO,CAAC,KAAK,CAAC;IACd,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IACvB,OAAO,KAAK;EACd,CAAC;EACD,MAAM,MAAM,GAAI,MAAe,IAAK;IAClC,IAAI,CAAC,IAAI,EAAE;IACX,MAAM,KAAK,GAAG,IAAI;IAClB,IAAI,GAAG,SAAS;IAChB,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC;IACtC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxB,IAAI,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;IAClF,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;IAC7B,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAC5B,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,KACxC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;EAC3C,CAAC;EACD,MAAM,IAAI,GAAI,KAAmB,IAAK;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,EAAE;IAC7D,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,OAAO,CAAC,KAAK,CAAC,CAAC;IACf,IAAI,GAAG;MACL,EAAE,EAAE,KAAK,CAAC,SAAS;MACnB,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;MACjD,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;MACtB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;MACxB,KAAK,EAAE,KAAK;MACZ,gBAAgB,EAAE,qBAAqB,CAAC,KAAK,CAAC,SAAS;IACzD,CAAC;IACD,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC;IAC5C,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;IAC/B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;EAC9B,CAAC;EACD,MAAM,IAAI,GAAI,KAAmB,IAAK;IACpC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,EAAE,EAAE;IAC1C,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,IAAK,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC1H,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa;IAChF,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;MACxB,IAAI,CAAC,KAAK,GAAG,KAAK;MAClB,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;IACnC;IACA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;EAC5B,CAAC;EACD,MAAM,EAAE,GAAI,KAAmB,IAAK;IAClC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;EAChD,CAAC;EACD,MAAM,aAAa,GAAI,KAAmB,IAAK;IAC7C,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC;EACjD,CAAC;EACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;EAClC,MAAM,KAAK,GAAG,MAAM;IAClB,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,GAAG,CAAC;EAChC,CAAC;EACD,MAAM,GAAG,GAAI,KAAoB,IAAK;IACpC,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;IAC3G,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;MAC5C,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,KAAK,CAAC,CAAC;MACP;IACF;IACA,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,GAAG,WAAW,GAAG,SAAS;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,GAAG,YAAY,GAAG,WAAW;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,GAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAK,OAAO,CAAC,IAAI,IAAI,CAAE;IAClG,IAAI,KAAa;IACjB,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KACzC,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAC7C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EACvD,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAC9E;IACL,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7B,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC;EAChC,CAAC;EACD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC/B,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC;EAC7C,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC;EAC5C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC;EACxC,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,aAAa,CAAC;EACvD,OAAO,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,aAAa,CAAC;EAC7D,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC;EACxC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC;EAC3C,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC;EACjD,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC;EAC5C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC;EACvC,OAAO,MAAM;IACX,MAAM,CAAC,CAAC;IACR,OAAO,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC;IAChD,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC;IAC/C,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAC;IAC3C,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,aAAa,CAAC;IAC1D,OAAO,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,aAAa,CAAC;IAChE,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC;IAC3C,OAAO,CAAC,mBAAmB,CAAC,UAAU,EAAE,KAAK,CAAC;IAC9C,OAAO,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC;IACpD,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;IAC/C,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC;EAC5C,CAAC;AACH","ignoreList":[]}
|
|
@@ -19,21 +19,38 @@ export function scrollFadeEdges(body) {
|
|
|
19
19
|
function observeScrollFade(body) {
|
|
20
20
|
let entry = active.get(body);
|
|
21
21
|
if (!entry) {
|
|
22
|
-
const
|
|
22
|
+
const apply = () => {
|
|
23
23
|
const edges = scrollFadeEdges(body);
|
|
24
24
|
if (edges) {
|
|
25
25
|
if (body.getAttribute("data-scroll-fade") !== edges) body.setAttribute("data-scroll-fade", edges);
|
|
26
26
|
} else if (body.hasAttribute("data-scroll-fade")) body.removeAttribute("data-scroll-fade");
|
|
27
27
|
};
|
|
28
|
+
// Measuring forces layout. Scrolling (the browser sends one scroll event per frame) and changes to the scrollport
|
|
29
|
+
// itself measure at once; changes of its content are measured once per frame. A list that updates many rows at
|
|
30
|
+
// once, such as marking every chat read, otherwise lays the page out again for each row, and a measurement in the
|
|
31
|
+
// middle of a large change can delay the next frame enough to count as a layout shift. A reader that needs the
|
|
32
|
+
// current edges before the frame ends calls `measureScrollFade`.
|
|
33
|
+
let frame = 0;
|
|
34
|
+
const measure = () => {
|
|
35
|
+
if (frame) cancelAnimationFrame(frame);
|
|
36
|
+
frame = 0;
|
|
37
|
+
apply();
|
|
38
|
+
};
|
|
39
|
+
const update = () => {
|
|
40
|
+
if (!frame) frame = requestAnimationFrame(() => {
|
|
41
|
+
frame = 0;
|
|
42
|
+
apply();
|
|
43
|
+
});
|
|
44
|
+
};
|
|
28
45
|
const resize = new ResizeObserver(update);
|
|
29
46
|
const observe = () => {
|
|
30
47
|
resize.disconnect();
|
|
31
48
|
resize.observe(body);
|
|
32
49
|
for (const child of Array.from(body.children)) resize.observe(child);
|
|
33
|
-
|
|
50
|
+
measure();
|
|
34
51
|
};
|
|
35
52
|
const mutations = new MutationObserver(records => {
|
|
36
|
-
if (records.some(record => record.type === "childList" && record.target === body)) observe();else update();
|
|
53
|
+
if (records.some(record => record.type === "childList" && record.target === body)) observe();else if (records.some(record => record.target === body)) apply();else update();
|
|
37
54
|
});
|
|
38
55
|
mutations.observe(body, {
|
|
39
56
|
childList: true,
|
|
@@ -42,16 +59,18 @@ function observeScrollFade(body) {
|
|
|
42
59
|
attributes: true,
|
|
43
60
|
attributeFilter: ["class", "style", "hidden", "open", "data-scroll-fade-mode", "data-scroll-fade-axis", "dir"]
|
|
44
61
|
});
|
|
45
|
-
body.addEventListener("scroll",
|
|
62
|
+
body.addEventListener("scroll", apply, {
|
|
46
63
|
passive: true
|
|
47
64
|
});
|
|
48
65
|
observe();
|
|
49
66
|
entry = {
|
|
50
67
|
users: 0,
|
|
68
|
+
measure,
|
|
51
69
|
stop: () => {
|
|
70
|
+
if (frame) cancelAnimationFrame(frame);
|
|
52
71
|
resize.disconnect();
|
|
53
72
|
mutations.disconnect();
|
|
54
|
-
body.removeEventListener("scroll",
|
|
73
|
+
body.removeEventListener("scroll", apply);
|
|
55
74
|
body.removeAttribute("data-scroll-fade");
|
|
56
75
|
}
|
|
57
76
|
};
|
|
@@ -65,6 +84,14 @@ function observeScrollFade(body) {
|
|
|
65
84
|
}
|
|
66
85
|
};
|
|
67
86
|
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Measures an observed scrollport's fades now instead of at the end of the frame. Call it before reading the fades in
|
|
90
|
+
* the same frame as a change of the scrollport's content, as an editor does when it keeps its cursor clear of them.
|
|
91
|
+
*/
|
|
92
|
+
export function measureScrollFade(element) {
|
|
93
|
+
active.get(element)?.measure();
|
|
94
|
+
}
|
|
68
95
|
export function createScrollFade(element, enabled) {
|
|
69
96
|
createEffect(() => {
|
|
70
97
|
if (!enabled()) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/scroll-fade.ts"],"sourcesContent":["import { createEffect, onCleanup } from \"solid-js\";\n\nconst selector = \"[data-scroll-fade-mode]\";\nconst active = new WeakMap<HTMLElement, { users: number; stop: () => void }>();\n\n/** Self-contained because the sidebar inline script embeds its source. */\nexport function scrollFadeEdges(body: HTMLElement): \"top\" | \"bottom\" | \"both\" | undefined {\n const mode = body.getAttribute(\"data-scroll-fade-mode\");\n const horizontal = body.getAttribute(\"data-scroll-fade-axis\") === \"horizontal\";\n const overflow = horizontal ? body.scrollWidth - body.clientWidth : body.scrollHeight - body.clientHeight;\n // Horizontal RTL scrollLeft starts at zero on the right and becomes negative.\n const rtl = horizontal && getComputedStyle(body).direction === \"rtl\";\n const offset = horizontal ? (rtl ? overflow + body.scrollLeft : body.scrollLeft) : body.scrollTop;\n const top = mode === \"both\" && overflow > 1 && offset > 1;\n const bottom = !!mode && overflow > 1 && overflow - offset > 1;\n return top && bottom ? \"both\" : top ? \"top\" : bottom ? \"bottom\" : undefined;\n}\n\n/** Shared by hydrated components and the workspace's server-rendered scrollports. */\nfunction observeScrollFade(body: HTMLElement) {\n let entry = active.get(body);\n if (!entry) {\n const update = () => {\n const edges = scrollFadeEdges(body);\n if (edges) {\n if (body.getAttribute(\"data-scroll-fade\") !== edges) body.setAttribute(\"data-scroll-fade\", edges);\n } else if (body.hasAttribute(\"data-scroll-fade\")) body.removeAttribute(\"data-scroll-fade\");\n };\n const resize = new ResizeObserver(update);\n const observe = () => {\n resize.disconnect();\n resize.observe(body);\n for (const child of Array.from(body.children)) resize.observe(child);\n update();\n };\n const mutations = new MutationObserver((records) => {\n if (records.some((record) => record.type === \"childList\" && record.target === body)) observe();\n else update();\n });\n mutations.observe(body, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\", \"open\", \"data-scroll-fade-mode\", \"data-scroll-fade-axis\", \"dir\"],\n });\n body.addEventListener(\"scroll\", update, { passive: true });\n observe();\n entry = {\n users: 0,\n stop: () => {\n resize.disconnect();\n mutations.disconnect();\n body.removeEventListener(\"scroll\", update);\n body.removeAttribute(\"data-scroll-fade\");\n },\n };\n active.set(body, entry);\n }\n entry.users++;\n return () => {\n if (--entry.users === 0) {\n entry.stop();\n active.delete(body);\n }\n };\n}\n\nexport function createScrollFade(element: () => HTMLElement | undefined, enabled: () => boolean) {\n createEffect(() => {\n if (!enabled()) return;\n const body = element();\n if (body) onCleanup(observeScrollFade(body));\n });\n}\n\n/** Enrich only explicitly marked UI scrollports, including SSR and later navigation. */\nexport function installScrollFades(root: Document | HTMLElement) {\n const owned = new Map<HTMLElement, () => void>();\n const sync = () => {\n const next = new Set(Array.from(root.querySelectorAll<HTMLElement>(selector)));\n if (root instanceof HTMLElement && root.matches(selector)) next.add(root);\n for (const [element, stop] of owned)\n if (!next.has(element)) {\n stop();\n owned.delete(element);\n }\n for (const element of next) if (!owned.has(element)) owned.set(element, observeScrollFade(element));\n };\n const containsPort = (node: Node) => node instanceof Element && (node.matches(selector) || node.querySelector(selector));\n const mutations = new MutationObserver((records) => {\n if (\n records.some(\n (record) =>\n record.type === \"attributes\" ||\n Array.from(record.addedNodes).some(containsPort) ||\n Array.from(record.removedNodes).some(containsPort),\n )\n )\n sync();\n });\n mutations.observe(root, { childList: true, subtree: true, attributes: true, attributeFilter: [\"data-scroll-fade-mode\"] });\n sync();\n return () => {\n mutations.disconnect();\n for (const stop of owned.values()) stop();\n owned.clear();\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/scroll-fade.ts"],"sourcesContent":["import { createEffect, onCleanup } from \"solid-js\";\n\nconst selector = \"[data-scroll-fade-mode]\";\nconst active = new WeakMap<HTMLElement, { users: number; measure: () => void; stop: () => void }>();\n\n/** Self-contained because the sidebar inline script embeds its source. */\nexport function scrollFadeEdges(body: HTMLElement): \"top\" | \"bottom\" | \"both\" | undefined {\n const mode = body.getAttribute(\"data-scroll-fade-mode\");\n const horizontal = body.getAttribute(\"data-scroll-fade-axis\") === \"horizontal\";\n const overflow = horizontal ? body.scrollWidth - body.clientWidth : body.scrollHeight - body.clientHeight;\n // Horizontal RTL scrollLeft starts at zero on the right and becomes negative.\n const rtl = horizontal && getComputedStyle(body).direction === \"rtl\";\n const offset = horizontal ? (rtl ? overflow + body.scrollLeft : body.scrollLeft) : body.scrollTop;\n const top = mode === \"both\" && overflow > 1 && offset > 1;\n const bottom = !!mode && overflow > 1 && overflow - offset > 1;\n return top && bottom ? \"both\" : top ? \"top\" : bottom ? \"bottom\" : undefined;\n}\n\n/** Shared by hydrated components and the workspace's server-rendered scrollports. */\nfunction observeScrollFade(body: HTMLElement) {\n let entry = active.get(body);\n if (!entry) {\n const apply = () => {\n const edges = scrollFadeEdges(body);\n if (edges) {\n if (body.getAttribute(\"data-scroll-fade\") !== edges) body.setAttribute(\"data-scroll-fade\", edges);\n } else if (body.hasAttribute(\"data-scroll-fade\")) body.removeAttribute(\"data-scroll-fade\");\n };\n // Measuring forces layout. Scrolling (the browser sends one scroll event per frame) and changes to the scrollport\n // itself measure at once; changes of its content are measured once per frame. A list that updates many rows at\n // once, such as marking every chat read, otherwise lays the page out again for each row, and a measurement in the\n // middle of a large change can delay the next frame enough to count as a layout shift. A reader that needs the\n // current edges before the frame ends calls `measureScrollFade`.\n let frame = 0;\n const measure = () => {\n if (frame) cancelAnimationFrame(frame);\n frame = 0;\n apply();\n };\n const update = () => {\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n apply();\n });\n };\n const resize = new ResizeObserver(update);\n const observe = () => {\n resize.disconnect();\n resize.observe(body);\n for (const child of Array.from(body.children)) resize.observe(child);\n measure();\n };\n const mutations = new MutationObserver((records) => {\n if (records.some((record) => record.type === \"childList\" && record.target === body)) observe();\n else if (records.some((record) => record.target === body)) apply();\n else update();\n });\n mutations.observe(body, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\", \"open\", \"data-scroll-fade-mode\", \"data-scroll-fade-axis\", \"dir\"],\n });\n body.addEventListener(\"scroll\", apply, { passive: true });\n observe();\n entry = {\n users: 0,\n measure,\n stop: () => {\n if (frame) cancelAnimationFrame(frame);\n resize.disconnect();\n mutations.disconnect();\n body.removeEventListener(\"scroll\", apply);\n body.removeAttribute(\"data-scroll-fade\");\n },\n };\n active.set(body, entry);\n }\n entry.users++;\n return () => {\n if (--entry.users === 0) {\n entry.stop();\n active.delete(body);\n }\n };\n}\n\n/**\n * Measures an observed scrollport's fades now instead of at the end of the frame. Call it before reading the fades in\n * the same frame as a change of the scrollport's content, as an editor does when it keeps its cursor clear of them.\n */\nexport function measureScrollFade(element: HTMLElement) {\n active.get(element)?.measure();\n}\n\nexport function createScrollFade(element: () => HTMLElement | undefined, enabled: () => boolean) {\n createEffect(() => {\n if (!enabled()) return;\n const body = element();\n if (body) onCleanup(observeScrollFade(body));\n });\n}\n\n/** Enrich only explicitly marked UI scrollports, including SSR and later navigation. */\nexport function installScrollFades(root: Document | HTMLElement) {\n const owned = new Map<HTMLElement, () => void>();\n const sync = () => {\n const next = new Set(Array.from(root.querySelectorAll<HTMLElement>(selector)));\n if (root instanceof HTMLElement && root.matches(selector)) next.add(root);\n for (const [element, stop] of owned)\n if (!next.has(element)) {\n stop();\n owned.delete(element);\n }\n for (const element of next) if (!owned.has(element)) owned.set(element, observeScrollFade(element));\n };\n const containsPort = (node: Node) => node instanceof Element && (node.matches(selector) || node.querySelector(selector));\n const mutations = new MutationObserver((records) => {\n if (\n records.some(\n (record) =>\n record.type === \"attributes\" ||\n Array.from(record.addedNodes).some(containsPort) ||\n Array.from(record.removedNodes).some(containsPort),\n )\n )\n sync();\n });\n mutations.observe(root, { childList: true, subtree: true, attributes: true, attributeFilter: [\"data-scroll-fade-mode\"] });\n sync();\n return () => {\n mutations.disconnect();\n for (const stop of owned.values()) stop();\n owned.clear();\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { ssrElement as _$ssrElement } from "solid-js/web";
|
|
2
2
|
import { mergeProps as _$mergeProps } from "solid-js/web";
|
|
3
3
|
import { ssr as _$ssr } from "solid-js/web";
|
|
4
|
-
import { createComponent as _$createComponent } from "solid-js/web";
|
|
5
4
|
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
6
5
|
import { escape as _$escape } from "solid-js/web";
|
|
6
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
7
7
|
var _tmpl$ = ["<div class=\"", "\">", "</div>"],
|
|
8
8
|
_tmpl$2 = ["<div", ">", "", "", "</div>"],
|
|
9
|
-
_tmpl$3 = ["<
|
|
10
|
-
_tmpl$4 = ["<
|
|
11
|
-
_tmpl$5 = ["<
|
|
12
|
-
_tmpl$6 = ["<
|
|
9
|
+
_tmpl$3 = ["<i class=\"", "\" aria-hidden=\"true\"></i>"],
|
|
10
|
+
_tmpl$4 = ["<div", "><p", ">", "</p>", "</div>"],
|
|
11
|
+
_tmpl$5 = ["<span", ">", "</span>"],
|
|
12
|
+
_tmpl$6 = ["<p", ">", "</p>"],
|
|
13
|
+
_tmpl$7 = ["<div class=\"", "\"", ">", "</div>"];
|
|
13
14
|
import { children, For, Show, splitProps } from "solid-js";
|
|
14
15
|
export const NOTICE_CARD_CLASSES = {
|
|
15
16
|
root: "k2b-notice-card",
|
|
17
|
+
icon: "k2b-notice-card__icon",
|
|
16
18
|
content: "k2b-notice-card__content",
|
|
17
19
|
head: "k2b-notice-card__head",
|
|
18
20
|
title: "k2b-notice-card__title",
|
|
@@ -21,7 +23,7 @@ export const NOTICE_CARD_CLASSES = {
|
|
|
21
23
|
body: "k2b-notice-card__body"
|
|
22
24
|
};
|
|
23
25
|
function NoticeCardComponent(props) {
|
|
24
|
-
const [local, articleProps] = splitProps(props, ["tone", "title", "detail", "meta", "children", "class", "bodyClass"]);
|
|
26
|
+
const [local, articleProps] = splitProps(props, ["tone", "icon", "title", "detail", "meta", "children", "class", "bodyClass"]);
|
|
25
27
|
// Children that render nothing, such as a Show whose condition is false, add no body and no gap.
|
|
26
28
|
const body = children(() => local.children);
|
|
27
29
|
const hasBody = () => body.toArray().some(node => node != null && node !== false && node !== "");
|
|
@@ -32,21 +34,28 @@ function NoticeCardComponent(props) {
|
|
|
32
34
|
get ["data-tone"]() {
|
|
33
35
|
return local.tone ?? "neutral";
|
|
34
36
|
}
|
|
35
|
-
}
|
|
37
|
+
}, () => local.icon ? {
|
|
38
|
+
"data-icon": ""
|
|
39
|
+
} : {}), [_$escape(_$createComponent(Show, {
|
|
40
|
+
get when() {
|
|
41
|
+
return local.icon;
|
|
42
|
+
},
|
|
43
|
+
children: icon => _$ssr(_tmpl$3, `${_$escape(icon(), true)} ${_$escape(NOTICE_CARD_CLASSES.icon, true)}`)
|
|
44
|
+
})), _$ssr(_tmpl$2, _$ssrAttribute("class", _$escape(NOTICE_CARD_CLASSES.content, true), false), _$escape(_$createComponent(Show, {
|
|
36
45
|
get when() {
|
|
37
46
|
return local.title;
|
|
38
47
|
},
|
|
39
|
-
children: title => _$ssr(_tmpl$
|
|
48
|
+
children: title => _$ssr(_tmpl$4, _$ssrAttribute("class", _$escape(NOTICE_CARD_CLASSES.head, true), false), _$ssrAttribute("class", _$escape(NOTICE_CARD_CLASSES.title, true), false), _$escape(title()), _$escape(_$createComponent(Show, {
|
|
40
49
|
get when() {
|
|
41
50
|
return local.meta;
|
|
42
51
|
},
|
|
43
|
-
children: meta => _$ssr(_tmpl$
|
|
52
|
+
children: meta => _$ssr(_tmpl$5, _$ssrAttribute("class", _$escape(NOTICE_CARD_CLASSES.meta, true), false), _$escape(meta()))
|
|
44
53
|
})))
|
|
45
54
|
})), _$escape(_$createComponent(Show, {
|
|
46
55
|
get when() {
|
|
47
56
|
return local.detail;
|
|
48
57
|
},
|
|
49
|
-
children: detail => _$ssr(_tmpl$
|
|
58
|
+
children: detail => _$ssr(_tmpl$6, _$ssrAttribute("class", _$escape(NOTICE_CARD_CLASSES.description, true), false), _$escape(detail()))
|
|
50
59
|
})), _$escape(_$createComponent(Show, {
|
|
51
60
|
get when() {
|
|
52
61
|
return hasBody();
|
|
@@ -54,7 +63,7 @@ function NoticeCardComponent(props) {
|
|
|
54
63
|
get children() {
|
|
55
64
|
return _$ssr(_tmpl$, `${_$escape(NOTICE_CARD_CLASSES.body, true)} ${_$escape(local.bodyClass ?? "", true)}`, _$escape(body()));
|
|
56
65
|
}
|
|
57
|
-
}))), false);
|
|
66
|
+
})))], false);
|
|
58
67
|
}
|
|
59
68
|
function NoticeGrid(props) {
|
|
60
69
|
const columns = () => props.items.length <= 1 ? "one" : props.items.length === 2 ? "two" : "three";
|
|
@@ -63,7 +72,7 @@ function NoticeGrid(props) {
|
|
|
63
72
|
return props.items.length > 0;
|
|
64
73
|
},
|
|
65
74
|
get children() {
|
|
66
|
-
return _$ssr(_tmpl$
|
|
75
|
+
return _$ssr(_tmpl$7, `k2b-notice-grid ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-columns", _$escape(columns(), true), false), _$escape(_$createComponent(For, {
|
|
67
76
|
get each() {
|
|
68
77
|
return props.items;
|
|
69
78
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["surfaces/NoticeCard.tsx"],"sourcesContent":["import { children, For, type JSX, Show, splitProps } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type NoticeTone = Extract<IntentTone, \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\">;\n\ntype NoticeCardContentProps =\n | { title: JSX.Element; detail?: JSX.Element; meta?: JSX.Element; children?: JSX.Element }\n | { title?: never; detail?: never; meta?: never; children: JSX.Element };\n\nexport type NoticeCardProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\" | \"title\"> &\n NoticeCardContentProps & {\n tone?: NoticeTone;\n class?: string;\n bodyClass?: string;\n };\n\nexport const NOTICE_CARD_CLASSES = {\n root: \"k2b-notice-card\",\n content: \"k2b-notice-card__content\",\n head: \"k2b-notice-card__head\",\n title: \"k2b-notice-card__title\",\n meta: \"k2b-notice-card__meta\",\n description: \"k2b-notice-card__description\",\n body: \"k2b-notice-card__body\",\n} as const;\n\nfunction NoticeCardComponent(props: NoticeCardProps): JSX.Element {\n const [local, articleProps] = splitProps(props, [\"tone\", \"title\", \"detail\", \"meta\", \"children\", \"class\", \"bodyClass\"]);\n // Children that render nothing, such as a Show whose condition is false, add no body and no gap.\n const body = children(() => local.children);\n const hasBody = () => body.toArray().some((node) => node != null && node !== false && node !== \"\");\n return (\n <article
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/NoticeCard.tsx"],"sourcesContent":["import { children, For, type JSX, Show, splitProps } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type NoticeTone = Extract<IntentTone, \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\">;\n\ntype NoticeCardContentProps =\n | { title: JSX.Element; detail?: JSX.Element; meta?: JSX.Element; children?: JSX.Element }\n | { title?: never; detail?: never; meta?: never; children: JSX.Element };\n\nexport type NoticeCardProps = Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\" | \"title\"> &\n NoticeCardContentProps & {\n tone?: NoticeTone;\n /** A Tabler icon class. Turns the notice into a compact status line whose icon and text take the tone colour. */\n icon?: string;\n class?: string;\n bodyClass?: string;\n };\n\nexport const NOTICE_CARD_CLASSES = {\n root: \"k2b-notice-card\",\n icon: \"k2b-notice-card__icon\",\n content: \"k2b-notice-card__content\",\n head: \"k2b-notice-card__head\",\n title: \"k2b-notice-card__title\",\n meta: \"k2b-notice-card__meta\",\n description: \"k2b-notice-card__description\",\n body: \"k2b-notice-card__body\",\n} as const;\n\nfunction NoticeCardComponent(props: NoticeCardProps): JSX.Element {\n const [local, articleProps] = splitProps(props, [\"tone\", \"icon\", \"title\", \"detail\", \"meta\", \"children\", \"class\", \"bodyClass\"]);\n // Children that render nothing, such as a Show whose condition is false, add no body and no gap.\n const body = children(() => local.children);\n const hasBody = () => body.toArray().some((node) => node != null && node !== false && node !== \"\");\n return (\n <article\n {...articleProps}\n class={`${NOTICE_CARD_CLASSES.root} ${local.class ?? \"\"}`}\n data-tone={local.tone ?? \"neutral\"}\n {...(local.icon ? { \"data-icon\": \"\" } : {})}\n >\n <Show when={local.icon}>{(icon) => <i class={`${icon()} ${NOTICE_CARD_CLASSES.icon}`} aria-hidden=\"true\" />}</Show>\n <div class={NOTICE_CARD_CLASSES.content}>\n <Show when={local.title}>\n {(title) => (\n <div class={NOTICE_CARD_CLASSES.head}>\n <p class={NOTICE_CARD_CLASSES.title}>{title()}</p>\n <Show when={local.meta}>{(meta) => <span class={NOTICE_CARD_CLASSES.meta}>{meta()}</span>}</Show>\n </div>\n )}\n </Show>\n <Show when={local.detail}>{(detail) => <p class={NOTICE_CARD_CLASSES.description}>{detail()}</p>}</Show>\n <Show when={hasBody()}>\n <div class={`${NOTICE_CARD_CLASSES.body} ${local.bodyClass ?? \"\"}`}>{body()}</div>\n </Show>\n </div>\n </article>\n );\n}\n\nexport type NoticeGridProps<T> = {\n items: readonly T[];\n children: (item: T) => JSX.Element;\n class?: string;\n};\n\nfunction NoticeGrid<T>(props: NoticeGridProps<T>): JSX.Element {\n const columns = () => (props.items.length <= 1 ? \"one\" : props.items.length === 2 ? \"two\" : \"three\");\n return (\n <Show when={props.items.length > 0}>\n <div class={`k2b-notice-grid ${props.class ?? \"\"}`} data-columns={columns()}>\n <For each={props.items}>{(item) => props.children(item)}</For>\n </div>\n </Show>\n );\n}\n\nexport const NoticeCard = Object.assign(NoticeCardComponent, { Grid: NoticeGrid });\nexport default NoticeCard;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ssr as _$ssr } from "solid-js/web";
|
|
2
|
+
import { escape as _$escape } from "solid-js/web";
|
|
3
|
+
var _tmpl$ = ["<div class=\"", "\" aria-hidden=\"true\"></div>"];
|
|
4
|
+
/** Decorative loading geometry. The consumer owns dimensions and one accessible loading status. */
|
|
5
|
+
export function Skeleton(props) {
|
|
6
|
+
return _$ssr(_tmpl$, `k2b-skeleton ${_$escape(props.class ?? "", true)}`);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=Skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/Skeleton.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\n\nexport type SkeletonProps = { class?: string };\n\n/** Decorative loading geometry. The consumer owns dimensions and one accessible loading status. */\nexport function Skeleton(props: SkeletonProps): JSX.Element {\n return <div class={`k2b-skeleton ${props.class ?? \"\"}`} aria-hidden=\"true\" />;\n}\n"],"mappings":";;;AAIA;AACA,OAAO,SAAS,QAAQ,CAAC,KAAoB,EAAe;EAC1D,qBAAmB,yBAAgB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE;AACxD","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ export { default as Placeholder } from "./Placeholder";
|
|
|
9
9
|
export { ProgressBar } from "./ProgressBar";
|
|
10
10
|
export { ProgressRing } from "./ProgressRing";
|
|
11
11
|
export { ResourceCard } from "./ResourceCard";
|
|
12
|
+
export { Skeleton } from "./Skeleton";
|
|
12
13
|
export { StatCell } from "./StatCell";
|
|
13
14
|
export { StatGrid } from "./StatGrid";
|
|
14
15
|
export { StatusBadge } from "./StatusBadge";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["surfaces/index.ts"],"sourcesContent":["export type { AvatarProps, AvatarRing, AvatarShape, AvatarSize } from \"./Avatar\";\nexport { Avatar } from \"./Avatar\";\nexport type { AvatarStackPerson, AvatarStackProps } from \"./AvatarStack\";\nexport { AvatarStack } from \"./AvatarStack\";\nexport type { DescriptionListItem, DescriptionListProps } from \"./DescriptionList\";\nexport { DescriptionList } from \"./DescriptionList\";\nexport type { LinkCardColor, LinkCardProps } from \"./LinkCard\";\nexport { LinkCard } from \"./LinkCard\";\nexport type { NotFoundStateAction, NotFoundStateProps } from \"./NotFoundState\";\nexport { NotFoundState } from \"./NotFoundState\";\nexport type { NoticeCardProps, NoticeGridProps, NoticeTone } from \"./NoticeCard\";\nexport { NOTICE_CARD_CLASSES, NoticeCard } from \"./NoticeCard\";\nexport type { PaperProps, PaperTag } from \"./Paper\";\nexport { Paper } from \"./Paper\";\nexport type {\n PlaceholderAlign,\n PlaceholderProps,\n PlaceholderState,\n PlaceholderSurface,\n PlaceholderVariant,\n} from \"./Placeholder\";\nexport { default as Placeholder } from \"./Placeholder\";\nexport type { ProgressBarProps, ProgressBarTone } from \"./ProgressBar\";\nexport { ProgressBar } from \"./ProgressBar\";\nexport type { ProgressRingProps, ProgressRingTone } from \"./ProgressRing\";\nexport { ProgressRing } from \"./ProgressRing\";\nexport type { ResourceCardProps, ResourceCardState } from \"./ResourceCard\";\nexport { ResourceCard } from \"./ResourceCard\";\nexport type { StatCellAccent, StatCellProps, StatCellTone } from \"./StatCell\";\nexport { StatCell } from \"./StatCell\";\nexport type {\n StatGridAction,\n StatGridColumns,\n StatGridProps,\n StatGridSize,\n StatGridSurface,\n} from \"./StatGrid\";\nexport { StatGrid } from \"./StatGrid\";\nexport type { StatusBadgeProps, StatusTone } from \"./StatusBadge\";\nexport { StatusBadge } from \"./StatusBadge\";\nexport type { TagProps, TagSize } from \"./Tag\";\nexport { Tag } from \"./Tag\";\n"],"mappings":"AACA,SAAS,MAAM,QAAQ,UAAU;AAEjC,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB;AAEnD,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,mBAAmB,EAAE,UAAU,QAAQ,cAAc;AAE9D,SAAS,KAAK,QAAQ,SAAS;AAQ/B,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,YAAY,QAAQ,gBAAgB;AAE7C,SAAS,YAAY,QAAQ,gBAAgB;
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/index.ts"],"sourcesContent":["export type { AvatarProps, AvatarRing, AvatarShape, AvatarSize } from \"./Avatar\";\nexport { Avatar } from \"./Avatar\";\nexport type { AvatarStackPerson, AvatarStackProps } from \"./AvatarStack\";\nexport { AvatarStack } from \"./AvatarStack\";\nexport type { DescriptionListItem, DescriptionListProps } from \"./DescriptionList\";\nexport { DescriptionList } from \"./DescriptionList\";\nexport type { LinkCardColor, LinkCardProps } from \"./LinkCard\";\nexport { LinkCard } from \"./LinkCard\";\nexport type { NotFoundStateAction, NotFoundStateProps } from \"./NotFoundState\";\nexport { NotFoundState } from \"./NotFoundState\";\nexport type { NoticeCardProps, NoticeGridProps, NoticeTone } from \"./NoticeCard\";\nexport { NOTICE_CARD_CLASSES, NoticeCard } from \"./NoticeCard\";\nexport type { PaperProps, PaperTag } from \"./Paper\";\nexport { Paper } from \"./Paper\";\nexport type {\n PlaceholderAlign,\n PlaceholderProps,\n PlaceholderState,\n PlaceholderSurface,\n PlaceholderVariant,\n} from \"./Placeholder\";\nexport { default as Placeholder } from \"./Placeholder\";\nexport type { ProgressBarProps, ProgressBarTone } from \"./ProgressBar\";\nexport { ProgressBar } from \"./ProgressBar\";\nexport type { ProgressRingProps, ProgressRingTone } from \"./ProgressRing\";\nexport { ProgressRing } from \"./ProgressRing\";\nexport type { ResourceCardProps, ResourceCardState } from \"./ResourceCard\";\nexport { ResourceCard } from \"./ResourceCard\";\nexport { Skeleton, type SkeletonProps } from \"./Skeleton\";\nexport type { StatCellAccent, StatCellProps, StatCellTone } from \"./StatCell\";\nexport { StatCell } from \"./StatCell\";\nexport type {\n StatGridAction,\n StatGridColumns,\n StatGridProps,\n StatGridSize,\n StatGridSurface,\n} from \"./StatGrid\";\nexport { StatGrid } from \"./StatGrid\";\nexport type { StatusBadgeProps, StatusTone } from \"./StatusBadge\";\nexport { StatusBadge } from \"./StatusBadge\";\nexport type { TagProps, TagSize } from \"./Tag\";\nexport { Tag } from \"./Tag\";\n"],"mappings":"AACA,SAAS,MAAM,QAAQ,UAAU;AAEjC,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,eAAe,QAAQ,mBAAmB;AAEnD,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,aAAa,QAAQ,iBAAiB;AAE/C,SAAS,mBAAmB,EAAE,UAAU,QAAQ,cAAc;AAE9D,SAAS,KAAK,QAAQ,SAAS;AAQ/B,SAAS,OAAO,IAAI,WAAW,QAAQ,eAAe;AAEtD,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,YAAY,QAAQ,gBAAgB;AAE7C,SAAS,YAAY,QAAQ,gBAAgB;AAC7C,SAAS,QAAQ,QAA4B,YAAY;AAEzD,SAAS,QAAQ,QAAQ,YAAY;AAQrC,SAAS,QAAQ,QAAQ,YAAY;AAErC,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,GAAG,QAAQ,OAAO","ignoreList":[]}
|
|
@@ -5,13 +5,13 @@ const resourceMessages = i18n.define({
|
|
|
5
5
|
messages: {
|
|
6
6
|
en: {
|
|
7
7
|
resourceUntitled: "Untitled",
|
|
8
|
-
resourceNoAccess: "
|
|
8
|
+
resourceNoAccess: "Item not available",
|
|
9
9
|
resourceDeleted: "Item deleted",
|
|
10
10
|
resourceUnavailable: "Not available right now"
|
|
11
11
|
},
|
|
12
12
|
de: {
|
|
13
13
|
resourceUntitled: "Ohne Titel",
|
|
14
|
-
resourceNoAccess: "
|
|
14
|
+
resourceNoAccess: "Element nicht verfügbar",
|
|
15
15
|
resourceDeleted: "Element gelöscht",
|
|
16
16
|
resourceUnavailable: "Gerade nicht verfügbar"
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["surfaces/resource-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst resourceMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n resourceUntitled: \"Untitled\",\n resourceNoAccess: \"
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/resource-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst resourceMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n resourceUntitled: \"Untitled\",\n resourceNoAccess: \"Item not available\",\n resourceDeleted: \"Item deleted\",\n resourceUnavailable: \"Not available right now\",\n },\n de: {\n resourceUntitled: \"Ohne Titel\",\n resourceNoAccess: \"Element nicht verfügbar\",\n resourceDeleted: \"Element gelöscht\",\n resourceUnavailable: \"Gerade nicht verfügbar\",\n },\n },\n});\n\nexport type ResourceMessages = ReturnType<(typeof resourceMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useResourceMessages = (): (() => ResourceMessages) => {\n const locale = useLocale();\n return () => resourceMessages.resolve([locale()]).t;\n};\n\nexport const checkResourceMessages = () => resourceMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;EACnC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,gBAAgB,EAAE,UAAU;MAC5B,gBAAgB,EAAE,oBAAoB;MACtC,eAAe,EAAE,cAAc;MAC/B,mBAAmB,EAAE;IACvB,CAAC;IACD,EAAE,EAAE;MACF,gBAAgB,EAAE,YAAY;MAC9B,gBAAgB,EAAE,yBAAyB;MAC3C,eAAe,EAAE,kBAAkB;MACnC,mBAAmB,EAAE;IACvB;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,mBAAmB,GAAG,MAAgC;EACjE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,MAAM,qBAAqB,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
|