@zeyos/zx 4.4.0 → 5.2.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 (252) hide show
  1. package/CHANGELOG.md +447 -0
  2. package/README.md +44 -11
  3. package/dist/types/components/account-menu/account-menu.d.ts +8 -0
  4. package/dist/types/components/activity-list/activity-list.d.ts +31 -1
  5. package/dist/types/components/app-icon/app-icon.d.ts +14 -2
  6. package/dist/types/components/app-sidebar/app-sidebar.d.ts +293 -17
  7. package/dist/types/components/avatar/avatar.d.ts +46 -7
  8. package/dist/types/components/badge/badge.d.ts +21 -1
  9. package/dist/types/components/button/button.d.ts +15 -0
  10. package/dist/types/components/calendar/calendar.d.ts +67 -5
  11. package/dist/types/components/card-view/card-view.d.ts +7 -4
  12. package/dist/types/components/card-view/record-card.d.ts +11 -0
  13. package/dist/types/components/chart/chart.d.ts +10 -0
  14. package/dist/types/components/checklist/checklist.d.ts +9 -0
  15. package/dist/types/components/code-editor/code-editor.d.ts +6 -17
  16. package/dist/types/components/context-menu/context-menu.d.ts +6 -2
  17. package/dist/types/components/data-filter/data-filter.d.ts +4 -4
  18. package/dist/types/components/datebox/date-range-box.d.ts +5 -1
  19. package/dist/types/components/datebox/datebox.d.ts +7 -2
  20. package/dist/types/components/dialog/dialog.d.ts +46 -6
  21. package/dist/types/components/dropdown/dropdown.d.ts +24 -9
  22. package/dist/types/components/entity-ref/entity-ref.d.ts +2 -2
  23. package/dist/types/components/field/field.d.ts +54 -2
  24. package/dist/types/components/fieldset/external-adapter.d.ts +83 -0
  25. package/dist/types/components/fieldset/fieldset.d.ts +26 -1
  26. package/dist/types/components/file-item/file-item.d.ts +34 -6
  27. package/dist/types/components/file-list/file-list.d.ts +35 -3
  28. package/dist/types/components/filter/filter.d.ts +127 -3
  29. package/dist/types/components/filter-panel/filter-panel.d.ts +36 -7
  30. package/dist/types/components/form/form.d.ts +12 -1
  31. package/dist/types/components/kanban-view/kanban-card.d.ts +8 -0
  32. package/dist/types/components/launcher/launcher.d.ts +268 -15
  33. package/dist/types/components/list-toolbar/list-toolbar.d.ts +16 -7
  34. package/dist/types/components/menu-button/menu-button.d.ts +39 -5
  35. package/dist/types/components/message/message.d.ts +132 -17
  36. package/dist/types/components/modal/modal.d.ts +43 -2
  37. package/dist/types/components/module-bar/module-bar.d.ts +395 -0
  38. package/dist/types/components/pagination/pagination.d.ts +17 -3
  39. package/dist/types/components/select/color.d.ts +12 -0
  40. package/dist/types/components/select/glyphs.d.ts +124 -0
  41. package/dist/types/components/select/select.d.ts +17 -3
  42. package/dist/types/components/sheet/sheet.d.ts +15 -0
  43. package/dist/types/components/stat-tile/stat-tile.d.ts +16 -5
  44. package/dist/types/components/tabbox/tabbox.d.ts +9 -0
  45. package/dist/types/components/table/table.d.ts +311 -18
  46. package/dist/types/components/tag-picker/tag-picker.d.ts +21 -4
  47. package/dist/types/components/tree/tree.d.ts +13 -0
  48. package/dist/types/components/view/record-view.d.ts +59 -2
  49. package/dist/types/components/view-settings/view-settings.d.ts +879 -0
  50. package/dist/types/components/workspace-switcher/workspace-switcher.d.ts +327 -0
  51. package/dist/types/core/breakpoint.d.ts +1 -1
  52. package/dist/types/core/component.d.ts +12 -2
  53. package/dist/types/core/i18n.d.ts +27 -3
  54. package/dist/types/core/icons.d.ts +23 -25
  55. package/dist/types/core/keyboard.d.ts +98 -1
  56. package/dist/types/core/messages.d.ts +382 -0
  57. package/dist/types/core/motion.d.ts +59 -0
  58. package/dist/types/core/overlay-host.d.ts +42 -1
  59. package/dist/types/core/overlay-stack.d.ts +260 -0
  60. package/dist/types/index.d.ts +10 -5
  61. package/dist/types/internal/app-rail.d.ts +38 -0
  62. package/dist/types/internal/menu-items.d.ts +71 -3
  63. package/dist/types/zeyos/connect.d.ts +6 -0
  64. package/dist/types/zeyos/form.d.ts +50 -9
  65. package/dist/types/zeyos/index.d.ts +2 -1
  66. package/dist/types/zeyos/launcher.d.ts +9 -0
  67. package/dist/types/zeyos/module-bar.d.ts +176 -0
  68. package/dist/types/zeyos/query.d.ts +110 -5
  69. package/dist/types/zeyos/schema.d.ts +24 -1
  70. package/dist/types/zeyos/table.d.ts +345 -22
  71. package/dist/types/zeyos/view.d.ts +26 -2
  72. package/dist/zx-zeyos.esm.js +6178 -1008
  73. package/dist/zx-zeyos.esm.min.js +53 -5
  74. package/dist/zx.css +2861 -827
  75. package/dist/zx.esm.js +8909 -1480
  76. package/dist/zx.esm.min.js +55 -7
  77. package/dist/zx.global.js +8911 -1482
  78. package/dist/zx.global.min.js +55 -7
  79. package/dist/zx.min.css +1 -1
  80. package/docs/api.json +1079 -117
  81. package/docs/llms.md +956 -154
  82. package/docs/llms.txt +9 -5
  83. package/package.json +1 -1
  84. package/src/components/account-menu/account-menu.css +35 -10
  85. package/src/components/account-menu/account-menu.js +12 -0
  86. package/src/components/activity-item/activity-item.css +1 -1
  87. package/src/components/activity-item/activity-item.js +3 -0
  88. package/src/components/activity-list/activity-list.css +38 -3
  89. package/src/components/activity-list/activity-list.js +61 -1
  90. package/src/components/app-icon/app-icon.css +14 -3
  91. package/src/components/app-icon/app-icon.js +11 -1
  92. package/src/components/app-rail/app-rail.css +59 -79
  93. package/src/components/app-sidebar/app-sidebar.css +304 -168
  94. package/src/components/app-sidebar/app-sidebar.js +667 -46
  95. package/src/components/aurora/aurora.css +5 -3
  96. package/src/components/avatar/avatar.css +32 -7
  97. package/src/components/avatar/avatar.js +72 -8
  98. package/src/components/badge/badge.css +54 -2
  99. package/src/components/badge/badge.js +29 -2
  100. package/src/components/breadcrumb/breadcrumb.css +1 -1
  101. package/src/components/button/button.css +67 -9
  102. package/src/components/button/button.js +38 -0
  103. package/src/components/calendar/calendar.css +47 -47
  104. package/src/components/calendar/calendar.js +26 -52
  105. package/src/components/card/card.css +4 -4
  106. package/src/components/card-view/card-view.css +14 -12
  107. package/src/components/card-view/card-view.js +13 -9
  108. package/src/components/card-view/record-card.js +14 -3
  109. package/src/components/chart/chart.css +4 -1
  110. package/src/components/chart/chart.js +12 -0
  111. package/src/components/check-button/check-button.css +10 -2
  112. package/src/components/checklist/checklist.css +9 -2
  113. package/src/components/checklist/checklist.js +11 -5
  114. package/src/components/checklist/field-adapter.js +3 -1
  115. package/src/components/code-editor/code-editor.css +7 -6
  116. package/src/components/code-editor/code-editor.js +19 -1
  117. package/src/components/code-editor/field-adapter.js +9 -2
  118. package/src/components/context-menu/context-menu.css +9 -4
  119. package/src/components/context-menu/context-menu.js +8 -2
  120. package/src/components/copy/copy-button.css +6 -0
  121. package/src/components/copy/copy-input.css +9 -4
  122. package/src/components/data-filter/data-filter.css +5 -4
  123. package/src/components/data-filter/data-filter.js +2 -2
  124. package/src/components/date-picker/date-picker.css +6 -6
  125. package/src/components/date-picker/date-range-picker.css +3 -3
  126. package/src/components/date-picker/time-picker.css +3 -3
  127. package/src/components/datebox/date-range-box.css +79 -2
  128. package/src/components/datebox/date-range-box.js +13 -2
  129. package/src/components/datebox/datebox.css +79 -2
  130. package/src/components/datebox/datebox.js +13 -2
  131. package/src/components/dialog/dialog.css +26 -0
  132. package/src/components/dialog/dialog.js +99 -17
  133. package/src/components/dock/dock.css +5 -4
  134. package/src/components/dropdown/dropdown.css +1 -1
  135. package/src/components/dropdown/dropdown.js +159 -72
  136. package/src/components/empty-state/empty-state.css +2 -2
  137. package/src/components/entity-ref/entity-ref.css +1 -1
  138. package/src/components/entity-ref/entity-ref.js +1 -1
  139. package/src/components/field/field.css +28 -9
  140. package/src/components/field/field.js +101 -29
  141. package/src/components/field-upload/field-upload.css +1 -1
  142. package/src/components/fieldset/external-adapter.js +363 -0
  143. package/src/components/fieldset/fieldset.css +5 -3
  144. package/src/components/fieldset/fieldset.js +38 -64
  145. package/src/components/file-item/file-item.js +144 -10
  146. package/src/components/file-list/file-list.js +144 -21
  147. package/src/components/filter/filter.css +86 -2
  148. package/src/components/filter/filter.js +307 -11
  149. package/src/components/filter-panel/filter-panel.css +1 -1
  150. package/src/components/filter-panel/filter-panel.js +149 -32
  151. package/src/components/finder/finder.css +16 -14
  152. package/src/components/form/form.css +5 -4
  153. package/src/components/form/form.js +11 -2
  154. package/src/components/grid/grid.css +1 -1
  155. package/src/components/groupbox/groupbox.css +1 -1
  156. package/src/components/kanban-view/kanban-card.js +11 -3
  157. package/src/components/kanban-view/kanban-view.css +42 -18
  158. package/src/components/kanban-view/kanban-view.js +9 -6
  159. package/src/components/launcher/launcher.css +108 -26
  160. package/src/components/launcher/launcher.js +530 -42
  161. package/src/components/list-toolbar/list-toolbar.css +13 -8
  162. package/src/components/list-toolbar/list-toolbar.js +40 -14
  163. package/src/components/master-panel/master-panel.css +2 -0
  164. package/src/components/master-panel/master-panel.js +0 -1
  165. package/src/components/menu-button/menu-button.css +72 -4
  166. package/src/components/menu-button/menu-button.js +160 -18
  167. package/src/components/message/message.css +33 -3
  168. package/src/components/message/message.js +264 -22
  169. package/src/components/modal/modal.css +1 -1
  170. package/src/components/modal/modal.js +83 -15
  171. package/src/components/module-bar/module-bar.css +486 -0
  172. package/src/components/module-bar/module-bar.js +1074 -0
  173. package/src/components/multi-value-editor/multi-value-editor.css +1 -1
  174. package/src/components/navigation-bar/navigation-bar.css +18 -9
  175. package/src/components/number-field/field-adapter.js +3 -1
  176. package/src/components/number-field/number-field.css +70 -0
  177. package/src/components/number-field/number-field.js +2 -0
  178. package/src/components/pagination/pagination.css +13 -11
  179. package/src/components/pagination/pagination.js +20 -4
  180. package/src/components/panel/panel.css +4 -3
  181. package/src/components/questionnaire/questionnaire.css +4 -4
  182. package/src/components/rating/field-adapter.js +2 -1
  183. package/src/components/rating/rating.css +8 -1
  184. package/src/components/search/search.css +4 -1
  185. package/src/components/select/color.js +22 -0
  186. package/src/components/select/field-adapter.js +2 -0
  187. package/src/components/select/glyphs.js +165 -0
  188. package/src/components/select/select.css +138 -45
  189. package/src/components/select/select.js +92 -47
  190. package/src/components/sheet/sheet.css +12 -9
  191. package/src/components/sheet/sheet.js +74 -32
  192. package/src/components/slider/field-adapter.js +6 -1
  193. package/src/components/slider/slider.css +18 -4
  194. package/src/components/slider/slider.js +1 -1
  195. package/src/components/sort-control/sort-control.css +4 -1
  196. package/src/components/split-view/split-view.css +1 -1
  197. package/src/components/stat-tile/stat-tile.css +42 -47
  198. package/src/components/stat-tile/stat-tile.js +17 -6
  199. package/src/components/stepper/stepper.css +1 -1
  200. package/src/components/tabbox/tabbox.css +41 -32
  201. package/src/components/tabbox/tabbox.js +5 -1
  202. package/src/components/table/table.css +187 -37
  203. package/src/components/table/table.js +718 -73
  204. package/src/components/tag-picker/field-adapter.js +2 -1
  205. package/src/components/tag-picker/tag-picker.css +83 -5
  206. package/src/components/tag-picker/tag-picker.js +25 -8
  207. package/src/components/timebox/timebox.css +22 -2
  208. package/src/components/toggle/toggle.css +12 -1
  209. package/src/components/toolbar/toolbar.js +2 -2
  210. package/src/components/tooltip/tooltip.css +4 -0
  211. package/src/components/tooltip/tooltip.js +44 -19
  212. package/src/components/tree/tree.css +26 -17
  213. package/src/components/tree/tree.js +31 -0
  214. package/src/components/value-list/value-list.css +3 -3
  215. package/src/components/view/record-view.css +1 -1
  216. package/src/components/view/record-view.js +178 -18
  217. package/src/components/view-settings/view-settings.css +285 -0
  218. package/src/components/view-settings/view-settings.js +1830 -0
  219. package/src/components/workspace-switcher/workspace-switcher.css +188 -0
  220. package/src/components/workspace-switcher/workspace-switcher.js +463 -0
  221. package/src/core/breakpoint.js +1 -1
  222. package/src/core/component.js +88 -17
  223. package/src/core/fontawesome.js +5 -1
  224. package/src/core/i18n.js +47 -4
  225. package/src/core/icons.js +204 -61
  226. package/src/core/keyboard.js +206 -11
  227. package/src/core/messages.js +427 -0
  228. package/src/core/motion.js +147 -0
  229. package/src/core/overlay-host.js +77 -3
  230. package/src/core/overlay-stack.js +487 -0
  231. package/src/core/position.js +22 -3
  232. package/src/index.js +10 -5
  233. package/src/internal/app-rail.js +135 -55
  234. package/src/internal/menu-items.js +61 -3
  235. package/src/zeyos/connect.js +6 -2
  236. package/src/zeyos/form.js +69 -27
  237. package/src/zeyos/index.js +4 -1
  238. package/src/zeyos/launcher.js +8 -3
  239. package/src/zeyos/module-bar.js +181 -0
  240. package/src/zeyos/query.js +197 -13
  241. package/src/zeyos/schema.js +144 -27
  242. package/src/zeyos/table.js +287 -84
  243. package/src/zeyos/view.js +49 -93
  244. package/styles/base.css +72 -1
  245. package/styles/icons.css +11 -1
  246. package/styles/print.css +1 -1
  247. package/styles/tokens/dark.css +117 -37
  248. package/styles/tokens/global.css +121 -27
  249. package/styles/tokens/semantic.css +140 -43
  250. package/styles/tokens/themes.css +7 -6
  251. package/styles/zx.css +3 -1
  252. package/styles/tokens/density.css +0 -9
