@flipdish/ui-library 0.26.3 → 0.28.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.
Files changed (74) hide show
  1. package/dist/components/organisms/ApplicationHeader/applicationHeader.types.d.ts +64 -0
  2. package/dist/components/organisms/ApplicationHeader/applicationHeader.types.d.ts.map +1 -0
  3. package/dist/components/organisms/ApplicationHeader/applicationHeader.utils.cjs +15 -0
  4. package/dist/components/organisms/ApplicationHeader/applicationHeader.utils.cjs.map +1 -0
  5. package/dist/components/organisms/ApplicationHeader/applicationHeader.utils.d.ts +5 -0
  6. package/dist/components/organisms/ApplicationHeader/applicationHeader.utils.d.ts.map +1 -0
  7. package/dist/components/organisms/ApplicationHeader/applicationHeader.utils.js +12 -0
  8. package/dist/components/organisms/ApplicationHeader/applicationHeader.utils.js.map +1 -0
  9. package/dist/components/organisms/ApplicationHeader/components/avatar-button.cjs +14 -0
  10. package/dist/components/organisms/ApplicationHeader/components/avatar-button.cjs.map +1 -0
  11. package/dist/components/organisms/ApplicationHeader/components/avatar-button.d.ts +11 -0
  12. package/dist/components/organisms/ApplicationHeader/components/avatar-button.d.ts.map +1 -0
  13. package/dist/components/organisms/ApplicationHeader/components/avatar-button.js +12 -0
  14. package/dist/components/organisms/ApplicationHeader/components/avatar-button.js.map +1 -0
  15. package/dist/components/organisms/ApplicationHeader/components/header-action.cjs +12 -0
  16. package/dist/components/organisms/ApplicationHeader/components/header-action.cjs.map +1 -0
  17. package/dist/components/organisms/ApplicationHeader/components/header-action.d.ts +19 -0
  18. package/dist/components/organisms/ApplicationHeader/components/header-action.d.ts.map +1 -0
  19. package/dist/components/organisms/ApplicationHeader/components/header-action.js +10 -0
  20. package/dist/components/organisms/ApplicationHeader/components/header-action.js.map +1 -0
  21. package/dist/components/organisms/ApplicationHeader/components/menu-button.cjs +11 -0
  22. package/dist/components/organisms/ApplicationHeader/components/menu-button.cjs.map +1 -0
  23. package/dist/components/organisms/ApplicationHeader/components/menu-button.d.ts +11 -0
  24. package/dist/components/organisms/ApplicationHeader/components/menu-button.d.ts.map +1 -0
  25. package/dist/components/organisms/ApplicationHeader/components/menu-button.js +9 -0
  26. package/dist/components/organisms/ApplicationHeader/components/menu-button.js.map +1 -0
  27. package/dist/components/organisms/ApplicationHeader/components/search-trigger.cjs +19 -0
  28. package/dist/components/organisms/ApplicationHeader/components/search-trigger.cjs.map +1 -0
  29. package/dist/components/organisms/ApplicationHeader/components/search-trigger.d.ts +25 -0
  30. package/dist/components/organisms/ApplicationHeader/components/search-trigger.d.ts.map +1 -0
  31. package/dist/components/organisms/ApplicationHeader/components/search-trigger.js +17 -0
  32. package/dist/components/organisms/ApplicationHeader/components/search-trigger.js.map +1 -0
  33. package/dist/components/organisms/ApplicationHeader/index.cjs +52 -0
  34. package/dist/components/organisms/ApplicationHeader/index.cjs.map +1 -0
  35. package/dist/components/organisms/ApplicationHeader/index.d.ts +43 -0
  36. package/dist/components/organisms/ApplicationHeader/index.d.ts.map +1 -0
  37. package/dist/components/organisms/ApplicationHeader/index.js +50 -0
  38. package/dist/components/organisms/ApplicationHeader/index.js.map +1 -0
  39. package/dist/components/organisms/CommandMenu/index.cjs +1 -1
  40. package/dist/components/organisms/CommandMenu/index.d.ts.map +1 -1
  41. package/dist/components/organisms/CommandMenu/index.js +1 -1
  42. package/dist/components/organisms/SidebarNavigation/components/logo-link.cjs +23 -0
  43. package/dist/components/organisms/SidebarNavigation/components/logo-link.cjs.map +1 -0
  44. package/dist/components/organisms/SidebarNavigation/components/logo-link.d.ts +16 -0
  45. package/dist/components/organisms/SidebarNavigation/components/logo-link.d.ts.map +1 -0
  46. package/dist/components/organisms/SidebarNavigation/components/logo-link.js +21 -0
  47. package/dist/components/organisms/SidebarNavigation/components/logo-link.js.map +1 -0
  48. package/dist/components/organisms/SidebarNavigation/components/mobile-header.cjs +2 -2
  49. package/dist/components/organisms/SidebarNavigation/components/mobile-header.cjs.map +1 -1
  50. package/dist/components/organisms/SidebarNavigation/components/mobile-header.d.ts +7 -1
  51. package/dist/components/organisms/SidebarNavigation/components/mobile-header.d.ts.map +1 -1
  52. package/dist/components/organisms/SidebarNavigation/components/mobile-header.js +2 -2
  53. package/dist/components/organisms/SidebarNavigation/components/mobile-header.js.map +1 -1
  54. package/dist/components/organisms/SidebarNavigation/index.cjs +6 -5
  55. package/dist/components/organisms/SidebarNavigation/index.cjs.map +1 -1
  56. package/dist/components/organisms/SidebarNavigation/index.d.ts +17 -6
  57. package/dist/components/organisms/SidebarNavigation/index.d.ts.map +1 -1
  58. package/dist/components/organisms/SidebarNavigation/index.js +6 -5
  59. package/dist/components/organisms/SidebarNavigation/index.js.map +1 -1
  60. package/dist/components/organisms/SidebarNavigation/sidebarNavigation.types.d.ts +17 -0
  61. package/dist/components/organisms/SidebarNavigation/sidebarNavigation.types.d.ts.map +1 -1
  62. package/dist/native/components/organisms/ApplicationHeader/index.d.ts +12 -0
  63. package/dist/utilities/__internal__/hotkeysUtils/hotkeys.utils.cjs +105 -0
  64. package/dist/utilities/__internal__/hotkeysUtils/hotkeys.utils.cjs.map +1 -0
  65. package/dist/{components/organisms/CommandMenu → utilities/__internal__/hotkeysUtils}/hotkeys.utils.d.ts +10 -0
  66. package/dist/utilities/__internal__/hotkeysUtils/hotkeys.utils.d.ts.map +1 -0
  67. package/dist/utilities/__internal__/hotkeysUtils/hotkeys.utils.js +98 -0
  68. package/dist/utilities/__internal__/hotkeysUtils/hotkeys.utils.js.map +1 -0
  69. package/package.json +1 -1
  70. package/dist/components/organisms/CommandMenu/hotkeys.utils.cjs +0 -64
  71. package/dist/components/organisms/CommandMenu/hotkeys.utils.cjs.map +0 -1
  72. package/dist/components/organisms/CommandMenu/hotkeys.utils.d.ts.map +0 -1
  73. package/dist/components/organisms/CommandMenu/hotkeys.utils.js +0 -61
  74. package/dist/components/organisms/CommandMenu/hotkeys.utils.js.map +0 -1
