@k2b/ui 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/feedback/HoverPreview.js +6 -6
- package/dist/browser/feedback/HoverPreview.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +105 -77
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +30 -2
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/feedback/HoverPreview.js +6 -6
- package/dist/ssr/feedback/HoverPreview.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +84 -66
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +30 -2
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/layout/AppWorkspace.d.ts +14 -0
- package/dist/types/layout/app-workspace-controller.d.ts +5 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/AppWorkspace.tsx"],"sourcesContent":["import { Link, type LinkNavigateEvent, type NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport {\n children,\n createContext,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n useContext,\n} from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { installAppWorkspaceController } from \"./app-workspace-controller\";\nimport {\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_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_DEFAULT,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n appWorkspaceLayoutStyle,\n appWorkspacePanelVariable,\n} from \"./app-workspace-state\";\nimport type { ScrollAreaProps } from \"./ScrollArea\";\nimport { SidebarItemPreview } from \"./SidebarItemPreview\";\nimport { createScrollFade } from \"./scroll-fade\";\nimport { assertStableUiId, assertUniqueStableUiIds } from \"./stable-id\";\n\nconst ResizeContext = createContext(true);\nconst LayoutStateContext = createContext<AppWorkspaceLayoutState | null>(null);\nconst MAIN_PANE = Symbol(\"AppWorkspace.MainPane\");\nconst SIDEBAR_DESKTOP = Symbol(\"AppWorkspace.SidebarDesktop\");\nconst SIDEBAR_ITEM_ICON = Symbol(\"AppWorkspace.SidebarItemIcon\");\nconst SIDEBAR_ITEM_LABEL = Symbol(\"AppWorkspace.SidebarItemLabel\");\nconst SIDEBAR_ITEM_META = Symbol(\"AppWorkspace.SidebarItemMeta\");\nconst SIDEBAR_ITEM_ACTION = Symbol(\"AppWorkspace.SidebarItemAction\");\nconst NAV_TREE_ITEM = Symbol(\"AppWorkspace.NavTree.Item\");\n\ntype MainPaneSlot = {\n kind: typeof MAIN_PANE;\n props: AppWorkspaceMainPaneProps;\n domId: string;\n};\ntype SidebarChildSlot = { kind: typeof SIDEBAR_DESKTOP; children: JSX.Element };\ntype SidebarItemSlot =\n | (AppWorkspaceSidebarItemIconProps & { kind: typeof SIDEBAR_ITEM_ICON })\n | (AppWorkspaceSidebarItemLabelProps & { kind: typeof SIDEBAR_ITEM_LABEL })\n | (AppWorkspaceSidebarItemMetaProps & { kind: typeof SIDEBAR_ITEM_META })\n | (AppWorkspaceSidebarItemActionProps & { kind: typeof SIDEBAR_ITEM_ACTION });\ntype NavTreeItemSlot = AppWorkspaceNavTreeItemProps & { kind: typeof NAV_TREE_ITEM };\n\nconst flatten = (value: unknown): unknown[] => {\n // Solid control-flow components such as <For> expose their rendered value\n // through an accessor. Compound slots may therefore be nested behind a\n // function even after `children()` resolves the outer collection.\n if (typeof value === \"function\") return flatten(value());\n if (Array.isArray(value)) return value.flatMap(flatten);\n return value === null || value === undefined || typeof value === \"boolean\" ? [] : [value];\n};\nconst mainPaneSlot = (value: unknown): value is MainPaneSlot =>\n Boolean(value && typeof value === \"object\" && \"kind\" in value && (value as MainPaneSlot).kind === MAIN_PANE);\nconst sidebarChildSlot = (value: unknown): value is SidebarChildSlot =>\n Boolean(value && typeof value === \"object\" && \"kind\" in value && (value as SidebarChildSlot).kind === SIDEBAR_DESKTOP);\nconst sidebarItemSlot = (value: unknown): value is SidebarItemSlot =>\n Boolean(\n value &&\n typeof value === \"object\" &&\n \"kind\" in value &&\n [SIDEBAR_ITEM_ICON, SIDEBAR_ITEM_LABEL, SIDEBAR_ITEM_META, SIDEBAR_ITEM_ACTION].includes((value as SidebarItemSlot).kind),\n );\nconst navTreeItemSlot = (value: unknown): value is NavTreeItemSlot =>\n Boolean(value && typeof value === \"object\" && \"kind\" in value && (value as NavTreeItemSlot).kind === NAV_TREE_ITEM);\n\ntype ResizeHandleProps = {\n kind: \"sidebar\" | \"pane\" | \"detail\" | \"drawer\";\n edge: \"start\" | \"end\";\n controls?: string;\n panelId?: string;\n defaultSize: number;\n minSize: number;\n maxSize: number;\n shadow?: boolean;\n label?: string;\n style?: JSX.CSSProperties;\n};\n\nfunction ResizeHandle(props: ResizeHandleProps): JSX.Element {\n return (\n <button\n type=\"button\"\n class=\"k2b-app-workspace__resize\"\n role=\"separator\"\n aria-label={\n props.label ??\n (props.kind === \"sidebar\"\n ? \"Resize navigation\"\n : props.kind === \"pane\"\n ? \"Resize workspace pane\"\n : props.kind === \"detail\"\n ? \"Resize detail panel\"\n : \"Resize bottom drawer\")\n }\n aria-controls={props.controls}\n aria-orientation={props.kind === \"drawer\" ? \"horizontal\" : \"vertical\"}\n aria-valuemin={props.minSize}\n aria-valuemax={props.maxSize}\n aria-valuenow={props.defaultSize}\n data-app-workspace-resize={props.kind}\n data-workspace-panel-id={props.panelId}\n data-workspace-resize-edge={props.edge}\n data-workspace-resize-shadow={props.shadow ? \"true\" : undefined}\n data-workspace-default-size={props.defaultSize}\n data-workspace-min-size={props.minSize}\n data-workspace-max-size={props.maxSize}\n style={props.style}\n >\n <span aria-hidden=\"true\" />\n </button>\n );\n}\n\nexport type AppWorkspaceProps = {\n children: JSX.Element;\n class?: string;\n /** A host with its own mobile chrome can use the full canvas below 1024px. */\n mobileSurface?: \"contained\" | \"flush\";\n resizable?: boolean;\n /**\n * Restores a persisted layout when the workspace mounts. Persistence itself\n * stays app-owned — the package reads and writes nothing on its own — but\n * the resize handles work without it.\n */\n layoutState?: () => AppWorkspaceLayoutState | null | undefined;\n /** Called with the full layout whenever a resize settles. Persist it here. */\n onLayoutChange?: (state: AppWorkspaceLayoutState) => void;\n /**\n * Opt out of the built-in controller. Only needed when the application calls\n * `installAppWorkspaceController` itself — installing twice would double up\n * every listener.\n */\n controller?: false;\n};\nexport type AppWorkspaceLayoutStateProviderProps = {\n children: JSX.Element;\n state: AppWorkspaceLayoutState | null | undefined;\n};\nexport type AppWorkspaceContentProps = { children: JSX.Element; class?: string };\nexport type AppWorkspaceMainProps = {\n children: JSX.Element;\n class?: string;\n /** `\"content\"` centers the children as one reading column with the shared page width on large screens. */\n width?: \"full\" | \"content\";\n mobilePane?: string;\n scroll?: boolean;\n scrollFade?: boolean;\n scrollPreserveKey?: string | false;\n \"aria-busy\"?: boolean | \"true\" | \"false\";\n};\nexport type AppWorkspaceMainPaneProps = {\n id: string;\n label: string;\n surface?: \"default\" | \"navigation\";\n open?: boolean;\n resizable?: boolean;\n resizeShadow?: boolean;\n defaultSize?: number;\n minSize?: number;\n maxSize?: number;\n class?: string;\n scroll?: boolean;\n scrollFade?: boolean;\n children: JSX.Element;\n};\nexport type AppWorkspaceDetailWidth = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type AppWorkspaceDetailProps = {\n children: JSX.Element;\n open: boolean;\n id: string;\n class?: string;\n width?: AppWorkspaceDetailWidth;\n viewTransitionName?: string;\n resizable?: boolean;\n minWidth?: number;\n maxWidth?: number;\n};\nexport type AppWorkspaceBottomDrawerHeight = \"sm\" | \"md\" | \"lg\";\nexport type AppWorkspaceBottomDrawerProps = {\n children: JSX.Element;\n open: boolean;\n id: string;\n class?: string;\n height?: AppWorkspaceBottomDrawerHeight;\n minHeight?: number;\n maxHeight?: number;\n viewTransitionName?: string;\n resizable?: boolean;\n};\nexport type AppWorkspaceSidebarProps = {\n label?: string;\n children: JSX.Element;\n class?: string;\n /**\n * Below the desktop breakpoint the sidebar is hidden and the host's mobile\n * navigation takes over. `\"stacked\"` keeps it as a block above the content\n * instead, for overviews whose sidebar is the primary object list.\n */\n mobile?: \"hidden\" | \"stacked\";\n resizable?: boolean;\n resizeShadow?: boolean;\n collapsible?: boolean;\n defaultSize?: number;\n minSize?: number;\n maxSize?: number;\n};\nexport type AppWorkspaceSidebarVisibility = \"always\" | \"expanded\" | \"collapsed\";\nexport type AppWorkspaceSidebarAccessoryVisibility = \"always\" | \"hover\";\ntype AppWorkspaceSidebarContentProps = {\n children: JSX.Element;\n class?: string;\n scrollPreserveKey?: string | false;\n sidebarMode?: AppWorkspaceSidebarVisibility;\n};\nexport type AppWorkspaceSidebarBodyProps = AppWorkspaceSidebarContentProps & { scrollFade?: boolean };\nexport type AppWorkspaceSidebarSectionProps = AppWorkspaceSidebarContentProps & {\n title?: string;\n icon?: string;\n count?: number;\n collapsible?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n actions?: JSX.Element;\n};\nexport type AppWorkspaceSidebarItemTone = \"default\" | \"success\" | \"danger\";\nexport type AppWorkspaceSidebarIconActionTone = \"default\" | \"success\" | \"danger\";\nexport type AppWorkspaceSidebarItemProps = {\n children: JSX.Element;\n /**\n * Card rows add a quiet context header above the main label. Object rows\n * present one resource with a title, a description line, and stacked\n * trailing counts; use them for the objects an overview navigates into.\n */\n variant?: \"row\" | \"card\" | \"object\";\n context?: JSX.Element;\n contextMeta?: JSX.Element;\n /** Passive second line; keep controls in actions or preview. */\n description?: JSX.Element;\n /** Interactive details, also reachable through a dedicated button. */\n preview?: {\n label: string;\n content: JSX.Element | ((close: () => void) => JSX.Element);\n trigger?: \"action\" | \"row\";\n align?: \"center\" | \"end\";\n viewportSize?: ScrollAreaProps[\"viewportSize\"];\n onOpenChange?: (open: boolean) => void;\n };\n href?: string;\n /** Document navigation by default; opt into enhanced navigation only when the owning island applies the target state. */\n navigation?: \"enhanced\" | \"document\";\n replace?: boolean;\n scroll?: NavigationScrollMode;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n onClick?: (event: MouseEvent) => void;\n active?: boolean;\n activeClass?: string;\n disabled?: boolean;\n icon?: string;\n meta?: JSX.Element;\n metaVisibility?: AppWorkspaceSidebarAccessoryVisibility;\n actions?: JSX.Element;\n tone?: AppWorkspaceSidebarItemTone;\n title?: string;\n viewTransitionName?: string;\n class?: string;\n depth?: number;\n actionIcon?: string;\n actionLabel?: string;\n onActionClick?: (event: MouseEvent) => void;\n data?: Record<string, string | number | boolean | null | undefined>;\n sidebarMode?: AppWorkspaceSidebarVisibility;\n};\nexport type AppWorkspaceSidebarIconGridProps = AppWorkspaceSidebarContentProps & { title?: string; columns?: 2 | 3 };\nexport type AppWorkspaceSidebarIconActionProps = {\n href?: string | null;\n /** Document navigation by default; opt into enhanced navigation only when the owning island applies the target state. */\n navigation?: \"enhanced\" | \"document\";\n replace?: boolean;\n scroll?: NavigationScrollMode;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n icon: string;\n label: string;\n active?: boolean;\n disabled?: boolean;\n tone?: AppWorkspaceSidebarIconActionTone;\n viewTransitionName?: string;\n onClick?: (event: MouseEvent) => void;\n sidebarMode?: AppWorkspaceSidebarVisibility;\n};\nexport type AppWorkspaceSidebarItemIconProps = { icon?: string; children?: JSX.Element };\nexport type AppWorkspaceSidebarItemLabelProps = { children: JSX.Element; marquee?: boolean };\nexport type AppWorkspaceSidebarItemMetaProps = {\n children: JSX.Element;\n visibility?: AppWorkspaceSidebarAccessoryVisibility;\n};\nexport type AppWorkspaceSidebarItemActionProps = {\n icon?: string;\n label: string;\n disabled?: boolean;\n /** Hide the action on fine pointers until the row is hovered or keyboard-focused. */\n visibility?: AppWorkspaceSidebarAccessoryVisibility;\n href?: string;\n navigation?: \"enhanced\" | \"document\";\n onSelect?: (event: MouseEvent) => void;\n children?: JSX.Element;\n};\nexport type AppWorkspaceSidebarItemActionsProps = {\n children: JSX.Element;\n visibility?: AppWorkspaceSidebarAccessoryVisibility;\n};\nexport type AppWorkspaceNavTreeProps = {\n children: JSX.Element;\n ariaLabel: string;\n selectedId?: string | null;\n expandedIds?: readonly string[];\n defaultExpandedIds?: readonly string[];\n onSelectedIdChange?: (id: string) => void;\n onExpandedIdsChange?: (ids: readonly string[]) => void;\n indented?: boolean;\n class?: string;\n};\nexport type AppWorkspaceNavTreeItemProps = {\n id: string;\n label: JSX.Element;\n children?: JSX.Element;\n href?: string;\n /** Document navigation by default; opt into enhanced navigation only when the owning island applies the target state. */\n navigation?: \"enhanced\" | \"document\";\n replace?: boolean;\n scroll?: NavigationScrollMode;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n onSelect?: (event: MouseEvent) => void;\n disabled?: boolean;\n icon?: string;\n /** Replaces `icon` while this branch is expanded and makes the icon the disclosure target. */\n expandedIcon?: string;\n meta?: JSX.Element;\n metaVisibility?: AppWorkspaceSidebarAccessoryVisibility;\n actions?: JSX.Element;\n tone?: AppWorkspaceSidebarItemTone;\n title?: string;\n viewTransitionName?: string;\n class?: string;\n onDragEnter?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;\n onDragOver?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;\n onDragLeave?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;\n onDrop?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;\n};\ntype AppWorkspaceNavTreeComponent = ((props: AppWorkspaceNavTreeProps) => JSX.Element) & {\n Item: (props: AppWorkspaceNavTreeItemProps) => JSX.Element;\n};\n\nconst modeAttrs = (mode?: AppWorkspaceSidebarVisibility) => (mode && mode !== \"always\" ? { \"data-sidebar-mode\": mode } : {});\n/** Same rule as `modeAttrs`, for the un-prefixed `data` bag on sidebar items. */\nconst modeData = (mode?: AppWorkspaceSidebarVisibility) => (mode && mode !== \"always\" ? { \"sidebar-mode\": mode } : {});\nconst scrollAttrs = (key?: string | false) => (key ? { \"data-scroll-preserve\": key } : {});\nconst iconClass = (icon: string | undefined, fallback = \"ti-circle\") => (icon?.startsWith(\"ti \") ? icon : `ti ${icon || fallback}`);\n\nfunction AppWorkspaceMainPane(props: AppWorkspaceMainPaneProps): JSX.Element {\n return {\n kind: MAIN_PANE,\n props,\n domId: `k2b-workspace-pane-${createUniqueId()}`,\n } satisfies MainPaneSlot as unknown as JSX.Element;\n}\n\nfunction AppWorkspaceMain(props: AppWorkspaceMainProps): JSX.Element {\n const rootResizable = useContext(ResizeContext);\n const resolved = children(() => props.children);\n const values = createMemo(() => flatten(resolved()));\n const paneIds = createMemo(() => {\n const ids = values()\n .filter(mainPaneSlot)\n .map((slot) => slot.props.id);\n assertUniqueStableUiIds(ids, \"AppWorkspace.MainPane id\");\n return ids;\n });\n const regions = createMemo(() => {\n const all = values();\n const primary = all.filter((value) => !mainPaneSlot(value));\n const primaryIndex = all.findIndex((value) => !mainPaneSlot(value));\n let inserted = false;\n const result: Array<{ type: \"primary\"; index: number; children: unknown[] } | { type: \"pane\"; index: number; slot: MainPaneSlot }> = [];\n all.forEach((value, index) => {\n if (mainPaneSlot(value)) {\n result.push({ type: \"pane\", index, slot: value });\n } else if (!inserted) {\n inserted = true;\n result.push({ type: \"primary\", index: primaryIndex, children: primary });\n }\n });\n return result;\n });\n const anchorRegion = createMemo(\n () =>\n regions().find((candidate) => candidate.type === \"primary\") ??\n regions().find((candidate) => candidate.type === \"pane\" && candidate.slot.props.open !== false),\n );\n // Presence of a MainPane slot — not of an *open* one — decides the split\n // layout. Deriving it from `regions()` made a workspace whose panes are all\n // closed fall back to `resolved()`, which renders the raw slot objects.\n const hasPanes = createMemo(() => paneIds().length > 0);\n\n return (\n <div\n class={`k2b-app-workspace__main ${hasPanes() ? \"has-panes\" : \"\"} ${props.class ?? \"\"}`}\n data-mobile-pane={props.mobilePane}\n data-width={props.width === \"content\" ? \"content\" : undefined}\n data-scroll-fade-mode={!hasPanes() && props.scroll !== false && props.scrollFade !== false ? \"both\" : undefined}\n data-scroll={props.scroll === false ? \"false\" : undefined}\n aria-busy={props[\"aria-busy\"]}\n {...scrollAttrs(props.scrollPreserveKey)}\n >\n <Show when={hasPanes()} fallback={resolved() as JSX.Element}>\n <For each={regions()}>\n {(region) => {\n const activeMobilePane = () => {\n const anchor = anchorRegion();\n return props.mobilePane ?? (anchor?.type === \"pane\" ? anchor.slot.props.id : \"main\");\n };\n if (region.type === \"primary\") {\n return (\n <div\n class=\"k2b-app-workspace__main-primary\"\n data-workspace-main-region=\"main\"\n data-workspace-mobile-active={activeMobilePane() === \"main\" ? \"true\" : \"false\"}\n >\n {region.children as JSX.Element}\n </div>\n );\n }\n const pane = region.slot;\n const panelId = assertStableUiId(pane.props.id, \"AppWorkspace.MainPane id\");\n const variable = appWorkspacePanelVariable(\"pane\", panelId);\n const isAnchor = () => region === anchorRegion();\n const resizable = () => !isAnchor() && (pane.props.resizable ?? rootResizable);\n const defaultSize = () => pane.props.defaultSize ?? APP_WORKSPACE_PANE_DEFAULT;\n const minSize = () => pane.props.minSize ?? APP_WORKSPACE_PANE_MIN;\n const maxSize = () => Math.max(minSize(), pane.props.maxSize ?? APP_WORKSPACE_PANE_MAX);\n const before = () => region.index < (anchorRegion()?.index ?? 0);\n const handle = () => (\n <ResizeHandle\n kind=\"pane\"\n edge={before() ? \"end\" : \"start\"}\n controls={pane.domId}\n panelId={panelId}\n defaultSize={defaultSize()}\n minSize={minSize()}\n maxSize={maxSize()}\n shadow={pane.props.resizeShadow !== false}\n label={`Resize ${pane.props.label}`}\n />\n );\n return (\n <Show when={pane.props.open !== false}>\n <Show when={resizable() && !before()}>{handle()}</Show>\n <section\n id={pane.domId}\n class={`k2b-app-workspace__main-pane ${isAnchor() ? \"is-primary\" : \"\"} ${pane.props.class ?? \"\"}`}\n aria-label={pane.props.label}\n data-workspace-main-region={pane.props.id}\n data-workspace-mobile-active={activeMobilePane() === pane.props.id ? \"true\" : \"false\"}\n data-workspace-panel-id={panelId}\n data-workspace-resizable={resizable() ? \"true\" : \"false\"}\n data-surface={pane.props.surface === \"navigation\" ? \"navigation\" : undefined}\n data-scroll={pane.props.scroll === false ? \"false\" : undefined}\n data-scroll-fade-mode={pane.props.scroll !== false && pane.props.scrollFade !== false ? \"both\" : undefined}\n style={isAnchor() ? undefined : { \"--k2b-workspace-panel-size\": `var(${variable}, ${defaultSize()}px)` }}\n >\n {pane.props.children}\n </section>\n <Show when={resizable() && before()}>{handle()}</Show>\n </Show>\n );\n }}\n </For>\n </Show>\n </div>\n );\n}\n\nfunction AppWorkspaceDetail(props: AppWorkspaceDetailProps): JSX.Element {\n const rootResizable = useContext(ResizeContext);\n const panelId = () => assertStableUiId(props.id, \"AppWorkspace.Detail id\");\n const domId = () => `k2b-workspace-detail-${panelId()}`;\n const variable = () => appWorkspacePanelVariable(\"detail\", panelId());\n // Cloud's `detailDefaultWidth`. These feed `aria-valuenow` and the\n // `var(…, Npx)` first-paint fallback, so they are behaviour, not taste.\n const widths = { sm: 288, md: 384, lg: 480, xl: 544 };\n const defaultWidth = () => widths[props.width ?? \"md\"] ?? APP_WORKSPACE_DETAIL_DEFAULT;\n const minWidth = () => props.minWidth ?? APP_WORKSPACE_DETAIL_MIN;\n const maxWidth = () => Math.max(minWidth(), props.maxWidth ?? APP_WORKSPACE_DETAIL_MAX);\n const resizable = () => props.resizable ?? rootResizable;\n return (\n <>\n <Show when={resizable()}>\n <ResizeHandle\n kind=\"detail\"\n edge=\"start\"\n controls={domId()}\n panelId={panelId()}\n defaultSize={defaultWidth()}\n minSize={minWidth()}\n maxSize={maxWidth()}\n shadow\n style={{ \"--k2b-workspace-panel-size\": `var(${variable()}, ${defaultWidth()}px)` }}\n />\n </Show>\n <aside\n id={domId()}\n class={`k2b-app-workspace__detail ${props.class ?? \"\"}`}\n data-width={props.width ?? \"md\"}\n data-workspace-panel-id={panelId()}\n data-workspace-resizable={resizable() ? \"true\" : \"false\"}\n hidden={!props.open}\n style={{\n \"--k2b-workspace-panel-size\": `var(${variable()}, ${defaultWidth()}px)`,\n \"view-transition-name\": props.viewTransitionName,\n }}\n >\n {props.children}\n </aside>\n </>\n );\n}\n\nfunction AppWorkspaceBottomDrawer(props: AppWorkspaceBottomDrawerProps): JSX.Element {\n const rootResizable = useContext(ResizeContext);\n const panelId = () => assertStableUiId(props.id, \"AppWorkspace.BottomDrawer id\");\n const domId = () => `k2b-workspace-drawer-${panelId()}`;\n const variable = () => appWorkspacePanelVariable(\"drawer\", panelId());\n // Cloud's `drawerDefaultHeight`.\n const heights = { sm: 192, md: 240, lg: 320 };\n const defaultHeight = () => heights[props.height ?? \"md\"] ?? APP_WORKSPACE_DRAWER_DEFAULT;\n const minHeight = () => props.minHeight ?? APP_WORKSPACE_DRAWER_MIN;\n const maxHeight = () => Math.max(minHeight(), props.maxHeight ?? APP_WORKSPACE_DRAWER_MAX);\n const resizable = () => props.resizable ?? rootResizable;\n return (\n <>\n <Show when={resizable()}>\n <ResizeHandle\n kind=\"drawer\"\n edge=\"start\"\n controls={domId()}\n panelId={panelId()}\n defaultSize={defaultHeight()}\n minSize={minHeight()}\n maxSize={maxHeight()}\n shadow\n style={{ \"--k2b-workspace-panel-size\": `var(${variable()}, ${defaultHeight()}px)` }}\n />\n </Show>\n <aside\n id={domId()}\n class={`k2b-app-workspace__drawer ${props.class ?? \"\"}`}\n data-height={props.height ?? \"md\"}\n data-workspace-panel-id={panelId()}\n data-workspace-resizable={resizable() ? \"true\" : \"false\"}\n hidden={!props.open}\n style={{\n \"--k2b-workspace-panel-size\": `var(${variable()}, ${defaultHeight()}px)`,\n \"view-transition-name\": props.viewTransitionName,\n }}\n >\n {props.children}\n </aside>\n </>\n );\n}\n\nfunction AppWorkspaceSidebar(props: AppWorkspaceSidebarProps): JSX.Element {\n const rootResizable = useContext(ResizeContext);\n const resizable = () => props.resizable ?? rootResizable;\n const defaultSize = () => props.defaultSize ?? APP_WORKSPACE_SIDEBAR_DEFAULT;\n const minSize = () => props.minSize ?? (props.collapsible ? APP_WORKSPACE_SIDEBAR_COLLAPSED : APP_WORKSPACE_SIDEBAR_MIN);\n const maxSize = () => props.maxSize ?? APP_WORKSPACE_SIDEBAR_MAX;\n const generatedId = createUniqueId();\n const domId = `k2b-workspace-sidebar-${generatedId}`;\n const resolved = children(() => props.children);\n const slots = createMemo(() => flatten(resolved()).filter(sidebarChildSlot));\n const desktop = createMemo(() => slots().find((slot) => slot.kind === SIDEBAR_DESKTOP));\n return (\n <>\n <aside\n id={domId}\n class={`k2b-app-workspace__sidebar ${props.class ?? \"\"}`}\n aria-label={props.label}\n data-mobile={props.mobile === \"stacked\" ? \"stacked\" : undefined}\n data-workspace-resizable={resizable() ? \"true\" : \"false\"}\n data-workspace-collapsible={props.collapsible ? \"true\" : \"false\"}\n >\n <div class=\"k2b-app-workspace__sidebar-desktop\">{desktop()?.children}</div>\n </aside>\n <Show when={resizable()}>\n <ResizeHandle\n kind=\"sidebar\"\n edge=\"end\"\n controls={domId}\n defaultSize={defaultSize()}\n minSize={minSize()}\n maxSize={maxSize()}\n shadow={props.resizeShadow !== false}\n />\n </Show>\n </>\n );\n}\n\nconst AppWorkspaceSidebarDesktop = (props: { children: JSX.Element }): JSX.Element =>\n ({ kind: SIDEBAR_DESKTOP, children: props.children }) as unknown as JSX.Element;\n// Document navigations rebuild the sidebar from the server, so this inline\n// script restores its offset while the document is still parsing: before the\n// first paint, before a view transition can snapshot it, and before any island\n// hydrates. Islands load asynchronously and server-only sidebars never mount,\n// so `onMount` would be too late or never run. The memory is one\n// `sessionStorage` entry per path segment and sidebar position and ends with\n// the tab. A stored offset is applied first; the current item is then kept in\n// view, which is a no-op when the offset already shows it. The frame callback\n// repeats the restore once the whole document is parsed, because content that\n// follows the sidebar can still change its height before the first paint.\nconst SIDEBAR_SCROLL_MEMORY_SCRIPT = [\n \"(function(){\",\n \"var body=document.currentScript&&document.currentScript.previousElementSibling;if(!body)return;\",\n \"var storage;try{storage=window.sessionStorage}catch(_){return}\",\n 'var key=\"k2b-sidebar-scroll:\"+location.pathname.split(\"/\")[1]+\":\"+document.querySelectorAll(\".k2b-app-workspace__sidebar-body\").length;',\n \"var restore=function(){\",\n \"var stored=storage.getItem(key);if(stored!==null)body.scrollTop=Number(stored);\",\n 'var current=body.querySelector(\\'[aria-current=\"page\"]\\');if(current)current.scrollIntoView({block:\"nearest\"});',\n \"};\",\n \"restore();requestAnimationFrame(restore);\",\n \"var frame=0;\",\n 'body.addEventListener(\"scroll\",function(){if(frame)return;frame=requestAnimationFrame(function(){frame=0;try{storage.setItem(key,String(body.scrollTop))}catch(_){}})},{passive:true});',\n \"})();\",\n].join(\"\");\n\nconst AppWorkspaceSidebarBody = (props: AppWorkspaceSidebarBodyProps) => {\n let body!: HTMLDivElement;\n createScrollFade(\n () => body,\n () => props.scrollFade !== false,\n );\n return (\n <>\n <div\n ref={body}\n class={`k2b-app-workspace__sidebar-body ${props.class ?? \"\"}`}\n data-scroll-fade-mode={props.scrollFade !== false ? \"both\" : undefined}\n {...scrollAttrs(props.scrollPreserveKey)}\n {...modeAttrs(props.sidebarMode)}\n >\n {props.children}\n </div>\n <script innerHTML={SIDEBAR_SCROLL_MEMORY_SCRIPT} />\n </>\n );\n};\nconst AppWorkspaceSidebarFooter = (props: AppWorkspaceSidebarContentProps) => (\n <footer class={`k2b-app-workspace__sidebar-footer ${props.class ?? \"\"}`} {...modeAttrs(props.sidebarMode)}>\n {props.children}\n </footer>\n);\nconst AppWorkspaceSidebarSection = (props: AppWorkspaceSidebarSectionProps) => {\n const [expanded, setExpanded] = createSignal(props.defaultOpen ?? true);\n const open = () => !props.collapsible || (props.open ?? expanded());\n const id = `sidebar-section-${createUniqueId()}`;\n const title = () => (\n <>\n <Show when={props.icon}>\n <span aria-hidden=\"true\">\n <i class={iconClass(props.icon)} />\n </span>\n </Show>\n {props.title}\n <Show when={props.count !== undefined}>\n <span class=\"k2b-app-workspace__sidebar-section-count\">{props.count}</span>\n </Show>\n </>\n );\n return (\n <section\n class={`k2b-app-workspace__sidebar-section ${props.class ?? \"\"}`}\n data-collapsible={props.collapsible ? \"true\" : undefined}\n {...modeAttrs(props.sidebarMode)}\n >\n <Show when={props.title || props.actions}>\n <header class=\"k2b-app-workspace__sidebar-section-header\">\n <Show\n when={props.collapsible}\n fallback={\n <Show when={props.title}>\n <h2>{title()}</h2>\n </Show>\n }\n >\n <button\n type=\"button\"\n class=\"k2b-app-workspace__sidebar-section-toggle\"\n aria-expanded={open()}\n aria-controls={id}\n onClick={() => {\n const next = !open();\n setExpanded(next);\n props.onOpenChange?.(next);\n }}\n >\n {title()}\n <i class={open() ? \"ti ti-chevron-down\" : \"ti ti-chevron-right\"} aria-hidden=\"true\" />\n </button>\n </Show>\n <Show when={props.actions}>\n <div class=\"k2b-app-workspace__sidebar-section-actions\">{props.actions}</div>\n </Show>\n </header>\n </Show>\n <div id={id} hidden={!open()} class=\"k2b-app-workspace__sidebar-section-content\">\n {props.children}\n </div>\n </section>\n );\n};\n\nconst AppWorkspaceSidebarItemIcon = (props: AppWorkspaceSidebarItemIconProps): JSX.Element =>\n mergeProps({ kind: SIDEBAR_ITEM_ICON }, props) as unknown as JSX.Element;\nconst AppWorkspaceSidebarItemLabel = (props: AppWorkspaceSidebarItemLabelProps): JSX.Element =>\n mergeProps({ kind: SIDEBAR_ITEM_LABEL }, props) as unknown as JSX.Element;\nconst AppWorkspaceSidebarItemMeta = (props: AppWorkspaceSidebarItemMetaProps): JSX.Element =>\n mergeProps({ kind: SIDEBAR_ITEM_META }, props) as unknown as JSX.Element;\nconst AppWorkspaceSidebarItemAction = (props: AppWorkspaceSidebarItemActionProps): JSX.Element =>\n mergeProps({ kind: SIDEBAR_ITEM_ACTION }, props) as unknown as JSX.Element;\nconst AppWorkspaceSidebarItemActions = (props: AppWorkspaceSidebarItemActionsProps): JSX.Element => (\n <div class=\"k2b-app-workspace__sidebar-item-actions\" data-visibility={props.visibility === \"hover\" ? \"hover\" : undefined}>\n {props.children}\n </div>\n);\n\ntype AppWorkspaceSidebarRowProps = {\n children: JSX.Element;\n actions?: JSX.Element;\n hasActions: boolean;\n href?: string;\n navigation?: \"enhanced\" | \"document\";\n replace?: boolean;\n scroll?: NavigationScrollMode;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n onClick?: (event: MouseEvent) => void;\n active?: boolean;\n activeClass?: string;\n disabled?: boolean;\n tone?: AppWorkspaceSidebarItemTone;\n title?: string;\n viewTransitionName?: string;\n class?: string;\n depth?: number;\n tabIndex?: number;\n data?: Record<string, string | number | boolean | null | undefined>;\n};\n\n/** Shared visual and semantic row frame for flat sidebar items and tree items. */\nfunction AppWorkspaceSidebarRow(props: AppWorkspaceSidebarRowProps): JSX.Element {\n const className = () =>\n `k2b-app-workspace__sidebar-item ${props.hasActions ? \"has-action\" : \"\"} ${props.active ? (props.activeClass ?? \"is-active\") : \"\"} ${props.class ?? \"\"}`;\n const data = () =>\n Object.fromEntries(\n Object.entries(props.data ?? {})\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => [`data-${key}`, String(value)]),\n );\n const common = () => ({\n class: className(),\n title: props.title,\n \"data-tone\": props.tone,\n style: {\n \"view-transition-name\": props.viewTransitionName,\n \"--k2b-sidebar-item-depth\": props.depth === undefined ? undefined : String(Math.max(0, props.depth)),\n },\n ...data(),\n });\n const current = () => (props.active ? (\"page\" as const) : undefined);\n\n const Control = (control: { grouped: boolean }) => {\n const attrs = () => (control.grouped ? { class: \"k2b-app-workspace__sidebar-item-main\" } : common());\n return (\n <Show\n when={Boolean(props.href && !props.disabled)}\n fallback={\n <button type=\"button\" {...attrs()} tabIndex={props.tabIndex} disabled={props.disabled} onClick={props.onClick}>\n {props.children}\n </button>\n }\n >\n <Show\n when={props.navigation === \"enhanced\" && Boolean(props.onNavigate)}\n fallback={\n <a href={props.href} {...attrs()} tabIndex={props.tabIndex} aria-current={current()} onClick={props.onClick}>\n {props.children}\n </a>\n }\n >\n <Link\n href={props.href!}\n {...attrs()}\n tabIndex={props.tabIndex}\n aria-current={current()}\n replace={props.replace}\n scroll={props.scroll}\n onNavigate={props.onNavigate}\n onClick={props.onClick}\n >\n {props.children}\n </Link>\n </Show>\n </Show>\n );\n };\n return (\n <Show when={props.hasActions} fallback={<Control grouped={false} />}>\n <div {...common()} data-disabled={props.disabled ? \"true\" : undefined}>\n <Control grouped />\n {props.actions}\n </div>\n </Show>\n );\n}\n\nfunction AppWorkspaceSidebarItem(props: AppWorkspaceSidebarItemProps): JSX.Element {\n const messages = useUiMessages();\n const resolved = children(() => props.children);\n const resolvedActions = children(() => props.actions);\n const values = createMemo(() => flatten(resolved()));\n const slots = createMemo(() => values().filter(sidebarItemSlot));\n const iconSlot = createMemo(\n () =>\n slots().find((slot) => slot.kind === SIDEBAR_ITEM_ICON) as\n | (AppWorkspaceSidebarItemIconProps & { kind: typeof SIDEBAR_ITEM_ICON })\n | undefined,\n );\n const labelSlot = createMemo(\n () =>\n slots().find((slot) => slot.kind === SIDEBAR_ITEM_LABEL) as\n | (AppWorkspaceSidebarItemLabelProps & { kind: typeof SIDEBAR_ITEM_LABEL })\n | undefined,\n );\n const metaSlot = createMemo(\n () =>\n slots().find((slot) => slot.kind === SIDEBAR_ITEM_META) as\n | (AppWorkspaceSidebarItemMetaProps & { kind: typeof SIDEBAR_ITEM_META })\n | undefined,\n );\n const actionSlot = createMemo(\n () =>\n slots().find((slot) => slot.kind === SIDEBAR_ITEM_ACTION) as\n | (AppWorkspaceSidebarItemActionProps & { kind: typeof SIDEBAR_ITEM_ACTION })\n | undefined,\n );\n const legacy = createMemo(() => values().filter((value) => !sidebarItemSlot(value)));\n const label = () => labelSlot()?.children ?? (legacy().length === 1 ? legacy()[0] : legacy());\n const icon = () => iconSlot()?.icon ?? props.icon;\n const iconContent = () => iconSlot()?.children;\n const meta = () => metaSlot()?.children ?? props.meta;\n const metaVisibility = () => metaSlot()?.visibility ?? props.metaVisibility;\n const customActions = () => resolvedActions();\n const hasCustomActions = () => Boolean(customActions());\n const hasAction = () => Boolean(actionSlot() || props.actionIcon || hasCustomActions() || props.preview);\n const mainContent = (\n <>\n <Show when={iconContent() || icon()}>\n <span class=\"k2b-app-workspace__sidebar-item-icon\" aria-hidden=\"true\">\n {iconContent() ?? <i class={iconClass(icon())} />}\n </span>\n </Show>\n {/* The inner text span is what the marquee translates; the controller\n measures its `scrollWidth` against the clipping outer span. */}\n <span class=\"k2b-app-workspace__sidebar-item-copy\">\n <Show when={props.context || props.contextMeta}>\n <span class=\"k2b-app-workspace__sidebar-item-context\">\n <span class=\"k2b-app-workspace__sidebar-item-context-label\">{props.context}</span>\n <Show when={props.contextMeta}>\n <span class=\"k2b-app-workspace__sidebar-item-context-meta\">{props.contextMeta}</span>\n </Show>\n </span>\n </Show>\n <span\n class=\"k2b-app-workspace__sidebar-item-label\"\n data-marquee={(labelSlot()?.marquee ?? (props.variant ?? \"row\") === \"row\") ? \"true\" : \"false\"}\n >\n <span class=\"k2b-app-workspace__sidebar-item-label-text\">{label() as JSX.Element}</span>\n </span>\n <Show when={props.description}>\n <span class=\"k2b-app-workspace__sidebar-item-description\">{props.description}</span>\n </Show>\n </span>\n <Show when={meta()}>\n {(value) => (\n <span class=\"k2b-app-workspace__sidebar-item-meta\" data-visibility={metaVisibility() === \"hover\" ? \"hover\" : undefined}>\n {value()}\n </span>\n )}\n </Show>\n </>\n );\n const singleAction = () => {\n const label = () => actionSlot()?.label ?? props.actionLabel ?? messages().rowAction;\n const select = (event: MouseEvent) => {\n event.stopPropagation();\n if (actionSlot()?.disabled) {\n event.preventDefault();\n return;\n }\n if (!actionSlot()?.href) event.preventDefault();\n actionSlot()?.onSelect?.(event);\n props.onActionClick?.(event);\n };\n const content = () => actionSlot()?.children ?? <i class={iconClass(actionSlot()?.icon ?? props.actionIcon, \"ti-dots\")} />;\n return (\n <Show when={Boolean(actionSlot() || props.actionIcon)}>\n <Show\n when={actionSlot()?.href && !actionSlot()?.disabled}\n fallback={\n <button\n type=\"button\"\n class=\"k2b-app-workspace__sidebar-item-action\"\n disabled={actionSlot()?.disabled}\n data-visibility={actionSlot()?.visibility === \"hover\" ? \"hover\" : undefined}\n aria-label={label()}\n onClick={select}\n >\n {content()}\n </button>\n }\n >\n <a\n href={actionSlot()?.href}\n class=\"k2b-app-workspace__sidebar-item-action\"\n data-visibility={actionSlot()?.visibility === \"hover\" ? \"hover\" : undefined}\n aria-label={label()}\n onClick={select}\n >\n {content()}\n </a>\n </Show>\n </Show>\n );\n };\n const actions = () => (\n <>\n {customActions()}\n {singleAction()}\n <Show when={props.preview}>\n {(preview) => (\n <SidebarItemPreview\n label={preview().label}\n trigger={preview().trigger}\n align={preview().align}\n viewportSize={preview().viewportSize}\n onOpenChange={preview().onOpenChange}\n >\n {preview().content}\n </SidebarItemPreview>\n )}\n </Show>\n </>\n );\n return (\n <AppWorkspaceSidebarRow\n hasActions={hasAction()}\n href={props.href}\n navigation={props.navigation}\n replace={props.replace}\n scroll={props.scroll}\n onNavigate={props.onNavigate}\n onClick={props.onClick}\n active={props.active}\n activeClass={props.activeClass}\n disabled={props.disabled}\n tone={props.tone}\n title={props.title}\n viewTransitionName={props.viewTransitionName}\n class={props.class}\n depth={props.depth}\n actions={actions()}\n data={{\n ...props.data,\n ...modeData(props.sidebarMode),\n variant: props.variant ?? \"row\",\n \"has-actions\": hasCustomActions() ? \"true\" : undefined,\n \"action-visibility\": actionSlot()?.visibility === \"hover\" ? \"hover\" : undefined,\n }}\n >\n {mainContent}\n </AppWorkspaceSidebarRow>\n );\n}\n\nconst navTreeItems = (value: unknown): NavTreeItemSlot[] => flatten(value).filter(navTreeItemSlot);\n\nconst AppWorkspaceNavTreeItem = (props: AppWorkspaceNavTreeItemProps): JSX.Element =>\n ({ kind: NAV_TREE_ITEM, ...props }) as unknown as JSX.Element;\n\nconst AppWorkspaceNavTree = ((props: AppWorkspaceNavTreeProps) => {\n let root: HTMLDivElement | undefined;\n const resolved = children(() => props.children);\n const roots = createMemo(() => navTreeItems(resolved()));\n const [uncontrolledExpandedIds, setUncontrolledExpandedIds] = createSignal<string[]>([...new Set(props.defaultExpandedIds ?? [])]);\n const [focusedId, setFocusedId] = createSignal<string | null>(props.selectedId ?? null);\n const expandedIds = createMemo(() => new Set(props.expandedIds ?? uncontrolledExpandedIds()));\n const isExpanded = (id: string) => expandedIds().has(id);\n\n const setExpanded = (id: string, expanded: boolean) => {\n const next = new Set(expandedIds());\n if (expanded) next.add(id);\n else next.delete(id);\n const value = [...next];\n if (props.expandedIds === undefined) setUncontrolledExpandedIds(value);\n props.onExpandedIdsChange?.(value);\n };\n\n const visibleIds = createMemo(() => {\n const result: string[] = [];\n const visit = (items: readonly NavTreeItemSlot[]) => {\n for (const item of items) {\n if (item.disabled) continue;\n result.push(item.id);\n const nested = navTreeItems(item.children);\n if (nested.length > 0 && isExpanded(item.id)) visit(nested);\n }\n };\n visit(roots());\n return result;\n });\n\n const tabStopId = () => {\n const visible = visibleIds();\n const focused = focusedId();\n if (focused && visible.includes(focused)) return focused;\n if (props.selectedId && visible.includes(props.selectedId)) return props.selectedId;\n return visible[0] ?? null;\n };\n\n const treeItemElements = () =>\n Array.from(root?.querySelectorAll<HTMLElement>(\"[data-k2b-nav-tree-id]\") ?? []).filter(\n (element) => element.getAttribute(\"aria-disabled\") !== \"true\",\n );\n const focusItem = (id: string | null) => {\n if (!id) return;\n const element = treeItemElements().find((candidate) => candidate.dataset.k2bNavTreeId === id);\n element?.focus({ preventScroll: true });\n };\n\n // Items arrive through an accessor so a changed nested list reconciles rows by identity instead of rebuilding the list.\n const renderItems = (value: () => unknown, depth: number, parentId?: string): JSX.Element => (\n <For each={navTreeItems(value())}>\n {(item) => {\n const nested = createMemo(() => navTreeItems(item.children));\n const hasChildren = () => nested().length > 0;\n const selected = () => props.selectedId === item.id;\n let treeItem: HTMLDivElement | undefined;\n\n const activate = (event: MouseEvent) => {\n if (item.disabled) return;\n treeItem?.focus({ preventScroll: true });\n setFocusedId(item.id);\n if (hasChildren() && !item.href && !item.onSelect && !props.onSelectedIdChange) {\n setExpanded(item.id, !isExpanded(item.id));\n return;\n }\n props.onSelectedIdChange?.(item.id);\n item.onSelect?.(event);\n };\n const toggle = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (!item.disabled && hasChildren()) setExpanded(item.id, !isExpanded(item.id));\n };\n const onRowClick = (event: MouseEvent) => {\n if ((event.target as Element | null)?.closest(\"[data-k2b-nav-tree-toggle]\")) {\n toggle(event);\n return;\n }\n activate(event);\n };\n const rowControl = () => {\n const firstChild = treeItem?.firstElementChild as HTMLElement | null | undefined;\n if (!firstChild?.classList.contains(\"has-action\")) return firstChild;\n return firstChild.firstElementChild as HTMLElement | null;\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.target !== event.currentTarget) return;\n if (event.altKey || event.ctrlKey || event.metaKey) return;\n const items = treeItemElements();\n const index = items.indexOf(event.currentTarget as HTMLElement);\n if (event.key === \"ArrowDown\" && index >= 0) {\n event.preventDefault();\n items[Math.min(items.length - 1, index + 1)]?.focus({ preventScroll: true });\n return;\n }\n if (event.key === \"ArrowUp\" && index >= 0) {\n event.preventDefault();\n items[Math.max(0, index - 1)]?.focus({ preventScroll: true });\n return;\n }\n if (event.key === \"Home\") {\n event.preventDefault();\n items[0]?.focus({ preventScroll: true });\n return;\n }\n if (event.key === \"End\") {\n event.preventDefault();\n items.at(-1)?.focus({ preventScroll: true });\n return;\n }\n if (event.key === \"ArrowRight\" && hasChildren()) {\n event.preventDefault();\n if (!isExpanded(item.id)) setExpanded(item.id, true);\n else queueMicrotask(() => focusItem(nested()[0]?.id ?? null));\n return;\n }\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n if (hasChildren() && isExpanded(item.id)) setExpanded(item.id, false);\n else focusItem(parentId ?? null);\n return;\n }\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n rowControl()?.click();\n }\n };\n const usesIconDisclosure = () => hasChildren() && Boolean(item.icon && item.expandedIcon);\n const rowIcon = () => (usesIconDisclosure() && isExpanded(item.id) ? item.expandedIcon : item.icon);\n const rowContent = (\n <>\n <Show when={rowIcon()}>\n <span\n class=\"k2b-app-workspace__sidebar-item-icon\"\n data-k2b-nav-tree-toggle={usesIconDisclosure() ? \"\" : undefined}\n aria-hidden=\"true\"\n >\n <i class={iconClass(rowIcon())} />\n </span>\n </Show>\n <span class=\"k2b-app-workspace__sidebar-item-label\">\n <span class=\"k2b-app-workspace__sidebar-item-label-text\">{item.label}</span>\n </span>\n <Show when={item.meta !== undefined}>\n <span\n class={`k2b-app-workspace__sidebar-item-meta ${hasChildren() ? \"\" : \"k2b-app-workspace__nav-tree-leaf-meta\"}`}\n data-visibility={item.metaVisibility === \"hover\" ? \"hover\" : undefined}\n >\n {item.meta}\n </span>\n </Show>\n <Show when={hasChildren() && !usesIconDisclosure()}>\n <span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\">\n <i class={`ti ${isExpanded(item.id) ? \"ti-chevron-down\" : \"ti-chevron-right\"}`} />\n </span>\n </Show>\n </>\n );\n const row = () => (\n <AppWorkspaceSidebarRow\n hasActions={Boolean(item.actions)}\n href={item.href}\n navigation={item.navigation}\n replace={item.replace}\n scroll={item.scroll}\n onNavigate={item.onNavigate}\n onClick={onRowClick}\n active={selected()}\n disabled={item.disabled}\n tone={item.tone}\n title={item.title}\n viewTransitionName={item.viewTransitionName}\n class={`k2b-app-workspace__nav-tree-row ${item.class ?? \"\"}`}\n depth={props.indented === false ? 0 : depth}\n tabIndex={-1}\n actions={item.actions}\n data={{ \"has-actions\": item.actions ? \"true\" : undefined }}\n >\n {rowContent}\n </AppWorkspaceSidebarRow>\n );\n\n return (\n <div\n ref={treeItem}\n class=\"k2b-app-workspace__nav-tree-node\"\n role=\"treeitem\"\n aria-level={depth + 1}\n aria-selected={selected()}\n aria-expanded={hasChildren() ? isExpanded(item.id) : undefined}\n aria-disabled={item.disabled ? \"true\" : undefined}\n tabIndex={item.disabled ? -1 : tabStopId() === item.id ? 0 : -1}\n data-k2b-nav-tree-id={item.id}\n data-k2b-nav-tree-parent-id={parentId}\n onFocus={() => setFocusedId(item.id)}\n onKeyDown={onKeyDown}\n onDragEnter={item.onDragEnter}\n onDragOver={item.onDragOver}\n onDragLeave={item.onDragLeave}\n onDrop={item.onDrop}\n >\n {row()}\n <Show when={hasChildren() && isExpanded(item.id)}>\n <div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">\n {renderItems(nested, depth + 1, item.id)}\n </div>\n </Show>\n </div>\n );\n }}\n </For>\n );\n\n return (\n <div ref={root} class={`k2b-app-workspace__nav-tree ${props.class ?? \"\"}`} role=\"tree\" aria-label={props.ariaLabel}>\n {renderItems(roots, 0)}\n </div>\n );\n}) as AppWorkspaceNavTreeComponent;\n\nAppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;\n\nconst AppWorkspaceSidebarIconGrid = (props: AppWorkspaceSidebarIconGridProps) => (\n <section class={`k2b-app-workspace__sidebar-icon-grid-wrap ${props.class ?? \"\"}`} {...modeAttrs(props.sidebarMode)}>\n <Show when={props.title}>{(title) => <h2>{title()}</h2>}</Show>\n <div class=\"k2b-app-workspace__sidebar-icon-grid\" data-columns={props.columns ?? 2}>\n {props.children}\n </div>\n </section>\n);\n\nconst AppWorkspaceSidebarIconAction = (props: AppWorkspaceSidebarIconActionProps) => {\n const content = <i class={iconClass(props.icon)} aria-hidden=\"true\" />;\n const attrs = () => ({\n class: `k2b-app-workspace__sidebar-icon-action ${props.active ? \"is-active\" : \"\"}`,\n title: props.label,\n \"aria-label\": props.label,\n \"data-tone\": props.tone,\n style: { \"view-transition-name\": props.viewTransitionName },\n ...modeAttrs(props.sidebarMode),\n });\n if (!props.href || props.disabled)\n return (\n <button type=\"button\" {...attrs()} disabled={props.disabled} onClick={props.onClick}>\n {content}\n </button>\n );\n if (props.navigation !== \"enhanced\" || !props.onNavigate)\n return (\n <a href={props.href} {...attrs()} onClick={props.onClick}>\n {content}\n </a>\n );\n return (\n <Link\n href={props.href}\n {...attrs()}\n replace={props.replace}\n scroll={props.scroll}\n onNavigate={props.onNavigate}\n onClick={props.onClick}\n >\n {content}\n </Link>\n );\n};\n\ntype AppWorkspaceComponent = ((props: AppWorkspaceProps) => JSX.Element) & {\n LayoutStateProvider: (props: AppWorkspaceLayoutStateProviderProps) => JSX.Element;\n Content: (props: AppWorkspaceContentProps) => JSX.Element;\n Main: (props: AppWorkspaceMainProps) => JSX.Element;\n MainPane: (props: AppWorkspaceMainPaneProps) => JSX.Element;\n Detail: (props: AppWorkspaceDetailProps) => JSX.Element;\n BottomDrawer: (props: AppWorkspaceBottomDrawerProps) => JSX.Element;\n Sidebar: (props: AppWorkspaceSidebarProps) => JSX.Element;\n SidebarDesktop: (props: { children: JSX.Element }) => JSX.Element;\n SidebarSection: (props: AppWorkspaceSidebarSectionProps) => JSX.Element;\n SidebarBody: (props: AppWorkspaceSidebarBodyProps) => JSX.Element;\n SidebarFooter: (props: AppWorkspaceSidebarContentProps) => JSX.Element;\n SidebarItem: (props: AppWorkspaceSidebarItemProps) => JSX.Element;\n SidebarItemIcon: (props: AppWorkspaceSidebarItemIconProps) => JSX.Element;\n SidebarItemLabel: (props: AppWorkspaceSidebarItemLabelProps) => JSX.Element;\n SidebarItemMeta: (props: AppWorkspaceSidebarItemMetaProps) => JSX.Element;\n SidebarItemAction: (props: AppWorkspaceSidebarItemActionProps) => JSX.Element;\n SidebarItemActions: (props: AppWorkspaceSidebarItemActionsProps) => JSX.Element;\n NavTree: AppWorkspaceNavTreeComponent;\n SidebarIconGrid: (props: AppWorkspaceSidebarIconGridProps) => JSX.Element;\n SidebarIconAction: (props: AppWorkspaceSidebarIconActionProps) => JSX.Element;\n};\n\nconst AppWorkspace = ((props: AppWorkspaceProps) => {\n let root: HTMLDivElement | undefined;\n const serverLayoutState = useContext(LayoutStateContext);\n const initialLayoutState = () => props.layoutState?.() ?? serverLayoutState;\n\n // The resize handles are inert markup until the controller is attached, so\n // the workspace attaches it itself and scopes it to this root. `onMount`\n // never runs during SSR, and the disposer removes every listener. A host\n // shell may own one document-level controller for SSR and hydrated roots;\n // its marker keeps controller ownership singular without app-level props.\n onMount(() => {\n if (props.controller === false || !root || root.closest(\"[data-k2b-app-workspace-controller]\")) return;\n onCleanup(\n installAppWorkspaceController({\n root,\n readState: () => (props.layoutState ? props.layoutState() : serverLayoutState),\n writeState: (state) => props.onLayoutChange?.(state),\n }),\n );\n });\n\n return (\n <ResizeContext.Provider value={props.resizable !== false}>\n <div\n ref={root}\n class={`k2b-app-workspace ${props.class ?? \"\"}`}\n data-k2b-app-workspace\n data-mobile-surface={props.mobileSurface}\n data-sidebar-collapsed={\n initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed)\n }\n data-workspace-resizable={props.resizable === false ? \"false\" : \"true\"}\n style={appWorkspaceLayoutStyle(initialLayoutState())}\n >\n {props.children}\n </div>\n </ResizeContext.Provider>\n );\n}) as AppWorkspaceComponent;\n\nAppWorkspace.LayoutStateProvider = (props) => (\n <LayoutStateContext.Provider value={props.state ?? null}>{props.children}</LayoutStateContext.Provider>\n);\nAppWorkspace.Content = (props) => <div class={`k2b-app-workspace__content ${props.class ?? \"\"}`}>{props.children}</div>;\nAppWorkspace.Main = AppWorkspaceMain;\nAppWorkspace.MainPane = AppWorkspaceMainPane;\nAppWorkspace.Detail = AppWorkspaceDetail;\nAppWorkspace.BottomDrawer = AppWorkspaceBottomDrawer;\nAppWorkspace.Sidebar = AppWorkspaceSidebar;\nAppWorkspace.SidebarDesktop = AppWorkspaceSidebarDesktop;\nAppWorkspace.SidebarSection = AppWorkspaceSidebarSection;\nAppWorkspace.SidebarBody = AppWorkspaceSidebarBody;\nAppWorkspace.SidebarFooter = AppWorkspaceSidebarFooter;\nAppWorkspace.SidebarItem = AppWorkspaceSidebarItem;\nAppWorkspace.SidebarItemIcon = AppWorkspaceSidebarItemIcon;\nAppWorkspace.SidebarItemLabel = AppWorkspaceSidebarItemLabel;\nAppWorkspace.SidebarItemMeta = AppWorkspaceSidebarItemMeta;\nAppWorkspace.SidebarItemAction = AppWorkspaceSidebarItemAction;\nAppWorkspace.SidebarItemActions = AppWorkspaceSidebarItemActions;\nAppWorkspace.NavTree = AppWorkspaceNavTree;\nAppWorkspace.SidebarIconGrid = AppWorkspaceSidebarIconGrid;\nAppWorkspace.SidebarIconAction = AppWorkspaceSidebarIconAction;\n\nexport default AppWorkspace;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/AppWorkspace.tsx"],"sourcesContent":["import { Link, type LinkNavigateEvent, type NavigationScrollMode } from \"@k2b/ssr/nav\";\nimport {\n children,\n createContext,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n useContext,\n} from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { APP_WORKSPACE_SIDEBAR_HIDE_EVENT, installAppWorkspaceController } from \"./app-workspace-controller\";\nimport {\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_PANE_DEFAULT,\n APP_WORKSPACE_PANE_MAX,\n APP_WORKSPACE_PANE_MIN,\n APP_WORKSPACE_SIDEBAR_COLLAPSED,\n APP_WORKSPACE_SIDEBAR_DEFAULT,\n APP_WORKSPACE_SIDEBAR_MAX,\n APP_WORKSPACE_SIDEBAR_MIN,\n type AppWorkspaceLayoutState,\n appWorkspaceLayoutStyle,\n appWorkspacePanelVariable,\n} from \"./app-workspace-state\";\nimport type { ScrollAreaProps } from \"./ScrollArea\";\nimport { SidebarItemPreview } from \"./SidebarItemPreview\";\nimport { createScrollFade } from \"./scroll-fade\";\nimport { assertStableUiId, assertUniqueStableUiIds } from \"./stable-id\";\n\nconst ResizeContext = createContext(true);\nconst LayoutStateContext = createContext<AppWorkspaceLayoutState | null>(null);\nconst MAIN_PANE = Symbol(\"AppWorkspace.MainPane\");\nconst SIDEBAR_DESKTOP = Symbol(\"AppWorkspace.SidebarDesktop\");\nconst SIDEBAR_ITEM_ICON = Symbol(\"AppWorkspace.SidebarItemIcon\");\nconst SIDEBAR_ITEM_LABEL = Symbol(\"AppWorkspace.SidebarItemLabel\");\nconst SIDEBAR_ITEM_META = Symbol(\"AppWorkspace.SidebarItemMeta\");\nconst SIDEBAR_ITEM_ACTION = Symbol(\"AppWorkspace.SidebarItemAction\");\nconst NAV_TREE_ITEM = Symbol(\"AppWorkspace.NavTree.Item\");\n\ntype MainPaneSlot = {\n kind: typeof MAIN_PANE;\n props: AppWorkspaceMainPaneProps;\n domId: string;\n};\ntype SidebarChildSlot = { kind: typeof SIDEBAR_DESKTOP; children: JSX.Element };\ntype SidebarItemSlot =\n | (AppWorkspaceSidebarItemIconProps & { kind: typeof SIDEBAR_ITEM_ICON })\n | (AppWorkspaceSidebarItemLabelProps & { kind: typeof SIDEBAR_ITEM_LABEL })\n | (AppWorkspaceSidebarItemMetaProps & { kind: typeof SIDEBAR_ITEM_META })\n | (AppWorkspaceSidebarItemActionProps & { kind: typeof SIDEBAR_ITEM_ACTION });\ntype NavTreeItemSlot = AppWorkspaceNavTreeItemProps & { kind: typeof NAV_TREE_ITEM };\n\nconst flatten = (value: unknown): unknown[] => {\n // Solid control-flow components such as <For> expose their rendered value\n // through an accessor. Compound slots may therefore be nested behind a\n // function even after `children()` resolves the outer collection.\n if (typeof value === \"function\") return flatten(value());\n if (Array.isArray(value)) return value.flatMap(flatten);\n return value === null || value === undefined || typeof value === \"boolean\" ? [] : [value];\n};\nconst mainPaneSlot = (value: unknown): value is MainPaneSlot =>\n Boolean(value && typeof value === \"object\" && \"kind\" in value && (value as MainPaneSlot).kind === MAIN_PANE);\nconst sidebarChildSlot = (value: unknown): value is SidebarChildSlot =>\n Boolean(value && typeof value === \"object\" && \"kind\" in value && (value as SidebarChildSlot).kind === SIDEBAR_DESKTOP);\nconst sidebarItemSlot = (value: unknown): value is SidebarItemSlot =>\n Boolean(\n value &&\n typeof value === \"object\" &&\n \"kind\" in value &&\n [SIDEBAR_ITEM_ICON, SIDEBAR_ITEM_LABEL, SIDEBAR_ITEM_META, SIDEBAR_ITEM_ACTION].includes((value as SidebarItemSlot).kind),\n );\nconst navTreeItemSlot = (value: unknown): value is NavTreeItemSlot =>\n Boolean(value && typeof value === \"object\" && \"kind\" in value && (value as NavTreeItemSlot).kind === NAV_TREE_ITEM);\n\ntype ResizeHandleProps = {\n kind: \"sidebar\" | \"pane\" | \"detail\" | \"drawer\";\n edge: \"start\" | \"end\";\n controls?: string;\n panelId?: string;\n defaultSize: number;\n minSize: number;\n maxSize: number;\n shadow?: boolean;\n label?: string;\n style?: JSX.CSSProperties;\n};\n\nfunction ResizeHandle(props: ResizeHandleProps): JSX.Element {\n return (\n <button\n type=\"button\"\n class=\"k2b-app-workspace__resize\"\n role=\"separator\"\n aria-label={\n props.label ??\n (props.kind === \"sidebar\"\n ? \"Resize navigation\"\n : props.kind === \"pane\"\n ? \"Resize workspace pane\"\n : props.kind === \"detail\"\n ? \"Resize detail panel\"\n : \"Resize bottom drawer\")\n }\n aria-controls={props.controls}\n aria-orientation={props.kind === \"drawer\" ? \"horizontal\" : \"vertical\"}\n aria-valuemin={props.minSize}\n aria-valuemax={props.maxSize}\n aria-valuenow={props.defaultSize}\n data-app-workspace-resize={props.kind}\n data-workspace-panel-id={props.panelId}\n data-workspace-resize-edge={props.edge}\n data-workspace-resize-shadow={props.shadow ? \"true\" : undefined}\n data-workspace-default-size={props.defaultSize}\n data-workspace-min-size={props.minSize}\n data-workspace-max-size={props.maxSize}\n style={props.style}\n >\n <span aria-hidden=\"true\" />\n </button>\n );\n}\n\nexport type AppWorkspaceProps = {\n children: JSX.Element;\n class?: string;\n /** A host with its own mobile chrome can use the full canvas below 1024px. */\n mobileSurface?: \"contained\" | \"flush\";\n resizable?: boolean;\n /**\n * Restores a persisted layout when the workspace mounts. Persistence itself\n * stays app-owned — the package reads and writes nothing on its own — but\n * the resize handles work without it.\n */\n layoutState?: () => AppWorkspaceLayoutState | null | undefined;\n /** Called with the full layout whenever a resize settles. Persist it here. */\n onLayoutChange?: (state: AppWorkspaceLayoutState) => void;\n /**\n * Opt out of the built-in controller. Only needed when the application calls\n * `installAppWorkspaceController` itself — installing twice would double up\n * every listener.\n */\n controller?: false;\n};\nexport type AppWorkspaceLayoutStateProviderProps = {\n children: JSX.Element;\n state: AppWorkspaceLayoutState | null | undefined;\n};\nexport type AppWorkspaceContentProps = { children: JSX.Element; class?: string };\nexport type AppWorkspaceMainProps = {\n children: JSX.Element;\n class?: string;\n /** `\"content\"` centers the children as one reading column with the shared page width on large screens. */\n width?: \"full\" | \"content\";\n mobilePane?: string;\n scroll?: boolean;\n scrollFade?: boolean;\n scrollPreserveKey?: string | false;\n \"aria-busy\"?: boolean | \"true\" | \"false\";\n};\nexport type AppWorkspaceMainPaneProps = {\n id: string;\n label: string;\n surface?: \"default\" | \"navigation\";\n open?: boolean;\n resizable?: boolean;\n resizeShadow?: boolean;\n defaultSize?: number;\n minSize?: number;\n maxSize?: number;\n class?: string;\n scroll?: boolean;\n scrollFade?: boolean;\n children: JSX.Element;\n};\nexport type AppWorkspaceDetailWidth = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type AppWorkspaceDetailProps = {\n children: JSX.Element;\n open: boolean;\n id: string;\n class?: string;\n width?: AppWorkspaceDetailWidth;\n viewTransitionName?: string;\n resizable?: boolean;\n minWidth?: number;\n maxWidth?: number;\n};\nexport type AppWorkspaceBottomDrawerHeight = \"sm\" | \"md\" | \"lg\";\nexport type AppWorkspaceBottomDrawerProps = {\n children: JSX.Element;\n open: boolean;\n id: string;\n class?: string;\n height?: AppWorkspaceBottomDrawerHeight;\n minHeight?: number;\n maxHeight?: number;\n viewTransitionName?: string;\n resizable?: boolean;\n};\nexport type AppWorkspaceSidebarProps = {\n /** Stable element id, for a toggle elsewhere that names the sidebar in `aria-controls`. */\n id?: string;\n label?: string;\n children: JSX.Element;\n class?: string;\n /**\n * Below the desktop breakpoint the sidebar is hidden and the host's mobile\n * navigation takes over. `\"stacked\"` keeps it as a block above the content\n * instead, for overviews whose sidebar is the primary object list.\n */\n mobile?: \"hidden\" | \"stacked\";\n resizable?: boolean;\n resizeShadow?: boolean;\n collapsible?: boolean;\n defaultSize?: number;\n minSize?: number;\n maxSize?: number;\n /**\n * Hides the desktop navigation completely: the sidebar renders none of its\n * children and no resize handle, and main panes with `surface=\"navigation\"`\n * hide with it. The state is application-owned, like a persisted layout.\n */\n hidden?: boolean;\n /**\n * Makes the sidebar hideable by dragging its resize handle below half its\n * minimum width. The controller then requests `true`; showing it again is\n * the application's control.\n */\n onHiddenChange?: (hidden: boolean) => void;\n};\nexport type AppWorkspaceSidebarVisibility = \"always\" | \"expanded\" | \"collapsed\";\nexport type AppWorkspaceSidebarAccessoryVisibility = \"always\" | \"hover\";\ntype AppWorkspaceSidebarContentProps = {\n children: JSX.Element;\n class?: string;\n scrollPreserveKey?: string | false;\n sidebarMode?: AppWorkspaceSidebarVisibility;\n};\nexport type AppWorkspaceSidebarBodyProps = AppWorkspaceSidebarContentProps & { scrollFade?: boolean };\nexport type AppWorkspaceSidebarSectionProps = AppWorkspaceSidebarContentProps & {\n title?: string;\n icon?: string;\n count?: number;\n collapsible?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n actions?: JSX.Element;\n};\nexport type AppWorkspaceSidebarItemTone = \"default\" | \"success\" | \"danger\";\nexport type AppWorkspaceSidebarIconActionTone = \"default\" | \"success\" | \"danger\";\nexport type AppWorkspaceSidebarItemProps = {\n children: JSX.Element;\n /**\n * Card rows add a quiet context header above the main label. Object rows\n * present one resource with a title, a description line, and stacked\n * trailing counts; use them for the objects an overview navigates into.\n */\n variant?: \"row\" | \"card\" | \"object\";\n context?: JSX.Element;\n contextMeta?: JSX.Element;\n /** Passive second line; keep controls in actions or preview. */\n description?: JSX.Element;\n /** Interactive details, also reachable through a dedicated button. */\n preview?: {\n label: string;\n content: JSX.Element | ((close: () => void) => JSX.Element);\n trigger?: \"action\" | \"row\";\n align?: \"center\" | \"end\";\n viewportSize?: ScrollAreaProps[\"viewportSize\"];\n onOpenChange?: (open: boolean) => void;\n };\n href?: string;\n /** Document navigation by default; opt into enhanced navigation only when the owning island applies the target state. */\n navigation?: \"enhanced\" | \"document\";\n replace?: boolean;\n scroll?: NavigationScrollMode;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n onClick?: (event: MouseEvent) => void;\n active?: boolean;\n activeClass?: string;\n disabled?: boolean;\n icon?: string;\n meta?: JSX.Element;\n metaVisibility?: AppWorkspaceSidebarAccessoryVisibility;\n actions?: JSX.Element;\n tone?: AppWorkspaceSidebarItemTone;\n title?: string;\n viewTransitionName?: string;\n class?: string;\n depth?: number;\n actionIcon?: string;\n actionLabel?: string;\n onActionClick?: (event: MouseEvent) => void;\n data?: Record<string, string | number | boolean | null | undefined>;\n sidebarMode?: AppWorkspaceSidebarVisibility;\n};\nexport type AppWorkspaceSidebarIconGridProps = AppWorkspaceSidebarContentProps & { title?: string; columns?: 2 | 3 };\nexport type AppWorkspaceSidebarIconActionProps = {\n href?: string | null;\n /** Document navigation by default; opt into enhanced navigation only when the owning island applies the target state. */\n navigation?: \"enhanced\" | \"document\";\n replace?: boolean;\n scroll?: NavigationScrollMode;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n icon: string;\n label: string;\n active?: boolean;\n disabled?: boolean;\n tone?: AppWorkspaceSidebarIconActionTone;\n viewTransitionName?: string;\n onClick?: (event: MouseEvent) => void;\n sidebarMode?: AppWorkspaceSidebarVisibility;\n};\nexport type AppWorkspaceSidebarItemIconProps = { icon?: string; children?: JSX.Element };\nexport type AppWorkspaceSidebarItemLabelProps = { children: JSX.Element; marquee?: boolean };\nexport type AppWorkspaceSidebarItemMetaProps = {\n children: JSX.Element;\n visibility?: AppWorkspaceSidebarAccessoryVisibility;\n};\nexport type AppWorkspaceSidebarItemActionProps = {\n icon?: string;\n label: string;\n disabled?: boolean;\n /** Hide the action on fine pointers until the row is hovered or keyboard-focused. */\n visibility?: AppWorkspaceSidebarAccessoryVisibility;\n href?: string;\n navigation?: \"enhanced\" | \"document\";\n onSelect?: (event: MouseEvent) => void;\n children?: JSX.Element;\n};\nexport type AppWorkspaceSidebarItemActionsProps = {\n children: JSX.Element;\n visibility?: AppWorkspaceSidebarAccessoryVisibility;\n};\nexport type AppWorkspaceNavTreeProps = {\n children: JSX.Element;\n ariaLabel: string;\n selectedId?: string | null;\n expandedIds?: readonly string[];\n defaultExpandedIds?: readonly string[];\n onSelectedIdChange?: (id: string) => void;\n onExpandedIdsChange?: (ids: readonly string[]) => void;\n indented?: boolean;\n class?: string;\n};\nexport type AppWorkspaceNavTreeItemProps = {\n id: string;\n label: JSX.Element;\n children?: JSX.Element;\n href?: string;\n /** Document navigation by default; opt into enhanced navigation only when the owning island applies the target state. */\n navigation?: \"enhanced\" | \"document\";\n replace?: boolean;\n scroll?: NavigationScrollMode;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n onSelect?: (event: MouseEvent) => void;\n disabled?: boolean;\n icon?: string;\n /** Replaces `icon` while this branch is expanded and makes the icon the disclosure target. */\n expandedIcon?: string;\n meta?: JSX.Element;\n metaVisibility?: AppWorkspaceSidebarAccessoryVisibility;\n actions?: JSX.Element;\n tone?: AppWorkspaceSidebarItemTone;\n title?: string;\n viewTransitionName?: string;\n class?: string;\n onDragEnter?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;\n onDragOver?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;\n onDragLeave?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;\n onDrop?: JSX.EventHandlerUnion<HTMLDivElement, DragEvent>;\n};\ntype AppWorkspaceNavTreeComponent = ((props: AppWorkspaceNavTreeProps) => JSX.Element) & {\n Item: (props: AppWorkspaceNavTreeItemProps) => JSX.Element;\n};\n\nconst modeAttrs = (mode?: AppWorkspaceSidebarVisibility) => (mode && mode !== \"always\" ? { \"data-sidebar-mode\": mode } : {});\n/** Same rule as `modeAttrs`, for the un-prefixed `data` bag on sidebar items. */\nconst modeData = (mode?: AppWorkspaceSidebarVisibility) => (mode && mode !== \"always\" ? { \"sidebar-mode\": mode } : {});\nconst scrollAttrs = (key?: string | false) => (key ? { \"data-scroll-preserve\": key } : {});\nconst iconClass = (icon: string | undefined, fallback = \"ti-circle\") => (icon?.startsWith(\"ti \") ? icon : `ti ${icon || fallback}`);\n\nfunction AppWorkspaceMainPane(props: AppWorkspaceMainPaneProps): JSX.Element {\n return {\n kind: MAIN_PANE,\n props,\n domId: `k2b-workspace-pane-${createUniqueId()}`,\n } satisfies MainPaneSlot as unknown as JSX.Element;\n}\n\nfunction AppWorkspaceMain(props: AppWorkspaceMainProps): JSX.Element {\n const rootResizable = useContext(ResizeContext);\n const resolved = children(() => props.children);\n const values = createMemo(() => flatten(resolved()));\n const paneIds = createMemo(() => {\n const ids = values()\n .filter(mainPaneSlot)\n .map((slot) => slot.props.id);\n assertUniqueStableUiIds(ids, \"AppWorkspace.MainPane id\");\n return ids;\n });\n const regions = createMemo(() => {\n const all = values();\n const primary = all.filter((value) => !mainPaneSlot(value));\n const primaryIndex = all.findIndex((value) => !mainPaneSlot(value));\n let inserted = false;\n const result: Array<{ type: \"primary\"; index: number; children: unknown[] } | { type: \"pane\"; index: number; slot: MainPaneSlot }> = [];\n all.forEach((value, index) => {\n if (mainPaneSlot(value)) {\n result.push({ type: \"pane\", index, slot: value });\n } else if (!inserted) {\n inserted = true;\n result.push({ type: \"primary\", index: primaryIndex, children: primary });\n }\n });\n return result;\n });\n const anchorRegion = createMemo(\n () =>\n regions().find((candidate) => candidate.type === \"primary\") ??\n regions().find((candidate) => candidate.type === \"pane\" && candidate.slot.props.open !== false),\n );\n // Presence of a MainPane slot — not of an *open* one — decides the split\n // layout. Deriving it from `regions()` made a workspace whose panes are all\n // closed fall back to `resolved()`, which renders the raw slot objects.\n const hasPanes = createMemo(() => paneIds().length > 0);\n\n return (\n <div\n class={`k2b-app-workspace__main ${hasPanes() ? \"has-panes\" : \"\"} ${props.class ?? \"\"}`}\n data-mobile-pane={props.mobilePane}\n data-width={props.width === \"content\" ? \"content\" : undefined}\n data-scroll-fade-mode={!hasPanes() && props.scroll !== false && props.scrollFade !== false ? \"both\" : undefined}\n data-scroll={props.scroll === false ? \"false\" : undefined}\n aria-busy={props[\"aria-busy\"]}\n {...scrollAttrs(props.scrollPreserveKey)}\n >\n <Show when={hasPanes()} fallback={resolved() as JSX.Element}>\n <For each={regions()}>\n {(region) => {\n const activeMobilePane = () => {\n const anchor = anchorRegion();\n return props.mobilePane ?? (anchor?.type === \"pane\" ? anchor.slot.props.id : \"main\");\n };\n if (region.type === \"primary\") {\n return (\n <div\n class=\"k2b-app-workspace__main-primary\"\n data-workspace-main-region=\"main\"\n data-workspace-mobile-active={activeMobilePane() === \"main\" ? \"true\" : \"false\"}\n >\n {region.children as JSX.Element}\n </div>\n );\n }\n const pane = region.slot;\n const panelId = assertStableUiId(pane.props.id, \"AppWorkspace.MainPane id\");\n const variable = appWorkspacePanelVariable(\"pane\", panelId);\n const isAnchor = () => region === anchorRegion();\n const resizable = () => !isAnchor() && (pane.props.resizable ?? rootResizable);\n const defaultSize = () => pane.props.defaultSize ?? APP_WORKSPACE_PANE_DEFAULT;\n const minSize = () => pane.props.minSize ?? APP_WORKSPACE_PANE_MIN;\n const maxSize = () => Math.max(minSize(), pane.props.maxSize ?? APP_WORKSPACE_PANE_MAX);\n const before = () => region.index < (anchorRegion()?.index ?? 0);\n const handle = () => (\n <ResizeHandle\n kind=\"pane\"\n edge={before() ? \"end\" : \"start\"}\n controls={pane.domId}\n panelId={panelId}\n defaultSize={defaultSize()}\n minSize={minSize()}\n maxSize={maxSize()}\n shadow={pane.props.resizeShadow !== false}\n label={`Resize ${pane.props.label}`}\n />\n );\n return (\n <Show when={pane.props.open !== false}>\n <Show when={resizable() && !before()}>{handle()}</Show>\n <section\n id={pane.domId}\n class={`k2b-app-workspace__main-pane ${isAnchor() ? \"is-primary\" : \"\"} ${pane.props.class ?? \"\"}`}\n aria-label={pane.props.label}\n data-workspace-main-region={pane.props.id}\n data-workspace-mobile-active={activeMobilePane() === pane.props.id ? \"true\" : \"false\"}\n data-workspace-panel-id={panelId}\n data-workspace-resizable={resizable() ? \"true\" : \"false\"}\n data-surface={pane.props.surface === \"navigation\" ? \"navigation\" : undefined}\n data-scroll={pane.props.scroll === false ? \"false\" : undefined}\n data-scroll-fade-mode={pane.props.scroll !== false && pane.props.scrollFade !== false ? \"both\" : undefined}\n style={isAnchor() ? undefined : { \"--k2b-workspace-panel-size\": `var(${variable}, ${defaultSize()}px)` }}\n >\n {pane.props.children}\n </section>\n <Show when={resizable() && before()}>{handle()}</Show>\n </Show>\n );\n }}\n </For>\n </Show>\n </div>\n );\n}\n\nfunction AppWorkspaceDetail(props: AppWorkspaceDetailProps): JSX.Element {\n const rootResizable = useContext(ResizeContext);\n const panelId = () => assertStableUiId(props.id, \"AppWorkspace.Detail id\");\n const domId = () => `k2b-workspace-detail-${panelId()}`;\n const variable = () => appWorkspacePanelVariable(\"detail\", panelId());\n // Cloud's `detailDefaultWidth`. These feed `aria-valuenow` and the\n // `var(…, Npx)` first-paint fallback, so they are behaviour, not taste.\n const widths = { sm: 288, md: 384, lg: 480, xl: 544 };\n const defaultWidth = () => widths[props.width ?? \"md\"] ?? APP_WORKSPACE_DETAIL_DEFAULT;\n const minWidth = () => props.minWidth ?? APP_WORKSPACE_DETAIL_MIN;\n const maxWidth = () => Math.max(minWidth(), props.maxWidth ?? APP_WORKSPACE_DETAIL_MAX);\n const resizable = () => props.resizable ?? rootResizable;\n return (\n <>\n <Show when={resizable()}>\n <ResizeHandle\n kind=\"detail\"\n edge=\"start\"\n controls={domId()}\n panelId={panelId()}\n defaultSize={defaultWidth()}\n minSize={minWidth()}\n maxSize={maxWidth()}\n shadow\n style={{ \"--k2b-workspace-panel-size\": `var(${variable()}, ${defaultWidth()}px)` }}\n />\n </Show>\n <aside\n id={domId()}\n class={`k2b-app-workspace__detail ${props.class ?? \"\"}`}\n data-width={props.width ?? \"md\"}\n data-workspace-panel-id={panelId()}\n data-workspace-resizable={resizable() ? \"true\" : \"false\"}\n hidden={!props.open}\n style={{\n \"--k2b-workspace-panel-size\": `var(${variable()}, ${defaultWidth()}px)`,\n \"view-transition-name\": props.viewTransitionName,\n }}\n >\n {props.children}\n </aside>\n </>\n );\n}\n\nfunction AppWorkspaceBottomDrawer(props: AppWorkspaceBottomDrawerProps): JSX.Element {\n const rootResizable = useContext(ResizeContext);\n const panelId = () => assertStableUiId(props.id, \"AppWorkspace.BottomDrawer id\");\n const domId = () => `k2b-workspace-drawer-${panelId()}`;\n const variable = () => appWorkspacePanelVariable(\"drawer\", panelId());\n // Cloud's `drawerDefaultHeight`.\n const heights = { sm: 192, md: 240, lg: 320 };\n const defaultHeight = () => heights[props.height ?? \"md\"] ?? APP_WORKSPACE_DRAWER_DEFAULT;\n const minHeight = () => props.minHeight ?? APP_WORKSPACE_DRAWER_MIN;\n const maxHeight = () => Math.max(minHeight(), props.maxHeight ?? APP_WORKSPACE_DRAWER_MAX);\n const resizable = () => props.resizable ?? rootResizable;\n return (\n <>\n <Show when={resizable()}>\n <ResizeHandle\n kind=\"drawer\"\n edge=\"start\"\n controls={domId()}\n panelId={panelId()}\n defaultSize={defaultHeight()}\n minSize={minHeight()}\n maxSize={maxHeight()}\n shadow\n style={{ \"--k2b-workspace-panel-size\": `var(${variable()}, ${defaultHeight()}px)` }}\n />\n </Show>\n <aside\n id={domId()}\n class={`k2b-app-workspace__drawer ${props.class ?? \"\"}`}\n data-height={props.height ?? \"md\"}\n data-workspace-panel-id={panelId()}\n data-workspace-resizable={resizable() ? \"true\" : \"false\"}\n hidden={!props.open}\n style={{\n \"--k2b-workspace-panel-size\": `var(${variable()}, ${defaultHeight()}px)`,\n \"view-transition-name\": props.viewTransitionName,\n }}\n >\n {props.children}\n </aside>\n </>\n );\n}\n\nfunction AppWorkspaceSidebar(props: AppWorkspaceSidebarProps): JSX.Element {\n const rootResizable = useContext(ResizeContext);\n const resizable = () => props.resizable ?? rootResizable;\n const defaultSize = () => props.defaultSize ?? APP_WORKSPACE_SIDEBAR_DEFAULT;\n const minSize = () => props.minSize ?? (props.collapsible ? APP_WORKSPACE_SIDEBAR_COLLAPSED : APP_WORKSPACE_SIDEBAR_MIN);\n const maxSize = () => props.maxSize ?? APP_WORKSPACE_SIDEBAR_MAX;\n const generatedId = createUniqueId();\n const domId = () => props.id ?? `k2b-workspace-sidebar-${generatedId}`;\n // Hidden navigation is not rendered at all, so its labels are neither shown\n // nor reachable; reading the children lazily keeps them from being created.\n const resolved = children(() => (props.hidden ? undefined : props.children));\n const slots = createMemo(() => flatten(resolved()).filter(sidebarChildSlot));\n const desktop = createMemo(() => slots().find((slot) => slot.kind === SIDEBAR_DESKTOP));\n let aside: HTMLElement | undefined;\n onMount(() => {\n const requestHide = () => props.onHiddenChange?.(true);\n aside?.addEventListener(APP_WORKSPACE_SIDEBAR_HIDE_EVENT, requestHide);\n onCleanup(() => aside?.removeEventListener(APP_WORKSPACE_SIDEBAR_HIDE_EVENT, requestHide));\n });\n return (\n <>\n <aside\n ref={aside}\n id={domId()}\n class={`k2b-app-workspace__sidebar ${props.class ?? \"\"}`}\n aria-label={props.label}\n hidden={props.hidden || undefined}\n data-mobile={props.mobile === \"stacked\" ? \"stacked\" : undefined}\n data-workspace-resizable={resizable() ? \"true\" : \"false\"}\n data-workspace-collapsible={props.collapsible ? \"true\" : \"false\"}\n data-workspace-hideable={props.onHiddenChange ? \"true\" : undefined}\n >\n <Show when={!props.hidden}>\n <div class=\"k2b-app-workspace__sidebar-desktop\">{desktop()?.children}</div>\n </Show>\n </aside>\n <Show when={resizable() && !props.hidden}>\n <ResizeHandle\n kind=\"sidebar\"\n edge=\"end\"\n controls={domId()}\n defaultSize={defaultSize()}\n minSize={minSize()}\n maxSize={maxSize()}\n shadow={props.resizeShadow !== false}\n />\n </Show>\n </>\n );\n}\n\nconst AppWorkspaceSidebarDesktop = (props: { children: JSX.Element }): JSX.Element =>\n ({ kind: SIDEBAR_DESKTOP, children: props.children }) as unknown as JSX.Element;\n// Document navigations rebuild the sidebar from the server, so this inline\n// script restores its offset while the document is still parsing: before the\n// first paint, before a view transition can snapshot it, and before any island\n// hydrates. Islands load asynchronously and server-only sidebars never mount,\n// so `onMount` would be too late or never run. The memory is one\n// `sessionStorage` entry per path segment and sidebar position and ends with\n// the tab. A stored offset is applied first; the current item is then kept in\n// view, which is a no-op when the offset already shows it. The frame callback\n// repeats the restore once the whole document is parsed, because content that\n// follows the sidebar can still change its height before the first paint.\nconst SIDEBAR_SCROLL_MEMORY_SCRIPT = [\n \"(function(){\",\n \"var body=document.currentScript&&document.currentScript.previousElementSibling;if(!body)return;\",\n \"var storage;try{storage=window.sessionStorage}catch(_){return}\",\n 'var key=\"k2b-sidebar-scroll:\"+location.pathname.split(\"/\")[1]+\":\"+document.querySelectorAll(\".k2b-app-workspace__sidebar-body\").length;',\n \"var restore=function(){\",\n \"var stored=storage.getItem(key);if(stored!==null)body.scrollTop=Number(stored);\",\n 'var current=body.querySelector(\\'[aria-current=\"page\"]\\');if(current)current.scrollIntoView({block:\"nearest\"});',\n \"};\",\n \"restore();requestAnimationFrame(restore);\",\n \"var frame=0;\",\n 'body.addEventListener(\"scroll\",function(){if(frame)return;frame=requestAnimationFrame(function(){frame=0;try{storage.setItem(key,String(body.scrollTop))}catch(_){}})},{passive:true});',\n \"})();\",\n].join(\"\");\n\nconst AppWorkspaceSidebarBody = (props: AppWorkspaceSidebarBodyProps) => {\n let body!: HTMLDivElement;\n createScrollFade(\n () => body,\n () => props.scrollFade !== false,\n );\n return (\n <>\n <div\n ref={body}\n class={`k2b-app-workspace__sidebar-body ${props.class ?? \"\"}`}\n data-scroll-fade-mode={props.scrollFade !== false ? \"both\" : undefined}\n {...scrollAttrs(props.scrollPreserveKey)}\n {...modeAttrs(props.sidebarMode)}\n >\n {props.children}\n </div>\n <script innerHTML={SIDEBAR_SCROLL_MEMORY_SCRIPT} />\n </>\n );\n};\nconst AppWorkspaceSidebarFooter = (props: AppWorkspaceSidebarContentProps) => (\n <footer class={`k2b-app-workspace__sidebar-footer ${props.class ?? \"\"}`} {...modeAttrs(props.sidebarMode)}>\n {props.children}\n </footer>\n);\nconst AppWorkspaceSidebarSection = (props: AppWorkspaceSidebarSectionProps) => {\n const [expanded, setExpanded] = createSignal(props.defaultOpen ?? true);\n const open = () => !props.collapsible || (props.open ?? expanded());\n const id = `sidebar-section-${createUniqueId()}`;\n const title = () => (\n <>\n <Show when={props.icon}>\n <span aria-hidden=\"true\">\n <i class={iconClass(props.icon)} />\n </span>\n </Show>\n {props.title}\n <Show when={props.count !== undefined}>\n <span class=\"k2b-app-workspace__sidebar-section-count\">{props.count}</span>\n </Show>\n </>\n );\n return (\n <section\n class={`k2b-app-workspace__sidebar-section ${props.class ?? \"\"}`}\n data-collapsible={props.collapsible ? \"true\" : undefined}\n {...modeAttrs(props.sidebarMode)}\n >\n <Show when={props.title || props.actions}>\n <header class=\"k2b-app-workspace__sidebar-section-header\">\n <Show\n when={props.collapsible}\n fallback={\n <Show when={props.title}>\n <h2>{title()}</h2>\n </Show>\n }\n >\n <button\n type=\"button\"\n class=\"k2b-app-workspace__sidebar-section-toggle\"\n aria-expanded={open()}\n aria-controls={id}\n onClick={() => {\n const next = !open();\n setExpanded(next);\n props.onOpenChange?.(next);\n }}\n >\n {title()}\n <i class={open() ? \"ti ti-chevron-down\" : \"ti ti-chevron-right\"} aria-hidden=\"true\" />\n </button>\n </Show>\n <Show when={props.actions}>\n <div class=\"k2b-app-workspace__sidebar-section-actions\">{props.actions}</div>\n </Show>\n </header>\n </Show>\n <div id={id} hidden={!open()} class=\"k2b-app-workspace__sidebar-section-content\">\n {props.children}\n </div>\n </section>\n );\n};\n\nconst AppWorkspaceSidebarItemIcon = (props: AppWorkspaceSidebarItemIconProps): JSX.Element =>\n mergeProps({ kind: SIDEBAR_ITEM_ICON }, props) as unknown as JSX.Element;\nconst AppWorkspaceSidebarItemLabel = (props: AppWorkspaceSidebarItemLabelProps): JSX.Element =>\n mergeProps({ kind: SIDEBAR_ITEM_LABEL }, props) as unknown as JSX.Element;\nconst AppWorkspaceSidebarItemMeta = (props: AppWorkspaceSidebarItemMetaProps): JSX.Element =>\n mergeProps({ kind: SIDEBAR_ITEM_META }, props) as unknown as JSX.Element;\nconst AppWorkspaceSidebarItemAction = (props: AppWorkspaceSidebarItemActionProps): JSX.Element =>\n mergeProps({ kind: SIDEBAR_ITEM_ACTION }, props) as unknown as JSX.Element;\nconst AppWorkspaceSidebarItemActions = (props: AppWorkspaceSidebarItemActionsProps): JSX.Element => (\n <div class=\"k2b-app-workspace__sidebar-item-actions\" data-visibility={props.visibility === \"hover\" ? \"hover\" : undefined}>\n {props.children}\n </div>\n);\n\ntype AppWorkspaceSidebarRowProps = {\n children: JSX.Element;\n actions?: JSX.Element;\n hasActions: boolean;\n href?: string;\n navigation?: \"enhanced\" | \"document\";\n replace?: boolean;\n scroll?: NavigationScrollMode;\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n onClick?: (event: MouseEvent) => void;\n active?: boolean;\n activeClass?: string;\n disabled?: boolean;\n tone?: AppWorkspaceSidebarItemTone;\n title?: string;\n viewTransitionName?: string;\n class?: string;\n depth?: number;\n tabIndex?: number;\n data?: Record<string, string | number | boolean | null | undefined>;\n};\n\n/** Shared visual and semantic row frame for flat sidebar items and tree items. */\nfunction AppWorkspaceSidebarRow(props: AppWorkspaceSidebarRowProps): JSX.Element {\n const className = () =>\n `k2b-app-workspace__sidebar-item ${props.hasActions ? \"has-action\" : \"\"} ${props.active ? (props.activeClass ?? \"is-active\") : \"\"} ${props.class ?? \"\"}`;\n const data = () =>\n Object.fromEntries(\n Object.entries(props.data ?? {})\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => [`data-${key}`, String(value)]),\n );\n const common = () => ({\n class: className(),\n title: props.title,\n \"data-tone\": props.tone,\n style: {\n \"view-transition-name\": props.viewTransitionName,\n \"--k2b-sidebar-item-depth\": props.depth === undefined ? undefined : String(Math.max(0, props.depth)),\n },\n ...data(),\n });\n const current = () => (props.active ? (\"page\" as const) : undefined);\n\n const Control = (control: { grouped: boolean }) => {\n const attrs = () => (control.grouped ? { class: \"k2b-app-workspace__sidebar-item-main\" } : common());\n return (\n <Show\n when={Boolean(props.href && !props.disabled)}\n fallback={\n <button type=\"button\" {...attrs()} tabIndex={props.tabIndex} disabled={props.disabled} onClick={props.onClick}>\n {props.children}\n </button>\n }\n >\n <Show\n when={props.navigation === \"enhanced\" && Boolean(props.onNavigate)}\n fallback={\n <a href={props.href} {...attrs()} tabIndex={props.tabIndex} aria-current={current()} onClick={props.onClick}>\n {props.children}\n </a>\n }\n >\n <Link\n href={props.href!}\n {...attrs()}\n tabIndex={props.tabIndex}\n aria-current={current()}\n replace={props.replace}\n scroll={props.scroll}\n onNavigate={props.onNavigate}\n onClick={props.onClick}\n >\n {props.children}\n </Link>\n </Show>\n </Show>\n );\n };\n return (\n <Show when={props.hasActions} fallback={<Control grouped={false} />}>\n <div {...common()} data-disabled={props.disabled ? \"true\" : undefined}>\n <Control grouped />\n {props.actions}\n </div>\n </Show>\n );\n}\n\nfunction AppWorkspaceSidebarItem(props: AppWorkspaceSidebarItemProps): JSX.Element {\n const messages = useUiMessages();\n const resolved = children(() => props.children);\n const resolvedActions = children(() => props.actions);\n const values = createMemo(() => flatten(resolved()));\n const slots = createMemo(() => values().filter(sidebarItemSlot));\n const iconSlot = createMemo(\n () =>\n slots().find((slot) => slot.kind === SIDEBAR_ITEM_ICON) as\n | (AppWorkspaceSidebarItemIconProps & { kind: typeof SIDEBAR_ITEM_ICON })\n | undefined,\n );\n const labelSlot = createMemo(\n () =>\n slots().find((slot) => slot.kind === SIDEBAR_ITEM_LABEL) as\n | (AppWorkspaceSidebarItemLabelProps & { kind: typeof SIDEBAR_ITEM_LABEL })\n | undefined,\n );\n const metaSlot = createMemo(\n () =>\n slots().find((slot) => slot.kind === SIDEBAR_ITEM_META) as\n | (AppWorkspaceSidebarItemMetaProps & { kind: typeof SIDEBAR_ITEM_META })\n | undefined,\n );\n const actionSlot = createMemo(\n () =>\n slots().find((slot) => slot.kind === SIDEBAR_ITEM_ACTION) as\n | (AppWorkspaceSidebarItemActionProps & { kind: typeof SIDEBAR_ITEM_ACTION })\n | undefined,\n );\n const legacy = createMemo(() => values().filter((value) => !sidebarItemSlot(value)));\n const label = () => labelSlot()?.children ?? (legacy().length === 1 ? legacy()[0] : legacy());\n const icon = () => iconSlot()?.icon ?? props.icon;\n const iconContent = () => iconSlot()?.children;\n const meta = () => metaSlot()?.children ?? props.meta;\n const metaVisibility = () => metaSlot()?.visibility ?? props.metaVisibility;\n const customActions = () => resolvedActions();\n const hasCustomActions = () => Boolean(customActions());\n const hasAction = () => Boolean(actionSlot() || props.actionIcon || hasCustomActions() || props.preview);\n const mainContent = (\n <>\n <Show when={iconContent() || icon()}>\n <span class=\"k2b-app-workspace__sidebar-item-icon\" aria-hidden=\"true\">\n {iconContent() ?? <i class={iconClass(icon())} />}\n </span>\n </Show>\n {/* The inner text span is what the marquee translates; the controller\n measures its `scrollWidth` against the clipping outer span. */}\n <span class=\"k2b-app-workspace__sidebar-item-copy\">\n <Show when={props.context || props.contextMeta}>\n <span class=\"k2b-app-workspace__sidebar-item-context\">\n <span class=\"k2b-app-workspace__sidebar-item-context-label\">{props.context}</span>\n <Show when={props.contextMeta}>\n <span class=\"k2b-app-workspace__sidebar-item-context-meta\">{props.contextMeta}</span>\n </Show>\n </span>\n </Show>\n <span\n class=\"k2b-app-workspace__sidebar-item-label\"\n data-marquee={(labelSlot()?.marquee ?? (props.variant ?? \"row\") === \"row\") ? \"true\" : \"false\"}\n >\n <span class=\"k2b-app-workspace__sidebar-item-label-text\">{label() as JSX.Element}</span>\n </span>\n <Show when={props.description}>\n <span class=\"k2b-app-workspace__sidebar-item-description\">{props.description}</span>\n </Show>\n </span>\n <Show when={meta()}>\n {(value) => (\n <span class=\"k2b-app-workspace__sidebar-item-meta\" data-visibility={metaVisibility() === \"hover\" ? \"hover\" : undefined}>\n {value()}\n </span>\n )}\n </Show>\n </>\n );\n const singleAction = () => {\n const label = () => actionSlot()?.label ?? props.actionLabel ?? messages().rowAction;\n const select = (event: MouseEvent) => {\n event.stopPropagation();\n if (actionSlot()?.disabled) {\n event.preventDefault();\n return;\n }\n if (!actionSlot()?.href) event.preventDefault();\n actionSlot()?.onSelect?.(event);\n props.onActionClick?.(event);\n };\n const content = () => actionSlot()?.children ?? <i class={iconClass(actionSlot()?.icon ?? props.actionIcon, \"ti-dots\")} />;\n return (\n <Show when={Boolean(actionSlot() || props.actionIcon)}>\n <Show\n when={actionSlot()?.href && !actionSlot()?.disabled}\n fallback={\n <button\n type=\"button\"\n class=\"k2b-app-workspace__sidebar-item-action\"\n disabled={actionSlot()?.disabled}\n data-visibility={actionSlot()?.visibility === \"hover\" ? \"hover\" : undefined}\n aria-label={label()}\n onClick={select}\n >\n {content()}\n </button>\n }\n >\n <a\n href={actionSlot()?.href}\n class=\"k2b-app-workspace__sidebar-item-action\"\n data-visibility={actionSlot()?.visibility === \"hover\" ? \"hover\" : undefined}\n aria-label={label()}\n onClick={select}\n >\n {content()}\n </a>\n </Show>\n </Show>\n );\n };\n const actions = () => (\n <>\n {customActions()}\n {singleAction()}\n <Show when={props.preview}>\n {(preview) => (\n <SidebarItemPreview\n label={preview().label}\n trigger={preview().trigger}\n align={preview().align}\n viewportSize={preview().viewportSize}\n onOpenChange={preview().onOpenChange}\n >\n {preview().content}\n </SidebarItemPreview>\n )}\n </Show>\n </>\n );\n return (\n <AppWorkspaceSidebarRow\n hasActions={hasAction()}\n href={props.href}\n navigation={props.navigation}\n replace={props.replace}\n scroll={props.scroll}\n onNavigate={props.onNavigate}\n onClick={props.onClick}\n active={props.active}\n activeClass={props.activeClass}\n disabled={props.disabled}\n tone={props.tone}\n title={props.title}\n viewTransitionName={props.viewTransitionName}\n class={props.class}\n depth={props.depth}\n actions={actions()}\n data={{\n ...props.data,\n ...modeData(props.sidebarMode),\n variant: props.variant ?? \"row\",\n \"has-actions\": hasCustomActions() ? \"true\" : undefined,\n \"action-visibility\": actionSlot()?.visibility === \"hover\" ? \"hover\" : undefined,\n }}\n >\n {mainContent}\n </AppWorkspaceSidebarRow>\n );\n}\n\nconst navTreeItems = (value: unknown): NavTreeItemSlot[] => flatten(value).filter(navTreeItemSlot);\n\nconst AppWorkspaceNavTreeItem = (props: AppWorkspaceNavTreeItemProps): JSX.Element =>\n ({ kind: NAV_TREE_ITEM, ...props }) as unknown as JSX.Element;\n\nconst AppWorkspaceNavTree = ((props: AppWorkspaceNavTreeProps) => {\n let root: HTMLDivElement | undefined;\n const resolved = children(() => props.children);\n const roots = createMemo(() => navTreeItems(resolved()));\n const [uncontrolledExpandedIds, setUncontrolledExpandedIds] = createSignal<string[]>([...new Set(props.defaultExpandedIds ?? [])]);\n const [focusedId, setFocusedId] = createSignal<string | null>(props.selectedId ?? null);\n const expandedIds = createMemo(() => new Set(props.expandedIds ?? uncontrolledExpandedIds()));\n const isExpanded = (id: string) => expandedIds().has(id);\n\n const setExpanded = (id: string, expanded: boolean) => {\n const next = new Set(expandedIds());\n if (expanded) next.add(id);\n else next.delete(id);\n const value = [...next];\n if (props.expandedIds === undefined) setUncontrolledExpandedIds(value);\n props.onExpandedIdsChange?.(value);\n };\n\n const visibleIds = createMemo(() => {\n const result: string[] = [];\n const visit = (items: readonly NavTreeItemSlot[]) => {\n for (const item of items) {\n if (item.disabled) continue;\n result.push(item.id);\n const nested = navTreeItems(item.children);\n if (nested.length > 0 && isExpanded(item.id)) visit(nested);\n }\n };\n visit(roots());\n return result;\n });\n\n const tabStopId = () => {\n const visible = visibleIds();\n const focused = focusedId();\n if (focused && visible.includes(focused)) return focused;\n if (props.selectedId && visible.includes(props.selectedId)) return props.selectedId;\n return visible[0] ?? null;\n };\n\n const treeItemElements = () =>\n Array.from(root?.querySelectorAll<HTMLElement>(\"[data-k2b-nav-tree-id]\") ?? []).filter(\n (element) => element.getAttribute(\"aria-disabled\") !== \"true\",\n );\n const focusItem = (id: string | null) => {\n if (!id) return;\n const element = treeItemElements().find((candidate) => candidate.dataset.k2bNavTreeId === id);\n element?.focus({ preventScroll: true });\n };\n\n // Items arrive through an accessor so a changed nested list reconciles rows by identity instead of rebuilding the list.\n const renderItems = (value: () => unknown, depth: number, parentId?: string): JSX.Element => (\n <For each={navTreeItems(value())}>\n {(item) => {\n const nested = createMemo(() => navTreeItems(item.children));\n const hasChildren = () => nested().length > 0;\n const selected = () => props.selectedId === item.id;\n let treeItem: HTMLDivElement | undefined;\n\n const activate = (event: MouseEvent) => {\n if (item.disabled) return;\n treeItem?.focus({ preventScroll: true });\n setFocusedId(item.id);\n if (hasChildren() && !item.href && !item.onSelect && !props.onSelectedIdChange) {\n setExpanded(item.id, !isExpanded(item.id));\n return;\n }\n props.onSelectedIdChange?.(item.id);\n item.onSelect?.(event);\n };\n const toggle = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (!item.disabled && hasChildren()) setExpanded(item.id, !isExpanded(item.id));\n };\n const onRowClick = (event: MouseEvent) => {\n if ((event.target as Element | null)?.closest(\"[data-k2b-nav-tree-toggle]\")) {\n toggle(event);\n return;\n }\n activate(event);\n };\n const rowControl = () => {\n const firstChild = treeItem?.firstElementChild as HTMLElement | null | undefined;\n if (!firstChild?.classList.contains(\"has-action\")) return firstChild;\n return firstChild.firstElementChild as HTMLElement | null;\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.target !== event.currentTarget) return;\n if (event.altKey || event.ctrlKey || event.metaKey) return;\n const items = treeItemElements();\n const index = items.indexOf(event.currentTarget as HTMLElement);\n if (event.key === \"ArrowDown\" && index >= 0) {\n event.preventDefault();\n items[Math.min(items.length - 1, index + 1)]?.focus({ preventScroll: true });\n return;\n }\n if (event.key === \"ArrowUp\" && index >= 0) {\n event.preventDefault();\n items[Math.max(0, index - 1)]?.focus({ preventScroll: true });\n return;\n }\n if (event.key === \"Home\") {\n event.preventDefault();\n items[0]?.focus({ preventScroll: true });\n return;\n }\n if (event.key === \"End\") {\n event.preventDefault();\n items.at(-1)?.focus({ preventScroll: true });\n return;\n }\n if (event.key === \"ArrowRight\" && hasChildren()) {\n event.preventDefault();\n if (!isExpanded(item.id)) setExpanded(item.id, true);\n else queueMicrotask(() => focusItem(nested()[0]?.id ?? null));\n return;\n }\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n if (hasChildren() && isExpanded(item.id)) setExpanded(item.id, false);\n else focusItem(parentId ?? null);\n return;\n }\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n rowControl()?.click();\n }\n };\n const usesIconDisclosure = () => hasChildren() && Boolean(item.icon && item.expandedIcon);\n const rowIcon = () => (usesIconDisclosure() && isExpanded(item.id) ? item.expandedIcon : item.icon);\n const rowContent = (\n <>\n <Show when={rowIcon()}>\n <span\n class=\"k2b-app-workspace__sidebar-item-icon\"\n data-k2b-nav-tree-toggle={usesIconDisclosure() ? \"\" : undefined}\n aria-hidden=\"true\"\n >\n <i class={iconClass(rowIcon())} />\n </span>\n </Show>\n <span class=\"k2b-app-workspace__sidebar-item-label\">\n <span class=\"k2b-app-workspace__sidebar-item-label-text\">{item.label}</span>\n </span>\n <Show when={item.meta !== undefined}>\n <span\n class={`k2b-app-workspace__sidebar-item-meta ${hasChildren() ? \"\" : \"k2b-app-workspace__nav-tree-leaf-meta\"}`}\n data-visibility={item.metaVisibility === \"hover\" ? \"hover\" : undefined}\n >\n {item.meta}\n </span>\n </Show>\n <Show when={hasChildren() && !usesIconDisclosure()}>\n <span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\">\n <i class={`ti ${isExpanded(item.id) ? \"ti-chevron-down\" : \"ti-chevron-right\"}`} />\n </span>\n </Show>\n </>\n );\n const row = () => (\n <AppWorkspaceSidebarRow\n hasActions={Boolean(item.actions)}\n href={item.href}\n navigation={item.navigation}\n replace={item.replace}\n scroll={item.scroll}\n onNavigate={item.onNavigate}\n onClick={onRowClick}\n active={selected()}\n disabled={item.disabled}\n tone={item.tone}\n title={item.title}\n viewTransitionName={item.viewTransitionName}\n class={`k2b-app-workspace__nav-tree-row ${item.class ?? \"\"}`}\n depth={props.indented === false ? 0 : depth}\n tabIndex={-1}\n actions={item.actions}\n data={{ \"has-actions\": item.actions ? \"true\" : undefined }}\n >\n {rowContent}\n </AppWorkspaceSidebarRow>\n );\n\n return (\n <div\n ref={treeItem}\n class=\"k2b-app-workspace__nav-tree-node\"\n role=\"treeitem\"\n aria-level={depth + 1}\n aria-selected={selected()}\n aria-expanded={hasChildren() ? isExpanded(item.id) : undefined}\n aria-disabled={item.disabled ? \"true\" : undefined}\n tabIndex={item.disabled ? -1 : tabStopId() === item.id ? 0 : -1}\n data-k2b-nav-tree-id={item.id}\n data-k2b-nav-tree-parent-id={parentId}\n onFocus={() => setFocusedId(item.id)}\n onKeyDown={onKeyDown}\n onDragEnter={item.onDragEnter}\n onDragOver={item.onDragOver}\n onDragLeave={item.onDragLeave}\n onDrop={item.onDrop}\n >\n {row()}\n <Show when={hasChildren() && isExpanded(item.id)}>\n <div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">\n {renderItems(nested, depth + 1, item.id)}\n </div>\n </Show>\n </div>\n );\n }}\n </For>\n );\n\n return (\n <div ref={root} class={`k2b-app-workspace__nav-tree ${props.class ?? \"\"}`} role=\"tree\" aria-label={props.ariaLabel}>\n {renderItems(roots, 0)}\n </div>\n );\n}) as AppWorkspaceNavTreeComponent;\n\nAppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;\n\nconst AppWorkspaceSidebarIconGrid = (props: AppWorkspaceSidebarIconGridProps) => (\n <section class={`k2b-app-workspace__sidebar-icon-grid-wrap ${props.class ?? \"\"}`} {...modeAttrs(props.sidebarMode)}>\n <Show when={props.title}>{(title) => <h2>{title()}</h2>}</Show>\n <div class=\"k2b-app-workspace__sidebar-icon-grid\" data-columns={props.columns ?? 2}>\n {props.children}\n </div>\n </section>\n);\n\nconst AppWorkspaceSidebarIconAction = (props: AppWorkspaceSidebarIconActionProps) => {\n const content = <i class={iconClass(props.icon)} aria-hidden=\"true\" />;\n const attrs = () => ({\n class: `k2b-app-workspace__sidebar-icon-action ${props.active ? \"is-active\" : \"\"}`,\n title: props.label,\n \"aria-label\": props.label,\n \"data-tone\": props.tone,\n style: { \"view-transition-name\": props.viewTransitionName },\n ...modeAttrs(props.sidebarMode),\n });\n if (!props.href || props.disabled)\n return (\n <button type=\"button\" {...attrs()} disabled={props.disabled} onClick={props.onClick}>\n {content}\n </button>\n );\n if (props.navigation !== \"enhanced\" || !props.onNavigate)\n return (\n <a href={props.href} {...attrs()} onClick={props.onClick}>\n {content}\n </a>\n );\n return (\n <Link\n href={props.href}\n {...attrs()}\n replace={props.replace}\n scroll={props.scroll}\n onNavigate={props.onNavigate}\n onClick={props.onClick}\n >\n {content}\n </Link>\n );\n};\n\ntype AppWorkspaceComponent = ((props: AppWorkspaceProps) => JSX.Element) & {\n LayoutStateProvider: (props: AppWorkspaceLayoutStateProviderProps) => JSX.Element;\n Content: (props: AppWorkspaceContentProps) => JSX.Element;\n Main: (props: AppWorkspaceMainProps) => JSX.Element;\n MainPane: (props: AppWorkspaceMainPaneProps) => JSX.Element;\n Detail: (props: AppWorkspaceDetailProps) => JSX.Element;\n BottomDrawer: (props: AppWorkspaceBottomDrawerProps) => JSX.Element;\n Sidebar: (props: AppWorkspaceSidebarProps) => JSX.Element;\n SidebarDesktop: (props: { children: JSX.Element }) => JSX.Element;\n SidebarSection: (props: AppWorkspaceSidebarSectionProps) => JSX.Element;\n SidebarBody: (props: AppWorkspaceSidebarBodyProps) => JSX.Element;\n SidebarFooter: (props: AppWorkspaceSidebarContentProps) => JSX.Element;\n SidebarItem: (props: AppWorkspaceSidebarItemProps) => JSX.Element;\n SidebarItemIcon: (props: AppWorkspaceSidebarItemIconProps) => JSX.Element;\n SidebarItemLabel: (props: AppWorkspaceSidebarItemLabelProps) => JSX.Element;\n SidebarItemMeta: (props: AppWorkspaceSidebarItemMetaProps) => JSX.Element;\n SidebarItemAction: (props: AppWorkspaceSidebarItemActionProps) => JSX.Element;\n SidebarItemActions: (props: AppWorkspaceSidebarItemActionsProps) => JSX.Element;\n NavTree: AppWorkspaceNavTreeComponent;\n SidebarIconGrid: (props: AppWorkspaceSidebarIconGridProps) => JSX.Element;\n SidebarIconAction: (props: AppWorkspaceSidebarIconActionProps) => JSX.Element;\n};\n\nconst AppWorkspace = ((props: AppWorkspaceProps) => {\n let root: HTMLDivElement | undefined;\n const serverLayoutState = useContext(LayoutStateContext);\n const initialLayoutState = () => props.layoutState?.() ?? serverLayoutState;\n\n // The resize handles are inert markup until the controller is attached, so\n // the workspace attaches it itself and scopes it to this root. `onMount`\n // never runs during SSR, and the disposer removes every listener. A host\n // shell may own one document-level controller for SSR and hydrated roots;\n // its marker keeps controller ownership singular without app-level props.\n onMount(() => {\n if (props.controller === false || !root || root.closest(\"[data-k2b-app-workspace-controller]\")) return;\n onCleanup(\n installAppWorkspaceController({\n root,\n readState: () => (props.layoutState ? props.layoutState() : serverLayoutState),\n writeState: (state) => props.onLayoutChange?.(state),\n }),\n );\n });\n\n return (\n <ResizeContext.Provider value={props.resizable !== false}>\n <div\n ref={root}\n class={`k2b-app-workspace ${props.class ?? \"\"}`}\n data-k2b-app-workspace\n data-mobile-surface={props.mobileSurface}\n data-sidebar-collapsed={\n initialLayoutState()?.sidebarCollapsed === undefined ? undefined : String(initialLayoutState()?.sidebarCollapsed)\n }\n data-workspace-resizable={props.resizable === false ? \"false\" : \"true\"}\n style={appWorkspaceLayoutStyle(initialLayoutState())}\n >\n {props.children}\n </div>\n </ResizeContext.Provider>\n );\n}) as AppWorkspaceComponent;\n\nAppWorkspace.LayoutStateProvider = (props) => (\n <LayoutStateContext.Provider value={props.state ?? null}>{props.children}</LayoutStateContext.Provider>\n);\nAppWorkspace.Content = (props) => <div class={`k2b-app-workspace__content ${props.class ?? \"\"}`}>{props.children}</div>;\nAppWorkspace.Main = AppWorkspaceMain;\nAppWorkspace.MainPane = AppWorkspaceMainPane;\nAppWorkspace.Detail = AppWorkspaceDetail;\nAppWorkspace.BottomDrawer = AppWorkspaceBottomDrawer;\nAppWorkspace.Sidebar = AppWorkspaceSidebar;\nAppWorkspace.SidebarDesktop = AppWorkspaceSidebarDesktop;\nAppWorkspace.SidebarSection = AppWorkspaceSidebarSection;\nAppWorkspace.SidebarBody = AppWorkspaceSidebarBody;\nAppWorkspace.SidebarFooter = AppWorkspaceSidebarFooter;\nAppWorkspace.SidebarItem = AppWorkspaceSidebarItem;\nAppWorkspace.SidebarItemIcon = AppWorkspaceSidebarItemIcon;\nAppWorkspace.SidebarItemLabel = AppWorkspaceSidebarItemLabel;\nAppWorkspace.SidebarItemMeta = AppWorkspaceSidebarItemMeta;\nAppWorkspace.SidebarItemAction = AppWorkspaceSidebarItemAction;\nAppWorkspace.SidebarItemActions = AppWorkspaceSidebarItemActions;\nAppWorkspace.NavTree = AppWorkspaceNavTree;\nAppWorkspace.SidebarIconGrid = AppWorkspaceSidebarIconGrid;\nAppWorkspace.SidebarIconAction = AppWorkspaceSidebarIconAction;\n\nexport default AppWorkspace;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -20,6 +20,17 @@ const rootElements = (root, selector) => Array.from(root.querySelectorAll(select
|
|
|
20
20
|
const sidebarElement = root => rootElements(root, ".k2b-app-workspace__sidebar")[0] ?? null;
|
|
21
21
|
const mainElement = root => rootElements(root, ".k2b-app-workspace__main")[0] ?? null;
|
|
22
22
|
const sidebarCollapsible = root => sidebarElement(root)?.dataset.workspaceCollapsible === "true";
|
|
23
|
+
const sidebarHideable = root => sidebarElement(root)?.dataset.workspaceHideable === "true";
|
|
24
|
+
/**
|
|
25
|
+
* Asks the owning `AppWorkspace.Sidebar` to hide. The sidebar's `hidden` prop
|
|
26
|
+
* stays application state, so the controller only requests the change.
|
|
27
|
+
*/
|
|
28
|
+
export const APP_WORKSPACE_SIDEBAR_HIDE_EVENT = "k2b-app-workspace-sidebar-hide";
|
|
29
|
+
const previewSidebarHidden = (root, hidden) => {
|
|
30
|
+
const sidebar = sidebarElement(root);
|
|
31
|
+
if (!sidebar) return;
|
|
32
|
+
if (hidden) sidebar.dataset.workspaceHidePreview = "true";else delete sidebar.dataset.workspaceHidePreview;
|
|
33
|
+
};
|
|
23
34
|
const isVisible = element => Boolean(element && !element.hidden && getComputedStyle(element).display !== "none");
|
|
24
35
|
const elementSize = (element, kind) => {
|
|
25
36
|
if (!isVisible(element)) return 0;
|
|
@@ -192,7 +203,15 @@ export const installAppWorkspaceController = (options = {}) => {
|
|
|
192
203
|
const client = pendingClient;
|
|
193
204
|
pendingClient = null;
|
|
194
205
|
active.moved ||= client !== active.startClient;
|
|
195
|
-
|
|
206
|
+
const requested = active.startSize + (client - active.startClient) * active.direction;
|
|
207
|
+
// Below half the smallest visible width a hideable sidebar stays at its
|
|
208
|
+
// minimum and previews hiding; dragging back out resumes the live width.
|
|
209
|
+
const hiding = active.kind === "sidebar" && sidebarHideable(active.root) && requested < sizeLimits(active.root, active.handle, active.kind).min / 2;
|
|
210
|
+
if (hiding !== active.hiding) {
|
|
211
|
+
active.hiding = hiding;
|
|
212
|
+
previewSidebarHidden(active.root, hiding);
|
|
213
|
+
}
|
|
214
|
+
if (!hiding) active.liveSize = applySize(active.root, active.handle, active.kind, requested, {
|
|
196
215
|
snapSidebar: active.kind !== "sidebar"
|
|
197
216
|
});
|
|
198
217
|
if (active.kind === "sidebar" || active.kind === "detail") reconcilePanes(active.root, layoutState, active);
|
|
@@ -210,7 +229,15 @@ export const installAppWorkspaceController = (options = {}) => {
|
|
|
210
229
|
active = null;
|
|
211
230
|
delete finished.root.dataset.workspaceResizeActive;
|
|
212
231
|
delete finished.handle.dataset.workspaceResizeActive;
|
|
213
|
-
if (finished.
|
|
232
|
+
if (finished.hiding) {
|
|
233
|
+
// The request comes first, while the layout is still the one on screen,
|
|
234
|
+
// so the host sees the sidebar disappear in a single change. The width
|
|
235
|
+
// before the drag then stays the remembered width for the next time it
|
|
236
|
+
// shows; a host that declines the request gets that width back.
|
|
237
|
+
sidebarElement(finished.root)?.dispatchEvent(new CustomEvent(APP_WORKSPACE_SIDEBAR_HIDE_EVENT));
|
|
238
|
+
previewSidebarHidden(finished.root, false);
|
|
239
|
+
applySize(finished.root, finished.handle, "sidebar", finished.startSize);
|
|
240
|
+
} else if (finished.moved) {
|
|
214
241
|
// A pane's rendered width may have been fitted below the pointer's live
|
|
215
242
|
// preference to keep the main region usable. Persist that preference,
|
|
216
243
|
// then fit the visible panes from the updated state. Reapplying it through
|
|
@@ -245,6 +272,7 @@ export const installAppWorkspaceController = (options = {}) => {
|
|
|
245
272
|
startSize,
|
|
246
273
|
liveSize: startSize,
|
|
247
274
|
moved: false,
|
|
275
|
+
hiding: false,
|
|
248
276
|
direction: resizeDirection(handle, kind),
|
|
249
277
|
previousUserSelect: document.body.style.userSelect
|
|
250
278
|
};
|