@k2b/ui 0.29.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/base.css +2 -2
- package/dist/browser/actions/Dropdown.js +6 -3
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +137 -7
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/SegmentedControl.js +5 -9
- package/dist/browser/actions/SegmentedControl.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js +6 -3
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/Tabs.js +5 -2
- package/dist/browser/actions/Tabs.js.map +1 -1
- package/dist/browser/actions/Toolbar.js +2 -0
- package/dist/browser/actions/Toolbar.js.map +1 -1
- package/dist/browser/actions/ViewTabs.js +294 -0
- package/dist/browser/actions/ViewTabs.js.map +1 -0
- package/dist/browser/actions/filter-messages.js +6 -2
- package/dist/browser/actions/filter-messages.js.map +1 -1
- package/dist/browser/actions/index.js +2 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +1108 -604
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/ChatDecision.js +146 -84
- package/dist/browser/chat/ChatDecision.js.map +1 -1
- package/dist/browser/chat/ChatPrimitives.js +292 -159
- package/dist/browser/chat/ChatPrimitives.js.map +1 -1
- package/dist/browser/chat/chat-messages.js +8 -0
- package/dist/browser/chat/chat-messages.js.map +1 -1
- package/dist/browser/chat/command-search.js +26 -15
- package/dist/browser/chat/command-search.js.map +1 -1
- package/dist/browser/chat/index.js +4 -2
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/content/Calendar.js +143 -116
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarWeekView.js +291 -266
- package/dist/browser/content/CalendarWeekView.js.map +1 -1
- package/dist/browser/content/DataTable.js +224 -155
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/MapAttribution.js +27 -0
- package/dist/browser/content/MapAttribution.js.map +1 -0
- package/dist/browser/content/MapView.js +553 -0
- package/dist/browser/content/MapView.js.map +1 -0
- package/dist/browser/content/MapViewFrame.js +395 -0
- package/dist/browser/content/MapViewFrame.js.map +1 -0
- package/dist/browser/content/data-table-messages.js +4 -2
- package/dist/browser/content/data-table-messages.js.map +1 -1
- package/dist/browser/content/index.js +5 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/map-palette.js +39 -0
- package/dist/browser/content/map-palette.js.map +1 -0
- package/dist/browser/content/map-style.js +276 -0
- package/dist/browser/content/map-style.js.map +1 -0
- package/dist/browser/content/map-view-geometry.js +269 -0
- package/dist/browser/content/map-view-geometry.js.map +1 -0
- package/dist/browser/content/map-view-live.js +28 -0
- package/dist/browser/content/map-view-live.js.map +1 -0
- package/dist/browser/content/map-view-messages.js +53 -0
- package/dist/browser/content/map-view-messages.js.map +1 -0
- package/dist/browser/content/map-view-types.js +2 -0
- package/dist/browser/content/map-view-types.js.map +1 -0
- package/dist/browser/content/map-view-worker.js +10 -0
- package/dist/browser/feedback/MovedHint.js +197 -0
- package/dist/browser/feedback/MovedHint.js.map +1 -0
- package/dist/browser/feedback/dialog-core.js +85 -9
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/feedback/index.js +1 -0
- package/dist/browser/feedback/index.js.map +1 -1
- package/dist/browser/feedback/prompts.js +6 -1
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +337 -212
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/date-picker.js +59 -5
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/intl/messages.js +12 -0
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/intl/weekend.js +39 -0
- package/dist/browser/intl/weekend.js.map +1 -0
- package/dist/browser/layout/AppOverview.js +0 -1
- package/dist/browser/layout/AppOverview.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +701 -476
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +3 -2
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/SettingsModal.js +2 -2
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/layout/SidebarSwitcher.js +13 -12
- package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
- package/dist/browser/layout/TabBar.js +1 -1
- package/dist/browser/layout/TabBar.js.map +1 -1
- package/dist/browser/layout/app-host-width.js +44 -0
- package/dist/browser/layout/app-host-width.js.map +1 -0
- package/dist/browser/layout/app-workspace-controller.js +331 -45
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/app-workspace-width.js +26 -0
- package/dist/browser/layout/app-workspace-width.js.map +1 -0
- package/dist/browser/layout/index.js +2 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/surfaces/Placeholder.js +36 -13
- package/dist/browser/surfaces/Placeholder.js.map +1 -1
- package/dist/licenses/maplibre-gl.txt +116 -0
- package/dist/ssr/actions/Dropdown.js +5 -2
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +59 -7
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/SegmentedControl.js +1 -2
- package/dist/ssr/actions/SegmentedControl.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js +2 -2
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/Tabs.js +2 -2
- package/dist/ssr/actions/Tabs.js.map +1 -1
- package/dist/ssr/actions/Toolbar.js +2 -0
- package/dist/ssr/actions/Toolbar.js.map +1 -1
- package/dist/ssr/actions/ViewTabs.js +211 -0
- package/dist/ssr/actions/ViewTabs.js.map +1 -0
- package/dist/ssr/actions/filter-messages.js +6 -2
- package/dist/ssr/actions/filter-messages.js.map +1 -1
- package/dist/ssr/actions/index.js +2 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +546 -131
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/ChatDecision.js +44 -19
- package/dist/ssr/chat/ChatDecision.js.map +1 -1
- package/dist/ssr/chat/ChatPrimitives.js +95 -24
- package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
- package/dist/ssr/chat/chat-messages.js +8 -0
- package/dist/ssr/chat/chat-messages.js.map +1 -1
- package/dist/ssr/chat/command-search.js +26 -15
- package/dist/ssr/chat/command-search.js.map +1 -1
- package/dist/ssr/chat/index.js +4 -2
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/content/Calendar.js +109 -100
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarWeekView.js +42 -28
- package/dist/ssr/content/CalendarWeekView.js.map +1 -1
- package/dist/ssr/content/DataTable.js +78 -31
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/MapAttribution.js +19 -0
- package/dist/ssr/content/MapAttribution.js.map +1 -0
- package/dist/ssr/content/MapView.js +474 -0
- package/dist/ssr/content/MapView.js.map +1 -0
- package/dist/ssr/content/MapViewFrame.js +193 -0
- package/dist/ssr/content/MapViewFrame.js.map +1 -0
- package/dist/ssr/content/data-table-messages.js +4 -2
- package/dist/ssr/content/data-table-messages.js.map +1 -1
- package/dist/ssr/content/index.js +5 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/map-palette.js +39 -0
- package/dist/ssr/content/map-palette.js.map +1 -0
- package/dist/ssr/content/map-style.js +276 -0
- package/dist/ssr/content/map-style.js.map +1 -0
- package/dist/ssr/content/map-view-geometry.js +269 -0
- package/dist/ssr/content/map-view-geometry.js.map +1 -0
- package/dist/ssr/content/map-view-live.js +1 -0
- package/dist/ssr/content/map-view-messages.js +53 -0
- package/dist/ssr/content/map-view-messages.js.map +1 -0
- package/dist/ssr/content/map-view-types.js +2 -0
- package/dist/ssr/content/map-view-types.js.map +1 -0
- package/dist/ssr/feedback/MovedHint.js +166 -0
- package/dist/ssr/feedback/MovedHint.js.map +1 -0
- package/dist/ssr/feedback/dialog-core.js +85 -9
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/feedback/index.js +1 -0
- package/dist/ssr/feedback/index.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +6 -1
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +138 -69
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js +59 -5
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/intl/messages.js +12 -0
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/intl/weekend.js +39 -0
- package/dist/ssr/intl/weekend.js.map +1 -0
- package/dist/ssr/layout/AppOverview.js +0 -1
- package/dist/ssr/layout/AppOverview.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +216 -44
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +3 -2
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/SettingsModal.js +2 -2
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/layout/SidebarSwitcher.js +13 -12
- package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
- package/dist/ssr/layout/TabBar.js +1 -1
- package/dist/ssr/layout/TabBar.js.map +1 -1
- package/dist/ssr/layout/app-host-width.js +44 -0
- package/dist/ssr/layout/app-host-width.js.map +1 -0
- package/dist/ssr/layout/app-workspace-controller.js +331 -45
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/app-workspace-width.js +26 -0
- package/dist/ssr/layout/app-workspace-width.js.map +1 -0
- package/dist/ssr/layout/index.js +2 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/surfaces/Placeholder.js +24 -7
- package/dist/ssr/surfaces/Placeholder.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +4 -0
- package/dist/types/actions/FilterChip.d.ts +22 -0
- package/dist/types/actions/ViewTabs.d.ts +30 -0
- package/dist/types/actions/filter-messages.d.ts +2 -0
- package/dist/types/actions/index.d.ts +4 -2
- package/dist/types/chat/ChatComposer.d.ts +52 -0
- package/dist/types/chat/ChatDecision.d.ts +18 -2
- package/dist/types/chat/ChatPrimitives.d.ts +10 -0
- package/dist/types/chat/chat-messages.d.ts +4 -0
- package/dist/types/chat/command-search.d.ts +2 -0
- package/dist/types/chat/index.d.ts +9 -8
- package/dist/types/content/DataTable.d.ts +3 -0
- package/dist/types/content/MapAttribution.d.ts +6 -0
- package/dist/types/content/MapView.d.ts +5 -0
- package/dist/types/content/MapViewFrame.d.ts +31 -0
- package/dist/types/content/data-table-messages.d.ts +1 -0
- package/dist/types/content/index.d.ts +6 -0
- package/dist/types/content/map-palette.d.ts +58 -0
- package/dist/types/content/map-style.d.ts +29 -0
- package/dist/types/content/map-view-geometry.d.ts +55 -0
- package/dist/types/content/map-view-live.d.ts +2 -0
- package/dist/types/content/map-view-messages.d.ts +21 -0
- package/dist/types/content/map-view-types.d.ts +61 -0
- package/dist/types/feedback/MovedHint.d.ts +25 -0
- package/dist/types/feedback/dialog-core.d.ts +6 -2
- package/dist/types/feedback/index.d.ts +2 -0
- package/dist/types/feedback/prompts.d.ts +2 -0
- package/dist/types/inputs/DatePicker.d.ts +7 -0
- package/dist/types/inputs/date-picker.d.ts +25 -1
- package/dist/types/intl/messages.d.ts +6 -0
- package/dist/types/intl/weekend.d.ts +12 -0
- package/dist/types/layout/AppWorkspace.d.ts +48 -8
- package/dist/types/layout/app-host-width.d.ts +6 -0
- package/dist/types/layout/app-workspace-width.d.ts +13 -0
- package/dist/types/layout/index.d.ts +3 -2
- package/dist/types/surfaces/Placeholder.d.ts +2 -1
- package/map-glyphs/IBM Plex Sans Medium/0-255.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/1024-1279.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/256-511.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/512-767.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/768-1023.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/7680-7935.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/8192-8447.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/8448-8703.pbf +0 -0
- package/map-glyphs/IBM Plex Sans Medium/8704-8959.pbf +0 -0
- package/map-glyphs/OFL.txt +93 -0
- package/package.json +11 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["intl/weekend.ts"],"sourcesContent":["/** Intl week data: weekend days as ISO numbers, 1 for Monday to 7 for Sunday. */\ntype WeekInfo = { weekend?: readonly number[] };\ntype LocaleWeekInfo = { getWeekInfo?: () => WeekInfo; weekInfo?: WeekInfo };\n\n/** Saturday and Sunday as JavaScript day numbers, for engines without week data and for an unknown locale. */\nconst fallbackWeekend: ReadonlySet<number> = new Set([6, 0]);\nconst cache = new Map<string, ReadonlySet<number>>();\n\n/**\n * The weekend days of `locale` as JavaScript day numbers (0 for Sunday): Saturday and Sunday in Germany, Friday and\n * Saturday in Israel. The days come from the engine's Intl week data where it has them, otherwise Saturday and Sunday.\n * Without a locale the answer is Saturday and Sunday too, so a server render and the browser agree.\n */\nexport const weekendDays = (locale: string | undefined): ReadonlySet<number> => {\n if (!locale) return fallbackWeekend;\n const cached = cache.get(locale);\n if (cached) return cached;\n let days = fallbackWeekend;\n try {\n const intlLocale = new Intl.Locale(locale) as Intl.Locale & LocaleWeekInfo;\n const weekend = (intlLocale.getWeekInfo?.() ?? intlLocale.weekInfo)?.weekend;\n if (weekend?.length) days = new Set(weekend.map((day) => day % 7));\n } catch {\n // An invalid locale tag keeps Saturday and Sunday.\n }\n cache.set(locale, days);\n return days;\n};\n\n/** The day of the week of a date key such as `2026-10-24`, as a JavaScript day number (0 for Sunday). */\nexport const dayOfWeekOfKey = (key: string): number => {\n const [year = 1970, month = 1, day = 1] = key.slice(0, 10).split(\"-\").map(Number);\n return new Date(Date.UTC(year, month - 1, day)).getUTCDay();\n};\n\n/** Whether the day of `key` is a weekend day of `locale`. */\nexport const isWeekendKey = (key: string, locale: string | undefined): boolean => weekendDays(locale).has(dayOfWeekOfKey(key));\n\n/** Whether column `index` of a week that starts on `firstDayOfWeek` (0 for Sunday, 1 for Monday) is a weekend day. */\nexport const isWeekendColumn = (index: number, firstDayOfWeek: number, locale: string | undefined): boolean =>\n weekendDays(locale).has((firstDayOfWeek + index) % 7);\n"],"mappings":"AAAA;;AAIA;AACA,MAAM,eAAoC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,MAAM,KAAK,GAAG,IAAI,GAAG,CAA8B,CAAC;;AAEpD;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,WAAW,GAAI,MAA0B,IAA0B;EAC9E,IAAI,CAAC,MAAM,EAAE,OAAO,eAAe;EACnC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;EAChC,IAAI,MAAM,EAAE,OAAO,MAAM;EACzB,IAAI,IAAI,GAAG,eAAe;EAC1B,IAAI;IACF,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAiC;IAC1E,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,GAAG,OAAO;IAC5E,IAAI,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAE,GAAG,IAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EACpE,CAAC,CAAC,MAAM;IACN;EAAA;EAEF,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;EACvB,OAAO,IAAI;AACb,CAAC;;AAED;AACA,OAAO,MAAM,cAAc,GAAI,GAAW,IAAa;EACrD,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;EACjF,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC7D,CAAC;;AAED;AACA,OAAO,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,MAA0B,KAAc,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;;AAE9H;AACA,OAAO,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,cAAsB,EAAE,MAA0B,KAC/F,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,GAAG,KAAK,IAAI,CAAC,CAAC","ignoreList":[]}
|
|
@@ -56,7 +56,6 @@ const AppOverviewAside = props => _$ssr(_tmpl$5, `k2b-app-overview__aside ${_$es
|
|
|
56
56
|
})), _$escape(props.children));
|
|
57
57
|
const AppOverviewCards = props => _$ssr(_tmpl$6, `k2b-app-overview__cards ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
|
|
58
58
|
const AppOverviewEmptyState = props => _$createComponent(Placeholder, {
|
|
59
|
-
surface: "paper",
|
|
60
59
|
variant: "panel",
|
|
61
60
|
get title() {
|
|
62
61
|
return props.title;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["layout/AppOverview.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport { PanelHeader } from \"./PanelHeader\";\n\nexport type AppOverviewProps = {\n title: string;\n subtitle?: string;\n icon: string;\n /** The page's single primary action, such as a create button or menu. */\n actions?: JSX.Element;\n class?: string;\n children: JSX.Element;\n};\n\nexport type AppOverviewPanelProps = {\n title: string;\n description?: JSX.Element;\n toolbar?: JSX.Element;\n class?: string;\n children: JSX.Element;\n};\n\nexport type AppOverviewEmptyStateProps = {\n title: string;\n description?: JSX.Element;\n icon?: string;\n class?: string;\n children?: JSX.Element;\n};\n\nexport type AppOverviewCardsProps = {\n class?: string;\n children: JSX.Element;\n};\n\ntype AppOverviewComponent = ((props: AppOverviewProps) => JSX.Element) & {\n Main: (props: AppOverviewPanelProps) => JSX.Element;\n Aside: (props: AppOverviewPanelProps) => JSX.Element;\n Cards: (props: AppOverviewCardsProps) => JSX.Element;\n EmptyState: (props: AppOverviewEmptyStateProps) => JSX.Element;\n};\n\nconst tablerIconClass = (icon: string | null | undefined, fallback: string): string => {\n const value = icon?.trim() || fallback;\n return value.startsWith(\"ti \") ? value : `ti ${value}`;\n};\n\nconst AppOverviewPanelHeader = (props: Pick<AppOverviewPanelProps, \"title\" | \"description\" | \"toolbar\">): JSX.Element => (\n <div class=\"k2b-app-overview__panel-header\">\n <div>\n <h2>{props.title}</h2>\n <Show when={props.description}>\n <p class=\"k2b-app-overview__panel-description\">{props.description}</p>\n </Show>\n </div>\n <Show when={props.toolbar}>\n <div class=\"k2b-app-overview__toolbar\">{props.toolbar}</div>\n </Show>\n </div>\n);\n\nconst AppOverviewMain = (props: AppOverviewPanelProps): JSX.Element => (\n <section class={`k2b-app-overview__main ${props.class ?? \"\"}`}>\n <AppOverviewPanelHeader title={props.title} description={props.description} toolbar={props.toolbar} />\n {props.children}\n </section>\n);\n\nconst AppOverviewAside = (props: AppOverviewPanelProps): JSX.Element => (\n <aside class={`k2b-app-overview__aside ${props.class ?? \"\"}`}>\n <AppOverviewPanelHeader title={props.title} description={props.description} toolbar={props.toolbar} />\n {props.children}\n </aside>\n);\n\nconst AppOverviewCards = (props: AppOverviewCardsProps): JSX.Element => (\n <div class={`k2b-app-overview__cards ${props.class ?? \"\"}`}>{props.children}</div>\n);\n\nconst AppOverviewEmptyState = (props: AppOverviewEmptyStateProps): JSX.Element => (\n <Placeholder\n
|
|
1
|
+
{"version":3,"names":[],"sources":["layout/AppOverview.tsx"],"sourcesContent":["import { type JSX, Show } from \"solid-js\";\nimport Placeholder from \"../surfaces/Placeholder\";\nimport { PanelHeader } from \"./PanelHeader\";\n\nexport type AppOverviewProps = {\n title: string;\n subtitle?: string;\n icon: string;\n /** The page's single primary action, such as a create button or menu. */\n actions?: JSX.Element;\n class?: string;\n children: JSX.Element;\n};\n\nexport type AppOverviewPanelProps = {\n title: string;\n description?: JSX.Element;\n toolbar?: JSX.Element;\n class?: string;\n children: JSX.Element;\n};\n\nexport type AppOverviewEmptyStateProps = {\n title: string;\n description?: JSX.Element;\n icon?: string;\n class?: string;\n children?: JSX.Element;\n};\n\nexport type AppOverviewCardsProps = {\n class?: string;\n children: JSX.Element;\n};\n\ntype AppOverviewComponent = ((props: AppOverviewProps) => JSX.Element) & {\n Main: (props: AppOverviewPanelProps) => JSX.Element;\n Aside: (props: AppOverviewPanelProps) => JSX.Element;\n Cards: (props: AppOverviewCardsProps) => JSX.Element;\n EmptyState: (props: AppOverviewEmptyStateProps) => JSX.Element;\n};\n\nconst tablerIconClass = (icon: string | null | undefined, fallback: string): string => {\n const value = icon?.trim() || fallback;\n return value.startsWith(\"ti \") ? value : `ti ${value}`;\n};\n\nconst AppOverviewPanelHeader = (props: Pick<AppOverviewPanelProps, \"title\" | \"description\" | \"toolbar\">): JSX.Element => (\n <div class=\"k2b-app-overview__panel-header\">\n <div>\n <h2>{props.title}</h2>\n <Show when={props.description}>\n <p class=\"k2b-app-overview__panel-description\">{props.description}</p>\n </Show>\n </div>\n <Show when={props.toolbar}>\n <div class=\"k2b-app-overview__toolbar\">{props.toolbar}</div>\n </Show>\n </div>\n);\n\nconst AppOverviewMain = (props: AppOverviewPanelProps): JSX.Element => (\n <section class={`k2b-app-overview__main ${props.class ?? \"\"}`}>\n <AppOverviewPanelHeader title={props.title} description={props.description} toolbar={props.toolbar} />\n {props.children}\n </section>\n);\n\nconst AppOverviewAside = (props: AppOverviewPanelProps): JSX.Element => (\n <aside class={`k2b-app-overview__aside ${props.class ?? \"\"}`}>\n <AppOverviewPanelHeader title={props.title} description={props.description} toolbar={props.toolbar} />\n {props.children}\n </aside>\n);\n\nconst AppOverviewCards = (props: AppOverviewCardsProps): JSX.Element => (\n <div class={`k2b-app-overview__cards ${props.class ?? \"\"}`}>{props.children}</div>\n);\n\nconst AppOverviewEmptyState = (props: AppOverviewEmptyStateProps): JSX.Element => (\n <Placeholder\n variant=\"panel\"\n title={props.title}\n description={props.description}\n icon={props.icon ? tablerIconClass(props.icon, \"ti-inbox\") : undefined}\n action={props.children}\n class={props.class}\n />\n);\n\nconst AppOverview = ((props: AppOverviewProps): JSX.Element => (\n <div class={`k2b-app-overview ${props.class ?? \"\"}`}>\n <header class=\"k2b-app-overview__header\">\n <span class=\"k2b-app-overview__icon k2b-icon-tile\" aria-hidden=\"true\">\n <i class={tablerIconClass(props.icon, \"ti-apps\")} />\n </span>\n <PanelHeader as=\"h1\" size=\"lg\" title={props.title} subtitle={props.subtitle} actions={props.actions} />\n </header>\n <div class=\"k2b-app-overview__columns\">{props.children}</div>\n </div>\n)) as AppOverviewComponent;\n\nAppOverview.Main = AppOverviewMain;\nAppOverview.Aside = AppOverviewAside;\nAppOverview.Cards = AppOverviewCards;\nAppOverview.EmptyState = AppOverviewEmptyState;\n\nexport default AppOverview;\n"],"mappings":";;;;;;;;;;;;AAAA,SAAmB,IAAI,QAAQ,UAAU;AACzC,OAAO,WAAW,MAAM,yBAAyB;AACjD,SAAS,WAAW,QAAQ,eAAe;AAwC3C,MAAM,eAAe,GAAG,CAAC,IAA+B,EAAE,QAAgB,KAAa;EACrF,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,QAAQ;EACtC,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,KAAK,EAAE;AACxD,CAAC;AAED,MAAM,sBAAsB,GAAI,KAAuE,4BAG5F,KAAK,CAAC,KAAK,8BACf,IAAI;EAAA,IAAC,IAAI;IAAA,OAAE,KAAK,CAAC,WAAW;EAAA;EAAA;IAAA,8BACqB,KAAK,CAAC,WAAW;EAAA;AAAA,gCAGpE,IAAI;EAAA,IAAC,IAAI;IAAA,OAAE,KAAK,CAAC,OAAO;EAAA;EAAA;IAAA,+BACiB,KAAK,CAAC,OAAO;EAAA;AAAA,IAG1D;AAED,MAAM,eAAe,GAAI,KAA4B,mBACnC,mCAA0B,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,6BAC1D,sBAAsB;EAAA,IAAC,KAAK;IAAA,OAAE,KAAK,CAAC,KAAK;EAAA;EAAA,IAAE,WAAW;IAAA,OAAE,KAAK,CAAC,WAAW;EAAA;EAAA,IAAE,OAAO;IAAA,OAAE,KAAK,CAAC,OAAO;EAAA;AAAA,cACjG,KAAK,CAAC,QAAQ,EAElB;AAED,MAAM,gBAAgB,GAAI,KAA4B,mBACtC,oCAA2B,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,6BACzD,sBAAsB;EAAA,IAAC,KAAK;IAAA,OAAE,KAAK,CAAC,KAAK;EAAA;EAAA,IAAE,WAAW;IAAA,OAAE,KAAK,CAAC,WAAW;EAAA;EAAA,IAAE,OAAO;IAAA,OAAE,KAAK,CAAC,OAAO;EAAA;AAAA,cACjG,KAAK,CAAC,QAAQ,EAElB;AAED,MAAM,gBAAgB,GAAI,KAA4B,mBACxC,oCAA2B,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,WAAG,KAAK,CAAC,QAAQ,EAC5E;AAED,MAAM,qBAAqB,GAAI,KAAiC,sBAC7D,WAAW;EACV,OAAO;EAAA,IACP,KAAK;IAAA,OAAE,KAAK,CAAC,KAAK;EAAA;EAAA,IAClB,WAAW;IAAA,OAAE,KAAK,CAAC,WAAW;EAAA;EAAA,IAC9B,IAAI;IAAA,OAAE,oBAAK,CAAC,IAAI,MAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,SAAS;EAAA;EAAA,IACtE,MAAM;IAAA,OAAE,KAAK,CAAC,QAAQ;EAAA;EAAA;IAAA,OACf,KAAK,CAAC,KAAK;EAAA;AAAA,EAErB;AAED,MAAM,WAAW,GAAK,KAAuB,mBAC/B,6BAAoB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,mCAGnC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,4CAEjD,WAAW;EAAC,EAAE;EAAM,IAAI;EAAA,IAAM,KAAK;IAAA,OAAE,KAAK,CAAC,KAAK;EAAA;EAAA,IAAE,QAAQ;IAAA,OAAE,KAAK,CAAC,QAAQ;EAAA;EAAA,IAAE,OAAO;IAAA,OAAE,KAAK,CAAC,OAAO;EAAA;AAAA,cAE7D,KAAK,CAAC,QAAQ,EAEhC;AAE1B,WAAW,CAAC,IAAI,GAAG,eAAe;AAClC,WAAW,CAAC,KAAK,GAAG,gBAAgB;AACpC,WAAW,CAAC,KAAK,GAAG,gBAAgB;AACpC,WAAW,CAAC,UAAU,GAAG,qBAAqB;AAE9C,eAAe,WAAW","ignoreList":[]}
|
|
@@ -8,14 +8,14 @@ import { ssrStyle as _$ssrStyle } from "solid-js/web";
|
|
|
8
8
|
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
9
9
|
import { escape as _$escape } from "solid-js/web";
|
|
10
10
|
var _tmpl$ = ["<button type=\"button\" class=\"k2b-app-workspace__resize\" role=\"separator\"", " style=\"", "\"><span aria-hidden=\"true\"></span></button>"],
|
|
11
|
-
_tmpl$2 = ["<p>", "</p>"],
|
|
11
|
+
_tmpl$2 = ["<p class=\"k2b-truncate-fade\">", "</p>"],
|
|
12
12
|
_tmpl$3 = ["<div class=\"k2b-app-workspace__level-actions\">", "</div>"],
|
|
13
|
-
_tmpl$4 = ["<header class=\"k2b-app-workspace__level-head\">", "<div class=\"k2b-app-workspace__level-title\"><h2 tabindex=\"-1\">", "</h2>", "</div>", "</header>"],
|
|
14
|
-
_tmpl$5 = ["<
|
|
15
|
-
_tmpl$6 = ["<
|
|
16
|
-
_tmpl$7 = "<
|
|
17
|
-
_tmpl$8 =
|
|
18
|
-
_tmpl$9 = ["<
|
|
13
|
+
_tmpl$4 = ["<header class=\"k2b-app-workspace__level-head\">", "<div class=\"k2b-app-workspace__level-title\"><h2 tabindex=\"-1\"><span class=\"k2b-truncate-fade\">", "</span></h2>", "</div>", "</header>"],
|
|
14
|
+
_tmpl$5 = ["<style>", "</style>"],
|
|
15
|
+
_tmpl$6 = ["<div class=\"k2b-app-workspace__main-primary\" data-workspace-main-region=\"main\"", ">", "</div>"],
|
|
16
|
+
_tmpl$7 = ["<section", " class=\"", "\"", " style=\"", "\">", "</section>"],
|
|
17
|
+
_tmpl$8 = "<i class=\"ti ti-chevron-left\" aria-hidden=\"true\"></i>",
|
|
18
|
+
_tmpl$9 = ["<div class=\"k2b-app-workspace__level-body\"", ">", "</div>"],
|
|
19
19
|
_tmpl$0 = "<i class=\"ti ti-layout-sidebar-right\" aria-hidden=\"true\"></i>",
|
|
20
20
|
_tmpl$1 = ["<aside", " class=\"", "\"", "", " style=\"", "\"><button type=\"button\" class=\"k2b-app-workspace__detail-grabber\"", " aria-pressed=\"false\"><span aria-hidden=\"true\"></span></button>", "</aside>"],
|
|
21
21
|
_tmpl$10 = ["<aside", " class=\"", "\"", "", " style=\"", "\">", "</aside>"],
|
|
@@ -40,35 +40,42 @@ var _tmpl$ = ["<button type=\"button\" class=\"k2b-app-workspace__resize\" role=
|
|
|
40
40
|
_tmpl$29 = "<span class=\"k2b-app-workspace__sidebar-status-dot\"></span>",
|
|
41
41
|
_tmpl$30 = ["<span", " aria-hidden=\"true\">", "</span>"],
|
|
42
42
|
_tmpl$31 = ["<span class=\"k2b-app-workspace__sidebar-item-context-meta\">", "</span>"],
|
|
43
|
-
_tmpl$32 = ["<span class=\"k2b-app-workspace__sidebar-item-context\"><span class=\"k2b-app-workspace__sidebar-item-context-label\">", "</span>", "</span>"],
|
|
44
|
-
_tmpl$33 = ["<span class=\"k2b-app-workspace__sidebar-item-description\">", "</span>"],
|
|
45
|
-
_tmpl$34 = ["<span class=\"k2b-app-workspace__sidebar-item-copy\">", "<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span>", "</span>"],
|
|
43
|
+
_tmpl$32 = ["<span class=\"k2b-app-workspace__sidebar-item-context\"><span class=\"k2b-app-workspace__sidebar-item-context-label k2b-truncate-fade\">", "</span>", "</span>"],
|
|
44
|
+
_tmpl$33 = ["<span class=\"k2b-app-workspace__sidebar-item-description k2b-truncate-fade\">", "</span>"],
|
|
45
|
+
_tmpl$34 = ["<span class=\"k2b-app-workspace__sidebar-item-copy\">", "<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines\">", "</span></span>", "</span>"],
|
|
46
46
|
_tmpl$35 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"", ">", "</span>"],
|
|
47
47
|
_tmpl$36 = ["<i", "></i>"],
|
|
48
48
|
_tmpl$37 = ["<a", " class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</a>"],
|
|
49
49
|
_tmpl$38 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</button>"],
|
|
50
|
-
_tmpl$39 = ["<span class=\"k2b-app-workspace__sidebar-item-copy\"><span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span><span class=\"k2b-app-workspace__sidebar-item-description\">", "</span></span>"],
|
|
50
|
+
_tmpl$39 = ["<span class=\"k2b-app-workspace__sidebar-item-copy\"><span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines\">", "</span></span><span class=\"k2b-app-workspace__sidebar-item-description k2b-truncate-fade\">", "</span></span>"],
|
|
51
51
|
_tmpl$40 = ["<span class=\"", "\"", ">", "</span>"],
|
|
52
52
|
_tmpl$41 = ["<span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\"><i class=\"", "\"></i></span>"],
|
|
53
|
-
_tmpl$42 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span>"],
|
|
53
|
+
_tmpl$42 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text k2b-truncate-fade-lines\">", "</span></span>"],
|
|
54
54
|
_tmpl$43 = ["<div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">", "</div>"],
|
|
55
55
|
_tmpl$44 = ["<div class=\"k2b-app-workspace__nav-tree-node\" role=\"treeitem\"", " style=\"", "\">", "", "</div>"],
|
|
56
56
|
_tmpl$45 = ["<div class=\"", "\" role=\"tree\"", ">", "</div>"],
|
|
57
57
|
_tmpl$46 = ["<div class=\"k2b-app-workspace__sidebar-icon-grid\"", ">", "</div>"],
|
|
58
58
|
_tmpl$47 = ["<i", " aria-hidden=\"true\"></i>"],
|
|
59
|
-
_tmpl$48 = "<
|
|
60
|
-
_tmpl$49 =
|
|
61
|
-
_tmpl$50 = ["<
|
|
62
|
-
_tmpl$51 = ["<div class=\"
|
|
63
|
-
_tmpl$52 = ["<
|
|
59
|
+
_tmpl$48 = ["<span class=\"k2b-app-workspace__head-primary-label\">", "</span>"],
|
|
60
|
+
_tmpl$49 = "<i class=\"ti ti-layout-sidebar\" aria-hidden=\"true\"></i>",
|
|
61
|
+
_tmpl$50 = ["<div class=\"k2b-app-workspace__head-views\">", "</div>"],
|
|
62
|
+
_tmpl$51 = ["<div class=\"k2b-app-workspace__head-filters\" role=\"group\"", ">", "", "</div>"],
|
|
63
|
+
_tmpl$52 = ["<span class=\"k2b-app-workspace__head-count\"><span>", "</span></span>"],
|
|
64
|
+
_tmpl$53 = ["<div class=\"k2b-app-workspace__head-actions\">", "", "</div>"],
|
|
65
|
+
_tmpl$54 = ["<div class=\"k2b-app-workspace__head\"", "><div class=\"k2b-app-workspace__head-lead\">", "", "", "", "", "</div>", "</div>"],
|
|
66
|
+
_tmpl$55 = ["<h1 class=\"k2b-app-workspace__head-heading\" data-k2b-page-trail-title", ">", "</h1>"],
|
|
67
|
+
_tmpl$56 = ["<div class=\"", "\" data-k2b-app-workspace", " style=\"", "\">", "</div>"],
|
|
68
|
+
_tmpl$57 = ["<div class=\"", "\">", "</div>"];
|
|
64
69
|
import { Link } from "@k2b/ssr/nav";
|
|
65
70
|
import { children, createContext, createEffect, createMemo, createRoot, createSignal, createUniqueId, For, getOwner, mergeProps, on, onCleanup, onMount, Show, useContext } from "solid-js";
|
|
66
71
|
import { Dynamic, isServer } from "solid-js/web";
|
|
67
|
-
import { Button, IconButton, IconButtonLink } from "../actions/Button";
|
|
72
|
+
import { Button, ButtonLink, IconButton, IconButtonLink } from "../actions/Button";
|
|
73
|
+
import { useFilterMessages } from "../actions/filter-messages";
|
|
68
74
|
import { dialogCore } from "../feedback/dialog-core";
|
|
69
75
|
import { RenderErrorBoundary } from "../internal/render-error";
|
|
70
76
|
import { APP_WORKSPACE_DETAIL_CLOSE_EVENT, APP_WORKSPACE_DETAIL_STEP_EVENT, APP_WORKSPACE_SIDEBAR_HIDE_EVENT, installAppWorkspaceController } from "./app-workspace-controller";
|
|
71
|
-
import { APP_WORKSPACE_DETAIL_DEFAULT, APP_WORKSPACE_DETAIL_MAX, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DRAWER_DEFAULT, APP_WORKSPACE_DRAWER_MAX, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_PANE_DEFAULT, APP_WORKSPACE_PANE_MAX, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_SIDEBAR_COLLAPSED, APP_WORKSPACE_SIDEBAR_DEFAULT, APP_WORKSPACE_SIDEBAR_MAX, APP_WORKSPACE_SIDEBAR_MIN, appWorkspaceLayoutStyle, appWorkspacePanelVariable } from "./app-workspace-state";
|
|
77
|
+
import { APP_WORKSPACE_DETAIL_DEFAULT, APP_WORKSPACE_DETAIL_MAX, APP_WORKSPACE_DETAIL_MIN, APP_WORKSPACE_DRAWER_DEFAULT, APP_WORKSPACE_DRAWER_MAX, APP_WORKSPACE_DRAWER_MIN, APP_WORKSPACE_MAIN_MIN, APP_WORKSPACE_PANE_DEFAULT, APP_WORKSPACE_PANE_MAX, APP_WORKSPACE_PANE_MIN, APP_WORKSPACE_SIDEBAR_COLLAPSED, APP_WORKSPACE_SIDEBAR_DEFAULT, APP_WORKSPACE_SIDEBAR_MAX, APP_WORKSPACE_SIDEBAR_MIN, appWorkspaceLayoutStyle, appWorkspacePanelVariable } from "./app-workspace-state";
|
|
78
|
+
import { appWorkspaceInverseWidthCss, appWorkspaceWidthCss, appWorkspaceWidthToken, isAppWorkspaceWidthShare } from "./app-workspace-width";
|
|
72
79
|
import BottomSheet, { bottomSheetAdaptiveOptions } from "./BottomSheet";
|
|
73
80
|
import { PageTitle, usePageTrail } from "./PageTitle";
|
|
74
81
|
import { SidebarItemPreview } from "./SidebarItemPreview";
|
|
@@ -81,6 +88,8 @@ const ResizeContext = createContext(true);
|
|
|
81
88
|
/** The enclosing workspace: its head names the sidebar, and a nested workspace leaves the page title to it. */
|
|
82
89
|
const WorkspaceContext = createContext();
|
|
83
90
|
const LayoutStateContext = createContext(null);
|
|
91
|
+
const HEAD = Symbol("AppWorkspace.Head");
|
|
92
|
+
const headSlot = value => !!value && typeof value === "object" && "kind" in value && value.kind === HEAD;
|
|
84
93
|
const MAIN_PANE = Symbol("AppWorkspace.MainPane");
|
|
85
94
|
const SIDEBAR_DESKTOP = Symbol("AppWorkspace.SidebarDesktop");
|
|
86
95
|
const SIDEBAR_ITEM_ICON = Symbol("AppWorkspace.SidebarItemIcon");
|
|
@@ -100,6 +109,13 @@ const mainPaneSlot = value => Boolean(value && typeof value === "object" && "kin
|
|
|
100
109
|
const sidebarChildSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === SIDEBAR_DESKTOP);
|
|
101
110
|
const sidebarItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && [SIDEBAR_ITEM_ICON, SIDEBAR_ITEM_LABEL, SIDEBAR_ITEM_META, SIDEBAR_ITEM_ACTION].includes(value.kind));
|
|
102
111
|
const navTreeItemSlot = value => Boolean(value && typeof value === "object" && "kind" in value && value.kind === NAV_TREE_ITEM);
|
|
112
|
+
/** Head row slot. Must be a direct child of AppWorkspace; its parts may be islands. */
|
|
113
|
+
function AppWorkspaceHeadSlot(props) {
|
|
114
|
+
return {
|
|
115
|
+
kind: HEAD,
|
|
116
|
+
props
|
|
117
|
+
};
|
|
118
|
+
}
|
|
103
119
|
function ResizeHandle(props) {
|
|
104
120
|
const workspaceMessages = useWorkspaceMessages();
|
|
105
121
|
const workspace = useContext(WorkspaceContext);
|
|
@@ -108,9 +124,9 @@ function ResizeHandle(props) {
|
|
|
108
124
|
const state = workspace?.initialLayoutState() ?? providerState;
|
|
109
125
|
const id = props.panelId ?? "primary";
|
|
110
126
|
const size = props.kind === "sidebar" ? state?.sidebarCollapsed ? APP_WORKSPACE_SIDEBAR_COLLAPSED : state?.sidebarWidth : props.kind === "pane" ? state?.paneWidths?.[id] : props.kind === "detail" ? state?.detailWidths?.[id] : state?.drawerHeights?.[id];
|
|
111
|
-
return Math.min(props.maxSize, Math.max(props.minSize, size ?? props.defaultSize));
|
|
127
|
+
return Math.min(props.maxSize, Math.max(props.minSize, size ?? (typeof props.defaultSize === "number" ? props.defaultSize : props.defaultSize.min)));
|
|
112
128
|
};
|
|
113
|
-
return _$ssr(_tmpl$, _$ssrAttribute("aria-label", _$escape(props.label ?? (props.kind === "sidebar" ? workspaceMessages().resizeNavigation : props.kind === "pane" ? workspaceMessages().resizeWorkspacePane : props.kind === "detail" ? workspaceMessages().resizeDetailPanel : workspaceMessages().resizeBottomDrawer), true), false) + _$ssrAttribute("aria-controls", _$escape(props.controls, true), false) + _$ssrAttribute("aria-orientation", props.kind === "drawer" ? "horizontal" : "vertical", false) + _$ssrAttribute("aria-valuemin", _$escape(props.minSize, true), false) + _$ssrAttribute("aria-valuemax", _$escape(props.maxSize, true), false) + _$ssrAttribute("aria-valuenow", _$escape(initialSize(), true), false) + _$ssrAttribute("data-workspace-level-shown", _$escape(props.levelShown, true), false) + _$ssrAttribute("data-app-workspace-resize", _$escape(props.kind, true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(props.panelId, true), false) + _$ssrAttribute("data-workspace-resize-edge", _$escape(props.edge, true), false) + _$ssrAttribute("data-workspace-resize-shadow", props.shadow ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-default-size", _$escape(props.defaultSize, true), false) + _$ssrAttribute("data-workspace-min-size", _$escape(props.minSize, true), false) + _$ssrAttribute("data-workspace-max-size", _$escape(props.maxSize, true), false), _$ssrStyle(props.style));
|
|
129
|
+
return _$ssr(_tmpl$, _$ssrAttribute("aria-label", _$escape(props.label ?? (props.kind === "sidebar" ? workspaceMessages().resizeNavigation : props.kind === "pane" ? workspaceMessages().resizeWorkspacePane : props.kind === "detail" ? workspaceMessages().resizeDetailPanel : workspaceMessages().resizeBottomDrawer), true), false) + _$ssrAttribute("aria-controls", _$escape(props.controls, true), false) + _$ssrAttribute("aria-orientation", props.kind === "drawer" ? "horizontal" : "vertical", false) + _$ssrAttribute("aria-valuemin", _$escape(props.minSize, true), false) + _$ssrAttribute("aria-valuemax", _$escape(props.maxSize, true), false) + _$ssrAttribute("aria-valuenow", _$escape(initialSize(), true), false) + _$ssrAttribute("data-workspace-level-shown", _$escape(props.levelShown, true), false) + _$ssrAttribute("data-app-workspace-resize", _$escape(props.kind, true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(props.panelId, true), false) + _$ssrAttribute("data-workspace-resize-edge", _$escape(props.edge, true), false) + _$ssrAttribute("data-workspace-resize-shadow", props.shadow ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-default-size", _$escape(appWorkspaceWidthToken(props.defaultSize), true), false) + _$ssrAttribute("data-workspace-min-size", _$escape(props.minSize, true), false) + _$ssrAttribute("data-workspace-max-size", _$escape(props.maxSize, true), false), _$ssrStyle(props.style));
|
|
114
130
|
}
|
|
115
131
|
|
|
116
132
|
/**
|
|
@@ -255,10 +271,30 @@ function AppWorkspaceMain(props) {
|
|
|
255
271
|
// layout. Deriving it from `regions()` made a workspace whose panes are all
|
|
256
272
|
// closed fall back to `resolved()`, which renders the raw slot objects.
|
|
257
273
|
const hasPanes = createMemo(() => paneIds().length > 0);
|
|
258
|
-
|
|
274
|
+
// The workspace's tracks and queries read Main's minimum on the workspace
|
|
275
|
+
// itself, which cannot read Main's own variables, so this rule hands it up,
|
|
276
|
+
// as `AppWorkspace.Detail` does with its width.
|
|
277
|
+
const minWidth = () => {
|
|
278
|
+
const value = props.minWidth;
|
|
279
|
+
return isAppWorkspaceWidthShare(value) ? value : typeof value === "number" && Number.isFinite(value) && value > APP_WORKSPACE_MAIN_MIN ? Math.round(value) : undefined;
|
|
280
|
+
};
|
|
281
|
+
const minWidthRule = value => {
|
|
282
|
+
const main = `.k2b-app-workspace__main[data-workspace-main-min="${appWorkspaceWidthToken(value)}"]`;
|
|
283
|
+
const inverse = typeof value === "number" ? "" : `;--k2b-workspace-main-min-grid:${appWorkspaceInverseWidthCss(value, "100%")};--k2b-workspace-main-min-cq:${appWorkspaceInverseWidthCss(value, "100cqi")}`;
|
|
284
|
+
return `.k2b-app-workspace:has(> .k2b-app-workspace__content > ${main}, > .k2b-app-workspace__content > :is(solid-island, solid-client) > ${main}){--k2b-workspace-main-min:${appWorkspaceWidthCss(value, "100%")}${inverse}}`;
|
|
285
|
+
};
|
|
286
|
+
return [_$createComponent(Show, {
|
|
287
|
+
get when() {
|
|
288
|
+
return minWidth();
|
|
289
|
+
},
|
|
290
|
+
children: value => _$ssr(_tmpl$5, minWidthRule(value()))
|
|
291
|
+
}), _$ssrElement("div", _$mergeProps({
|
|
259
292
|
get ["class"]() {
|
|
260
293
|
return `k2b-app-workspace__main ${hasPanes() ? "has-panes" : ""} ${props.class ?? ""}`;
|
|
261
294
|
},
|
|
295
|
+
get ["data-workspace-main-min"]() {
|
|
296
|
+
return minWidth() === undefined ? undefined : appWorkspaceWidthToken(minWidth());
|
|
297
|
+
},
|
|
262
298
|
get ["data-workspace-levels"]() {
|
|
263
299
|
return levelsMode() ? "" : undefined;
|
|
264
300
|
},
|
|
@@ -298,7 +334,7 @@ function AppWorkspaceMain(props) {
|
|
|
298
334
|
return props.mobilePane ?? (anchor?.type === "pane" ? anchor.slot.props.id : "main");
|
|
299
335
|
};
|
|
300
336
|
if (region.type === "primary") {
|
|
301
|
-
return _$ssr(_tmpl$
|
|
337
|
+
return _$ssr(_tmpl$6, _$ssrAttribute("data-workspace-mobile-active", activeMobilePane() === "main" ? "true" : "false", false), _$escape(region.children));
|
|
302
338
|
}
|
|
303
339
|
const pane = region.slot;
|
|
304
340
|
const levelIndex = () => levels().indexOf(pane) + 1;
|
|
@@ -307,7 +343,10 @@ function AppWorkspaceMain(props) {
|
|
|
307
343
|
const variable = appWorkspacePanelVariable("pane", panelId);
|
|
308
344
|
const isAnchor = () => region === anchorRegion();
|
|
309
345
|
const resizable = () => !isAnchor() && (pane.props.resizable ?? rootResizable);
|
|
310
|
-
const defaultSize = () =>
|
|
346
|
+
const defaultSize = () => {
|
|
347
|
+
const value = pane.props.defaultSize;
|
|
348
|
+
return typeof value === "number" || isAppWorkspaceWidthShare(value) ? value : APP_WORKSPACE_PANE_DEFAULT;
|
|
349
|
+
};
|
|
311
350
|
const minSize = () => pane.props.minSize ?? APP_WORKSPACE_PANE_MIN;
|
|
312
351
|
const maxSize = () => Math.max(minSize(), pane.props.maxSize ?? APP_WORKSPACE_PANE_MAX);
|
|
313
352
|
const before = () => levelsMode() || region.index < (anchorRegion()?.index ?? 0);
|
|
@@ -351,9 +390,9 @@ function AppWorkspaceMain(props) {
|
|
|
351
390
|
get children() {
|
|
352
391
|
return handle();
|
|
353
392
|
}
|
|
354
|
-
}), _$ssr(_tmpl$
|
|
393
|
+
}), _$ssr(_tmpl$7, _$ssrAttribute("id", _$escape(pane.domId, true), false), `k2b-app-workspace__main-pane ${isAnchor() ? "is-primary" : ""} ${_$escape(pane.props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(pane.props.label, true), false) + _$ssrAttribute("data-workspace-level", levelsMode() ? _$escape(levelIndex(), true) : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-level-shown", _$escape(levelAttr("shown"), true), false) + _$ssrAttribute("data-workspace-level-first", _$escape(levelAttr("first"), true), false) + _$ssrAttribute("data-workspace-level-last", _$escape(levelAttr("last"), true), false) + _$ssrAttribute("data-workspace-main-region", _$escape(pane.props.id, true), false) + _$ssrAttribute("data-workspace-mobile-active", (levelsMode() ? levelClasses(levelIndex(), "shown").split(" ").includes("1") : activeMobilePane() === pane.props.id) ? "true" : "false", false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId, true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-surface", pane.props.surface === "navigation" ? "navigation" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll", !levelsMode() && pane.props.scroll === false ? "false" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll-fade-mode", !levelsMode() && pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : _$escape(undefined, true), false), _$ssrStyle(isAnchor() ? undefined : {
|
|
355
394
|
// A stored width keeps to this pane's limits before the controller attaches.
|
|
356
|
-
"--k2b-workspace-panel-size": `clamp(${minSize()}px, var(${variable}, ${defaultSize()}
|
|
395
|
+
"--k2b-workspace-panel-size": `clamp(${minSize()}px, var(${variable}, ${appWorkspaceWidthCss(defaultSize(), "var(--k2b-workspace-width)")}), ${maxSize()}px)`,
|
|
357
396
|
"--k2b-workspace-panel-min": `${minSize()}px`
|
|
358
397
|
}), levelsMode() ? _$escape([_$createComponent(LevelHead, {
|
|
359
398
|
get label() {
|
|
@@ -388,13 +427,13 @@ function AppWorkspaceMain(props) {
|
|
|
388
427
|
return props.onLevelNavigate ? navigateBack : undefined;
|
|
389
428
|
},
|
|
390
429
|
get children() {
|
|
391
|
-
return _$ssr(_tmpl$
|
|
430
|
+
return _$ssr(_tmpl$8);
|
|
392
431
|
}
|
|
393
432
|
});
|
|
394
433
|
}
|
|
395
434
|
});
|
|
396
435
|
}
|
|
397
|
-
}), _$ssr(_tmpl$
|
|
436
|
+
}), _$ssr(_tmpl$9, _$ssrAttribute("data-scroll", pane.props.scroll === false ? "false" : _$escape(undefined, true), false) + _$ssrAttribute("data-scroll-fade-mode", pane.props.scroll !== false && pane.props.scrollFade !== false ? "both" : _$escape(undefined, true), false), _$escape(pane.props.children))]) : _$escape(pane.props.children)), _$createComponent(Show, {
|
|
398
437
|
get when() {
|
|
399
438
|
return _$memo(() => !!resizable())() && before();
|
|
400
439
|
},
|
|
@@ -407,13 +446,16 @@ function AppWorkspaceMain(props) {
|
|
|
407
446
|
}
|
|
408
447
|
});
|
|
409
448
|
}
|
|
410
|
-
})), false);
|
|
449
|
+
})), false)];
|
|
411
450
|
}
|
|
451
|
+
|
|
452
|
+
/** The Detail region's DOM id, for application controls that target it with aria-controls. */
|
|
453
|
+
export const appWorkspaceDetailElementId = id => `k2b-workspace-detail-${assertStableUiId(id, "AppWorkspace.Detail id")}`;
|
|
412
454
|
function AppWorkspaceDetail(props) {
|
|
413
455
|
const workspaceMessages = useWorkspaceMessages();
|
|
414
456
|
const rootResizable = useContext(ResizeContext);
|
|
415
457
|
const panelId = () => assertStableUiId(props.id, "AppWorkspace.Detail id");
|
|
416
|
-
const domId = () =>
|
|
458
|
+
const domId = () => appWorkspaceDetailElementId(props.id);
|
|
417
459
|
const variable = () => appWorkspacePanelVariable("detail", panelId());
|
|
418
460
|
// Start widths of 20, 26, 30, and 34 rem. They feed `aria-valuenow` and the
|
|
419
461
|
// `var(…, Npx)` first-paint fallback, so they are behaviour, not taste.
|
|
@@ -457,7 +499,7 @@ function AppWorkspaceDetail(props) {
|
|
|
457
499
|
aside?.removeEventListener(APP_WORKSPACE_DETAIL_STEP_EVENT, step);
|
|
458
500
|
});
|
|
459
501
|
});
|
|
460
|
-
return [_$ssr(_tmpl$
|
|
502
|
+
return [_$ssr(_tmpl$5, workspaceRule()), _$createComponent(Button, {
|
|
461
503
|
type: "button",
|
|
462
504
|
variant: "ghost",
|
|
463
505
|
get ["aria-controls"]() {
|
|
@@ -497,7 +539,7 @@ function AppWorkspaceDetail(props) {
|
|
|
497
539
|
}
|
|
498
540
|
});
|
|
499
541
|
}
|
|
500
|
-
}), _$ssr(_tmpl$1, _$ssrAttribute("id", _$escape(domId(), true), false), `k2b-app-workspace__detail ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-width", _$escape(props.width ?? "md", true), false) + _$ssrAttribute("data-workspace-detail-phone", props.phone === "page" ? "page" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId(), true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-workspace-detail-closable", props.onClose ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-detail-steppable", props.onStep ? "true" : _$escape(undefined, true), false), _$ssrAttribute("hidden", !props.open, true), _$ssrStyle({
|
|
542
|
+
}), _$ssr(_tmpl$1, _$ssrAttribute("id", _$escape(domId(), true), false), `k2b-app-workspace__detail ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-width", _$escape(props.width ?? "md", true), false) + _$ssrAttribute("data-workspace-detail-phone", props.phone === "page" ? "page" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-detail-choice", props.openOnChoice === false ? "request" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-panel-id", _$escape(panelId(), true), false) + _$ssrAttribute("data-workspace-resizable", resizable() ? "true" : "false", false) + _$ssrAttribute("data-workspace-detail-closable", props.onClose ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-workspace-detail-steppable", props.onStep ? "true" : _$escape(undefined, true), false), _$ssrAttribute("hidden", !props.open, true), _$ssrStyle({
|
|
501
543
|
...sizeStyle(),
|
|
502
544
|
"view-transition-name": props.viewTransitionName
|
|
503
545
|
}), _$ssrAttribute("aria-label", _$escape(workspaceMessages().detailFullHeight, true), false), _$escape(props.children))];
|
|
@@ -1647,16 +1689,28 @@ const AppWorkspaceSidebarIconAction = props => {
|
|
|
1647
1689
|
* host's page title with the way up (see `PageTitle`); the page's own
|
|
1648
1690
|
* `PageTitle` takes its place. The visible title is no heading, because many
|
|
1649
1691
|
* pages render their own `h1`. From 64 rem a sidebar that marks the current
|
|
1650
|
-
* page names it already: the
|
|
1651
|
-
* `h1` its heading stays for assistive technology.
|
|
1652
|
-
*
|
|
1653
|
-
*
|
|
1692
|
+
* page names it already: the title and the way up hide, and only on a page
|
|
1693
|
+
* without its own `h1` its heading stays for assistive technology. With an
|
|
1694
|
+
* `AppWorkspace.Head` slot the row is always there and also carries the
|
|
1695
|
+
* views, the filters, the result count, and the actions; only its title
|
|
1696
|
+
* follows the rules above. It draws no line; CSS decides what shows and when
|
|
1697
|
+
* the filters wrap, so the server-rendered page already has its final
|
|
1698
|
+
* geometry.
|
|
1654
1699
|
*/
|
|
1655
1700
|
function AppWorkspaceHead(props) {
|
|
1656
1701
|
const messages = useWorkspaceMessages();
|
|
1702
|
+
const filters = useFilterMessages();
|
|
1703
|
+
// JSX prop getters construct their elements on every read. Share each
|
|
1704
|
+
// resolved slot between its presence check and its rendered content.
|
|
1705
|
+
const resolvedViews = children(() => props.head?.views);
|
|
1706
|
+
const resolvedFilters = children(() => props.head?.filters);
|
|
1707
|
+
const resolvedActions = children(() => props.head?.actions);
|
|
1708
|
+
const resolvedCount = children(() => props.head?.count);
|
|
1657
1709
|
// A nested workspace is part of a page that already shows its title.
|
|
1658
1710
|
const trail = props.nested ? () => undefined : usePageTrail();
|
|
1659
|
-
|
|
1711
|
+
const resetContent = () => filters().reset;
|
|
1712
|
+
const primaryContent = () => [_$ssr(_tmpl$47, _$ssrAttribute("class", _$escape(props.head?.primary?.icon, true), false)), _$ssr(_tmpl$48, _$escape(props.head?.primary?.label))];
|
|
1713
|
+
return _$ssr(_tmpl$54, _$ssrAttribute("data-trail", trail()?.ancestors.length ? "up" : trail() ? "title" : _$escape(undefined, true), false) + _$ssrAttribute("data-row", props.head ? "" : _$escape(undefined, true), false), _$escape(_$createComponent(IconButton, {
|
|
1660
1714
|
"class": "k2b-app-workspace__head-toggle",
|
|
1661
1715
|
get label() {
|
|
1662
1716
|
return messages().showNavigation;
|
|
@@ -1667,7 +1721,7 @@ function AppWorkspaceHead(props) {
|
|
|
1667
1721
|
"aria-expanded": "false",
|
|
1668
1722
|
"data-app-workspace-sidebar-toggle": "",
|
|
1669
1723
|
get children() {
|
|
1670
|
-
return _$ssr(_tmpl$
|
|
1724
|
+
return _$ssr(_tmpl$49);
|
|
1671
1725
|
}
|
|
1672
1726
|
})), _$escape(_$createComponent(Show, {
|
|
1673
1727
|
get when() {
|
|
@@ -1679,7 +1733,113 @@ function AppWorkspaceHead(props) {
|
|
|
1679
1733
|
},
|
|
1680
1734
|
as: "p",
|
|
1681
1735
|
fallback: true
|
|
1682
|
-
}), _$ssr(_tmpl$
|
|
1736
|
+
}), _$ssr(_tmpl$55, _$ssrAttribute("data-k2b-server", isServer ? "" : _$escape(undefined, true), false), _$escape(current().title))]
|
|
1737
|
+
})), _$escape(_$createComponent(Show, {
|
|
1738
|
+
get when() {
|
|
1739
|
+
return resolvedViews.toArray().some(Boolean);
|
|
1740
|
+
},
|
|
1741
|
+
get children() {
|
|
1742
|
+
return _$ssr(_tmpl$50, _$escape(resolvedViews()));
|
|
1743
|
+
}
|
|
1744
|
+
})), _$escape(_$createComponent(Show, {
|
|
1745
|
+
get when() {
|
|
1746
|
+
return resolvedFilters.toArray().some(Boolean) || props.head?.filtered;
|
|
1747
|
+
},
|
|
1748
|
+
get children() {
|
|
1749
|
+
return _$ssr(_tmpl$51, _$ssrAttribute("aria-label", _$escape(filters().filters, true), false), _$escape(resolvedFilters()), _$escape(_$createComponent(Show, {
|
|
1750
|
+
get when() {
|
|
1751
|
+
return props.head?.filtered;
|
|
1752
|
+
},
|
|
1753
|
+
get children() {
|
|
1754
|
+
return _$createComponent(Show, {
|
|
1755
|
+
get when() {
|
|
1756
|
+
return props.head?.resetHref;
|
|
1757
|
+
},
|
|
1758
|
+
get fallback() {
|
|
1759
|
+
return _$createComponent(Button, {
|
|
1760
|
+
variant: "ghost",
|
|
1761
|
+
size: "sm",
|
|
1762
|
+
"class": "k2b-app-workspace__head-reset",
|
|
1763
|
+
onClick: () => props.head?.onReset?.(),
|
|
1764
|
+
get children() {
|
|
1765
|
+
return resetContent();
|
|
1766
|
+
}
|
|
1767
|
+
});
|
|
1768
|
+
},
|
|
1769
|
+
children: href => _$createComponent(ButtonLink, {
|
|
1770
|
+
variant: "ghost",
|
|
1771
|
+
size: "sm",
|
|
1772
|
+
"class": "k2b-app-workspace__head-reset",
|
|
1773
|
+
get href() {
|
|
1774
|
+
return href();
|
|
1775
|
+
},
|
|
1776
|
+
get onClick() {
|
|
1777
|
+
return props.head?.onReset ? event => {
|
|
1778
|
+
if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
|
|
1779
|
+
event.preventDefault();
|
|
1780
|
+
props.head?.onReset?.();
|
|
1781
|
+
} : undefined;
|
|
1782
|
+
},
|
|
1783
|
+
get children() {
|
|
1784
|
+
return resetContent();
|
|
1785
|
+
}
|
|
1786
|
+
})
|
|
1787
|
+
});
|
|
1788
|
+
}
|
|
1789
|
+
})));
|
|
1790
|
+
}
|
|
1791
|
+
})), _$escape(_$createComponent(Show, {
|
|
1792
|
+
get when() {
|
|
1793
|
+
return _$memo(() => !!props.head?.filtered)() && resolvedCount.toArray().some(value => value !== undefined && value !== null && value !== false);
|
|
1794
|
+
},
|
|
1795
|
+
get children() {
|
|
1796
|
+
return _$ssr(_tmpl$52, _$escape(resolvedCount()));
|
|
1797
|
+
}
|
|
1798
|
+
})), _$escape(_$createComponent(Show, {
|
|
1799
|
+
get when() {
|
|
1800
|
+
return resolvedActions.toArray().some(Boolean) || props.head?.primary;
|
|
1801
|
+
},
|
|
1802
|
+
get children() {
|
|
1803
|
+
return _$ssr(_tmpl$53, _$escape(resolvedActions()), _$escape(_$createComponent(Show, {
|
|
1804
|
+
get when() {
|
|
1805
|
+
return props.head?.primary;
|
|
1806
|
+
},
|
|
1807
|
+
children: primary => _$createComponent(Show, {
|
|
1808
|
+
get when() {
|
|
1809
|
+
return primary().href;
|
|
1810
|
+
},
|
|
1811
|
+
get fallback() {
|
|
1812
|
+
return _$createComponent(Button, {
|
|
1813
|
+
variant: "primary",
|
|
1814
|
+
size: "sm",
|
|
1815
|
+
"class": "k2b-app-workspace__head-primary",
|
|
1816
|
+
"data-workspace-primary": "",
|
|
1817
|
+
get onClick() {
|
|
1818
|
+
return primary().onClick;
|
|
1819
|
+
},
|
|
1820
|
+
get children() {
|
|
1821
|
+
return primaryContent();
|
|
1822
|
+
}
|
|
1823
|
+
});
|
|
1824
|
+
},
|
|
1825
|
+
children: href => _$createComponent(ButtonLink, {
|
|
1826
|
+
variant: "primary",
|
|
1827
|
+
size: "sm",
|
|
1828
|
+
"class": "k2b-app-workspace__head-primary",
|
|
1829
|
+
"data-workspace-primary": "",
|
|
1830
|
+
get href() {
|
|
1831
|
+
return href();
|
|
1832
|
+
},
|
|
1833
|
+
get onClick() {
|
|
1834
|
+
return primary().onClick;
|
|
1835
|
+
},
|
|
1836
|
+
get children() {
|
|
1837
|
+
return primaryContent();
|
|
1838
|
+
}
|
|
1839
|
+
})
|
|
1840
|
+
})
|
|
1841
|
+
})));
|
|
1842
|
+
}
|
|
1683
1843
|
})));
|
|
1684
1844
|
}
|
|
1685
1845
|
const AppWorkspace = props => {
|
|
@@ -1707,6 +1867,20 @@ const AppWorkspace = props => {
|
|
|
1707
1867
|
writeState: state => props.onLayoutChange?.(state)
|
|
1708
1868
|
}));
|
|
1709
1869
|
});
|
|
1870
|
+
const contents = () => {
|
|
1871
|
+
const resolved = children(() => props.children);
|
|
1872
|
+
const slots = createMemo(() => flatten(resolved()));
|
|
1873
|
+
// Same props object, same memo value: a sibling change must not rebuild the head's slots.
|
|
1874
|
+
const head = createMemo(() => slots().find(headSlot)?.props);
|
|
1875
|
+
const content = () => slots().filter(value => !headSlot(value));
|
|
1876
|
+
return [_$createComponent(AppWorkspaceHead, {
|
|
1877
|
+
sidebarId: sidebarId,
|
|
1878
|
+
nested: nested,
|
|
1879
|
+
get head() {
|
|
1880
|
+
return head();
|
|
1881
|
+
}
|
|
1882
|
+
}), content()];
|
|
1883
|
+
};
|
|
1710
1884
|
return _$createComponent(ResizeContext.Provider, {
|
|
1711
1885
|
get value() {
|
|
1712
1886
|
return props.resizable !== false;
|
|
@@ -1715,10 +1889,7 @@ const AppWorkspace = props => {
|
|
|
1715
1889
|
return _$createComponent(WorkspaceContext.Provider, {
|
|
1716
1890
|
value: workspace,
|
|
1717
1891
|
get children() {
|
|
1718
|
-
return _$ssr(_tmpl$
|
|
1719
|
-
sidebarId: sidebarId,
|
|
1720
|
-
nested: nested
|
|
1721
|
-
})), _$escape(props.children));
|
|
1892
|
+
return _$ssr(_tmpl$56, `k2b-app-workspace ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-mobile-surface", _$escape(props.mobileSurface, true), false) + _$ssrAttribute("data-flat", props.flat ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-sidebar-collapsed", initialLayoutState()?.sidebarCollapsed === undefined ? _$escape(undefined, true) : _$escape(String(initialLayoutState()?.sidebarCollapsed), true), false) + _$ssrAttribute("data-workspace-resizable", props.resizable === false ? "false" : "true", false), _$ssrStyle(appWorkspaceLayoutStyle(initialLayoutState())), _$escape(contents()));
|
|
1722
1893
|
}
|
|
1723
1894
|
});
|
|
1724
1895
|
}
|
|
@@ -1732,7 +1903,8 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
|
|
|
1732
1903
|
return props.children;
|
|
1733
1904
|
}
|
|
1734
1905
|
});
|
|
1735
|
-
AppWorkspace.
|
|
1906
|
+
AppWorkspace.Head = AppWorkspaceHeadSlot;
|
|
1907
|
+
AppWorkspace.Content = props => _$ssr(_tmpl$57, `k2b-app-workspace__content ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
|
|
1736
1908
|
AppWorkspace.Main = AppWorkspaceMain;
|
|
1737
1909
|
AppWorkspace.MainPane = AppWorkspaceMainPane;
|
|
1738
1910
|
AppWorkspace.Detail = AppWorkspaceDetail;
|