@@ -0,0 +1,105 @@
1
+ 'use strict';
2
+
3
+ /*
4
+ * Helpers for `react-hotkeys-hook` hotkey strings (`mod+k`). INTERNAL: imported by components as
5
+ * `#internal/utilities/hotkeysUtils/hotkeys.utils`.
6
+ *
7
+ * The parser section is a 1:1 copy of the library's `parseHotkeys.ts`, which cannot be imported from the
8
+ * package directly. Keep it in sync with the source rather than editing it:
9
+ * https://github.com/JohannesKlauss/react-hotkeys-hook/blob/main/packages/react-hotkeys-hook/src/lib/parseHotkeys.ts
10
+ *
11
+ * The display section below it is ours: platform detection and hint formatting built on that parser.
12
+ */
13
+ const reservedModifierKeywords = ['shift', 'alt', 'meta', 'mod', 'ctrl', 'control'];
14
+ const mappedKeys = {
15
+ esc: 'escape',
16
+ return: 'enter',
17
+ left: 'arrowleft',
18
+ right: 'arrowright',
19
+ up: 'arrowup',
20
+ down: 'arrowdown',
21
+ ShiftLeft: 'shift',
22
+ ShiftRight: 'shift',
23
+ AltLeft: 'alt',
24
+ AltRight: 'alt',
25
+ MetaLeft: 'meta',
26
+ MetaRight: 'meta',
27
+ OSLeft: 'meta',
28
+ OSRight: 'meta',
29
+ ControlLeft: 'ctrl',
30
+ ControlRight: 'ctrl',
31
+ };
32
+ function mapCode(key) {
33
+ return (mappedKeys[key.trim()] || key.trim()).toLowerCase().replace(/key|digit|numpad/, '');
34
+ }
35
+ function isHotkeyModifier(key) {
36
+ return reservedModifierKeywords.includes(key);
37
+ }
38
+ function parseKeysHookInput(keys, delimiter = ',') {
39
+ return keys.toLowerCase().split(delimiter);
40
+ }
41
+ function parseHotkey(hotkey, splitKey = '+', sequenceSplitKey = '>', useKey = false, description) {
42
+ let keys = [];
43
+ let isSequence = false;
44
+ if (hotkey.includes(sequenceSplitKey)) {
45
+ isSequence = true;
46
+ keys = hotkey
47
+ .toLocaleLowerCase()
48
+ .split(sequenceSplitKey)
49
+ .map((k) => mapCode(k));
50
+ }
51
+ else {
52
+ keys = hotkey
53
+ .toLocaleLowerCase()
54
+ .split(splitKey)
55
+ .map((k) => mapCode(k));
56
+ }
57
+ const modifiers = {
58
+ alt: keys.includes('alt'),
59
+ ctrl: keys.includes('ctrl') || keys.includes('control'),
60
+ shift: keys.includes('shift'),
61
+ meta: keys.includes('meta'),
62
+ mod: keys.includes('mod'),
63
+ useKey,
64
+ };
65
+ const singleCharKeys = keys.filter((k) => !reservedModifierKeywords.includes(k));
66
+ return {
67
+ ...modifiers,
68
+ hotkey,
69
+ keys: singleCharKeys,
70
+ description,
71
+ isSequence,
72
+ };
73
+ }
74
+ // #endregion
75
+ // #region Display
76
+ const APPLE_MODIFIERS = { mod: '⌘', meta: '⌘', ctrl: '⌃', control: '⌃', alt: '⌥', shift: '⇧' };
77
+ const OTHER_MODIFIERS = { mod: 'Ctrl', meta: 'Win', ctrl: 'Ctrl', control: 'Ctrl', alt: 'Alt', shift: 'Shift' };
78
+ /**
79
+ * Whether `mod` means ⌘ on this device. Mirrors `react-hotkeys-hook`'s own rule exactly (macOS only, not
80
+ * iOS/iPadOS) so a hint always names the key that fires the hotkey. Always `false` on the server.
81
+ */
82
+ const isApplePlatform = () => typeof navigator !== 'undefined' && /mac/i.test(navigator.userAgent) && !/iphone|ipad|ipod/i.test(navigator.userAgent);
83
+ /**
84
+ * Formats a hotkey for display: `mod+k` reads `⌘K` on macOS and `Ctrl K` elsewhere.
85
+ * When several comma-separated alternatives are given, only the first is shown.
86
+ */
87
+ const formatHotkeyHint = (hotkey, isApple) => {
88
+ const modifiers = isApple ? APPLE_MODIFIERS : OTHER_MODIFIERS;
89
+ const [firstHotkey = ''] = parseKeysHookInput(hotkey);
90
+ return firstHotkey
91
+ .split('+')
92
+ .map(mapCode)
93
+ .filter(Boolean)
94
+ .map((key) => (isHotkeyModifier(key) ? modifiers[key] : key.toUpperCase()))
95
+ .join(isApple ? '' : ' ');
96
+ };
97
+ // #endregion
98
+
99
+ exports.formatHotkeyHint = formatHotkeyHint;
100
+ exports.isApplePlatform = isApplePlatform;
101
+ exports.isHotkeyModifier = isHotkeyModifier;
102
+ exports.mapCode = mapCode;
103
+ exports.parseHotkey = parseHotkey;
104
+ exports.parseKeysHookInput = parseKeysHookInput;
105
+ //# sourceMappingURL=hotkeys.utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotkeys.utils.cjs","sources":["../../../../src/utilities/__internal__/hotkeysUtils/hotkeys.utils.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -16,5 +16,15 @@ export declare function mapCode(key: string): string;
16
16
  export declare function isHotkeyModifier(key: string): boolean;
