@k2b/ui 0.44.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/actions/Dropdown.js +8 -1
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +11 -5
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/Tabs.js +3 -4
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/actions/ViewTabs.js +225 -93
- package/dist/browser/actions/ViewTabs.js.map +1 -1
- package/dist/browser/actions/menu-sheet.js +2 -3
- package/dist/browser/actions/menu-sheet.js.map +1 -1
- package/dist/browser/actions/phone-sheet.js +4 -0
- package/dist/browser/actions/phone-sheet.js.map +1 -0
- package/dist/browser/content/DataTable.js +47 -51
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/FileGrid.js +125 -99
- package/dist/browser/content/FileGrid.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js +5 -1
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/dialog-tone.js +26 -0
- package/dist/browser/feedback/dialog-tone.js.map +1 -0
- package/dist/browser/feedback/index.js.map +1 -1
- package/dist/browser/feedback/prompt-confirm.js +223 -0
- package/dist/browser/feedback/prompt-confirm.js.map +1 -0
- package/dist/browser/feedback/prompts.js +195 -343
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/inputs/ChoiceList.js +45 -17
- package/dist/browser/inputs/ChoiceList.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +1647 -334
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/TextInput.js +5 -4
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/choice.js +36 -9
- package/dist/browser/inputs/choice.js.map +1 -1
- package/dist/browser/inputs/date-input-messages.js +128 -0
- package/dist/browser/inputs/date-input-messages.js.map +1 -0
- package/dist/browser/inputs/date-input-status.js +132 -0
- package/dist/browser/inputs/date-input-status.js.map +1 -0
- package/dist/browser/inputs/date-input.js +334 -0
- package/dist/browser/inputs/date-input.js.map +1 -0
- package/dist/browser/inputs/date-sheet.js +49 -0
- package/dist/browser/inputs/date-sheet.js.map +1 -0
- package/dist/browser/internal/reveal-in-scroller.js +28 -0
- package/dist/browser/internal/reveal-in-scroller.js.map +1 -0
- package/dist/browser/intl/messages.js +6 -0
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +556 -528
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/BottomSheet.js +3 -0
- package/dist/browser/layout/BottomSheet.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +130 -108
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/DetailSections.js +1019 -0
- package/dist/browser/layout/DetailSections.js.map +1 -0
- package/dist/browser/layout/DetailsToggle.js +32 -0
- package/dist/browser/layout/DetailsToggle.js.map +1 -0
- package/dist/browser/layout/Discussion.js +3 -0
- package/dist/browser/layout/Discussion.js.map +1 -1
- package/dist/browser/layout/MobileShell.js +116 -94
- package/dist/browser/layout/MobileShell.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +33 -10
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/PanelDialog.js +167 -132
- package/dist/browser/layout/PanelDialog.js.map +1 -1
- package/dist/browser/layout/Settings.js +175 -139
- package/dist/browser/layout/Settings.js.map +1 -1
- package/dist/browser/layout/SettingsModal.js +2 -4
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +12 -0
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/detail-sections-messages.js +123 -0
- package/dist/browser/layout/detail-sections-messages.js.map +1 -0
- package/dist/browser/layout/index.js +2 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/surfaces/Avatar.js +3 -1
- package/dist/browser/surfaces/Avatar.js.map +1 -1
- package/dist/browser/surfaces/AvatarStack.js +95 -61
- package/dist/browser/surfaces/AvatarStack.js.map +1 -1
- package/dist/browser/surfaces/ChangeList.js +77 -0
- package/dist/browser/surfaces/ChangeList.js.map +1 -0
- package/dist/browser/surfaces/StatusBadge.js +47 -14
- package/dist/browser/surfaces/StatusBadge.js.map +1 -1
- package/dist/browser/surfaces/index.js +2 -1
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/text-editor/TextEditor.js +26 -8
- package/dist/browser/text-editor/TextEditor.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +6 -0
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +1 -1
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/Tabs.js +3 -4
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/actions/ViewTabs.js +144 -37
- package/dist/ssr/actions/ViewTabs.js.map +1 -1
- package/dist/ssr/actions/menu-sheet.js +2 -3
- package/dist/ssr/actions/menu-sheet.js.map +1 -1
- package/dist/ssr/actions/phone-sheet.js +4 -0
- package/dist/ssr/actions/phone-sheet.js.map +1 -0
- package/dist/ssr/content/DataTable.js +1 -2
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/FileGrid.js +36 -22
- package/dist/ssr/content/FileGrid.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js +5 -1
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/dialog-tone.js +26 -0
- package/dist/ssr/feedback/dialog-tone.js.map +1 -0
- package/dist/ssr/feedback/index.js.map +1 -1
- package/dist/ssr/feedback/prompt-confirm.js +123 -0
- package/dist/ssr/feedback/prompt-confirm.js.map +1 -0
- package/dist/ssr/feedback/prompts.js +60 -132
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/inputs/ChoiceList.js +29 -9
- package/dist/ssr/inputs/ChoiceList.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +1183 -166
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/TextInput.js +5 -4
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/choice.js +36 -9
- package/dist/ssr/inputs/choice.js.map +1 -1
- package/dist/ssr/inputs/date-input-messages.js +128 -0
- package/dist/ssr/inputs/date-input-messages.js.map +1 -0
- package/dist/ssr/inputs/date-input-status.js +132 -0
- package/dist/ssr/inputs/date-input-status.js.map +1 -0
- package/dist/ssr/inputs/date-input.js +334 -0
- package/dist/ssr/inputs/date-input.js.map +1 -0
- package/dist/ssr/inputs/date-sheet.js +44 -0
- package/dist/ssr/inputs/date-sheet.js.map +1 -0
- package/dist/ssr/internal/reveal-in-scroller.js +28 -0
- package/dist/ssr/internal/reveal-in-scroller.js.map +1 -0
- package/dist/ssr/intl/messages.js +6 -0
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +71 -50
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/BottomSheet.js +3 -0
- package/dist/ssr/layout/BottomSheet.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +17 -0
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/DetailSections.js +762 -0
- package/dist/ssr/layout/DetailSections.js.map +1 -0
- package/dist/ssr/layout/DetailsToggle.js +29 -0
- package/dist/ssr/layout/DetailsToggle.js.map +1 -0
- package/dist/ssr/layout/Discussion.js +3 -0
- package/dist/ssr/layout/Discussion.js.map +1 -1
- package/dist/ssr/layout/MobileShell.js +45 -28
- package/dist/ssr/layout/MobileShell.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +29 -6
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/PanelDialog.js +48 -30
- package/dist/ssr/layout/PanelDialog.js.map +1 -1
- package/dist/ssr/layout/Settings.js +34 -18
- package/dist/ssr/layout/Settings.js.map +1 -1
- package/dist/ssr/layout/SettingsModal.js +2 -4
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +12 -0
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/detail-sections-messages.js +123 -0
- package/dist/ssr/layout/detail-sections-messages.js.map +1 -0
- package/dist/ssr/layout/index.js +2 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/surfaces/Avatar.js +3 -1
- package/dist/ssr/surfaces/Avatar.js.map +1 -1
- package/dist/ssr/surfaces/AvatarStack.js +61 -32
- package/dist/ssr/surfaces/AvatarStack.js.map +1 -1
- package/dist/ssr/surfaces/ChangeList.js +37 -0
- package/dist/ssr/surfaces/ChangeList.js.map +1 -0
- package/dist/ssr/surfaces/StatusBadge.js +26 -8
- package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
- package/dist/ssr/surfaces/index.js +2 -1
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/text-editor/TextEditor.js +26 -8
- package/dist/ssr/text-editor/TextEditor.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/FilterChip.d.ts +4 -0
- package/dist/types/actions/ViewTabs.d.ts +11 -1
- package/dist/types/actions/menu-sheet.d.ts +1 -3
- package/dist/types/actions/phone-sheet.d.ts +3 -0
- package/dist/types/content/FileGrid.d.ts +6 -0
- package/dist/types/feedback/dialog-tone.d.ts +10 -0
- package/dist/types/feedback/index.d.ts +1 -0
- package/dist/types/feedback/prompt-confirm.d.ts +19 -0
- package/dist/types/feedback/prompts.d.ts +4 -8
- package/dist/types/inputs/ChoiceList.d.ts +7 -3
- package/dist/types/inputs/DatePicker.d.ts +13 -3
- package/dist/types/inputs/TextInput.d.ts +1 -1
- package/dist/types/inputs/choice.d.ts +9 -3
- package/dist/types/inputs/date-input-messages.d.ts +64 -0
- package/dist/types/inputs/date-input-status.d.ts +35 -0
- package/dist/types/inputs/date-input.d.ts +90 -0
- package/dist/types/inputs/date-sheet.d.ts +14 -0
- package/dist/types/internal/reveal-in-scroller.d.ts +6 -0
- package/dist/types/intl/messages.d.ts +3 -0
- package/dist/types/layout/AppWorkspace.d.ts +14 -0
- package/dist/types/layout/BottomSheet.d.ts +3 -0
- package/dist/types/layout/DetailPanel.d.ts +9 -0
- package/dist/types/layout/DetailSections.d.ts +156 -0
- package/dist/types/layout/DetailsToggle.d.ts +13 -0
- package/dist/types/layout/PageTitle.d.ts +7 -0
- package/dist/types/layout/PanelDialog.d.ts +3 -0
- package/dist/types/layout/Settings.d.ts +17 -1
- package/dist/types/layout/detail-sections-messages.d.ts +59 -0
- package/dist/types/layout/index.d.ts +5 -2
- package/dist/types/surfaces/Avatar.d.ts +3 -0
- package/dist/types/surfaces/AvatarStack.d.ts +20 -1
- package/dist/types/surfaces/ChangeList.d.ts +20 -0
- package/dist/types/surfaces/StatusBadge.d.ts +5 -0
- package/dist/types/surfaces/index.d.ts +5 -3
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/PageTitle.tsx"],"sourcesContent":["import { createContext, createRoot, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, useContext } from \"solid-js\";\nimport { Dynamic, insert, isServer } from \"solid-js/web\";\nimport { IconButtonLink } from \"../actions/Button\";\nimport { installPageTitleController, PAGE_TITLE_CONTROLLER_ATTRIBUTE } from \"./page-title-controller\";\nimport { useWorkspaceMessages } from \"./workspace-messages\";\n\n/** A page above the current one. Only pages someone can go back to are levels, so each has a link. */\nexport type PageTrailLink = { title: string; href: string };\n/** The current page and the pages above it, nearest last. */\nexport type PageTrailState = { title: string; ancestors: PageTrailLink[] };\n\nexport type PageTitleProps = {\n trail: PageTrailState;\n /** Quiet text after the title, for example a count. */\n subtitle?: JSX.Element;\n /** Defaults to `\"h1\"`. Chrome that repeats a title the page already shows uses `\"p\"`. */\n as?: \"h1\" | \"h2\" | \"p\";\n /**\n * Marks a title drawn by surrounding chrome, such as the workspace head or a\n * host shell. It steps back when the page renders its own `PageTitle`, so a\n * page has one title with one way up.\n */\n fallback?: boolean;\n class?: string;\n};\n\n/** Window event a host dispatches after publishing a new page trail. */\nexport const PAGE_TRAIL_EVENT = \"k2b:page-trail\";\nconst SOURCE_SELECTOR = \"script[data-k2b-page-trail]\";\n\nconst isTrail = (value: unknown): value is PageTrailState => {\n if (!value || typeof value !== \"object\") return false;\n const trail = value as Partial<PageTrailState>;\n return (\n typeof trail.title === \"string\" &&\n Array.isArray(trail.ancestors) &&\n trail.ancestors.every((link) => typeof link?.title === \"string\" && typeof link?.href === \"string\")\n );\n};\n\n/** The trail a host published for this document, or `undefined` outside a browser or without one. */\nexport const readPageTrail = (): PageTrailState | undefined => {\n if (typeof document === \"undefined\") return undefined;\n const source = document.querySelector(SOURCE_SELECTOR);\n if (!source?.textContent) return undefined;\n try {\n const value: unknown = JSON.parse(source.textContent);\n return isTrail(value) ? value : undefined;\n } catch {\n return undefined;\n }\n};\n\n/** `<` is escaped so a title can never end the script element it travels in. */\nconst serializeTrail = (trail: PageTrailState): string => JSON.stringify(trail).replace(/</g, \"\\\\u003c\");\n\n/**\n * Publishes a new trail for the document in the browser, for example after an\n * in-page navigation. Workspace heads and page titles that read the host's\n * trail follow it.\n */\nexport const setPageTrail = (trail: PageTrailState): void => {\n if (typeof document === \"undefined\") return;\n let source = document.querySelector(SOURCE_SELECTOR);\n if (!source) {\n source = document.createElement(\"script\");\n source.setAttribute(\"type\", \"application/json\");\n source.setAttribute(\"data-k2b-page-trail\", \"\");\n document.body.append(source);\n }\n source.textContent = serializeTrail(trail);\n window.dispatchEvent(new Event(PAGE_TRAIL_EVENT));\n};\n\nconst PageTrailContext = createContext<() => PageTrailState | undefined>();\n\n/**\n * Gives a host's page trail to everything below it. During server rendering\n * the context carries it; the provider also publishes it into the document,\n * where browser-rendered parts such as islands read it. Below a provider that\n * renders in the browser, its `trail` prop is the source: update the prop.\n */\nexport function PageTrailProvider(props: { trail: PageTrailState | undefined; children: JSX.Element }): JSX.Element {\n return (\n <PageTrailContext.Provider value={() => props.trail}>\n <Show when={props.trail}>\n {(trail) => <script type=\"application/json\" data-k2b-page-trail=\"\" innerHTML={serializeTrail(trail())} />}\n </Show>\n {props.children}\n </PageTrailContext.Provider>\n );\n}\n\n/** The host's page trail: from the provider while rendering below it, otherwise from the document. */\nexport const usePageTrail = (): (() => PageTrailState | undefined) => {\n const context = useContext(PageTrailContext);\n if (context) return context;\n if (typeof window === \"undefined\") return () => undefined;\n const [trail, setTrail] = createSignal(readPageTrail());\n const update = () => setTrail(readPageTrail());\n window.addEventListener(PAGE_TRAIL_EVENT, update);\n onCleanup(() => window.removeEventListener(PAGE_TRAIL_EVENT, update));\n return trail;\n};\n\n/**\n * A page title with its way up. The number of pages above decides the form:\n * none shows the title alone; one puts \"‹ Parent\" above it; more put a path\n * row above it whose middle collapses into \"…\" only when it does not fit.\n * Both rows share the same height, so the title never moves between depths.\n * On phones a back arrow left of the title replaces the row above.\n */\nexport function PageTitle(props: PageTitleProps): JSX.Element {\n const messages = useWorkspaceMessages();\n // A title rendered on the server from the host's trail follows the host's later trails (see `followPageTrail`).\n const host = isServer ? useContext(PageTrailContext) : undefined;\n const menuId = `k2b-page-title-menu-${createUniqueId()}`;\n const ancestors = () => props.trail.ancestors;\n const parent = () => ancestors().at(-1);\n let root: HTMLDivElement | undefined;\n // A host may control every title in the document at once; a title outside\n // one still collapses its path.\n onMount(() => {\n if (!root || root.closest(`[${PAGE_TITLE_CONTROLLER_ATTRIBUTE}]`)) return;\n onCleanup(installPageTitleController(root));\n });\n return (\n <div\n ref={root}\n class={`k2b-page-title ${props.class ?? \"\"}`}\n data-depth={ancestors().length}\n data-fallback={props.fallback ? \"\" : undefined}\n data-k2b-server={isServer && props.trail === host?.() ? \"\" : undefined}\n >\n <Show when={parent()}>\n {(up) => (\n <IconButtonLink\n class=\"k2b-page-title__back\"\n href={up().href}\n label={messages().backTo({ page: up().title })}\n data-k2b-page-trail-link=\"\"\n data-k2b-page-trail-up=\"\"\n >\n <i class=\"ti ti-chevron-left\" aria-hidden=\"true\" />\n </IconButtonLink>\n )}\n </Show>\n <div class=\"k2b-page-title__copy\">\n <Show when={ancestors().length === 1 && parent()}>\n {(up) => (\n <nav class=\"k2b-page-title__trail\" aria-label={messages().path}>\n <a\n class=\"k2b-page-title__up\"\n href={up().href}\n aria-label={messages().backTo({ page: up().title })}\n data-k2b-page-trail-link=\"\"\n data-k2b-page-trail-up=\"\"\n >\n <i class=\"ti ti-chevron-left\" aria-hidden=\"true\" />\n <span class=\"k2b-page-title__label\">{up().title}</span>\n </a>\n </nav>\n )}\n </Show>\n <Show when={ancestors().length > 1}>\n <nav class=\"k2b-page-title__trail\" aria-label={messages().path}>\n <ol class=\"k2b-page-title__path\">\n <For each={ancestors()}>\n {(link, index) => (\n <>\n <Show when={index() === 1}>\n <li class=\"k2b-page-title__more\" hidden>\n <i class=\"ti ti-chevron-right\" aria-hidden=\"true\" />\n <button type=\"button\" class=\"k2b-page-title__more-button\" popovertarget={menuId} aria-label={messages().moreLevels}>\n …\n </button>\n </li>\n </Show>\n <li class=\"k2b-page-title__crumb\" data-index={index()}>\n <Show when={index() > 0}>\n <i class=\"ti ti-chevron-right\" aria-hidden=\"true\" />\n </Show>\n <a\n href={link.href}\n data-k2b-page-trail-link=\"\"\n data-k2b-page-trail-up={index() === ancestors().length - 1 ? \"\" : undefined}\n class=\"k2b-page-title__label\"\n >\n {link.title}\n </a>\n </li>\n </>\n )}\n </For>\n </ol>\n <div id={menuId} popover=\"auto\" class=\"k2b-dropdown__menu k2b-page-title__menu\">\n <For each={ancestors()}>\n {(link, index) => (\n <a class=\"k2b-dropdown__item\" href={link.href} data-index={index()} data-k2b-page-trail-link=\"\" hidden>\n {link.title}\n </a>\n )}\n </For>\n </div>\n </nav>\n </Show>\n <Dynamic component={props.as ?? \"h1\"} class=\"k2b-page-title__title\">\n <span class=\"k2b-page-title__text\">{props.trail.title}</span>\n <Show when={props.subtitle}>\n <small class=\"k2b-page-title__subtitle\">{props.subtitle}</small>\n </Show>\n </Dynamic>\n </div>\n </div>\n );\n}\n\n/**\n * Keeps server-rendered titles of the host's trail current: a workspace head\n * that never hydrates, its heading, and an app's own header title from the\n * host's trail.\n * When the host publishes a new trail, for example after `setPageTrail()`,\n * each such title is replaced in place by a live one with the same element,\n * class, and subtitle, and a head learns whether it now has a page above it.\n * Titles inside islands render in the browser anyway. Returns the disposer.\n */\nexport const followPageTrail = (root: ParentNode = document): (() => void) => {\n const disposers = new Map<Text, () => void>();\n const upgrade = () => {\n for (const [place, dispose] of disposers) {\n if (place.isConnected) continue;\n dispose();\n disposers.delete(place);\n }\n const trail = readPageTrail();\n for (const element of root.querySelectorAll<HTMLElement>(\".k2b-page-title[data-k2b-server]\")) {\n const row = element.parentElement;\n if (!row || element.closest(\"solid-island, solid-client\")) continue;\n const tag = element.querySelector(\".k2b-page-title__title\")?.localName;\n const as = tag === \"p\" || tag === \"h2\" ? tag : \"h1\";\n const fallback = element.hasAttribute(\"data-fallback\");\n const extra = [...element.classList].filter((name) => name !== \"k2b-page-title\").join(\" \") || undefined;\n const subtitle = element.querySelector(\".k2b-page-title__subtitle\");\n const subtitleNodes = subtitle ? [...subtitle.childNodes] : undefined;\n // A link focused in the server title keeps focus in the live one: same kind, then same address.\n const active = document.activeElement;\n const focused =\n active && element.contains(active)\n ? {\n kind: [\"k2b-page-title__up\", \"k2b-page-title__back\"].find((name) => active.classList.contains(name)),\n href: active.getAttribute(\"href\"),\n }\n : undefined;\n // The live title takes the server title's place, before whatever follows it in the row.\n const place = document.createTextNode(\"\");\n row.insertBefore(place, element);\n element.remove();\n disposers.set(\n place,\n createRoot((dispose) => {\n const live = usePageTrail();\n insert(\n row,\n () => (\n <Show when={live()}>\n {(current) => <PageTitle trail={current()} as={as} fallback={fallback} class={extra} subtitle={subtitleNodes} />}\n </Show>\n ),\n place,\n );\n return dispose;\n }),\n );\n const upgraded = place.previousSibling;\n if (focused && upgraded instanceof HTMLElement && upgraded.classList.contains(\"k2b-page-title\")) {\n const links = focused.kind ? [...upgraded.querySelectorAll<HTMLElement>(`a.${focused.kind}`)] : [];\n const link =\n links.find((candidate) => candidate.getAttribute(\"href\") === focused.href) ??\n links[0] ??\n upgraded.querySelector<HTMLElement>(\"a[data-k2b-page-trail-up]\");\n link?.focus({ preventScroll: true });\n }\n }\n // A server-rendered workspace heading carries only the title.\n for (const heading of root.querySelectorAll<HTMLElement>(\"[data-k2b-page-trail-title][data-k2b-server]\"))\n if (trail && !heading.closest(\"solid-island, solid-client\")) heading.textContent = trail.title;\n // The row's `data-trail` decides whether it shows; it follows the depth. A\n // workspace head holds its title in its lead.\n for (const row of root.querySelectorAll<HTMLElement>(\n \"[data-trail]:has(> .k2b-page-title[data-fallback]), [data-trail]:has(> .k2b-app-workspace__head-lead > .k2b-page-title[data-fallback])\",\n ))\n if (!row.closest(\"solid-island, solid-client\")) row.dataset.trail = trail?.ancestors.length ? \"up\" : \"title\";\n };\n window.addEventListener(PAGE_TRAIL_EVENT, upgrade);\n return () => {\n window.removeEventListener(PAGE_TRAIL_EVENT, upgrade);\n for (const dispose of disposers.values()) dispose();\n disposers.clear();\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/PageTitle.tsx"],"sourcesContent":["import { createContext, createRoot, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, useContext } from \"solid-js\";\nimport { Dynamic, insert, isServer } from \"solid-js/web\";\nimport { IconButtonLink } from \"../actions/Button\";\nimport { installPageTitleController, PAGE_TITLE_CONTROLLER_ATTRIBUTE } from \"./page-title-controller\";\nimport { useWorkspaceMessages } from \"./workspace-messages\";\n\n/** A page above the current one. Only pages someone can go back to are levels, so each has a link. */\nexport type PageTrailLink = { title: string; href: string };\n/** The current page and the pages above it, nearest last. */\nexport type PageTrailState = { title: string; ancestors: PageTrailLink[] };\n\nexport type PageTitleProps = {\n trail: PageTrailState;\n /** Quiet text after the title, for example a count. */\n subtitle?: JSX.Element;\n /** Defaults to `\"h1\"`. Chrome that repeats a title the page already shows uses `\"p\"`. */\n as?: \"h1\" | \"h2\" | \"p\";\n /**\n * Marks a title drawn by surrounding chrome, such as the workspace head or a\n * host shell. It steps back when the page renders its own `PageTitle`, so a\n * page has one title with one way up.\n */\n fallback?: boolean;\n class?: string;\n};\n\n/** Window event a host dispatches after publishing a new page trail. */\nexport const PAGE_TRAIL_EVENT = \"k2b:page-trail\";\nconst SOURCE_SELECTOR = \"script[data-k2b-page-trail]\";\n\nconst isTrail = (value: unknown): value is PageTrailState => {\n if (!value || typeof value !== \"object\") return false;\n const trail = value as Partial<PageTrailState>;\n return (\n typeof trail.title === \"string\" &&\n Array.isArray(trail.ancestors) &&\n trail.ancestors.every((link) => typeof link?.title === \"string\" && typeof link?.href === \"string\")\n );\n};\n\n/** The trail a host published for this document, or `undefined` outside a browser or without one. */\nexport const readPageTrail = (): PageTrailState | undefined => {\n if (typeof document === \"undefined\") return undefined;\n const source = document.querySelector(SOURCE_SELECTOR);\n if (!source?.textContent) return undefined;\n try {\n const value: unknown = JSON.parse(source.textContent);\n return isTrail(value) ? value : undefined;\n } catch {\n return undefined;\n }\n};\n\n/** `<` is escaped so a title can never end the script element it travels in. */\nconst serializeTrail = (trail: PageTrailState): string => JSON.stringify(trail).replace(/</g, \"\\\\u003c\");\n\n/**\n * Publishes a new trail for the document in the browser, for example after an\n * in-page navigation. Workspace heads and page titles that read the host's\n * trail follow it.\n */\nexport const setPageTrail = (trail: PageTrailState): void => {\n if (typeof document === \"undefined\") return;\n let source = document.querySelector(SOURCE_SELECTOR);\n if (!source) {\n source = document.createElement(\"script\");\n source.setAttribute(\"type\", \"application/json\");\n source.setAttribute(\"data-k2b-page-trail\", \"\");\n document.body.append(source);\n }\n source.textContent = serializeTrail(trail);\n window.dispatchEvent(new Event(PAGE_TRAIL_EVENT));\n};\n\nconst PageTrailContext = createContext<() => PageTrailState | undefined>();\nconst OwnTitleContext = createContext<() => void>();\n/** The element around a page whose `data-k2b-own-title` says that the page shows its own `PageTitle`. */\nconst OWN_TITLE_HOST = \"data-k2b-title-host\";\nconst syncOwnTitle = (host: HTMLElement) =>\n host.toggleAttribute(\"data-k2b-own-title\", host.querySelector(\".k2b-page-title:not([data-fallback])\") !== null);\n\n/**\n * Gives a host's page trail to everything below it. During server rendering\n * the context carries it; the provider also publishes it into the document,\n * where browser-rendered parts such as islands read it. Below a provider that\n * renders in the browser, its `trail` prop is the source: update the prop.\n *\n * `onOwnTitle` runs on the server for each `PageTitle` below that is not a\n * fallback. The host then sets `data-k2b-own-title` on an element around the\n * page, inside the `k2b-ui` root, so the chrome's fallback titles step back.\n * With `data-k2b-title-host` on that element, titles that mount or leave in\n * the browser keep the attribute current.\n */\nexport function PageTrailProvider(props: {\n trail: PageTrailState | undefined;\n onOwnTitle?: () => void;\n children: JSX.Element;\n}): JSX.Element {\n return (\n <PageTrailContext.Provider value={() => props.trail}>\n <OwnTitleContext.Provider value={() => props.onOwnTitle?.()}>\n <Show when={props.trail}>\n {(trail) => <script type=\"application/json\" data-k2b-page-trail=\"\" innerHTML={serializeTrail(trail())} />}\n </Show>\n {props.children}\n </OwnTitleContext.Provider>\n </PageTrailContext.Provider>\n );\n}\n\n/** The host's page trail: from the provider while rendering below it, otherwise from the document. */\nexport const usePageTrail = (): (() => PageTrailState | undefined) => {\n const context = useContext(PageTrailContext);\n if (context) return context;\n if (typeof window === \"undefined\") return () => undefined;\n const [trail, setTrail] = createSignal(readPageTrail());\n const update = () => setTrail(readPageTrail());\n window.addEventListener(PAGE_TRAIL_EVENT, update);\n onCleanup(() => window.removeEventListener(PAGE_TRAIL_EVENT, update));\n return trail;\n};\n\n/**\n * A page title with its way up. The number of pages above decides the form:\n * none shows the title alone; one puts \"‹ Parent\" above it; more put a path\n * row above it whose middle collapses into \"…\" only when it does not fit.\n * Both rows share the same height, so the title never moves between depths.\n * On phones a back arrow left of the title replaces the row above.\n */\nexport function PageTitle(props: PageTitleProps): JSX.Element {\n const messages = useWorkspaceMessages();\n // A title rendered on the server from the host's trail follows the host's later trails (see `followPageTrail`).\n const host = isServer ? useContext(PageTrailContext) : undefined;\n if (isServer && !props.fallback) useContext(OwnTitleContext)?.();\n const menuId = `k2b-page-title-menu-${createUniqueId()}`;\n const ancestors = () => props.trail.ancestors;\n const parent = () => ancestors().at(-1);\n let root: HTMLDivElement | undefined;\n // A host may control every title in the document at once; a title outside\n // one still collapses its path.\n onMount(() => {\n // A title that the page shows after loading, such as one a client-side step brings, marks its host as well.\n // Without a host that marks its page, the `k2b-ui` root stands for it.\n const titleHost = props.fallback ? null : (root?.closest<HTMLElement>(`[${OWN_TITLE_HOST}]`) ?? root?.closest<HTMLElement>(\".k2b-ui\"));\n if (titleHost) {\n syncOwnTitle(titleHost);\n onCleanup(() => queueMicrotask(() => syncOwnTitle(titleHost)));\n }\n if (!root || root.closest(`[${PAGE_TITLE_CONTROLLER_ATTRIBUTE}]`)) return;\n onCleanup(installPageTitleController(root));\n });\n return (\n <div\n ref={root}\n class={`k2b-page-title ${props.class ?? \"\"}`}\n data-depth={ancestors().length}\n data-fallback={props.fallback ? \"\" : undefined}\n data-k2b-server={isServer && props.trail === host?.() ? \"\" : undefined}\n >\n <Show when={parent()}>\n {(up) => (\n <IconButtonLink\n class=\"k2b-page-title__back\"\n href={up().href}\n label={messages().backTo({ page: up().title })}\n data-k2b-page-trail-link=\"\"\n data-k2b-page-trail-up=\"\"\n >\n <i class=\"ti ti-chevron-left\" aria-hidden=\"true\" />\n </IconButtonLink>\n )}\n </Show>\n <div class=\"k2b-page-title__copy\">\n <Show when={ancestors().length === 1 && parent()}>\n {(up) => (\n <nav class=\"k2b-page-title__trail\" aria-label={messages().path}>\n <a\n class=\"k2b-page-title__up\"\n href={up().href}\n aria-label={messages().backTo({ page: up().title })}\n data-k2b-page-trail-link=\"\"\n data-k2b-page-trail-up=\"\"\n >\n <i class=\"ti ti-chevron-left\" aria-hidden=\"true\" />\n <span class=\"k2b-page-title__label\">{up().title}</span>\n </a>\n </nav>\n )}\n </Show>\n <Show when={ancestors().length > 1}>\n <nav class=\"k2b-page-title__trail\" aria-label={messages().path}>\n <ol class=\"k2b-page-title__path\">\n <For each={ancestors()}>\n {(link, index) => (\n <>\n <Show when={index() === 1}>\n <li class=\"k2b-page-title__more\" hidden>\n <i class=\"ti ti-chevron-right\" aria-hidden=\"true\" />\n <button type=\"button\" class=\"k2b-page-title__more-button\" popovertarget={menuId} aria-label={messages().moreLevels}>\n …\n </button>\n </li>\n </Show>\n <li class=\"k2b-page-title__crumb\" data-index={index()}>\n <Show when={index() > 0}>\n <i class=\"ti ti-chevron-right\" aria-hidden=\"true\" />\n </Show>\n <a\n href={link.href}\n data-k2b-page-trail-link=\"\"\n data-k2b-page-trail-up={index() === ancestors().length - 1 ? \"\" : undefined}\n class=\"k2b-page-title__label\"\n >\n {link.title}\n </a>\n </li>\n </>\n )}\n </For>\n </ol>\n <div id={menuId} popover=\"auto\" class=\"k2b-dropdown__menu k2b-page-title__menu\">\n <For each={ancestors()}>\n {(link, index) => (\n <a class=\"k2b-dropdown__item\" href={link.href} data-index={index()} data-k2b-page-trail-link=\"\" hidden>\n {link.title}\n </a>\n )}\n </For>\n </div>\n </nav>\n </Show>\n <Dynamic component={props.as ?? \"h1\"} class=\"k2b-page-title__title\">\n <span class=\"k2b-page-title__text\">{props.trail.title}</span>\n <Show when={props.subtitle}>\n <small class=\"k2b-page-title__subtitle\">{props.subtitle}</small>\n </Show>\n </Dynamic>\n </div>\n </div>\n );\n}\n\n/**\n * Keeps server-rendered titles of the host's trail current: a workspace head\n * that never hydrates, its heading, and an app's own header title from the\n * host's trail.\n * When the host publishes a new trail, for example after `setPageTrail()`,\n * each such title is replaced in place by a live one with the same element,\n * class, and subtitle, and a head learns whether it now has a page above it.\n * Titles inside islands render in the browser anyway. Returns the disposer.\n */\nexport const followPageTrail = (root: ParentNode = document): (() => void) => {\n const disposers = new Map<Text, () => void>();\n const upgrade = () => {\n for (const [place, dispose] of disposers) {\n if (place.isConnected) continue;\n dispose();\n disposers.delete(place);\n }\n const trail = readPageTrail();\n for (const element of root.querySelectorAll<HTMLElement>(\".k2b-page-title[data-k2b-server]\")) {\n const row = element.parentElement;\n if (!row || element.closest(\"solid-island, solid-client\")) continue;\n const tag = element.querySelector(\".k2b-page-title__title\")?.localName;\n const as = tag === \"p\" || tag === \"h2\" ? tag : \"h1\";\n const fallback = element.hasAttribute(\"data-fallback\");\n const extra = [...element.classList].filter((name) => name !== \"k2b-page-title\").join(\" \") || undefined;\n const subtitle = element.querySelector(\".k2b-page-title__subtitle\");\n const subtitleNodes = subtitle ? [...subtitle.childNodes] : undefined;\n // A link focused in the server title keeps focus in the live one: same kind, then same address.\n const active = document.activeElement;\n const focused =\n active && element.contains(active)\n ? {\n kind: [\"k2b-page-title__up\", \"k2b-page-title__back\"].find((name) => active.classList.contains(name)),\n href: active.getAttribute(\"href\"),\n }\n : undefined;\n // The live title takes the server title's place, before whatever follows it in the row.\n const place = document.createTextNode(\"\");\n row.insertBefore(place, element);\n element.remove();\n disposers.set(\n place,\n createRoot((dispose) => {\n const live = usePageTrail();\n insert(\n row,\n () => (\n <Show when={live()}>\n {(current) => <PageTitle trail={current()} as={as} fallback={fallback} class={extra} subtitle={subtitleNodes} />}\n </Show>\n ),\n place,\n );\n return dispose;\n }),\n );\n const upgraded = place.previousSibling;\n if (focused && upgraded instanceof HTMLElement && upgraded.classList.contains(\"k2b-page-title\")) {\n const links = focused.kind ? [...upgraded.querySelectorAll<HTMLElement>(`a.${focused.kind}`)] : [];\n const link =\n links.find((candidate) => candidate.getAttribute(\"href\") === focused.href) ??\n links[0] ??\n upgraded.querySelector<HTMLElement>(\"a[data-k2b-page-trail-up]\");\n link?.focus({ preventScroll: true });\n }\n }\n // A server-rendered workspace heading carries only the title.\n for (const heading of root.querySelectorAll<HTMLElement>(\"[data-k2b-page-trail-title][data-k2b-server]\"))\n if (trail && !heading.closest(\"solid-island, solid-client\")) heading.textContent = trail.title;\n // The row's `data-trail` decides whether it shows; it follows the depth. A\n // workspace head holds its title in its lead.\n for (const row of root.querySelectorAll<HTMLElement>(\n \"[data-trail]:has(> .k2b-page-title[data-fallback]), [data-trail]:has(> .k2b-app-workspace__head-lead > .k2b-page-title[data-fallback])\",\n ))\n if (!row.closest(\"solid-island, solid-client\")) row.dataset.trail = trail?.ancestors.length ? \"up\" : \"title\";\n };\n window.addEventListener(PAGE_TRAIL_EVENT, upgrade);\n return () => {\n window.removeEventListener(PAGE_TRAIL_EVENT, upgrade);\n for (const dispose of disposers.values()) dispose();\n disposers.clear();\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,30 +15,33 @@ import { createComponent as _$createComponent } from "solid-js/web";
|
|
|
15
15
|
var _tmpl$ = /*#__PURE__*/_$template(`<p>`),
|
|
16
16
|
_tmpl$2 = /*#__PURE__*/_$template(`<div class=k2b-panel-dialog__actions>`),
|
|
17
17
|
_tmpl$3 = /*#__PURE__*/_$template(`<button type=button class=k2b-dialog__close><i class="ti ti-x"aria-hidden=true>`),
|
|
18
|
-
_tmpl$4 = /*#__PURE__*/_$template(`<header class=k2b-panel-dialog__header><!$><!/><div class=k2b-panel-dialog__heading
|
|
18
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<header class=k2b-panel-dialog__header><!$><!/><div class=k2b-panel-dialog__heading><!$><!/><h2></h2><!$><!/></div><!$><!/><!$><!/>`),
|
|
19
19
|
_tmpl$5 = /*#__PURE__*/_$template(`<span class="k2b-panel-dialog__icon k2b-icon-tile"aria-hidden=true><i>`),
|
|
20
|
-
_tmpl$6 = /*#__PURE__*/_$template(`<
|
|
21
|
-
_tmpl$7 = /*#__PURE__*/_$template(`<
|
|
22
|
-
_tmpl$8 = /*#__PURE__*/_$template(`<
|
|
23
|
-
_tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-
|
|
24
|
-
_tmpl$0 = /*#__PURE__*/_$template(`<
|
|
25
|
-
_tmpl$1 = /*#__PURE__*/_$template(`<
|
|
26
|
-
_tmpl$10 = /*#__PURE__*/_$template(`<
|
|
27
|
-
_tmpl$11 = /*#__PURE__*/_$template(`<
|
|
28
|
-
_tmpl$12 = /*#__PURE__*/_$template(`<
|
|
29
|
-
_tmpl$13 = /*#__PURE__*/_$template(`<
|
|
30
|
-
_tmpl$14 = /*#__PURE__*/_$template(`<
|
|
31
|
-
_tmpl$15 = /*#__PURE__*/_$template(`<
|
|
20
|
+
_tmpl$6 = /*#__PURE__*/_$template(`<span class=k2b-sr-only data-dialog-tone-label>`),
|
|
21
|
+
_tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-panel-dialog__body>`),
|
|
22
|
+
_tmpl$8 = /*#__PURE__*/_$template(`<footer class=k2b-panel-dialog__footer>`),
|
|
23
|
+
_tmpl$9 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-subtitle>`),
|
|
24
|
+
_tmpl$0 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-copy><span class=k2b-panel-dialog__section-title></span><!$><!/>`),
|
|
25
|
+
_tmpl$1 = /*#__PURE__*/_$template(`<i class="ti ti-eye"aria-hidden=true>`),
|
|
26
|
+
_tmpl$10 = /*#__PURE__*/_$template(`<div>`),
|
|
27
|
+
_tmpl$11 = /*#__PURE__*/_$template(`<p class=k2b-panel-dialog__section-subtitle>`),
|
|
28
|
+
_tmpl$12 = /*#__PURE__*/_$template(`<i class="ti ti-eye-off"aria-hidden=true>`),
|
|
29
|
+
_tmpl$13 = /*#__PURE__*/_$template(`<section class=k2b-panel-dialog__section><!$><!/><header><!$><!/><div><h3></h3><!$><!/></div><!$><!/><!$><!/></header><div class=k2b-panel-dialog__section-body>`),
|
|
30
|
+
_tmpl$14 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
|
|
31
|
+
_tmpl$15 = /*#__PURE__*/_$template(`<span class=k2b-panel-dialog__section-icon><i aria-hidden=true>`),
|
|
32
|
+
_tmpl$16 = /*#__PURE__*/_$template(`<div class=k2b-panel-dialog>`);
|
|
32
33
|
import { createContext, createEffect, createSignal, createUniqueId, Show, useContext } from "solid-js";
|
|
33
34
|
import { Button } from "../actions/Button";
|
|
34
35
|
import { Tabs } from "../actions/Tabs";
|
|
36
|
+
import { dialogToneIcon, dialogToneLabel } from "../feedback/dialog-tone";
|
|
37
|
+
import { sharedPrompts } from "../feedback/prompt-confirm";
|
|
35
38
|
import { resolvePromptMessages } from "../feedback/prompt-messages";
|
|
36
|
-
import { prompts } from "../feedback/prompts";
|
|
37
39
|
import { useUiMessages } from "../intl/messages";
|
|
38
40
|
import { usePanelDialogMessages } from "./panel-dialog-messages";
|
|
39
41
|
import { createScrollFade } from "./scroll-fade";
|
|
40
42
|
const PanelDialogSurfaceContext = createContext("contained");
|
|
41
43
|
const usePanelDialogSurface = () => useContext(PanelDialogSurfaceContext);
|
|
44
|
+
const PanelDialogToneContext = createContext(() => undefined);
|
|
42
45
|
const panelDialogBasePanelClass = "k2b-dialog k2b-panel-dialog-frame";
|
|
43
46
|
export const panelDialogPanelClass = `${panelDialogBasePanelClass} is-standard`;
|
|
44
47
|
export const panelDialogOptions = {
|
|
@@ -63,7 +66,7 @@ export const panelDialogWorkspaceOptions = {
|
|
|
63
66
|
export const confirmDiscardIfDirty = async dirty => {
|
|
64
67
|
const hasChanges = typeof dirty === "function" ? dirty() : dirty;
|
|
65
68
|
if (!hasChanges) return true;
|
|
66
|
-
return Boolean(await
|
|
69
|
+
return Boolean(await sharedPrompts.confirm(resolvePromptMessages().discardUnsavedChanges, {
|
|
67
70
|
title: resolvePromptMessages().unsavedChangesTitle,
|
|
68
71
|
variant: "danger",
|
|
69
72
|
confirmText: resolvePromptMessages().discard
|
|
@@ -71,29 +74,55 @@ export const confirmDiscardIfDirty = async dirty => {
|
|
|
71
74
|
};
|
|
72
75
|
const PanelDialogHeader = props => {
|
|
73
76
|
const messages = useUiMessages();
|
|
77
|
+
const tone = useContext(PanelDialogToneContext);
|
|
78
|
+
const icon = () => {
|
|
79
|
+
const value = tone();
|
|
80
|
+
return value ? dialogToneIcon(value) : props.icon;
|
|
81
|
+
};
|
|
74
82
|
return (() => {
|
|
75
83
|
var _el$ = _$getNextElement(_tmpl$4),
|
|
76
|
-
_el$
|
|
77
|
-
[_el$0, _co$2] = _$getNextMarker(_el$9.nextSibling),
|
|
78
|
-
_el$2 = _el$0.nextSibling,
|
|
79
|
-
_el$3 = _el$2.firstChild,
|
|
80
|
-
_el$5 = _el$3.nextSibling,
|
|
81
|
-
[_el$6, _co$] = _$getNextMarker(_el$5.nextSibling),
|
|
82
|
-
_el$1 = _el$2.nextSibling,
|
|
84
|
+
_el$1 = _el$.firstChild,
|
|
83
85
|
[_el$10, _co$3] = _$getNextMarker(_el$1.nextSibling),
|
|
84
|
-
_el$
|
|
85
|
-
|
|
86
|
+
_el$2 = _el$10.nextSibling,
|
|
87
|
+
_el$5 = _el$2.firstChild,
|
|
88
|
+
[_el$6, _co$] = _$getNextMarker(_el$5.nextSibling),
|
|
89
|
+
_el$3 = _el$6.nextSibling,
|
|
90
|
+
_el$7 = _el$3.nextSibling,
|
|
91
|
+
[_el$8, _co$2] = _$getNextMarker(_el$7.nextSibling),
|
|
92
|
+
_el$11 = _el$2.nextSibling,
|
|
93
|
+
[_el$12, _co$4] = _$getNextMarker(_el$11.nextSibling),
|
|
94
|
+
_el$13 = _el$12.nextSibling,
|
|
95
|
+
[_el$14, _co$5] = _$getNextMarker(_el$13.nextSibling);
|
|
86
96
|
_$insert(_el$, _$createComponent(Show, {
|
|
87
97
|
get when() {
|
|
88
|
-
return
|
|
98
|
+
return icon();
|
|
89
99
|
},
|
|
90
100
|
children: icon => (() => {
|
|
91
|
-
var _el$
|
|
92
|
-
_el$
|
|
93
|
-
_$effect(
|
|
94
|
-
|
|
101
|
+
var _el$15 = _$getNextElement(_tmpl$5),
|
|
102
|
+
_el$16 = _el$15.firstChild;
|
|
103
|
+
_$effect(_p$ => {
|
|
104
|
+
var _v$5 = tone(),
|
|
105
|
+
_v$6 = icon();
|
|
106
|
+
_v$5 !== _p$.e && _$setAttribute(_el$15, "data-tone", _p$.e = _v$5);
|
|
107
|
+
_v$6 !== _p$.t && _$className(_el$16, _p$.t = _v$6);
|
|
108
|
+
return _p$;
|
|
109
|
+
}, {
|
|
110
|
+
e: undefined,
|
|
111
|
+
t: undefined
|
|
112
|
+
});
|
|
113
|
+
return _el$15;
|
|
114
|
+
})()
|
|
115
|
+
}), _el$10, _co$3);
|
|
116
|
+
_$insert(_el$2, _$createComponent(Show, {
|
|
117
|
+
get when() {
|
|
118
|
+
return tone();
|
|
119
|
+
},
|
|
120
|
+
children: value => (() => {
|
|
121
|
+
var _el$17 = _$getNextElement(_tmpl$6);
|
|
122
|
+
_$insert(_el$17, () => dialogToneLabel(messages(), value()));
|
|
123
|
+
return _el$17;
|
|
95
124
|
})()
|
|
96
|
-
}), _el$
|
|
125
|
+
}), _el$6, _co$);
|
|
97
126
|
_$insert(_el$3, () => props.title);
|
|
98
127
|
_$insert(_el$2, _$createComponent(Show, {
|
|
99
128
|
get when() {
|
|
@@ -104,38 +133,38 @@ const PanelDialogHeader = props => {
|
|
|
104
133
|
_$insert(_el$4, () => props.subtitle);
|
|
105
134
|
return _el$4;
|
|
106
135
|
}
|
|
107
|
-
}), _el$
|
|
136
|
+
}), _el$8, _co$2);
|
|
108
137
|
_$insert(_el$, _$createComponent(Show, {
|
|
109
138
|
get when() {
|
|
110
139
|
return props.actions;
|
|
111
140
|
},
|
|
112
141
|
get children() {
|
|
113
|
-
var _el$
|
|
114
|
-
_$insert(_el$
|
|
115
|
-
return _el$
|
|
142
|
+
var _el$9 = _$getNextElement(_tmpl$2);
|
|
143
|
+
_$insert(_el$9, () => props.actions);
|
|
144
|
+
return _el$9;
|
|
116
145
|
}
|
|
117
|
-
}), _el$
|
|
146
|
+
}), _el$12, _co$4);
|
|
118
147
|
_$insert(_el$, _$createComponent(Show, {
|
|
119
148
|
get when() {
|
|
120
149
|
return props.close;
|
|
121
150
|
},
|
|
122
151
|
get children() {
|
|
123
|
-
var _el$
|
|
124
|
-
_$addEventListener(_el$
|
|
152
|
+
var _el$0 = _$getNextElement(_tmpl$3);
|
|
153
|
+
_$addEventListener(_el$0, "click", props.close, true);
|
|
125
154
|
_$effect(_p$ => {
|
|
126
155
|
var _v$ = props.closeLabel ?? messages().closeDialog,
|
|
127
156
|
_v$2 = props.closeDisabled;
|
|
128
|
-
_v$ !== _p$.e && _$setAttribute(_el$
|
|
129
|
-
_v$2 !== _p$.t && _$setProperty(_el$
|
|
157
|
+
_v$ !== _p$.e && _$setAttribute(_el$0, "aria-label", _p$.e = _v$);
|
|
158
|
+
_v$2 !== _p$.t && _$setProperty(_el$0, "disabled", _p$.t = _v$2);
|
|
130
159
|
return _p$;
|
|
131
160
|
}, {
|
|
132
161
|
e: undefined,
|
|
133
162
|
t: undefined
|
|
134
163
|
});
|
|
135
164
|
_$runHydrationEvents();
|
|
136
|
-
return _el$
|
|
165
|
+
return _el$0;
|
|
137
166
|
}
|
|
138
|
-
}), _el$
|
|
167
|
+
}), _el$14, _co$5);
|
|
139
168
|
_$effect(_p$ => {
|
|
140
169
|
var _v$3 = usePanelDialogSurface(),
|
|
141
170
|
_v$4 = Boolean(props.subtitle);
|
|
@@ -153,31 +182,31 @@ const PanelDialogBody = props => {
|
|
|
153
182
|
let body;
|
|
154
183
|
createScrollFade(() => body, () => props.scrollFade !== false);
|
|
155
184
|
return (() => {
|
|
156
|
-
var _el$
|
|
185
|
+
var _el$18 = _$getNextElement(_tmpl$7);
|
|
157
186
|
var _ref$ = body;
|
|
158
|
-
typeof _ref$ === "function" ? _$use(_ref$, _el$
|
|
159
|
-
_$insert(_el$
|
|
187
|
+
typeof _ref$ === "function" ? _$use(_ref$, _el$18) : body = _el$18;
|
|
188
|
+
_$insert(_el$18, () => props.children);
|
|
160
189
|
_$effect(_p$ => {
|
|
161
|
-
var _v$
|
|
162
|
-
_v$
|
|
163
|
-
_v$
|
|
164
|
-
_v$
|
|
165
|
-
_v$
|
|
166
|
-
_v$
|
|
190
|
+
var _v$7 = props.scrollPreserveKey,
|
|
191
|
+
_v$8 = usePanelDialogSurface(),
|
|
192
|
+
_v$9 = props.scrollFade !== false ? "both" : undefined;
|
|
193
|
+
_v$7 !== _p$.e && _$setAttribute(_el$18, "data-scroll-preserve", _p$.e = _v$7);
|
|
194
|
+
_v$8 !== _p$.t && _$setAttribute(_el$18, "data-surface", _p$.t = _v$8);
|
|
195
|
+
_v$9 !== _p$.a && _$setAttribute(_el$18, "data-scroll-fade-mode", _p$.a = _v$9);
|
|
167
196
|
return _p$;
|
|
168
197
|
}, {
|
|
169
198
|
e: undefined,
|
|
170
199
|
t: undefined,
|
|
171
200
|
a: undefined
|
|
172
201
|
});
|
|
173
|
-
return _el$
|
|
202
|
+
return _el$18;
|
|
174
203
|
})();
|
|
175
204
|
};
|
|
176
205
|
const PanelDialogFooter = props => (() => {
|
|
177
|
-
var _el$
|
|
178
|
-
_$insert(_el$
|
|
179
|
-
_$effect(() => _$setAttribute(_el$
|
|
180
|
-
return _el$
|
|
206
|
+
var _el$19 = _$getNextElement(_tmpl$8);
|
|
207
|
+
_$insert(_el$19, () => props.children);
|
|
208
|
+
_$effect(() => _$setAttribute(_el$19, "data-surface", usePanelDialogSurface()));
|
|
209
|
+
return _el$19;
|
|
181
210
|
})();
|
|
182
211
|
const PanelDialogSection = props => {
|
|
183
212
|
const id = `k2b-panel-dialog-section-${createUniqueId()}`;
|
|
@@ -202,30 +231,30 @@ const PanelDialogSection = props => {
|
|
|
202
231
|
});
|
|
203
232
|
});
|
|
204
233
|
return (() => {
|
|
205
|
-
var _el$
|
|
206
|
-
_el$
|
|
234
|
+
var _el$20 = _$getNextElement(_tmpl$13),
|
|
235
|
+
_el$43 = _el$20.firstChild,
|
|
236
|
+
[_el$44, _co$1] = _$getNextMarker(_el$43.nextSibling),
|
|
237
|
+
_el$28 = _el$44.nextSibling,
|
|
238
|
+
_el$36 = _el$28.firstChild,
|
|
239
|
+
[_el$37, _co$8] = _$getNextMarker(_el$36.nextSibling),
|
|
240
|
+
_el$29 = _el$37.nextSibling,
|
|
241
|
+
_el$30 = _el$29.firstChild,
|
|
242
|
+
_el$32 = _el$30.nextSibling,
|
|
243
|
+
[_el$33, _co$7] = _$getNextMarker(_el$32.nextSibling),
|
|
244
|
+
_el$38 = _el$29.nextSibling,
|
|
245
|
+
[_el$39, _co$9] = _$getNextMarker(_el$38.nextSibling),
|
|
246
|
+
_el$40 = _el$39.nextSibling,
|
|
207
247
|
[_el$41, _co$0] = _$getNextMarker(_el$40.nextSibling),
|
|
208
|
-
_el$
|
|
209
|
-
_el$33 = _el$25.firstChild,
|
|
210
|
-
[_el$34, _co$7] = _$getNextMarker(_el$33.nextSibling),
|
|
211
|
-
_el$26 = _el$34.nextSibling,
|
|
212
|
-
_el$27 = _el$26.firstChild,
|
|
213
|
-
_el$29 = _el$27.nextSibling,
|
|
214
|
-
[_el$30, _co$6] = _$getNextMarker(_el$29.nextSibling),
|
|
215
|
-
_el$35 = _el$26.nextSibling,
|
|
216
|
-
[_el$36, _co$8] = _$getNextMarker(_el$35.nextSibling),
|
|
217
|
-
_el$37 = _el$36.nextSibling,
|
|
218
|
-
[_el$38, _co$9] = _$getNextMarker(_el$37.nextSibling),
|
|
219
|
-
_el$39 = _el$25.nextSibling;
|
|
248
|
+
_el$42 = _el$28.nextSibling;
|
|
220
249
|
var _ref$2 = section;
|
|
221
|
-
typeof _ref$2 === "function" ? _$use(_ref$2, _el$
|
|
222
|
-
_$insert(_el$
|
|
250
|
+
typeof _ref$2 === "function" ? _$use(_ref$2, _el$20) : section = _el$20;
|
|
251
|
+
_$insert(_el$20, _$createComponent(Show, {
|
|
223
252
|
get when() {
|
|
224
253
|
return props.hideable;
|
|
225
254
|
},
|
|
226
255
|
get children() {
|
|
227
|
-
var _el$
|
|
228
|
-
_$insert(_el$
|
|
256
|
+
var _el$21 = _$getNextElement(_tmpl$10);
|
|
257
|
+
_$insert(_el$21, _$createComponent(Button, {
|
|
229
258
|
ref(r$) {
|
|
230
259
|
var _ref$3 = expand;
|
|
231
260
|
typeof _ref$3 === "function" ? _ref$3(r$) : expand = r$;
|
|
@@ -244,69 +273,69 @@ const PanelDialogSection = props => {
|
|
|
244
273
|
return props.icon;
|
|
245
274
|
},
|
|
246
275
|
children: icon => (() => {
|
|
247
|
-
var _el$
|
|
248
|
-
_$effect(() => _$className(_el$
|
|
249
|
-
return _el$
|
|
276
|
+
var _el$45 = _$getNextElement(_tmpl$14);
|
|
277
|
+
_$effect(() => _$className(_el$45, icon()));
|
|
278
|
+
return _el$45;
|
|
250
279
|
})()
|
|
251
280
|
}), (() => {
|
|
252
|
-
var _el$
|
|
253
|
-
_el$
|
|
254
|
-
_el$
|
|
255
|
-
[_el$
|
|
256
|
-
_$setAttribute(_el$
|
|
257
|
-
_$insert(_el$
|
|
258
|
-
_$insert(_el$
|
|
281
|
+
var _el$22 = _$getNextElement(_tmpl$0),
|
|
282
|
+
_el$23 = _el$22.firstChild,
|
|
283
|
+
_el$25 = _el$23.nextSibling,
|
|
284
|
+
[_el$26, _co$6] = _$getNextMarker(_el$25.nextSibling);
|
|
285
|
+
_$setAttribute(_el$23, "id", `${id}-closed`);
|
|
286
|
+
_$insert(_el$23, () => props.title);
|
|
287
|
+
_$insert(_el$22, _$createComponent(Show, {
|
|
259
288
|
get when() {
|
|
260
289
|
return props.subtitle;
|
|
261
290
|
},
|
|
262
291
|
get children() {
|
|
263
|
-
var _el$
|
|
264
|
-
_$insert(_el$
|
|
265
|
-
return _el$
|
|
292
|
+
var _el$24 = _$getNextElement(_tmpl$9);
|
|
293
|
+
_$insert(_el$24, () => props.subtitle);
|
|
294
|
+
return _el$24;
|
|
266
295
|
}
|
|
267
|
-
}), _el$
|
|
268
|
-
return _el$
|
|
269
|
-
})(), _$getNextElement(_tmpl$
|
|
296
|
+
}), _el$26, _co$6);
|
|
297
|
+
return _el$22;
|
|
298
|
+
})(), _$getNextElement(_tmpl$1)];
|
|
270
299
|
}
|
|
271
300
|
}));
|
|
272
|
-
_$effect(() => _$setProperty(_el$
|
|
273
|
-
return _el$
|
|
301
|
+
_$effect(() => _$setProperty(_el$21, "hidden", open()));
|
|
302
|
+
return _el$21;
|
|
274
303
|
}
|
|
275
|
-
}), _el$
|
|
276
|
-
_$insert(_el$
|
|
304
|
+
}), _el$44, _co$1);
|
|
305
|
+
_$insert(_el$28, _$createComponent(Show, {
|
|
277
306
|
get when() {
|
|
278
307
|
return props.icon;
|
|
279
308
|
},
|
|
280
309
|
children: icon => (() => {
|
|
281
|
-
var _el$
|
|
282
|
-
_el$
|
|
283
|
-
_$effect(() => _$className(_el$
|
|
284
|
-
return _el$
|
|
310
|
+
var _el$46 = _$getNextElement(_tmpl$15),
|
|
311
|
+
_el$47 = _el$46.firstChild;
|
|
312
|
+
_$effect(() => _$className(_el$47, icon()));
|
|
313
|
+
return _el$46;
|
|
285
314
|
})()
|
|
286
|
-
}), _el$
|
|
287
|
-
_$setAttribute(_el$
|
|
288
|
-
_$insert(_el$
|
|
289
|
-
_$insert(_el$
|
|
315
|
+
}), _el$37, _co$8);
|
|
316
|
+
_$setAttribute(_el$30, "id", id);
|
|
317
|
+
_$insert(_el$30, () => props.title);
|
|
318
|
+
_$insert(_el$29, _$createComponent(Show, {
|
|
290
319
|
get when() {
|
|
291
320
|
return props.subtitle;
|
|
292
321
|
},
|
|
293
322
|
get children() {
|
|
294
|
-
var _el$
|
|
295
|
-
_$insert(_el$
|
|
296
|
-
return _el$
|
|
323
|
+
var _el$31 = _$getNextElement(_tmpl$11);
|
|
324
|
+
_$insert(_el$31, () => props.subtitle);
|
|
325
|
+
return _el$31;
|
|
297
326
|
}
|
|
298
|
-
}), _el$
|
|
299
|
-
_$insert(_el$
|
|
327
|
+
}), _el$33, _co$7);
|
|
328
|
+
_$insert(_el$28, _$createComponent(Show, {
|
|
300
329
|
get when() {
|
|
301
330
|
return props.actions;
|
|
302
331
|
},
|
|
303
332
|
get children() {
|
|
304
|
-
var _el$
|
|
305
|
-
_$insert(_el$
|
|
306
|
-
return _el$
|
|
333
|
+
var _el$34 = _$getNextElement(_tmpl$2);
|
|
334
|
+
_$insert(_el$34, () => props.actions);
|
|
335
|
+
return _el$34;
|
|
307
336
|
}
|
|
308
|
-
}), _el$
|
|
309
|
-
_$insert(_el$
|
|
337
|
+
}), _el$39, _co$9);
|
|
338
|
+
_$insert(_el$28, _$createComponent(Show, {
|
|
310
339
|
get when() {
|
|
311
340
|
return props.hideable;
|
|
312
341
|
},
|
|
@@ -327,26 +356,26 @@ const PanelDialogSection = props => {
|
|
|
327
356
|
"aria-controls": `${id}-body`,
|
|
328
357
|
onClick: () => toggle(false),
|
|
329
358
|
get children() {
|
|
330
|
-
return _$getNextElement(_tmpl$
|
|
359
|
+
return _$getNextElement(_tmpl$12);
|
|
331
360
|
}
|
|
332
361
|
});
|
|
333
362
|
}
|
|
334
|
-
}), _el$
|
|
335
|
-
_$setAttribute(_el$
|
|
336
|
-
_$insert(_el$
|
|
363
|
+
}), _el$41, _co$0);
|
|
364
|
+
_$setAttribute(_el$42, "id", `${id}-body`);
|
|
365
|
+
_$insert(_el$42, () => props.children);
|
|
337
366
|
_$effect(_p$ => {
|
|
338
|
-
var _v$
|
|
339
|
-
_v$
|
|
340
|
-
_v$
|
|
341
|
-
_v$
|
|
342
|
-
_v$
|
|
343
|
-
_v$
|
|
344
|
-
_v$
|
|
345
|
-
_v$
|
|
346
|
-
_v$
|
|
347
|
-
_v$
|
|
348
|
-
_v$
|
|
349
|
-
_v$
|
|
367
|
+
var _v$0 = usePanelDialogSurface(),
|
|
368
|
+
_v$1 = props.hideable || undefined,
|
|
369
|
+
_v$10 = props.hideable ? open() : undefined,
|
|
370
|
+
_v$11 = open() ? id : `${id}-closed`,
|
|
371
|
+
_v$12 = !open(),
|
|
372
|
+
_v$13 = !open();
|
|
373
|
+
_v$0 !== _p$.e && _$setAttribute(_el$20, "data-surface", _p$.e = _v$0);
|
|
374
|
+
_v$1 !== _p$.t && _$setAttribute(_el$20, "data-hideable", _p$.t = _v$1);
|
|
375
|
+
_v$10 !== _p$.a && _$setAttribute(_el$20, "data-open", _p$.a = _v$10);
|
|
376
|
+
_v$11 !== _p$.o && _$setAttribute(_el$20, "aria-labelledby", _p$.o = _v$11);
|
|
377
|
+
_v$12 !== _p$.i && _$setProperty(_el$28, "hidden", _p$.i = _v$12);
|
|
378
|
+
_v$13 !== _p$.n && _$setProperty(_el$42, "hidden", _p$.n = _v$13);
|
|
350
379
|
return _p$;
|
|
351
380
|
}, {
|
|
352
381
|
e: undefined,
|
|
@@ -356,7 +385,7 @@ const PanelDialogSection = props => {
|
|
|
356
385
|
i: undefined,
|
|
357
386
|
n: undefined
|
|
358
387
|
});
|
|
359
|
-
return _el$
|
|
388
|
+
return _el$20;
|
|
360
389
|
})();
|
|
361
390
|
};
|
|
362
391
|
const PanelDialogTabs = props => {
|
|
@@ -382,10 +411,16 @@ const PanelDialog = props => {
|
|
|
382
411
|
return _$createComponent(PanelDialogSurfaceContext.Provider, {
|
|
383
412
|
value: surface,
|
|
384
413
|
get children() {
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
414
|
+
return _$createComponent(PanelDialogToneContext.Provider, {
|
|
415
|
+
value: () => props.tone,
|
|
416
|
+
get children() {
|
|
417
|
+
var _el$48 = _$getNextElement(_tmpl$16);
|
|
418
|
+
_$setAttribute(_el$48, "data-surface", surface);
|
|
419
|
+
_$insert(_el$48, () => props.children);
|
|
420
|
+
_$effect(() => _$setAttribute(_el$48, "data-tone", props.tone));
|
|
421
|
+
return _el$48;
|
|
422
|
+
}
|
|
423
|
+
});
|
|
389
424
|
}
|
|
390
425
|
});
|
|
391
426
|
};
|