@adecore/ui 0.31.12 → 0.33.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 (163) hide show
  1. package/dist/AccentSwatches.js +290 -13
  2. package/dist/Banner.js +90 -9
  3. package/dist/Button.js +114 -22
  4. package/dist/ButtonGroup.js +62 -8
  5. package/dist/Checkbox.js +73 -4
  6. package/dist/ChoiceCards.js +205 -11
  7. package/dist/CloseButton.js +87 -7
  8. package/dist/ColorSwatch.js +132 -15
  9. package/dist/ColorWheelPicker.js +305 -71
  10. package/dist/ColumnResizeHandle.js +43 -8
  11. package/dist/DisabledReason.js +27 -8
  12. package/dist/DockShell.js +144 -37
  13. package/dist/EmptyState.js +95 -6
  14. package/dist/ErrorBoundary.js +254 -31
  15. package/dist/Field.js +349 -31
  16. package/dist/FileIcon.js +67 -6
  17. package/dist/Icon.js +38 -6
  18. package/dist/IconButton.js +176 -20
  19. package/dist/IconPicker.js +344 -73
  20. package/dist/Input.js +233 -14
  21. package/dist/Kbd.js +150 -10
  22. package/dist/LazyBoundary.js +14 -5
  23. package/dist/ListRow.js +75 -15
  24. package/dist/Meter.js +108 -5
  25. package/dist/MiddleTruncate.js +126 -45
  26. package/dist/PanelEmpty.js +64 -5
  27. package/dist/PanelHeader.js +95 -13
  28. package/dist/Pill.js +114 -19
  29. package/dist/ProjectSwitcher.js +225 -12
  30. package/dist/PromptDialog.js +352 -37
  31. package/dist/SectionLabel.js +62 -8
  32. package/dist/SegmentBar.js +197 -36
  33. package/dist/Segmented.js +130 -23
  34. package/dist/Select.js +310 -19
  35. package/dist/SelectSearch.js +344 -29
  36. package/dist/Separator.js +35 -4
  37. package/dist/ShortcutHints.js +146 -76
  38. package/dist/Skeleton.js +31 -4
  39. package/dist/Slider.js +172 -10
  40. package/dist/SlidingColumn.js +194 -34
  41. package/dist/Spinner.js +100 -3
  42. package/dist/Stepper.js +232 -11
  43. package/dist/Surface.js +62 -8
  44. package/dist/Switch.js +60 -6
  45. package/dist/TextMenu.js +212 -17
  46. package/dist/Tile.js +149 -5
  47. package/dist/Toasts.js +391 -33
  48. package/dist/Tooltip.js +153 -16
  49. package/dist/UIProvider.js +62 -15
  50. package/dist/Waveform.js +362 -93
  51. package/dist/Wipe.js +259 -34
  52. package/dist/ZoomControls.js +356 -14
  53. package/dist/class-name.js +1 -1
  54. package/dist/clipboard.js +15 -17
  55. package/dist/context-menu/index.parts.js +1 -1
  56. package/dist/dialog/index.parts.js +1 -1
  57. package/dist/dialog/parts.js +378 -29
  58. package/dist/dialog-layer.js +51 -18
  59. package/dist/error-boundary.js +19 -19
  60. package/dist/error-message.js +1 -1
  61. package/dist/field-context.js +7 -5
  62. package/dist/file-icon.js +23 -21
  63. package/dist/file-tree/helpers.js +133 -119
  64. package/dist/file-tree/index.parts.js +3 -3
  65. package/dist/file-tree/parts.js +418 -127
  66. package/dist/file-tree/style.js +1 -1
  67. package/dist/file-tree/use-file-tree-shift.js +43 -30
  68. package/dist/file-tree/use-file-tree.js +60 -18
  69. package/dist/file-tree/use-slots.js +220 -192
  70. package/dist/floating.js +2 -2
  71. package/dist/format/datetime.js +88 -38
  72. package/dist/format/duration.js +59 -53
  73. package/dist/format/index.js +1 -1
  74. package/dist/format/locale.js +76 -56
  75. package/dist/format/number.js +77 -61
  76. package/dist/format/regions.js +4 -2
  77. package/dist/format/time-zone.js +1 -1
  78. package/dist/icon-button-size.js +12 -2
  79. package/dist/icon-picker.js +70 -61
  80. package/dist/index.js +57 -57
  81. package/dist/key-value-list/index.parts.js +1 -1
  82. package/dist/key-value-list/parts.js +256 -22
  83. package/dist/lazy-landings.js +10 -10
  84. package/dist/lazy.js +84 -71
  85. package/dist/locales/en.js +80 -80
  86. package/dist/locales/nl.js +80 -80
  87. package/dist/locales.js +10 -7
  88. package/dist/menu/index.parts.js +1 -1
  89. package/dist/menu/parts.js +882 -44
  90. package/dist/merge-refs.js +8 -9
  91. package/dist/middle-truncate.js +24 -25
  92. package/dist/modality.js +27 -19
  93. package/dist/placement.js +11 -20
  94. package/dist/platform.js +6 -6
  95. package/dist/popover/index.parts.js +1 -1
  96. package/dist/popover/parts.js +173 -11
  97. package/dist/popup-layer.js +38 -17
  98. package/dist/prefetch.js +78 -79
  99. package/dist/preview-card/index.parts.js +1 -1
  100. package/dist/project-switcher-row.js +153 -12
  101. package/dist/select-row.js +69 -5
  102. package/dist/select-shared.js +6 -6
  103. package/dist/selection.js +16 -16
  104. package/dist/seti-icons.js +413 -413
  105. package/dist/settings/ConfirmDialog.js +55 -8
  106. package/dist/settings/DetailHeader.js +72 -4
  107. package/dist/settings/MasterDetail.js +119 -7
  108. package/dist/settings/SettingsDialog.js +820 -80
  109. package/dist/settings/SettingsRow.js +205 -18
  110. package/dist/settings/SettingsSection.js +96 -6
  111. package/dist/settings/index.js +7 -7
  112. package/dist/settings/target.js +7 -2
  113. package/dist/shortcut-hints.js +73 -55
  114. package/dist/shortcut.js +140 -104
  115. package/dist/step-places.js +1 -1
  116. package/dist/tabs/index.parts.js +1 -1
  117. package/dist/tabs/overflow.js +18 -18
  118. package/dist/tabs/parts.js +780 -166
  119. package/dist/testing/dedupe.js +82 -75
  120. package/dist/testing/fake-source.js +12 -12
  121. package/dist/testing/index.js +1 -1
  122. package/dist/toast-store.js +65 -46
  123. package/dist/tree/index.parts.js +1 -1
  124. package/dist/tree/parts.js +721 -94
  125. package/dist/tree/shift.js +28 -22
  126. package/dist/tree/style.js +2 -2
  127. package/dist/tree/use-tree-shift.js +178 -117
  128. package/dist/useAsyncAction.js +23 -19
  129. package/dist/useColumnResize.js +36 -34
  130. package/dist/useContentSize.js +62 -18
  131. package/dist/useMeasuredWidth.js +14 -3
  132. package/dist/useNow.js +73 -30
  133. package/dist/wipe-split.js +14 -14
  134. package/dist/workspace/DropPreview.js +60 -7
  135. package/dist/workspace/SplitView.js +1025 -441
  136. package/dist/workspace/TabStrip.js +810 -191
  137. package/dist/workspace/Workspace.js +276 -26
  138. package/dist/workspace/context.js +8 -3
  139. package/dist/workspace/geometry.js +173 -150
  140. package/dist/workspace/model.js +313 -250
  141. package/dist/workspace/preview.js +61 -61
  142. package/dist/zoom.js +2 -2
  143. package/package.json +1 -1
  144. package/src/ErrorBoundary.tsx +1 -1
  145. package/src/Field.tsx +4 -3
  146. package/src/IconPicker.tsx +3 -3
  147. package/src/LazyBoundary.tsx +2 -0
  148. package/src/MiddleTruncate.tsx +2 -2
  149. package/src/SegmentBar.tsx +2 -2
  150. package/src/Toasts.tsx +3 -1
  151. package/src/Tooltip.tsx +7 -10
  152. package/src/Waveform.tsx +3 -3
  153. package/src/file-tree/parts.tsx +6 -9
  154. package/src/file-tree/use-file-tree-shift.tsx +6 -9
  155. package/src/lazy.tsx +4 -0
  156. package/src/locales/en.ts +4 -4
  157. package/src/locales/nl.ts +5 -5
  158. package/src/settings/SettingsDialog.tsx +1 -1
  159. package/src/tree/parts.tsx +5 -8
  160. package/src/useContentSize.ts +3 -3
  161. package/src/workspace/SplitView.tsx +2 -2
  162. package/src/workspace/TabStrip.tsx +2 -3
  163. package/src/workspace/Workspace.tsx +2 -5