17
17
  export declare function parseKeysHookInput(keys: string, delimiter?: string): string[];
18
18
  export declare function parseHotkey(hotkey: string, splitKey?: string, sequenceSplitKey?: string, useKey?: boolean, description?: string): Hotkey;
19
+ /**
20
+ * Whether `mod` means ⌘ on this device. Mirrors `react-hotkeys-hook`'s own rule exactly (macOS only, not
21
+ * iOS/iPadOS) so a hint always names the key that fires the hotkey. Always `false` on the server.
22
+ */
23
+ export declare const isApplePlatform: () => boolean;
24
+ /**
25
+ * Formats a hotkey for display: `mod+k` reads `⌘K` on macOS and `Ctrl K` elsewhere.
26
+ * When several comma-separated alternatives are given, only the first is shown.
27
+ */
28
+ export declare const formatHotkeyHint: (hotkey: string, isApple: boolean) => string;
19
29
  export {};
20
30
  //# sourceMappingURL=hotkeys.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotkeys.utils.d.ts","sourceRoot":"","sources":["../../../../src/utilities/__internal__/hotkeysUtils/hotkeys.utils.ts"],"names":[],"mappings":"AAaA,UAAU,iBAAiB;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,MAAO,SAAQ,iBAAiB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB;AAuBD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,WAE3C;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,EAAE,CAE1E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAM,EAAE,gBAAgB,SAAM,EAAE,MAAM,UAAQ,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAmChI;AAOD;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAO,OACqF,CAAC;AAEzH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,EAAE,SAAS,OAAO,KAAG,MAUnE,CAAC"}
