@k2b/ui 0.23.0 → 0.25.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/browser/actions/Dropdown.js +67 -52
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/GestureMenu.js +3 -3
- package/dist/browser/actions/GestureMenu.js.map +1 -1
- package/dist/browser/actions/SpotlightSearch.js +13 -6
- package/dist/browser/actions/SpotlightSearch.js.map +1 -1
- package/dist/browser/actions/Toolbar.js +75 -1
- package/dist/browser/actions/Toolbar.js.map +1 -1
- package/dist/browser/content/Calendar.js +1570 -923
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarDayView.js +2 -2
- package/dist/browser/content/CalendarDayView.js.map +1 -1
- package/dist/browser/content/CalendarWeekView.js +29 -7
- package/dist/browser/content/CalendarWeekView.js.map +1 -1
- package/dist/browser/content/DataTable.js +45 -35
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/Kbd.js +51 -0
- package/dist/browser/content/Kbd.js.map +1 -0
- package/dist/browser/content/LabelChip.js +38 -0
- package/dist/browser/content/LabelChip.js.map +1 -0
- package/dist/browser/content/MarkdownView.js +2 -1
- package/dist/browser/content/MarkdownView.js.map +1 -1
- package/dist/browser/content/Steps.js +34 -0
- package/dist/browser/content/Steps.js.map +1 -0
- package/dist/browser/content/VirtualFeed.js +33 -1
- package/dist/browser/content/VirtualFeed.js.map +1 -1
- package/dist/browser/content/calendar-day-scroll.js +17 -4
- package/dist/browser/content/calendar-day-scroll.js.map +1 -1
- package/dist/browser/content/calendar-dialogs.js +32 -60
- package/dist/browser/content/calendar-dialogs.js.map +1 -1
- package/dist/browser/content/calendar-month-scroll.js +80 -0
- package/dist/browser/content/calendar-month-scroll.js.map +1 -0
- package/dist/browser/content/calendar-time-view.js +9 -4
- package/dist/browser/content/calendar-time-view.js.map +1 -1
- package/dist/browser/content/index.js +4 -1
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/markdown-info-blocks.js +33 -5
- package/dist/browser/content/markdown-info-blocks.js.map +1 -1
- package/dist/browser/feedback/prompts.js +17 -3
- package/dist/browser/feedback/prompts.js.map +1 -1
- package/dist/browser/intl/index.js +1 -0
- package/dist/browser/intl/index.js.map +1 -1
- package/dist/browser/intl/shortcut-messages.js +77 -0
- package/dist/browser/intl/shortcut-messages.js.map +1 -0
- package/dist/browser/intl/shortcut.js +123 -0
- package/dist/browser/intl/shortcut.js.map +1 -0
- package/dist/browser/layout/AppWorkspace.js +345 -325
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/Navigation.js +18 -3
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +14 -0
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/SidebarSwitcher.js +505 -0
- package/dist/browser/layout/SidebarSwitcher.js.map +1 -0
- package/dist/browser/layout/TableOfContents.js +115 -0
- package/dist/browser/layout/TableOfContents.js.map +1 -0
- package/dist/browser/layout/app-workspace-controller.js +15 -48
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/index.js +2 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js +1 -0
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/layout/table-of-contents-messages.js +19 -0
- package/dist/browser/layout/table-of-contents-messages.js.map +1 -0
- package/dist/browser/surfaces/LinkCard.js +40 -24
- package/dist/browser/surfaces/LinkCard.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +11 -5
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/GestureMenu.js +3 -3
- package/dist/ssr/actions/GestureMenu.js.map +1 -1
- package/dist/ssr/actions/SpotlightSearch.js +9 -3
- package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
- package/dist/ssr/actions/Toolbar.js +67 -1
- package/dist/ssr/actions/Toolbar.js.map +1 -1
- package/dist/ssr/content/Calendar.js +895 -321
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarDayView.js +2 -2
- package/dist/ssr/content/CalendarDayView.js.map +1 -1
- package/dist/ssr/content/CalendarWeekView.js +28 -7
- package/dist/ssr/content/CalendarWeekView.js.map +1 -1
- package/dist/ssr/content/DataTable.js +21 -17
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/Kbd.js +38 -0
- package/dist/ssr/content/Kbd.js.map +1 -0
- package/dist/ssr/content/LabelChip.js +21 -0
- package/dist/ssr/content/LabelChip.js.map +1 -0
- package/dist/ssr/content/MarkdownView.js +2 -1
- package/dist/ssr/content/MarkdownView.js.map +1 -1
- package/dist/ssr/content/Steps.js +14 -0
- package/dist/ssr/content/Steps.js.map +1 -0
- package/dist/ssr/content/VirtualFeed.js +33 -1
- package/dist/ssr/content/VirtualFeed.js.map +1 -1
- package/dist/ssr/content/calendar-day-scroll.js +17 -4
- package/dist/ssr/content/calendar-day-scroll.js.map +1 -1
- package/dist/ssr/content/calendar-dialogs.js +12 -32
- package/dist/ssr/content/calendar-dialogs.js.map +1 -1
- package/dist/ssr/content/calendar-month-scroll.js +80 -0
- package/dist/ssr/content/calendar-month-scroll.js.map +1 -0
- package/dist/ssr/content/calendar-time-view.js +8 -3
- package/dist/ssr/content/calendar-time-view.js.map +1 -1
- package/dist/ssr/content/index.js +4 -1
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/markdown-info-blocks.js +33 -5
- package/dist/ssr/content/markdown-info-blocks.js.map +1 -1
- package/dist/ssr/feedback/prompts.js +17 -3
- package/dist/ssr/feedback/prompts.js.map +1 -1
- package/dist/ssr/intl/index.js +1 -0
- package/dist/ssr/intl/index.js.map +1 -1
- package/dist/ssr/intl/shortcut-messages.js +77 -0
- package/dist/ssr/intl/shortcut-messages.js.map +1 -0
- package/dist/ssr/intl/shortcut.js +123 -0
- package/dist/ssr/intl/shortcut.js.map +1 -0
- package/dist/ssr/layout/AppWorkspace.js +67 -59
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +12 -2
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +14 -0
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/SidebarSwitcher.js +271 -0
- package/dist/ssr/layout/SidebarSwitcher.js.map +1 -0
- package/dist/ssr/layout/TableOfContents.js +79 -0
- package/dist/ssr/layout/TableOfContents.js.map +1 -0
- package/dist/ssr/layout/app-workspace-controller.js +15 -48
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/index.js +2 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js +1 -0
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/layout/table-of-contents-messages.js +19 -0
- package/dist/ssr/layout/table-of-contents-messages.js.map +1 -0
- package/dist/ssr/surfaces/LinkCard.js +26 -10
- package/dist/ssr/surfaces/LinkCard.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +12 -0
- package/dist/types/actions/SpotlightSearch.d.ts +2 -0
- package/dist/types/content/Calendar.d.ts +20 -7
- package/dist/types/content/CalendarWeekView.d.ts +1 -1
- package/dist/types/content/DataTable.d.ts +9 -0
- package/dist/types/content/Kbd.d.ts +16 -0
- package/dist/types/content/LabelChip.d.ts +12 -0
- package/dist/types/content/MarkdownView.d.ts +2 -1
- package/dist/types/content/Steps.d.ts +12 -0
- package/dist/types/content/VirtualFeed.d.ts +8 -0
- package/dist/types/content/calendar-day-scroll.d.ts +9 -4
- package/dist/types/content/calendar-dialogs.d.ts +0 -2
- package/dist/types/content/calendar-month-scroll.d.ts +25 -0
- package/dist/types/content/index.d.ts +7 -1
- package/dist/types/content/markdown-info-blocks.d.ts +21 -4
- package/dist/types/feedback/prompts.d.ts +8 -2
- package/dist/types/intl/index.d.ts +2 -0
- package/dist/types/intl/shortcut-messages.d.ts +35 -0
- package/dist/types/intl/shortcut.d.ts +29 -0
- package/dist/types/layout/AppWorkspace.d.ts +5 -1
- package/dist/types/layout/SidebarSwitcher.d.ts +65 -0
- package/dist/types/layout/TableOfContents.d.ts +24 -0
- package/dist/types/layout/index.d.ts +3 -0
- package/dist/types/layout/navigation-model.d.ts +4 -0
- package/dist/types/layout/table-of-contents-messages.d.ts +4 -0
- package/dist/types/surfaces/LinkCard.d.ts +3 -0
- package/package.json +4 -4
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { i18n } from "@k2b/stdlib";
|
|
2
|
+
const shortcutMessages = i18n.define({
|
|
3
|
+
baseLocale: "en",
|
|
4
|
+
messages: {
|
|
5
|
+
en: {
|
|
6
|
+
ctrlLabel: "Ctrl",
|
|
7
|
+
altLabel: "Alt",
|
|
8
|
+
shiftLabel: "Shift",
|
|
9
|
+
metaLabel: "Meta",
|
|
10
|
+
control: "Control",
|
|
11
|
+
appleControl: "Control",
|
|
12
|
+
option: "Option",
|
|
13
|
+
shift: "Shift",
|
|
14
|
+
command: "Command",
|
|
15
|
+
alt: "Alt",
|
|
16
|
+
meta: "Meta",
|
|
17
|
+
arrowup: "Up arrow",
|
|
18
|
+
arrowdown: "Down arrow",
|
|
19
|
+
arrowleft: "Left arrow",
|
|
20
|
+
arrowright: "Right arrow",
|
|
21
|
+
enter: "Enter",
|
|
22
|
+
escape: "Escape",
|
|
23
|
+
tab: "Tab",
|
|
24
|
+
space: "Space",
|
|
25
|
+
backspace: "Backspace",
|
|
26
|
+
delete: "Delete",
|
|
27
|
+
home: "Home",
|
|
28
|
+
end: "End",
|
|
29
|
+
pageup: "Page up",
|
|
30
|
+
pagedown: "Page down",
|
|
31
|
+
spaceLabel: "Space",
|
|
32
|
+
deleteLabel: "Del",
|
|
33
|
+
homeLabel: "Home",
|
|
34
|
+
endLabel: "End",
|
|
35
|
+
pageupLabel: "PgUp",
|
|
36
|
+
pagedownLabel: "PgDn"
|
|
37
|
+
},
|
|
38
|
+
de: {
|
|
39
|
+
ctrlLabel: "Strg",
|
|
40
|
+
altLabel: "Alt",
|
|
41
|
+
shiftLabel: "Umschalt",
|
|
42
|
+
metaLabel: "Meta",
|
|
43
|
+
control: "Steuerung",
|
|
44
|
+
appleControl: "Control",
|
|
45
|
+
option: "Wahltaste",
|
|
46
|
+
shift: "Umschalttaste",
|
|
47
|
+
command: "Befehlstaste",
|
|
48
|
+
alt: "Alt",
|
|
49
|
+
meta: "Meta",
|
|
50
|
+
arrowup: "Pfeil nach oben",
|
|
51
|
+
arrowdown: "Pfeil nach unten",
|
|
52
|
+
arrowleft: "Pfeil nach links",
|
|
53
|
+
arrowright: "Pfeil nach rechts",
|
|
54
|
+
enter: "Eingabetaste",
|
|
55
|
+
escape: "Escape",
|
|
56
|
+
tab: "Tabulatortaste",
|
|
57
|
+
space: "Leertaste",
|
|
58
|
+
backspace: "Rücktaste",
|
|
59
|
+
delete: "Entfernen",
|
|
60
|
+
home: "Pos 1",
|
|
61
|
+
end: "Ende",
|
|
62
|
+
pageup: "Bild auf",
|
|
63
|
+
pagedown: "Bild ab",
|
|
64
|
+
spaceLabel: "Leertaste",
|
|
65
|
+
deleteLabel: "Entf",
|
|
66
|
+
homeLabel: "Pos1",
|
|
67
|
+
endLabel: "Ende",
|
|
68
|
+
pageupLabel: "Bild↑",
|
|
69
|
+
pagedownLabel: "Bild↓"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
/** Imperative UI inherits the document locale when no locale is supplied. */
|
|
75
|
+
export const resolveShortcutMessages = locale => shortcutMessages.resolve([locale ?? (typeof document === "undefined" ? shortcutMessages.baseLocale : document.documentElement.lang)]).t;
|
|
76
|
+
export const checkShortcutMessages = () => shortcutMessages.check();
|
|
77
|
+
//# sourceMappingURL=shortcut-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["intl/shortcut-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\n\nconst shortcutMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n ctrlLabel: \"Ctrl\",\n altLabel: \"Alt\",\n shiftLabel: \"Shift\",\n metaLabel: \"Meta\",\n control: \"Control\",\n appleControl: \"Control\",\n option: \"Option\",\n shift: \"Shift\",\n command: \"Command\",\n alt: \"Alt\",\n meta: \"Meta\",\n arrowup: \"Up arrow\",\n arrowdown: \"Down arrow\",\n arrowleft: \"Left arrow\",\n arrowright: \"Right arrow\",\n enter: \"Enter\",\n escape: \"Escape\",\n tab: \"Tab\",\n space: \"Space\",\n backspace: \"Backspace\",\n delete: \"Delete\",\n home: \"Home\",\n end: \"End\",\n pageup: \"Page up\",\n pagedown: \"Page down\",\n spaceLabel: \"Space\",\n deleteLabel: \"Del\",\n homeLabel: \"Home\",\n endLabel: \"End\",\n pageupLabel: \"PgUp\",\n pagedownLabel: \"PgDn\",\n },\n de: {\n ctrlLabel: \"Strg\",\n altLabel: \"Alt\",\n shiftLabel: \"Umschalt\",\n metaLabel: \"Meta\",\n control: \"Steuerung\",\n appleControl: \"Control\",\n option: \"Wahltaste\",\n shift: \"Umschalttaste\",\n command: \"Befehlstaste\",\n alt: \"Alt\",\n meta: \"Meta\",\n arrowup: \"Pfeil nach oben\",\n arrowdown: \"Pfeil nach unten\",\n arrowleft: \"Pfeil nach links\",\n arrowright: \"Pfeil nach rechts\",\n enter: \"Eingabetaste\",\n escape: \"Escape\",\n tab: \"Tabulatortaste\",\n space: \"Leertaste\",\n backspace: \"Rücktaste\",\n delete: \"Entfernen\",\n home: \"Pos 1\",\n end: \"Ende\",\n pageup: \"Bild auf\",\n pagedown: \"Bild ab\",\n spaceLabel: \"Leertaste\",\n deleteLabel: \"Entf\",\n homeLabel: \"Pos1\",\n endLabel: \"Ende\",\n pageupLabel: \"Bild↑\",\n pagedownLabel: \"Bild↓\",\n },\n },\n});\n\n/** Imperative UI inherits the document locale when no locale is supplied. */\nexport const resolveShortcutMessages = (locale?: string) =>\n shortcutMessages.resolve([locale ?? (typeof document === \"undefined\" ? shortcutMessages.baseLocale : document.documentElement.lang)]).t;\nexport const checkShortcutMessages = () => shortcutMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAElC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;EACnC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,SAAS,EAAE,MAAM;MACjB,QAAQ,EAAE,KAAK;MACf,UAAU,EAAE,OAAO;MACnB,SAAS,EAAE,MAAM;MACjB,OAAO,EAAE,SAAS;MAClB,YAAY,EAAE,SAAS;MACvB,MAAM,EAAE,QAAQ;MAChB,KAAK,EAAE,OAAO;MACd,OAAO,EAAE,SAAS;MAClB,GAAG,EAAE,KAAK;MACV,IAAI,EAAE,MAAM;MACZ,OAAO,EAAE,UAAU;MACnB,SAAS,EAAE,YAAY;MACvB,SAAS,EAAE,YAAY;MACvB,UAAU,EAAE,aAAa;MACzB,KAAK,EAAE,OAAO;MACd,MAAM,EAAE,QAAQ;MAChB,GAAG,EAAE,KAAK;MACV,KAAK,EAAE,OAAO;MACd,SAAS,EAAE,WAAW;MACtB,MAAM,EAAE,QAAQ;MAChB,IAAI,EAAE,MAAM;MACZ,GAAG,EAAE,KAAK;MACV,MAAM,EAAE,SAAS;MACjB,QAAQ,EAAE,WAAW;MACrB,UAAU,EAAE,OAAO;MACnB,WAAW,EAAE,KAAK;MAClB,SAAS,EAAE,MAAM;MACjB,QAAQ,EAAE,KAAK;MACf,WAAW,EAAE,MAAM;MACnB,aAAa,EAAE;IACjB,CAAC;IACD,EAAE,EAAE;MACF,SAAS,EAAE,MAAM;MACjB,QAAQ,EAAE,KAAK;MACf,UAAU,EAAE,UAAU;MACtB,SAAS,EAAE,MAAM;MACjB,OAAO,EAAE,WAAW;MACpB,YAAY,EAAE,SAAS;MACvB,MAAM,EAAE,WAAW;MACnB,KAAK,EAAE,eAAe;MACtB,OAAO,EAAE,cAAc;MACvB,GAAG,EAAE,KAAK;MACV,IAAI,EAAE,MAAM;MACZ,OAAO,EAAE,iBAAiB;MAC1B,SAAS,EAAE,kBAAkB;MAC7B,SAAS,EAAE,kBAAkB;MAC7B,UAAU,EAAE,mBAAmB;MAC/B,KAAK,EAAE,cAAc;MACrB,MAAM,EAAE,QAAQ;MAChB,GAAG,EAAE,gBAAgB;MACrB,KAAK,EAAE,WAAW;MAClB,SAAS,EAAE,WAAW;MACtB,MAAM,EAAE,WAAW;MACnB,IAAI,EAAE,OAAO;MACb,GAAG,EAAE,MAAM;MACX,MAAM,EAAE,UAAU;MAClB,QAAQ,EAAE,SAAS;MACnB,UAAU,EAAE,WAAW;MACvB,WAAW,EAAE,MAAM;MACnB,SAAS,EAAE,MAAM;MACjB,QAAQ,EAAE,MAAM;MAChB,WAAW,EAAE,OAAO;MACpB,aAAa,EAAE;IACjB;EACF;AACF,CAAC,CAAC;;AAEF;AACA,OAAO,MAAM,uBAAuB,GAAI,MAAe,IACrD,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG,gBAAgB,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACzI,OAAO,MAAM,qBAAqB,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { resolveShortcutMessages } from "./shortcut-messages";
|
|
2
|
+
/**
|
|
3
|
+
* Apple keyboards name the platform modifier Command. `source` is a User-Agent or `navigator.platform` string.
|
|
4
|
+
* Without `source`, reads the runtime's navigator; server callers pass the request's User-Agent.
|
|
5
|
+
* @example keyboardPlatform("MacIntel") // "apple"
|
|
6
|
+
*/
|
|
7
|
+
export const keyboardPlatform = source => /Mac|iPhone|iPad|iPod/.test(source ?? (typeof navigator === "undefined" ? "" : navigator.platform || navigator.userAgent)) ? "apple" : "other";
|
|
8
|
+
const modifiers = ["ctrl", "alt", "shift", "meta"];
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Formats one plus-separated shortcut in canonical modifier order.
|
|
12
|
+
* @example formatShortcut("mod+alt+n", { platform: "apple" }).label // "⌥⌘N"
|
|
13
|
+
*/
|
|
14
|
+
export const formatShortcut = (shortcut, options = {}) => {
|
|
15
|
+
const empty = {
|
|
16
|
+
keys: [],
|
|
17
|
+
label: "",
|
|
18
|
+
name: ""
|
|
19
|
+
};
|
|
20
|
+
const input = shortcut.trim().toLowerCase();
|
|
21
|
+
const plus = input === "+" || input.endsWith("++");
|
|
22
|
+
const parts = (plus ? input.slice(0, -1) : input).split("+");
|
|
23
|
+
const key = plus ? "+" : parts.pop() || (shortcut === " " || shortcut.endsWith("+ ") ? "space" : undefined);
|
|
24
|
+
if (plus) parts.pop();
|
|
25
|
+
if (!key || modifiers.some(modifier => key === modifier) || key === "mod" || parts.some(part => part !== "mod" && !modifiers.some(modifier => part === modifier))) return empty;
|
|
26
|
+
const apple = (options.platform ?? keyboardPlatform()) === "apple";
|
|
27
|
+
const t = resolveShortcutMessages(options.locale);
|
|
28
|
+
const selected = new Set(parts.map(part => part === "mod" ? apple ? "meta" : "ctrl" : part));
|
|
29
|
+
const labels = apple ? {
|
|
30
|
+
ctrl: "⌃",
|
|
31
|
+
alt: "⌥",
|
|
32
|
+
shift: "⇧",
|
|
33
|
+
meta: "⌘"
|
|
34
|
+
} : {
|
|
35
|
+
ctrl: t.ctrlLabel,
|
|
36
|
+
alt: t.altLabel,
|
|
37
|
+
shift: t.shiftLabel,
|
|
38
|
+
meta: t.metaLabel
|
|
39
|
+
};
|
|
40
|
+
const names = {
|
|
41
|
+
ctrl: apple ? t.appleControl : t.control,
|
|
42
|
+
alt: apple ? t.option : t.alt,
|
|
43
|
+
shift: t.shift,
|
|
44
|
+
meta: apple ? t.command : t.meta
|
|
45
|
+
};
|
|
46
|
+
const named = {
|
|
47
|
+
arrowup: {
|
|
48
|
+
label: "↑",
|
|
49
|
+
name: t.arrowup
|
|
50
|
+
},
|
|
51
|
+
arrowdown: {
|
|
52
|
+
label: "↓",
|
|
53
|
+
name: t.arrowdown
|
|
54
|
+
},
|
|
55
|
+
arrowleft: {
|
|
56
|
+
label: "←",
|
|
57
|
+
name: t.arrowleft
|
|
58
|
+
},
|
|
59
|
+
arrowright: {
|
|
60
|
+
label: "→",
|
|
61
|
+
name: t.arrowright
|
|
62
|
+
},
|
|
63
|
+
enter: {
|
|
64
|
+
label: "↵",
|
|
65
|
+
name: t.enter
|
|
66
|
+
},
|
|
67
|
+
escape: {
|
|
68
|
+
label: "Esc",
|
|
69
|
+
name: t.escape
|
|
70
|
+
},
|
|
71
|
+
esc: {
|
|
72
|
+
label: "Esc",
|
|
73
|
+
name: t.escape
|
|
74
|
+
},
|
|
75
|
+
tab: {
|
|
76
|
+
label: "Tab",
|
|
77
|
+
name: t.tab
|
|
78
|
+
},
|
|
79
|
+
space: {
|
|
80
|
+
label: t.spaceLabel,
|
|
81
|
+
name: t.space
|
|
82
|
+
},
|
|
83
|
+
backspace: {
|
|
84
|
+
label: "⌫",
|
|
85
|
+
name: t.backspace
|
|
86
|
+
},
|
|
87
|
+
delete: {
|
|
88
|
+
label: apple ? "⌦" : t.deleteLabel,
|
|
89
|
+
name: t.delete
|
|
90
|
+
},
|
|
91
|
+
home: {
|
|
92
|
+
label: t.homeLabel,
|
|
93
|
+
name: t.home
|
|
94
|
+
},
|
|
95
|
+
end: {
|
|
96
|
+
label: t.endLabel,
|
|
97
|
+
name: t.end
|
|
98
|
+
},
|
|
99
|
+
pageup: {
|
|
100
|
+
label: t.pageupLabel,
|
|
101
|
+
name: t.pageup
|
|
102
|
+
},
|
|
103
|
+
pagedown: {
|
|
104
|
+
label: t.pagedownLabel,
|
|
105
|
+
name: t.pagedown
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const label = key.length === 1 || /^f(?:[1-9]|1[0-2])$/.test(key) ? key.toUpperCase() : key[0].toUpperCase() + key.slice(1);
|
|
109
|
+
const namedKey = Object.hasOwn(named, key) ? named[key] : undefined;
|
|
110
|
+
const keys = [...modifiers.filter(modifier => selected.has(modifier)).map(modifier => ({
|
|
111
|
+
label: labels[modifier],
|
|
112
|
+
name: names[modifier]
|
|
113
|
+
})), namedKey ?? {
|
|
114
|
+
label,
|
|
115
|
+
name: label
|
|
116
|
+
}];
|
|
117
|
+
return {
|
|
118
|
+
keys,
|
|
119
|
+
label: keys.map(key => key.label).join(apple ? "" : "+"),
|
|
120
|
+
name: keys.map(key => key.name).join(" ")
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=shortcut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["intl/shortcut.ts"],"sourcesContent":["import { resolveShortcutMessages } from \"./shortcut-messages\";\n\nexport type KeyboardPlatform = \"apple\" | \"other\";\n/**\n * Apple keyboards name the platform modifier Command. `source` is a User-Agent or `navigator.platform` string.\n * Without `source`, reads the runtime's navigator; server callers pass the request's User-Agent.\n * @example keyboardPlatform(\"MacIntel\") // \"apple\"\n */\nexport const keyboardPlatform = (source?: string): KeyboardPlatform =>\n /Mac|iPhone|iPad|iPod/.test(source ?? (typeof navigator === \"undefined\" ? \"\" : navigator.platform || navigator.userAgent))\n ? \"apple\"\n : \"other\";\n\nexport type ShortcutKey = {\n /** What the cap shows: \"⌘\", \"Strg\", \"K\", \"↵\". */\n label: string;\n /** What a screen reader says: \"Command\", \"Steuerung\", \"K\", \"Enter\". */\n name: string;\n};\nexport type FormattedShortcut = {\n keys: ShortcutKey[];\n /** \"⌘K\" on Apple, \"Ctrl+K\" / \"Strg+K\" elsewhere. */\n label: string;\n /** \"Command K\", \"Steuerung K\". */\n name: string;\n};\nexport type ShortcutFormatOptions = { platform?: KeyboardPlatform; locale?: string };\nconst modifiers = [\"ctrl\", \"alt\", \"shift\", \"meta\"] as const;\n\n/**\n * Formats one plus-separated shortcut in canonical modifier order.\n * @example formatShortcut(\"mod+alt+n\", { platform: \"apple\" }).label // \"⌥⌘N\"\n */\nexport const formatShortcut = (shortcut: string, options: ShortcutFormatOptions = {}): FormattedShortcut => {\n const empty = { keys: [], label: \"\", name: \"\" };\n const input = shortcut.trim().toLowerCase();\n const plus = input === \"+\" || input.endsWith(\"++\");\n const parts = (plus ? input.slice(0, -1) : input).split(\"+\");\n const key = plus ? \"+\" : parts.pop() || (shortcut === \" \" || shortcut.endsWith(\"+ \") ? \"space\" : undefined);\n if (plus) parts.pop();\n if (\n !key ||\n modifiers.some((modifier) => key === modifier) ||\n key === \"mod\" ||\n parts.some((part) => part !== \"mod\" && !modifiers.some((modifier) => part === modifier))\n )\n return empty;\n const apple = (options.platform ?? keyboardPlatform()) === \"apple\";\n const t = resolveShortcutMessages(options.locale);\n const selected = new Set(parts.map((part) => (part === \"mod\" ? (apple ? \"meta\" : \"ctrl\") : part)));\n const labels = apple\n ? { ctrl: \"⌃\", alt: \"⌥\", shift: \"⇧\", meta: \"⌘\" }\n : { ctrl: t.ctrlLabel, alt: t.altLabel, shift: t.shiftLabel, meta: t.metaLabel };\n const names = {\n ctrl: apple ? t.appleControl : t.control,\n alt: apple ? t.option : t.alt,\n shift: t.shift,\n meta: apple ? t.command : t.meta,\n };\n const named: Record<string, ShortcutKey> = {\n arrowup: { label: \"↑\", name: t.arrowup },\n arrowdown: { label: \"↓\", name: t.arrowdown },\n arrowleft: { label: \"←\", name: t.arrowleft },\n arrowright: { label: \"→\", name: t.arrowright },\n enter: { label: \"↵\", name: t.enter },\n escape: { label: \"Esc\", name: t.escape },\n esc: { label: \"Esc\", name: t.escape },\n tab: { label: \"Tab\", name: t.tab },\n space: { label: t.spaceLabel, name: t.space },\n backspace: { label: \"⌫\", name: t.backspace },\n delete: { label: apple ? \"⌦\" : t.deleteLabel, name: t.delete },\n home: { label: t.homeLabel, name: t.home },\n end: { label: t.endLabel, name: t.end },\n pageup: { label: t.pageupLabel, name: t.pageup },\n pagedown: { label: t.pagedownLabel, name: t.pagedown },\n };\n const label = key.length === 1 || /^f(?:[1-9]|1[0-2])$/.test(key) ? key.toUpperCase() : key[0]!.toUpperCase() + key.slice(1);\n const namedKey = Object.hasOwn(named, key) ? named[key] : undefined;\n const keys = [\n ...modifiers.filter((modifier) => selected.has(modifier)).map((modifier) => ({ label: labels[modifier], name: names[modifier] })),\n namedKey ?? { label, name: label },\n ];\n return { keys, label: keys.map((key) => key.label).join(apple ? \"\" : \"+\"), name: keys.map((key) => key.name).join(\" \") };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -27,31 +27,33 @@ var _tmpl$ = ["<button type=\"button\" class=\"k2b-app-workspace__resize\" role=
|
|
|
27
27
|
_tmpl$16 = "<span class=\"k2b-app-workspace__sidebar-status-mention\" aria-hidden=\"true\">@</span>",
|
|
28
28
|
_tmpl$17 = "<span class=\"k2b-app-workspace__sidebar-status-muted\" aria-hidden=\"true\"><i class=\"ti ti-bell-off\"></i></span>",
|
|
29
29
|
_tmpl$18 = ["<span class=\"k2b-app-workspace__sidebar-status-count\"", ">", "</span>"],
|
|
30
|
-
_tmpl$19 = ["<span class=\"k2b-app-workspace__sidebar-status
|
|
31
|
-
_tmpl$20 = "<span class=\"k2b-
|
|
32
|
-
_tmpl$21 = ["<span class=\"k2b-app-workspace__sidebar-
|
|
33
|
-
_tmpl$22 =
|
|
34
|
-
_tmpl$23 = ["<span class=\"k2b-app-workspace__sidebar-item-
|
|
35
|
-
_tmpl$24 = ["<span class=\"k2b-app-workspace__sidebar-item-
|
|
36
|
-
_tmpl$25 = ["<span class=\"k2b-app-workspace__sidebar-item-
|
|
37
|
-
_tmpl$26 = ["<span class=\"k2b-app-workspace__sidebar-item-
|
|
38
|
-
_tmpl$27 = ["<
|
|
39
|
-
_tmpl$28 = ["<
|
|
40
|
-
_tmpl$29 = ["<
|
|
41
|
-
_tmpl$30 = ["<
|
|
42
|
-
_tmpl$31 = ["<
|
|
43
|
-
_tmpl$32 = ["<span class=\"k2b-app-
|
|
44
|
-
_tmpl$33 = ["<span class=\"
|
|
45
|
-
_tmpl$34 = ["<
|
|
46
|
-
_tmpl$35 = ["<
|
|
47
|
-
_tmpl$36 = ["<div class=\"
|
|
48
|
-
_tmpl$37 = ["<div class=\"k2b-app-
|
|
49
|
-
_tmpl$38 = ["<
|
|
50
|
-
_tmpl$39 = "<
|
|
51
|
-
_tmpl$40 = ["<
|
|
52
|
-
_tmpl$41 =
|
|
53
|
-
_tmpl$42 = ["<div class=\"
|
|
54
|
-
_tmpl$43 = ["<
|
|
30
|
+
_tmpl$19 = ["<span class=\"k2b-app-workspace__sidebar-status-unread\" aria-hidden=\"true\">", "</span>"],
|
|
31
|
+
_tmpl$20 = ["<span class=\"k2b-sr-only\">, ", "</span>"],
|
|
32
|
+
_tmpl$21 = ["<span class=\"k2b-app-workspace__sidebar-status\"", ">", "</span>"],
|
|
33
|
+
_tmpl$22 = "<span class=\"k2b-app-workspace__sidebar-status-dot\"></span>",
|
|
34
|
+
_tmpl$23 = ["<span class=\"k2b-app-workspace__sidebar-item-icon\" aria-hidden=\"true\">", "</span>"],
|
|
35
|
+
_tmpl$24 = ["<span class=\"k2b-app-workspace__sidebar-item-context-meta\">", "</span>"],
|
|
36
|
+
_tmpl$25 = ["<span class=\"k2b-app-workspace__sidebar-item-context\"><span class=\"k2b-app-workspace__sidebar-item-context-label\">", "</span>", "</span>"],
|
|
37
|
+
_tmpl$26 = ["<span class=\"k2b-app-workspace__sidebar-item-description\">", "</span>"],
|
|
38
|
+
_tmpl$27 = ["<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>"],
|
|
39
|
+
_tmpl$28 = ["<span class=\"k2b-app-workspace__sidebar-item-meta\"", ">", "</span>"],
|
|
40
|
+
_tmpl$29 = ["<i", "></i>"],
|
|
41
|
+
_tmpl$30 = ["<a", " class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</a>"],
|
|
42
|
+
_tmpl$31 = ["<button type=\"button\" class=\"k2b-app-workspace__sidebar-item-action\"", ">", "</button>"],
|
|
43
|
+
_tmpl$32 = ["<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>"],
|
|
44
|
+
_tmpl$33 = ["<span class=\"", "\"", ">", "</span>"],
|
|
45
|
+
_tmpl$34 = ["<span class=\"k2b-app-workspace__nav-tree-toggle\" data-k2b-nav-tree-toggle aria-hidden=\"true\"><i class=\"", "\"></i></span>"],
|
|
46
|
+
_tmpl$35 = ["<span class=\"k2b-app-workspace__sidebar-item-label\"", "><span class=\"k2b-app-workspace__sidebar-item-label-text\">", "</span></span>"],
|
|
47
|
+
_tmpl$36 = ["<div class=\"k2b-app-workspace__nav-tree-group\" role=\"group\">", "</div>"],
|
|
48
|
+
_tmpl$37 = ["<div class=\"k2b-app-workspace__nav-tree-node\" role=\"treeitem\"", " style=\"", "\">", "", "</div>"],
|
|
49
|
+
_tmpl$38 = ["<div class=\"", "\" role=\"tree\"", ">", "</div>"],
|
|
50
|
+
_tmpl$39 = ["<div class=\"k2b-app-workspace__sidebar-icon-grid\"", ">", "</div>"],
|
|
51
|
+
_tmpl$40 = ["<i", " aria-hidden=\"true\"></i>"],
|
|
52
|
+
_tmpl$41 = "<i class=\"ti ti-layout-sidebar\" aria-hidden=\"true\"></i>",
|
|
53
|
+
_tmpl$42 = ["<div class=\"k2b-app-workspace__head\"", ">", "", "</div>"],
|
|
54
|
+
_tmpl$43 = ["<h1 class=\"k2b-app-workspace__head-heading\" data-k2b-page-trail-title", ">", "</h1>"],
|
|
55
|
+
_tmpl$44 = ["<div class=\"", "\" data-k2b-app-workspace", " style=\"", "\">", "", "</div>"],
|
|
56
|
+
_tmpl$45 = ["<div class=\"", "\">", "</div>"];
|
|
55
57
|
import { Link } from "@k2b/ssr/nav";
|
|
56
58
|
import { children, createContext, createEffect, createMemo, createSignal, createUniqueId, For, mergeProps, onCleanup, onMount, Show, useContext } from "solid-js";
|
|
57
59
|
import { isServer } from "solid-js/web";
|
|
@@ -60,6 +62,7 @@ import { APP_WORKSPACE_DETAIL_CLOSE_EVENT, APP_WORKSPACE_DETAIL_STEP_EVENT, APP_
|
|
|
60
62
|
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";
|
|
61
63
|
import { PageTitle, usePageTrail } from "./PageTitle";
|
|
62
64
|
import { SidebarItemPreview } from "./SidebarItemPreview";
|
|
65
|
+
import { AppWorkspaceSidebarSwitcher } from "./SidebarSwitcher";
|
|
63
66
|
import { createScrollFade } from "./scroll-fade";
|
|
64
67
|
import { assertStableUiId, assertUniqueStableUiIds } from "./stable-id";
|
|
65
68
|
import { useWorkspaceMessages } from "./workspace-messages";
|
|
@@ -566,26 +569,29 @@ const AppWorkspaceSidebarItemStatus = props => {
|
|
|
566
569
|
}) : dot() ? workspaceMessages().sidebarNewActivity : "", props.mention ? workspaceMessages().sidebarMentioned : "", props.muted ? workspaceMessages().sidebarMuted : ""].filter(Boolean).join(", ");
|
|
567
570
|
// The unread slot stays reserved at the end, and the marks that change most
|
|
568
571
|
// often sit outermost, so new activity or a mention never moves another mark.
|
|
569
|
-
|
|
572
|
+
// The element itself stays when there is nothing to show: empty, it takes no
|
|
573
|
+
// space, and it still keeps the row's label on one line, so the first count
|
|
574
|
+
// never re-wraps the label and moves the rows below.
|
|
575
|
+
return _$ssr(_tmpl$21, _$ssrAttribute("data-unread", waiting() !== null ? _$escape(undefined, true) : count() ? "count" : dot() ? "dot" : _$escape(undefined, true), false) + _$ssrAttribute("data-waiting", waiting() === null ? _$escape(undefined, true) : waiting() ? "count" : "zero", false), _$escape(_$createComponent(Show, {
|
|
570
576
|
get when() {
|
|
571
577
|
return description();
|
|
572
578
|
},
|
|
573
579
|
get children() {
|
|
574
|
-
return _$
|
|
580
|
+
return [_$createComponent(Show, {
|
|
575
581
|
get when() {
|
|
576
582
|
return props.mention;
|
|
577
583
|
},
|
|
578
584
|
get children() {
|
|
579
585
|
return _$ssr(_tmpl$16);
|
|
580
586
|
}
|
|
581
|
-
})
|
|
587
|
+
}), _$createComponent(Show, {
|
|
582
588
|
get when() {
|
|
583
589
|
return props.muted;
|
|
584
590
|
},
|
|
585
591
|
get children() {
|
|
586
592
|
return _$ssr(_tmpl$17);
|
|
587
593
|
}
|
|
588
|
-
})
|
|
594
|
+
}), _$ssr(_tmpl$19, _$escape(_$createComponent(Show, {
|
|
589
595
|
get when() {
|
|
590
596
|
return count() || waiting() === 0;
|
|
591
597
|
},
|
|
@@ -595,16 +601,16 @@ const AppWorkspaceSidebarItemStatus = props => {
|
|
|
595
601
|
return dot();
|
|
596
602
|
},
|
|
597
603
|
get children() {
|
|
598
|
-
return _$ssr(_tmpl$
|
|
604
|
+
return _$ssr(_tmpl$22);
|
|
599
605
|
}
|
|
600
606
|
});
|
|
601
607
|
},
|
|
602
608
|
get children() {
|
|
603
609
|
return _$ssr(_tmpl$18, _$ssrAttribute("data-mention", props.mention ? "true" : _$escape(undefined, true), false), count() > 99 ? "99+" : _$escape(count()));
|
|
604
610
|
}
|
|
605
|
-
})), _$escape(description()));
|
|
611
|
+
}))), _$ssr(_tmpl$20, _$escape(description()))];
|
|
606
612
|
}
|
|
607
|
-
});
|
|
613
|
+
})));
|
|
608
614
|
};
|
|
609
615
|
/** Shared visual and semantic row frame for flat sidebar items and tree items. */
|
|
610
616
|
function AppWorkspaceSidebarRow(props) {
|
|
@@ -725,10 +731,11 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
725
731
|
const actionSlot = createMemo(() => slots().find(slot => slot.kind === SIDEBAR_ITEM_ACTION));
|
|
726
732
|
const legacy = createMemo(() => values().filter(value => !sidebarItemSlot(value)));
|
|
727
733
|
const label = () => labelSlot()?.children ?? (legacy().length === 1 ? legacy()[0] : legacy());
|
|
734
|
+
const oneLine = () => !(labelSlot()?.marquee ?? (props.variant ?? "row") === "row");
|
|
728
735
|
const icon = () => iconSlot()?.icon ?? props.icon;
|
|
729
736
|
const iconContent = () => iconSlot()?.children;
|
|
730
|
-
// Resolved first, so
|
|
731
|
-
//
|
|
737
|
+
// Resolved first, so metadata that renders nothing leaves no empty slot. An
|
|
738
|
+
// empty status still renders its element; the stylesheet hides that slot.
|
|
732
739
|
const meta = children(() => metaSlot()?.children ?? props.meta);
|
|
733
740
|
const hasMeta = () => meta.toArray().some(Boolean);
|
|
734
741
|
const metaId = createUniqueId();
|
|
@@ -741,35 +748,35 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
741
748
|
return iconContent() || icon();
|
|
742
749
|
},
|
|
743
750
|
get children() {
|
|
744
|
-
return _$ssr(_tmpl$
|
|
751
|
+
return _$ssr(_tmpl$23, _$escape(iconContent() ?? _$ssr(_tmpl$29, _$ssrAttribute("class", _$escape(iconClass(icon()), true), false))));
|
|
745
752
|
}
|
|
746
|
-
}), _$ssr(_tmpl$
|
|
753
|
+
}), _$ssr(_tmpl$27, _$escape(_$createComponent(Show, {
|
|
747
754
|
get when() {
|
|
748
755
|
return props.context || props.contextMeta;
|
|
749
756
|
},
|
|
750
757
|
get children() {
|
|
751
|
-
return _$ssr(_tmpl$
|
|
758
|
+
return _$ssr(_tmpl$25, _$escape(props.context), _$escape(_$createComponent(Show, {
|
|
752
759
|
get when() {
|
|
753
760
|
return props.contextMeta;
|
|
754
761
|
},
|
|
755
762
|
get children() {
|
|
756
|
-
return _$ssr(_tmpl$
|
|
763
|
+
return _$ssr(_tmpl$24, _$escape(props.contextMeta));
|
|
757
764
|
}
|
|
758
765
|
})));
|
|
759
766
|
}
|
|
760
|
-
})), _$ssrAttribute("data-
|
|
767
|
+
})), _$ssrAttribute("data-lines", oneLine() ? "1" : _$escape(undefined, true), false) + _$ssrAttribute("data-label", !oneLine() && typeof label() === "string" ? _$escape(label(), true) : _$escape(undefined, true), false), _$escape(label()), _$escape(_$createComponent(Show, {
|
|
761
768
|
get when() {
|
|
762
769
|
return props.description;
|
|
763
770
|
},
|
|
764
771
|
get children() {
|
|
765
|
-
return _$ssr(_tmpl$
|
|
772
|
+
return _$ssr(_tmpl$26, _$escape(props.description));
|
|
766
773
|
}
|
|
767
774
|
}))), _$createComponent(Show, {
|
|
768
775
|
get when() {
|
|
769
776
|
return hasMeta();
|
|
770
777
|
},
|
|
771
778
|
get children() {
|
|
772
|
-
return _$ssr(_tmpl$
|
|
779
|
+
return _$ssr(_tmpl$28, _$ssrAttribute("id", props.preview?.trigger === "row" ? _$escape(metaId, true) : _$escape(undefined, true), false) + _$ssrAttribute("data-visibility", metaVisibility() === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(meta()));
|
|
773
780
|
}
|
|
774
781
|
})];
|
|
775
782
|
const singleAction = () => {
|
|
@@ -784,7 +791,7 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
784
791
|
actionSlot()?.onSelect?.(event);
|
|
785
792
|
props.onActionClick?.(event);
|
|
786
793
|
};
|
|
787
|
-
const content = () => actionSlot()?.children ?? _$ssr(_tmpl$
|
|
794
|
+
const content = () => actionSlot()?.children ?? _$ssr(_tmpl$29, _$ssrAttribute("class", _$escape(iconClass(actionSlot()?.icon ?? props.actionIcon, "ti-dots"), true), false));
|
|
788
795
|
return _$createComponent(Show, {
|
|
789
796
|
get when() {
|
|
790
797
|
return Boolean(actionSlot() || props.actionIcon);
|
|
@@ -795,10 +802,10 @@ function AppWorkspaceSidebarItem(props) {
|
|
|
795
802
|
return _$memo(() => !!actionSlot()?.href)() && !actionSlot()?.disabled;
|
|
796
803
|
},
|
|
797
804
|
get fallback() {
|
|
798
|
-
return _$ssr(_tmpl$
|
|
805
|
+
return _$ssr(_tmpl$31, _$ssrAttribute("disabled", actionSlot()?.disabled, true) + _$ssrAttribute("data-visibility", actionSlot()?.visibility === "hover" ? "hover" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(label(), true), false), _$escape(content()));
|
|
799
806
|
},
|
|
800
807
|
get children() {
|
|
801
|
-
return _$ssr(_tmpl$
|
|
808
|
+
return _$ssr(_tmpl$30, _$ssrAttribute("href", _$escape(actionSlot()?.href, true), false), _$ssrAttribute("data-visibility", actionSlot()?.visibility === "hover" ? "hover" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(label(), true), false), _$escape(content()));
|
|
802
809
|
}
|
|
803
810
|
});
|
|
804
811
|
}
|
|
@@ -1104,31 +1111,31 @@ const AppWorkspaceNavTree = props => {
|
|
|
1104
1111
|
get ["data-k2b-nav-tree-toggle"]() {
|
|
1105
1112
|
return usesIconDisclosure() ? "" : undefined;
|
|
1106
1113
|
}
|
|
1107
|
-
}, () => iconAccessibility(item.iconLabel)), _$ssr(_tmpl$
|
|
1114
|
+
}, () => iconAccessibility(item.iconLabel)), _$ssr(_tmpl$29, _$ssrAttribute("class", _$escape(iconClass(rowIcon()), true), false)), false);
|
|
1108
1115
|
}
|
|
1109
1116
|
}), _$createComponent(Show, {
|
|
1110
1117
|
get when() {
|
|
1111
1118
|
return item.description !== undefined;
|
|
1112
1119
|
},
|
|
1113
1120
|
get fallback() {
|
|
1114
|
-
return _$ssr(_tmpl$
|
|
1121
|
+
return _$ssr(_tmpl$35, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label));
|
|
1115
1122
|
},
|
|
1116
1123
|
get children() {
|
|
1117
|
-
return _$ssr(_tmpl$
|
|
1124
|
+
return _$ssr(_tmpl$32, _$ssrAttribute("data-label", typeof item.label === "string" ? _$escape(item.label, true) : _$escape(undefined, true), false), _$escape(item.label), _$escape(item.description));
|
|
1118
1125
|
}
|
|
1119
1126
|
}), _$createComponent(Show, {
|
|
1120
1127
|
get when() {
|
|
1121
1128
|
return item.meta !== undefined;
|
|
1122
1129
|
},
|
|
1123
1130
|
get children() {
|
|
1124
|
-
return _$ssr(_tmpl$
|
|
1131
|
+
return _$ssr(_tmpl$33, `k2b-app-workspace__sidebar-item-meta ${hasChildren() ? "" : "k2b-app-workspace__nav-tree-leaf-meta"}`, _$ssrAttribute("data-visibility", item.metaVisibility === "hover" ? "hover" : _$escape(undefined, true), false), _$escape(item.meta));
|
|
1125
1132
|
}
|
|
1126
1133
|
}), _$createComponent(Show, {
|
|
1127
1134
|
get when() {
|
|
1128
1135
|
return _$memo(() => !!hasChildren())() && !usesIconDisclosure();
|
|
1129
1136
|
},
|
|
1130
1137
|
get children() {
|
|
1131
|
-
return _$ssr(_tmpl$
|
|
1138
|
+
return _$ssr(_tmpl$34, `ti ${isExpanded(item.id) ? "ti-chevron-down" : "ti-chevron-right"}`);
|
|
1132
1139
|
}
|
|
1133
1140
|
})];
|
|
1134
1141
|
const row = () => _$createComponent(AppWorkspaceSidebarRow, {
|
|
@@ -1235,12 +1242,12 @@ const AppWorkspaceNavTree = props => {
|
|
|
1235
1242
|
endDrag();
|
|
1236
1243
|
requestMove(target.move, false);
|
|
1237
1244
|
};
|
|
1238
|
-
return _$ssr(_tmpl$
|
|
1245
|
+
return _$ssr(_tmpl$37, _$ssrAttribute("aria-level", _$escape(depth, true) + 1, false) + _$ssrAttribute("aria-setsize", _$escape(siblings().length, true), false) + _$ssrAttribute("aria-posinset", _$escape(place(), true) + 1, false) + _$ssrAttribute("aria-selected", _$escape(selected(), true), false) + _$ssrAttribute("aria-expanded", hasChildren() ? _$escape(isExpanded(item.id), true) : _$escape(undefined, true), false) + _$ssrAttribute("aria-disabled", item.disabled ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("tabindex", item.disabled ? -1 : tabStopId() === item.id ? 0 : -1, false) + _$ssrAttribute("draggable", movable() ? _$escape(true, true) : _$escape(undefined, true), false) + _$ssrAttribute("data-k2b-nav-tree-id", _$escape(item.id, true), false) + _$ssrAttribute("data-k2b-nav-tree-parent-id", _$escape(parentId, true), false) + _$ssrAttribute("data-k2b-nav-tree-dragging", dragged()?.id === item.id ? "" : _$escape(undefined, true), false) + _$ssrAttribute("data-k2b-nav-tree-drop", dropTarget()?.id === item.id ? _$escape(dropTarget().side, true) : _$escape(undefined, true), false), _$ssrStyleProperty("--k2b-nav-tree-depth:", _$escape(String(props.indented === false ? 0 : depth), true)), _$escape(row()), _$escape(_$createComponent(Show, {
|
|
1239
1246
|
get when() {
|
|
1240
1247
|
return _$memo(() => !!hasChildren())() && isExpanded(item.id);
|
|
1241
1248
|
},
|
|
1242
1249
|
get children() {
|
|
1243
|
-
return _$ssr(_tmpl$
|
|
1250
|
+
return _$ssr(_tmpl$36, _$escape(renderItems(nested, depth + 1, item.id)));
|
|
1244
1251
|
}
|
|
1245
1252
|
})));
|
|
1246
1253
|
}
|
|
@@ -1265,7 +1272,7 @@ const AppWorkspaceNavTree = props => {
|
|
|
1265
1272
|
doc?.removeEventListener("pointermove", forgetDrag, true);
|
|
1266
1273
|
});
|
|
1267
1274
|
});
|
|
1268
|
-
return _$ssr(_tmpl$
|
|
1275
|
+
return _$ssr(_tmpl$38, `k2b-app-workspace__nav-tree ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-label", _$escape(props.ariaLabel, true), false), _$escape(renderItems(roots, 0)));
|
|
1269
1276
|
};
|
|
1270
1277
|
AppWorkspaceNavTree.Item = AppWorkspaceNavTreeItem;
|
|
1271
1278
|
const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProps({
|
|
@@ -1277,9 +1284,9 @@ const AppWorkspaceSidebarIconGrid = props => _$ssrElement("section", _$mergeProp
|
|
|
1277
1284
|
return props.title;
|
|
1278
1285
|
},
|
|
1279
1286
|
children: title => _$ssr(_tmpl$14, _$escape(title()))
|
|
1280
|
-
})), _$ssr(_tmpl$
|
|
1287
|
+
})), _$ssr(_tmpl$39, _$ssrAttribute("data-columns", _$escape(props.columns ?? 2, true), false), _$escape(props.children))], false);
|
|
1281
1288
|
const AppWorkspaceSidebarIconAction = props => {
|
|
1282
|
-
const content = _$ssr(_tmpl$
|
|
1289
|
+
const content = _$ssr(_tmpl$40, _$ssrAttribute("class", _$escape(iconClass(props.icon), true), false));
|
|
1283
1290
|
const attrs = () => ({
|
|
1284
1291
|
class: `k2b-app-workspace__sidebar-icon-action ${props.active ? "is-active" : ""}`,
|
|
1285
1292
|
title: props.label,
|
|
@@ -1337,7 +1344,7 @@ function AppWorkspaceHead(props) {
|
|
|
1337
1344
|
const messages = useWorkspaceMessages();
|
|
1338
1345
|
// A nested workspace is part of a page that already shows its title.
|
|
1339
1346
|
const trail = props.nested ? () => undefined : usePageTrail();
|
|
1340
|
-
return _$ssr(_tmpl$
|
|
1347
|
+
return _$ssr(_tmpl$42, _$ssrAttribute("data-trail", trail()?.ancestors.length ? "up" : trail() ? "title" : _$escape(undefined, true), false), _$escape(_$createComponent(IconButton, {
|
|
1341
1348
|
"class": "k2b-app-workspace__head-toggle",
|
|
1342
1349
|
get label() {
|
|
1343
1350
|
return messages().showNavigation;
|
|
@@ -1348,7 +1355,7 @@ function AppWorkspaceHead(props) {
|
|
|
1348
1355
|
"aria-expanded": "false",
|
|
1349
1356
|
"data-app-workspace-sidebar-toggle": "",
|
|
1350
1357
|
get children() {
|
|
1351
|
-
return _$ssr(_tmpl$
|
|
1358
|
+
return _$ssr(_tmpl$41);
|
|
1352
1359
|
}
|
|
1353
1360
|
})), _$escape(_$createComponent(Show, {
|
|
1354
1361
|
get when() {
|
|
@@ -1360,7 +1367,7 @@ function AppWorkspaceHead(props) {
|
|
|
1360
1367
|
},
|
|
1361
1368
|
as: "p",
|
|
1362
1369
|
fallback: true
|
|
1363
|
-
}), _$ssr(_tmpl$
|
|
1370
|
+
}), _$ssr(_tmpl$43, _$ssrAttribute("data-k2b-server", isServer ? "" : _$escape(undefined, true), false), _$escape(current().title))]
|
|
1364
1371
|
})));
|
|
1365
1372
|
}
|
|
1366
1373
|
const AppWorkspace = props => {
|
|
@@ -1395,7 +1402,7 @@ const AppWorkspace = props => {
|
|
|
1395
1402
|
return _$createComponent(WorkspaceContext.Provider, {
|
|
1396
1403
|
value: workspace,
|
|
1397
1404
|
get children() {
|
|
1398
|
-
return _$ssr(_tmpl$
|
|
1405
|
+
return _$ssr(_tmpl$44, `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(_$createComponent(AppWorkspaceHead, {
|
|
1399
1406
|
sidebarId: sidebarId,
|
|
1400
1407
|
nested: nested
|
|
1401
1408
|
})), _$escape(props.children));
|
|
@@ -1412,13 +1419,14 @@ AppWorkspace.LayoutStateProvider = props => _$createComponent(LayoutStateContext
|
|
|
1412
1419
|
return props.children;
|
|
1413
1420
|
}
|
|
1414
1421
|
});
|
|
1415
|
-
AppWorkspace.Content = props => _$ssr(_tmpl$
|
|
1422
|
+
AppWorkspace.Content = props => _$ssr(_tmpl$45, `k2b-app-workspace__content ${_$escape(props.class ?? "", true)}`, _$escape(props.children));
|
|
1416
1423
|
AppWorkspace.Main = AppWorkspaceMain;
|
|
1417
1424
|
AppWorkspace.MainPane = AppWorkspaceMainPane;
|
|
1418
1425
|
AppWorkspace.Detail = AppWorkspaceDetail;
|
|
1419
1426
|
AppWorkspace.BottomDrawer = AppWorkspaceBottomDrawer;
|
|
1420
1427
|
AppWorkspace.Sidebar = AppWorkspaceSidebar;
|
|
1421
1428
|
AppWorkspace.SidebarDesktop = AppWorkspaceSidebarDesktop;
|
|
1429
|
+
AppWorkspace.SidebarSwitcher = AppWorkspaceSidebarSwitcher;
|
|
1422
1430
|
AppWorkspace.SidebarSection = AppWorkspaceSidebarSection;
|
|
1423
1431
|
AppWorkspace.SidebarBody = AppWorkspaceSidebarBody;
|
|
1424
1432
|
AppWorkspace.SidebarFooter = AppWorkspaceSidebarFooter;
|