@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":[]}
|