@@ -434,10 +434,11 @@ export class KanbanView extends RecordView {
434
434
 
435
435
  this._toolbar = h('div', { class: 'zx-record-view__toolbar zx-kanban-view__toolbar' });
436
436
  // A label the host passed in the object form wins; otherwise Kanban's own
437
- // message bag supplies it, which is where this label has always come from.
437
+ // message bag supplies it, which is where this label has always come from. Mounted through
438
+ // the shared path so `fieldControls.target` places it in a host element, as in every view.
438
439
  if (options.fieldControls) {
439
440
  const configured = normalizeViewFieldControls(options.fieldControls).label;
440
- this._toolbar.append(this._createViewFieldControls(configured ?? this._text('fields')));
441
+ this._mountViewFieldControls(this._toolbar, configured ?? this._text('fields'));
441
442
  }
442
443
  if (options.searchControl) this._toolbar.append(this._createSearchControl());
443
444
  if (options.historyControls) this._toolbar.append(this._createHistoryControls());
@@ -468,6 +469,8 @@ export class KanbanView extends RecordView {
468
469
  if (options.contextMenu) this._createContextMenu();
469
470
  return root;
470
471
  } catch (error) {
472
+ // An external `fieldControls.target` must not keep a chooser whose view never came to be.
473
+ this._removeViewFieldControls();
471
474
  if (this._kanbanSnapshot) restoreTarget(root, this._kanbanSnapshot);
472
475
  throw error;
473
476
  }
@@ -1742,12 +1745,12 @@ export class KanbanView extends RecordView {
1742
1745
  /** @returns {HTMLElement} Built-in history controls. */
1743
1746
  _createHistoryControls() {
1744
1747
  this._undoButton = /** @type {HTMLButtonElement} */ (h('button', {
1745
- class: 'zx-button zx-button--sm', type: 'button', disabled: true,
1746
- dataset: { kanbanHistory: 'undo' }
1748
+ class: 'zx-btn', type: 'button', disabled: true,
1749
+ dataset: { kanbanHistory: 'undo', size: 'sm', kind: 'ghost' }
1747
1750
  }, this._text('undo')));
1748
1751
  this._redoButton = /** @type {HTMLButtonElement} */ (h('button', {
1749
- class: 'zx-button zx-button--sm', type: 'button', disabled: true,
1750
- dataset: { kanbanHistory: 'redo' }
1752
+ class: 'zx-btn', type: 'button', disabled: true,
1753
+ dataset: { kanbanHistory: 'redo', size: 'sm', kind: 'ghost' }
1751
1754
  }, this._text('redo')));
1752
1755
  const group = h('div', { class: 'zx-kanban-view__history', role: 'group' },
1753
1756
  this._undoButton, this._redoButton);
@@ -2,7 +2,7 @@
2
2
  inline-size: min(760px, calc(100vw - (2 * var(--zx-space-4))));
3
3
  max-block-size: min(720px, calc(100vh - (2 * var(--zx-space-6))));
4
4
  border: 1px solid var(--zx-color-overlay-border);
5
- border-radius: var(--zx-radius-xl);
5
+ border-radius: var(--zx-radius-lg);
6
6
  background-color: var(--zx-color-overlay-panel);
7
7
  background-image: var(--zx-overlay-panel-image);
8
8
  background-clip: padding-box;
@@ -29,27 +29,63 @@
29
29
 
30
30
  .zx-launcher__surface {
31
31
  display: grid;
32
+ /* One column no wider than the dialog: a long page chip or a wide row shrinks inside it rather
33
+ than pushing the close button off a phone screen. */
34
+ grid-template-columns: minmax(0, 1fr);
32
35
  grid-template-rows: auto auto minmax(0, 1fr) auto;
33
36
  max-block-size: inherit;
34
37
  }
35
38
 
36
39
  .zx-launcher__search {
37
- display: grid;
38
- grid-template-columns: auto minmax(0, 1fr) auto auto;
40
+ display: flex;
39
41
  align-items: center;
40
42
  gap: var(--zx-space-3);
41
43
  border-block-end: 1px solid var(--zx-color-overlay-divider);
42
44
  padding: var(--zx-space-3) var(--zx-space-4);
43
45
  }
44
46
 
45
- .zx-launcher__search[data-shortcut="false"] {
46
- grid-template-columns: auto minmax(0, 1fr) auto;
47
+ .zx-launcher__search > .zx-icon {
48
+ flex: none;
49
+ }
50
+
51
+ /* The page you are on, before the query: where you are, so neutral rather than accent. Its × is
52
+ one step back. */
53
+ .zx-launcher__scope {
54
+ display: inline-flex;
55
+ flex: 0 1 auto;
56
+ align-items: center;
57
+ gap: var(--zx-space-1);
58
+ min-inline-size: 0;
59
+ max-inline-size: 50%;
60
+ border-radius: var(--zx-radius-sm);
61
+ background: var(--zx-color-bg-current);
62
+ padding-inline: var(--zx-space-2) 2px;
63
+ color: var(--zx-color-text);
64
+ font-size: var(--zx-text-sm);
65
+ font-weight: var(--zx-weight-medium);
66
+ line-height: 1.5;
67
+ white-space: nowrap;
68
+ }
69
+
70
+ .zx-launcher__scope[hidden] { display: none; }
71
+
72
+ .zx-launcher__scope-label {
73
+ overflow: hidden;
74
+ text-overflow: ellipsis;
75
+ }
76
+
77
+ /* A 24px target (WCAG 2.5.8); the chip's own padding stays slim beside it. */
78
+ .zx-launcher__scope .zx-launcher__scope-back {
79
+ inline-size: 24px;
80
+ block-size: 24px;
47
81
  }
48
82
 
49
83
  .zx-launcher__input {
84
+ /* The query yields its room first; the chip keeps its label until it reaches its cap. */
85
+ flex: 1 1 0;
50
86
  min-inline-size: 0;
51
87
  border: 0;
52
- outline: 0;
88
+ outline-color: transparent;
53
89
  background: transparent;
54
90
  color: inherit;
55
91
  font-size: var(--zx-text-lg);
@@ -62,7 +98,8 @@
62
98
  .zx-launcher__input::-webkit-search-cancel-button { display: none; }
63
99
 
64
100
  .zx-launcher__shortcut,
65
- .zx-launcher__hints kbd {
101
+ .zx-launcher__hints kbd,
102
+ .zx-launcher__key {
66
103
  border: 1px solid var(--zx-color-border-control);
67
104
  border-radius: var(--zx-radius-sm);
68
105
  background: var(--zx-color-bg-muted);
@@ -74,6 +111,7 @@
74
111
  }
75
112
 
76
113
  .zx-launcher__shortcut {
114
+ flex: none;
77
115
  padding-inline: var(--zx-space-2);
78
116
  white-space: nowrap;
79
117
  }
@@ -90,16 +128,16 @@
90
128
  .zx-launcher__results {
91
129
  min-block-size: 0;
92
130
  overflow: auto;
93
- padding: var(--zx-space-2);
131
+ padding: var(--zx-space-1);
94
132
  }
95
133
 
134
+ /* A caption above its rows, never taller than one of them; inset like the rows so the label and
135
+ the labels under it start on one line. */
96
136
  .zx-launcher__group-label {
97
- padding: var(--zx-space-3) var(--zx-space-3) var(--zx-space-1);
137
+ padding: var(--zx-space-2) var(--zx-space-3) var(--zx-space-1);
98
138
  color: var(--zx-color-text-muted);
99
139
  font-size: var(--zx-text-xs);
100
- font-weight: 700;
101
- letter-spacing: .04em;
102
- text-transform: uppercase;
140
+ font-weight: var(--zx-weight-semibold);
103
141
  }
104
142
 
105
143
  .zx-launcher__group[data-layout="grid"] {
@@ -119,11 +157,11 @@
119
157
  align-items: center;
120
158
  gap: var(--zx-space-3);
121
159
  inline-size: 100%;
122
- min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
160
+ min-block-size: var(--zx-control-height);
123
161
  border: 0;
124
- border-radius: var(--zx-radius-md);
162
+ border-radius: var(--zx-radius-sm);
125
163
  background: transparent;
126
- padding: var(--zx-space-2) var(--zx-space-3);
164
+ padding: var(--zx-space-1) var(--zx-space-3);
127
165
  color: inherit;
128
166
  text-align: start;
129
167
  text-decoration: none;
@@ -134,9 +172,15 @@
134
172
  background: var(--zx-color-overlay-hover);
135
173
  }
136
174
 
175
+ /* The application you are in is where you are, not a pick: the neutral current fill and a
176
+ heavier label. The highlighted row stays the lighter hover step. */
137
177
  .zx-launcher__option[aria-current="page"] {
138
- background: var(--zx-color-overlay-selected);
139
- color: var(--zx-color-accent);
178
+ background: var(--zx-color-bg-current);
179
+ color: var(--zx-color-text);
180
+ }
181
+
182
+ .zx-launcher__option[aria-current="page"] .zx-launcher__label {
183
+ font-weight: var(--zx-weight-semibold);
140
184
  }
141
185
 
142
186
  .zx-launcher__option[data-kind="application"] {
@@ -145,12 +189,13 @@
145
189
  justify-items: center;
146
190
  align-content: center;
147
191
  min-block-size: 92px;
192
+ border-radius: var(--zx-radius-md);
148
193
  padding: var(--zx-space-3) var(--zx-space-2);
149
194
  text-align: center;
150
195
  }
151
196
 
152
197
  .zx-launcher__option[data-kind="application"][aria-current="page"] {
153
- background: var(--zx-color-overlay-selected);
198
+ background: var(--zx-color-bg-current);
154
199
  }
155
200
 
156
201
  .zx-launcher__option[data-kind="application"] .zx-launcher__icon {
@@ -162,8 +207,9 @@
162
207
  inline-size: 100%;
163
208
  }
164
209
 
165
- .zx-launcher__option[data-kind="application"] .zx-launcher__description,
166
- .zx-launcher__option[data-kind="application"] .zx-launcher__badge {
210
+ .zx-launcher__option[data-kind="application"] :is(
211
+ .zx-launcher__description, .zx-launcher__badge, .zx-launcher__hint, .zx-launcher__keys, .zx-launcher__chevron
212
+ ) {
167
213
  display: none;
168
214
  }
169
215
 
@@ -179,10 +225,47 @@
179
225
 
180
226
  .zx-launcher__icon { display: inline-flex; flex: none; }
181
227
  .zx-launcher__copy { display: grid; min-inline-size: 0; gap: 2px; }
182
- .zx-launcher__label { overflow: hidden; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
228
+ .zx-launcher__label { overflow: hidden; font-weight: var(--zx-weight-medium); text-overflow: ellipsis; white-space: nowrap; }
183
229
  .zx-launcher__description { overflow: hidden; color: var(--zx-color-text-muted); font-size: var(--zx-text-sm); text-overflow: ellipsis; white-space: nowrap; }
184
230
  .zx-launcher__badge { margin-inline-start: auto; color: var(--zx-color-text-muted); font-size: var(--zx-text-xs); }
185
231
 
232
+ /* A row's copy takes the room; what trails it (badge, hint, key caps, the page chevron) sits at
233
+ the end in that order. */
234
+ .zx-launcher__option:not([data-kind="application"]) .zx-launcher__copy { flex: 1 1 auto; }
235
+
236
+ .zx-launcher__hint {
237
+ flex: 0 1 auto;
238
+ min-inline-size: 0;
239
+ max-inline-size: 40%;
240
+ overflow: hidden;
241
+ color: var(--zx-color-text-muted);
242
+ font-size: var(--zx-text-sm);
243
+ text-overflow: ellipsis;
244
+ white-space: nowrap;
245
+ }
246
+
247
+ .zx-launcher__keys {
248
+ display: inline-flex;
249
+ flex: none;
250
+ gap: var(--zx-space-1);
251
+ }
252
+
253
+ .zx-launcher__chevron {
254
+ display: inline-flex;
255
+ flex: none;
256
+ color: var(--zx-color-text-subtle);
257
+ }
258
+
259
+ /* Spoken, not drawn: where a page change landed. */
260
+ .zx-launcher__announce {
261
+ position: absolute;
262
+ inline-size: 1px;
263
+ block-size: 1px;
264
+ overflow: hidden;
265
+ clip-path: inset(50%);
266
+ white-space: nowrap;
267
+ }
268
+
186
269
  .zx-launcher__hints {
187
270
  display: flex;
188
271
  flex-wrap: wrap;
@@ -200,7 +283,10 @@
200
283
  gap: var(--zx-space-1);
201
284
  }
202
285
 
203
- .zx-launcher__hints kbd {
286
+ .zx-launcher__hints span[hidden] { display: none; }
287
+
288
+ .zx-launcher__hints kbd,
289
+ .zx-launcher__key {
204
290
  min-inline-size: 1.5rem;
205
291
  padding-inline: 4px;
206
292
  text-align: center;
@@ -215,10 +301,6 @@
215
301
  display: none;
216
302
  }
217
303
 
218
- .zx-launcher__search {
219
- grid-template-columns: auto minmax(0, 1fr) auto;
220
- }
221
-
222
304
  .zx-launcher__hints {
223
305
  justify-content: center;
224
306
  }