@@ -0,0 +1,98 @@
1
+ /*
2
+ * Helpers for `react-hotkeys-hook` hotkey strings (`mod+k`). INTERNAL: imported by components as
3
+ * `#internal/utilities/hotkeysUtils/hotkeys.utils`.
4
+ *
5
+ * The parser section is a 1:1 copy of the library's `parseHotkeys.ts`, which cannot be imported from the
6
+ * package directly. Keep it in sync with the source rather than editing it:
7
+ * https://github.com/JohannesKlauss/react-hotkeys-hook/blob/main/packages/react-hotkeys-hook/src/lib/parseHotkeys.ts
8
+ *
9
+ * The display section below it is ours: platform detection and hint formatting built on that parser.
10
+ */
11
+ const reservedModifierKeywords = ['shift', 'alt', 'meta', 'mod', 'ctrl', 'control'];
12
+ const mappedKeys = {
13
+ esc: 'escape',
14
+ return: 'enter',
15
+ left: 'arrowleft',
16
+ right: 'arrowright',
17
+ up: 'arrowup',
18
+ down: 'arrowdown',
19
+ ShiftLeft: 'shift',
20
+ ShiftRight: 'shift',
21
+ AltLeft: 'alt',
22
+ AltRight: 'alt',
23
+ MetaLeft: 'meta',
24
+ MetaRight: 'meta',
25
+ OSLeft: 'meta',
26
+ OSRight: 'meta',
27
+ ControlLeft: 'ctrl',
28
+ ControlRight: 'ctrl',
29
+ };
30
+ function mapCode(key) {
31
+ return (mappedKeys[key.trim()] || key.trim()).toLowerCase().replace(/key|digit|numpad/, '');
32
+ }
33
+ function isHotkeyModifier(key) {
34
+ return reservedModifierKeywords.includes(key);
35
+ }
36
+ function parseKeysHookInput(keys, delimiter = ',') {
37
+ return keys.toLowerCase().split(delimiter);
38
+ }
39
+ function parseHotkey(hotkey, splitKey = '+', sequenceSplitKey = '>', useKey = false, description) {
40
+ let keys = [];
41
+ let isSequence = false;
42
+ if (hotkey.includes(sequenceSplitKey)) {
43
+ isSequence = true;
44
+ keys = hotkey
45
+ .toLocaleLowerCase()
46
+ .split(sequenceSplitKey)
47
+ .map((k) => mapCode(k));
48
+ }
49
+ else {
50
+ keys = hotkey
51
+ .toLocaleLowerCase()
52
+ .split(splitKey)
53
+ .map((k) => mapCode(k));
54
+ }
55
+ const modifiers = {
56
+ alt: keys.includes('alt'),
57
+ ctrl: keys.includes('ctrl') || keys.includes('control'),
58
+ shift: keys.includes('shift'),
59
+ meta: keys.includes('meta'),
60
+ mod: keys.includes('mod'),
61
+ useKey,
62
+ };
63
+ const singleCharKeys = keys.filter((k) => !reservedModifierKeywords.includes(k));
64
+ return {
65
+ ...modifiers,
66
+ hotkey,
67
+ keys: singleCharKeys,
68
+ description,
69
+ isSequence,
70
+ };
71
+ }
72
+ // #endregion
73
+ // #region Display
74
+ const APPLE_MODIFIERS = { mod: '⌘', meta: '⌘', ctrl: '⌃', control: '⌃', alt: '⌥', shift: '⇧' };
75
+ const OTHER_MODIFIERS = { mod: 'Ctrl', meta: 'Win', ctrl: 'Ctrl', control: 'Ctrl', alt: 'Alt', shift: 'Shift' };
76
+ /**
77
+ * Whether `mod` means ⌘ on this device. Mirrors `react-hotkeys-hook`'s own rule exactly (macOS only, not
78
+ * iOS/iPadOS) so a hint always names the key that fires the hotkey. Always `false` on the server.
79
+ */
80
+ const isApplePlatform = () => typeof navigator !== 'undefined' && /mac/i.test(navigator.userAgent) && !/iphone|ipad|ipod/i.test(navigator.userAgent);
81
+ /**
82
+ * Formats a hotkey for display: `mod+k` reads `⌘K` on macOS and `Ctrl K` elsewhere.
83
+ * When several comma-separated alternatives are given, only the first is shown.
84
+ */
85
+ const formatHotkeyHint = (hotkey, isApple) => {
86
+ const modifiers = isApple ? APPLE_MODIFIERS : OTHER_MODIFIERS;
87
+ const [firstHotkey = ''] = parseKeysHookInput(hotkey);
88
+ return firstHotkey
89
+ .split('+')
90
+ .map(mapCode)
91
+ .filter(Boolean)
92
+ .map((key) => (isHotkeyModifier(key) ? modifiers[key] : key.toUpperCase()))
93
+ .join(isApple ? '' : ' ');
94
+ };
95
+ // #endregion
96
+
97
+ export { formatHotkeyHint, isApplePlatform, isHotkeyModifier, mapCode, parseHotkey, parseKeysHookInput };
98
+ //# sourceMappingURL=hotkeys.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotkeys.utils.js","sources":["../../../../src/utilities/__internal__/hotkeysUtils/hotkeys.utils.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flipdish/ui-library",
3
- "version": "0.26.3",
3
+ "version": "0.28.0",
4
4
  "description": "Flipdish Design System — atomic-design component library (Tailwind v4 + UntitledUI + React Aria).",