package/dist/shortcut.js CHANGED
@@ -1,142 +1,178 @@
1
1
  /* Matched on the physical key: Shift turns `[` into `{` and Option turns most keys into a dead key. */
2
2
  const PUNCTUATION_CODES = {
3
- ',': 'Comma',
4
- '.': 'Period',
5
- '/': 'Slash',
6
- ';': 'Semicolon',
7
- "'": 'Quote',
8
- '`': 'Backquote',
9
- '\\': 'Backslash',
10
- '[': 'BracketLeft',
11
- ']': 'BracketRight'
3
+ ',': 'Comma',
4
+ '.': 'Period',
5
+ '/': 'Slash',
6
+ ';': 'Semicolon',
7
+ "'": 'Quote',
8
+ '`': 'Backquote',
9
+ '\\': 'Backslash',
10
+ '[': 'BracketLeft',
11
+ ']': 'BracketRight'
12
12
  };
13
13
  /* Matched on the character, because `+` sits on a different key per layout. */
14
14
  const CHARACTER_KEYS = new Set(['+', '-', '=']);
15
15
  const NAMED_KEYS = new Set(['Enter', 'Escape', 'Backspace', 'Delete', 'Tab', 'Space', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown']);
16
16
  const FUNCTION_KEY = /^F([1-9]|1[0-2])$/;
17
17
  const MODIFIER_FIELDS = {
18
- Mod: 'mod',
19
- Ctrl: 'ctrl',
20
- Meta: 'meta',
21
- Alt: 'alt',
22
- Shift: 'shift'
18
+ Mod: 'mod',
19
+ Ctrl: 'ctrl',
20
+ Meta: 'meta',
21
+ Alt: 'alt',
22
+ Shift: 'shift'
23
23
  };
24
- const isKey = (word) => /^[A-Za-z0-9]$/.test(word) || word in PUNCTUATION_CODES || CHARACTER_KEYS.has(word) || NAMED_KEYS.has(word) || FUNCTION_KEY.test(word);
24
+ const isKey = word => /^[A-Za-z0-9]$/.test(word) || word in PUNCTUATION_CODES || CHARACTER_KEYS.has(word) || NAMED_KEYS.has(word) || FUNCTION_KEY.test(word);
25
25
  /**
26
26
  * Parses `Mod+Shift+K`. Throws on a word it does not know or on two keys, so a typo in a table fails
27
27
  * the moment the module loads instead of leaving a shortcut that never fires.
28
28
  */
29
- export const shortcut = (text) => {
30
- // A trailing `++` is the plus key itself, which a plain split would read as two empty words.
31
- const words = text === '+' ? ['+'] : text.endsWith('++') ? [...text.slice(0, -2).split('+'), '+'] : text.split('+');
32
- const result = { mod: false, ctrl: false, meta: false, alt: false, shift: false, key: '' };
33
- for (const word of words) {
34
- if (Object.hasOwn(MODIFIER_FIELDS, word)) {
35
- result[MODIFIER_FIELDS[word]] = true;
36
- continue;
37
- }
38
- if (!isKey(word)) {
39
- throw new Error(`Unknown key "${word}" in shortcut "${text}"`);
40
- }
41
- if (result.key !== '') {
42
- throw new Error(`Shortcut "${text}" names two keys`);
43
- }
44
- result.key = word.length === 1 ? word.toUpperCase() : word;
29
+ export const shortcut = text => {
30
+ // A trailing `++` is the plus key itself, which a plain split would read as two empty words.
31
+ const words = text === '+' ? ['+'] : text.endsWith('++') ? [...text.slice(0, -2).split('+'), '+'] : text.split('+');
32
+ const result = {
33
+ mod: false,
34
+ ctrl: false,
35
+ meta: false,
36
+ alt: false,
37
+ shift: false,
38
+ key: ''
39
+ };
40
+ for (const word of words) {
41
+ if (Object.hasOwn(MODIFIER_FIELDS, word)) {
42
+ result[MODIFIER_FIELDS[word]] = true;
43
+ continue;
45
44
  }
46
- return result;
45
+ if (!isKey(word)) {
46
+ throw new Error(`Unknown key "${word}" in shortcut "${text}"`);
47
+ }
48
+ if (result.key !== '') {
49
+ throw new Error(`Shortcut "${text}" names two keys`);
50
+ }
51
+ result.key = word.length === 1 ? word.toUpperCase() : word;
52
+ }
53
+ return result;
47
54
  };
48
55
  // Letters and digits match on `code`: with Shift held `key` says `!` for 1, and Option's dead keys change it on macOS.
49
56
  const matchesKey = (key, event) => {
50
- if (/^[A-Z]$/.test(key)) {
51
- return event.code === `Key${key}`;
52
- }
53
- if (/^[0-9]$/.test(key)) {
54
- return event.code === `Digit${key}`;
55
- }
56
- const code = PUNCTUATION_CODES[key];
57
- if (code) {
58
- return event.code === code;
59
- }
60
- if (key === 'Space') {
61
- return event.code === 'Space';
62
- }
63
- return event.key === key;
57
+ if (/^[A-Z]$/.test(key)) {
58
+ return event.code === `Key${key}`;
59
+ }
60
+ if (/^[0-9]$/.test(key)) {
61
+ return event.code === `Digit${key}`;
62
+ }
63
+ const code = PUNCTUATION_CODES[key];
64
+ if (code) {
65
+ return event.code === code;
66
+ }
67
+ if (key === 'Space') {
68
+ return event.code === 'Space';
69
+ }
70
+ return event.key === key;
64
71
  };
65
72
  /* Strict: every modifier the shortcut does not name has to be up, so Ctrl+K on macOS is not Cmd+K. */
66
73
  export const matchesShortcut = (target, event, apple) => {
67
- const meta = target.meta || (target.mod && apple);
68
- const ctrl = target.ctrl || (target.mod && !apple);
69
- if (target.key === '' || event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== target.alt || event.shiftKey !== target.shift) {
70
- return false;
71
- }
72
- return matchesKey(target.key, event);
74
+ const meta = target.meta || target.mod && apple;
75
+ const ctrl = target.ctrl || target.mod && !apple;
76
+ if (target.key === '' || event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== target.alt || event.shiftKey !== target.shift) {
77
+ return false;
78
+ }
79
+ return matchesKey(target.key, event);
73
80
  };
74
81
  const KEY_LABELS = {
75
- Enter: { apple: '↩', other: 'Enter' },
76
- Backspace: { apple: '⌫', other: 'Backspace' },
77
- Delete: { apple: '⌦', other: 'Delete' },
78
- Escape: { apple: 'Esc', other: 'Esc' },
79
- Tab: { apple: '⇥', other: 'Tab' },
80
- Space: { apple: 'Space', other: 'Space' },
81
- ArrowLeft: { apple: '←', other: '←' },
82
- ArrowRight: { apple: '→', other: '→' },
83
- ArrowUp: { apple: '↑', other: '↑' },
84
- ArrowDown: { apple: '↓', other: '↓' }
82
+ Enter: {
83
+ apple: '↩',
84
+ other: 'Enter'
85
+ },
86
+ Backspace: {
87
+ apple: '⌫',
88
+ other: 'Backspace'
89
+ },
90
+ Delete: {
91
+ apple: '⌦',
92
+ other: 'Delete'
93
+ },
94
+ Escape: {
95
+ apple: 'Esc',
96
+ other: 'Esc'
97
+ },
98
+ Tab: {
99
+ apple: '⇥',
100
+ other: 'Tab'
101
+ },
102
+ Space: {
103
+ apple: 'Space',
104
+ other: 'Space'
105
+ },
106
+ ArrowLeft: {
107
+ apple: '←',
108
+ other: '←'
109
+ },
110
+ ArrowRight: {
111
+ apple: '→',
112
+ other: '→'
113
+ },
114
+ ArrowUp: {
115
+ apple: '↑',
116
+ other: '↑'
117
+ },
118
+ ArrowDown: {
119
+ apple: '↓',
120
+ other: '↓'
121
+ }
85
122
  };
86
123
  /* The modifiers and the key as separate caps, in the order the platform prints them. */
87
124
  export const shortcutParts = (target, apple) => {
88
- const parts = [];
89
- if (apple) {
90
- if (target.ctrl) {
91
- parts.push('⌃');
92
- }
93
- if (target.alt) {
94
- parts.push('⌥');
95
- }
96
- if (target.shift) {
97
- parts.push('⇧');
98
- }
99
- if (target.meta || target.mod) {
100
- parts.push('⌘');
101
- }
125
+ const parts = [];
126
+ if (apple) {
127
+ if (target.ctrl) {
128
+ parts.push('⌃');
129
+ }
130
+ if (target.alt) {
131
+ parts.push('⌥');
132
+ }
133
+ if (target.shift) {
134
+ parts.push('⇧');
135
+ }
136
+ if (target.meta || target.mod) {
137
+ parts.push('⌘');
138
+ }
139
+ } else {
140
+ if (target.ctrl || target.mod) {
141
+ parts.push('Ctrl');
142
+ }
143
+ if (target.alt) {
144
+ parts.push('Alt');
102
145
  }
103
- else {
104
- if (target.ctrl || target.mod) {
105
- parts.push('Ctrl');
106
- }
107
- if (target.alt) {
108
- parts.push('Alt');
109
- }
110
- if (target.shift) {
111
- parts.push('Shift');
112
- }
113
- if (target.meta) {
114
- parts.push('Meta');
115
- }
146
+ if (target.shift) {
147
+ parts.push('Shift');
116
148
  }
117
- if (target.key !== '') {
118
- const label = KEY_LABELS[target.key];
119
- parts.push(label ? label[apple ? 'apple' : 'other'] : target.key);
149
+ if (target.meta) {
150
+ parts.push('Meta');
120
151
  }
121
- return parts;
152
+ }
153
+ if (target.key !== '') {
154
+ const label = KEY_LABELS[target.key];
155
+ parts.push(label ? label[apple ? 'apple' : 'other'] : target.key);
156
+ }
157
+ return parts;
122
158
  };
123
159
  /* `⌥⇧⌘K` on macOS, `Ctrl+Alt+Shift+K` elsewhere. */
124
160
  export const formatShortcut = (target, apple) => shortcutParts(target, apple).join(apple ? '' : '+');
125
161
  /* The browser's own editing shortcuts, which the app only ever prints in a menu. */
126
162
  export const EDIT_SHORTCUTS = {
127
- copy: /* @__PURE__ */ shortcut('Mod+C'),
128
- cut: /* @__PURE__ */ shortcut('Mod+X'),
129
- paste: /* @__PURE__ */ shortcut('Mod+V'),
130
- selectAll: /* @__PURE__ */ shortcut('Mod+A')
163
+ copy: /* @__PURE__ */shortcut('Mod+C'),
164
+ cut: /* @__PURE__ */shortcut('Mod+X'),
165
+ paste: /* @__PURE__ */shortcut('Mod+V'),
166
+ selectAll: /* @__PURE__ */shortcut('Mod+A')
131
167
  };
132
168
  /* Keys that are not a shortcut of their own but are printed as one in a hint. */
133
169
  export const KEY_SHORTCUTS = {
134
- enter: /* @__PURE__ */ shortcut('Enter'),
135
- modEnter: /* @__PURE__ */ shortcut('Mod+Enter'),
136
- backspace: /* @__PURE__ */ shortcut('Backspace'),
137
- escape: /* @__PURE__ */ shortcut('Escape'),
138
- shift: /* @__PURE__ */ shortcut('Shift'),
139
- rename: /* @__PURE__ */ shortcut('F2')
170
+ enter: /* @__PURE__ */shortcut('Enter'),
171
+ modEnter: /* @__PURE__ */shortcut('Mod+Enter'),
172
+ backspace: /* @__PURE__ */shortcut('Backspace'),
173
+ escape: /* @__PURE__ */shortcut('Escape'),
174
+ shift: /* @__PURE__ */shortcut('Shift'),
175
+ rename: /* @__PURE__ */shortcut('F2')
140
176
  };
141
177
  /* Whether the platform's own modifier is down during a pointer gesture: Cmd on macOS, Ctrl elsewhere. */
142
- export const isModHeld = (event, apple) => (apple ? event.metaKey : event.ctrlKey);
178
+ export const isModHeld = (event, apple) => apple ? event.metaKey : event.ctrlKey;
@@ -1,2 +1,2 @@
1
1
  /* The places after the separator that `step` is written with, so a step of 0.1 shows `1,0` and never `1`. */
2
- export const placesOf = (step) => String(step).split('.')[1]?.length ?? 0;
2
+ export const placesOf = step => String(step).split('.')[1]?.length ?? 0;
@@ -1 +1 @@
1
- export { TabsCount as Count, TabsList as List, TabsPanel as Panel, TabsRoot as Root, TabsTab as Tab } from './parts.js';
1
+ export { TabsCount as Count, TabsList as List, TabsPanel as Panel, TabsRoot as Root, TabsTab as Tab } from "./parts.js";
@@ -5,23 +5,23 @@
5
5
  * the menu: they take the place of the last ones that no longer fit beside them.
6
6
  */
7
7
  export const shownTabs = (widths, room, gap, more, kept) => {
8
- const span = (indices) => indices.reduce((sum, index) => sum + widths[index], 0) + gap * Math.max(0, indices.length - 1);
9
- const all = widths.map((_, index) => index);
10
- // Half a pixel of slack, since a measured width is fractional and the room is not.
11
- if (span(all) <= room + 0.5) {
12
- return all;
8
+ const span = indices => indices.reduce((sum, index) => sum + widths[index], 0) + gap * Math.max(0, indices.length - 1);
9
+ const all = widths.map((_, index) => index);
10
+ // Half a pixel of slack, since a measured width is fractional and the room is not.
11
+ if (span(all) <= room + 0.5) {
12
+ return all;
13
+ }
14
+ const limit = room - more - gap + 0.5;
15
+ const held = all.filter(index => kept.includes(index));
16
+ const shown = [];
17
+ for (const index of all) {
18
+ if (held.includes(index)) {
19
+ continue;
13
20
  }
14
- const limit = room - more - gap + 0.5;
15
- const held = all.filter((index) => kept.includes(index));
16
- const shown = [];
17
- for (const index of all) {
18
- if (held.includes(index)) {
19
- continue;
20
- }
21
- if (span([...held, ...shown, index]) > limit) {
22
- break;
23
- }
24
- shown.push(index);
21
+ if (span([...held, ...shown, index]) > limit) {
22
+ break;
25
23
  }
26
- return [...held, ...shown].sort((left, right) => left - right);
27
- };
24
+ shown.push(index);
25
+ }
26
+ return [...held, ...shown].sort((left, right) => left - right);
27
+ };