5
5
  "type": "module",
6
6
  "imports": {
@@ -1,64 +0,0 @@
1
- 'use strict';
2
-
3
- // This is a 1:1 copy of the `parseHotkeys.ts` file from `react-hotkeys-hook`.
4
- // We need this because there's no way to import it from the package directly.
5
- // Source: https://github.com/JohannesKlauss/react-hotkeys-hook/blob/main/packages/react-hotkeys-hook/src/lib/parseHotkeys.ts
6
- const reservedModifierKeywords = ['shift', 'alt', 'meta', 'mod', 'ctrl', 'control'];
7
- const mappedKeys = {
8
- esc: 'escape',
9
- return: 'enter',
10
- left: 'arrowleft',
11
- right: 'arrowright',
12
- up: 'arrowup',
13
- down: 'arrowdown',
14
- ShiftLeft: 'shift',
15
- ShiftRight: 'shift',
16
- AltLeft: 'alt',
17
- AltRight: 'alt',
18
- MetaLeft: 'meta',
19
- MetaRight: 'meta',
20
- OSLeft: 'meta',
21
- OSRight: 'meta',
22
- ControlLeft: 'ctrl',
23
- ControlRight: 'ctrl',
24
- };
25
- function mapCode(key) {
26
- return (mappedKeys[key.trim()] || key.trim()).toLowerCase().replace(/key|digit|numpad/, '');
27
- }
28
- function parseHotkey(hotkey, splitKey = '+', sequenceSplitKey = '>', useKey = false, description) {
29
- let keys = [];
30
- let isSequence = false;
31
- if (hotkey.includes(sequenceSplitKey)) {
32
- isSequence = true;
33
- keys = hotkey
34
- .toLocaleLowerCase()
35
- .split(sequenceSplitKey)
36
- .map((k) => mapCode(k));
37
- }
38
- else {
39
- keys = hotkey
40
- .toLocaleLowerCase()
41
- .split(splitKey)
42
- .map((k) => mapCode(k));
43
- }
44
- const modifiers = {
45
- alt: keys.includes('alt'),
46
- ctrl: keys.includes('ctrl') || keys.includes('control'),
47
- shift: keys.includes('shift'),
48
- meta: keys.includes('meta'),
49
- mod: keys.includes('mod'),
50
- useKey,
51
- };
52
- const singleCharKeys = keys.filter((k) => !reservedModifierKeywords.includes(k));
53
- return {
54
- ...modifiers,
55
- hotkey,
56
- keys: singleCharKeys,
57
- description,
58
- isSequence,
59
- };
60
- }
61
-
62
- exports.mapCode = mapCode;
63
- exports.parseHotkey = parseHotkey;
64
- //# sourceMappingURL=hotkeys.utils.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hotkeys.utils.cjs","sources":["../../../../src/components/organisms/CommandMenu/hotkeys.utils.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;AACA;AACA;AAkBA,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC;AAEnF,MAAM,UAAU,GAA2B;AACzC,IAAA,GAAG,EAAE,QAAQ;AACb,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,UAAU,EAAE,OAAO;AACnB,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,MAAM,EAAE,MAAM;AACd,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,YAAY,EAAE,MAAM;CACrB;AAEK,SAAU,OAAO,CAAC,GAAW,EAAA;IACjC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;AAC7F;SAUgB,WAAW,CAAC,MAAc,EAAE,QAAQ,GAAG,GAAG,EAAE,gBAAgB,GAAG,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,WAAoB,EAAA;IACtH,IAAI,IAAI,GAAa,EAAE;IACvB,IAAI,UAAU,GAAG,KAAK;AAEtB,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QACrC,UAAU,GAAG,IAAI;AACjB,QAAA,IAAI,GAAG;AACJ,aAAA,iBAAiB;aACjB,KAAK,CAAC,gBAAgB;aACtB,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B;SAAO;AACL,QAAA,IAAI,GAAG;AACJ,aAAA,iBAAiB;aACjB,KAAK,CAAC,QAAQ;aACd,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B;AAEA,IAAA,MAAM,SAAS,GAAsB;AACnC,QAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACvD,QAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3B,QAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzB,MAAM;KACP;AAED,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhF,OAAO;AACL,QAAA,GAAG,SAAS;QACZ,MAAM;AACN,QAAA,IAAI,EAAE,cAAc;QACpB,WAAW;QACX,UAAU;KACX;AACH;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hotkeys.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/CommandMenu/hotkeys.utils.ts"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,MAAO,SAAQ,iBAAiB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB;AAuBD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,WAE3C;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,EAAE,CAE1E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAM,EAAE,gBAAgB,SAAM,EAAE,MAAM,UAAQ,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAmChI"}
@@ -1,61 +0,0 @@
1
- // This is a 1:1 copy of the `parseHotkeys.ts` file from `react-hotkeys-hook`.
2
- // We need this because there's no way to import it from the package directly.
3
- // Source: https://github.com/JohannesKlauss/react-hotkeys-hook/blob/main/packages/react-hotkeys-hook/src/lib/parseHotkeys.ts
4
- const reservedModifierKeywords = ['shift', 'alt', 'meta', 'mod', 'ctrl', 'control'];
5
- const mappedKeys = {
6
- esc: 'escape',
7
- return: 'enter',
8
- left: 'arrowleft',
9
- right: 'arrowright',
10
- up: 'arrowup',
11
- down: 'arrowdown',
12
- ShiftLeft: 'shift',
13
- ShiftRight: 'shift',
14
- AltLeft: 'alt',
15
- AltRight: 'alt',
16
- MetaLeft: 'meta',
17
- MetaRight: 'meta',
18
- OSLeft: 'meta',
19
- OSRight: 'meta',
20
- ControlLeft: 'ctrl',
21
- ControlRight: 'ctrl',
22
- };
23
- function mapCode(key) {
24
- return (mappedKeys[key.trim()] || key.trim()).toLowerCase().replace(/key|digit|numpad/, '');
25
- }
26
- function parseHotkey(hotkey, splitKey = '+', sequenceSplitKey = '>', useKey = false, description) {
27
- let keys = [];
28
- let isSequence = false;
29
- if (hotkey.includes(sequenceSplitKey)) {
30
- isSequence = true;
31
- keys = hotkey
32
- .toLocaleLowerCase()
33
- .split(sequenceSplitKey)
34
- .map((k) => mapCode(k));
35
- }
36
- else {
37
- keys = hotkey
38
- .toLocaleLowerCase()
39
- .split(splitKey)
40
- .map((k) => mapCode(k));
41
- }
42
- const modifiers = {
43
- alt: keys.includes('alt'),
44
- ctrl: keys.includes('ctrl') || keys.includes('control'),
45
- shift: keys.includes('shift'),
46
- meta: keys.includes('meta'),
47
- mod: keys.includes('mod'),
48
- useKey,
49
- };
50
- const singleCharKeys = keys.filter((k) => !reservedModifierKeywords.includes(k));
51
- return {
52
- ...modifiers,
53
- hotkey,
54
- keys: singleCharKeys,
55
- description,
56
- isSequence,
57
- };
58
- }
59
-
60
- export { mapCode, parseHotkey };
61
- //# sourceMappingURL=hotkeys.utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hotkeys.utils.js","sources":["../../../../src/components/organisms/CommandMenu/hotkeys.utils.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AAkBA,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC;AAEnF,MAAM,UAAU,GAA2B;AACzC,IAAA,GAAG,EAAE,QAAQ;AACb,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,KAAK,EAAE,YAAY;AACnB,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,SAAS,EAAE,OAAO;AAClB,IAAA,UAAU,EAAE,OAAO;AACnB,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,MAAM,EAAE,MAAM;AACd,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,YAAY,EAAE,MAAM;CACrB;AAEK,SAAU,OAAO,CAAC,GAAW,EAAA;IACjC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;AAC7F;SAUgB,WAAW,CAAC,MAAc,EAAE,QAAQ,GAAG,GAAG,EAAE,gBAAgB,GAAG,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,WAAoB,EAAA;IACtH,IAAI,IAAI,GAAa,EAAE;IACvB,IAAI,UAAU,GAAG,KAAK;AAEtB,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QACrC,UAAU,GAAG,IAAI;AACjB,QAAA,IAAI,GAAG;AACJ,aAAA,iBAAiB;aACjB,KAAK,CAAC,gBAAgB;aACtB,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B;SAAO;AACL,QAAA,IAAI,GAAG;AACJ,aAAA,iBAAiB;aACjB,KAAK,CAAC,QAAQ;aACd,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B;AAEA,IAAA,MAAM,SAAS,GAAsB;AACnC,QAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACvD,QAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3B,QAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzB,MAAM;KACP;AAED,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhF,OAAO;AACL,QAAA,GAAG,SAAS;QACZ,MAAM;AACN,QAAA,IAAI,EAAE,cAAc;QACpB,WAAW;QACX,UAAU;KACX;AACH;;;;"}