@zeyos/zx 4.3.4 → 5.0.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 (231) hide show
  1. package/CHANGELOG.md +438 -0
  2. package/README.md +49 -10
  3. package/dist/types/components/activity-item/activity-item.d.ts +351 -0
  4. package/dist/types/components/activity-list/activity-list.d.ts +217 -0
  5. package/dist/types/components/app-sidebar/app-sidebar.d.ts +33 -3
  6. package/dist/types/components/avatar/avatar.d.ts +46 -7
  7. package/dist/types/components/badge/badge.d.ts +21 -1
  8. package/dist/types/components/button/button.d.ts +23 -0
  9. package/dist/types/components/calendar/calendar.d.ts +19 -0
  10. package/dist/types/components/card/card.d.ts +7 -0
  11. package/dist/types/components/card-view/card-view.d.ts +11 -3
  12. package/dist/types/components/card-view/record-card.d.ts +7 -1
  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 +149 -0
  16. package/dist/types/components/code-editor/field-adapter.d.ts +5 -0
  17. package/dist/types/components/context-menu/context-menu.d.ts +18 -2
  18. package/dist/types/components/date-picker/date-picker.d.ts +8 -0
  19. package/dist/types/components/date-picker/time-picker.d.ts +7 -0
  20. package/dist/types/components/datebox/date-range-box.d.ts +5 -1
  21. package/dist/types/components/datebox/datebox.d.ts +7 -2
  22. package/dist/types/components/dialog/dialog.d.ts +75 -6
  23. package/dist/types/components/dropdown/dropdown.d.ts +2 -2
  24. package/dist/types/components/entity-ref/entity-ref.d.ts +331 -0
  25. package/dist/types/components/field/field.d.ts +24 -2
  26. package/dist/types/components/fieldset/fieldset.d.ts +19 -1
  27. package/dist/types/components/file-item/file-item.d.ts +262 -0
  28. package/dist/types/components/file-list/file-list.d.ts +171 -0
  29. package/dist/types/components/filter/filter.d.ts +91 -36
  30. package/dist/types/components/filter-panel/filter-panel.d.ts +449 -0
  31. package/dist/types/components/form/form.d.ts +12 -1
  32. package/dist/types/components/kanban-view/kanban-card.d.ts +146 -0
  33. package/dist/types/components/kanban-view/kanban-view.d.ts +170 -4
  34. package/dist/types/components/launcher/launcher.d.ts +278 -26
  35. package/dist/types/components/list-toolbar/list-toolbar.d.ts +599 -0
  36. package/dist/types/components/menu-button/menu-button.d.ts +37 -42
  37. package/dist/types/components/message/message.d.ts +126 -17
  38. package/dist/types/components/modal/modal.d.ts +61 -2
  39. package/dist/types/components/navigation-bar/navigation-bar.d.ts +105 -21
  40. package/dist/types/components/panel/panel.d.ts +7 -0
  41. package/dist/types/components/search/search.d.ts +7 -0
  42. package/dist/types/components/select/color.d.ts +12 -0
  43. package/dist/types/components/select/glyphs.d.ts +124 -0
  44. package/dist/types/components/select/select.d.ts +15 -3
  45. package/dist/types/components/sort-control/sort-control.d.ts +105 -0
  46. package/dist/types/components/stat-tile/stat-tile.d.ts +288 -0
  47. package/dist/types/components/tabbox/tabbox.d.ts +16 -0
  48. package/dist/types/components/table/table.d.ts +190 -1
  49. package/dist/types/components/table-view/table-view.d.ts +11 -5
  50. package/dist/types/components/tag-picker/tag-picker.d.ts +21 -4
  51. package/dist/types/components/timebox/timebox.d.ts +7 -0
  52. package/dist/types/components/tree/tree.d.ts +13 -0
  53. package/dist/types/components/value-list/value-list.d.ts +8 -0
  54. package/dist/types/components/view/record-view.d.ts +96 -5
  55. package/dist/types/core/breakpoint.d.ts +1 -1
  56. package/dist/types/core/icons.d.ts +37 -22
  57. package/dist/types/core/motion.d.ts +59 -0
  58. package/dist/types/core/overlay-host.d.ts +15 -1
  59. package/dist/types/index.d.ts +16 -3
  60. package/dist/types/internal/app-rail.d.ts +10 -0
  61. package/dist/types/internal/menu-items.d.ts +134 -0
  62. package/dist/types/zeyos/connect.d.ts +6 -0
  63. package/dist/types/zeyos/form.d.ts +50 -9
  64. package/dist/types/zeyos/index.d.ts +1 -1
  65. package/dist/types/zeyos/query.d.ts +79 -0
  66. package/dist/types/zeyos/schema.d.ts +24 -1
  67. package/dist/types/zeyos/table.d.ts +100 -14
  68. package/dist/types/zeyos/view.d.ts +10 -0
  69. package/dist/zx-zeyos.esm.js +2206 -489
  70. package/dist/zx-zeyos.esm.min.js +56 -1
  71. package/dist/zx.css +3322 -724
  72. package/dist/zx.esm.js +12244 -5809
  73. package/dist/zx.esm.min.js +58 -3
  74. package/dist/zx.global.js +12246 -5811
  75. package/dist/zx.global.min.js +58 -3
  76. package/dist/zx.min.css +1 -1
  77. package/docs/api.json +1683 -146
  78. package/docs/llms.md +777 -110
  79. package/docs/llms.txt +14 -8
  80. package/package.json +1 -1
  81. package/src/components/account-menu/account-menu.css +35 -10
  82. package/src/components/activity-item/activity-item.css +137 -0
  83. package/src/components/activity-item/activity-item.js +602 -0
  84. package/src/components/activity-list/activity-list.css +99 -0
  85. package/src/components/activity-list/activity-list.js +409 -0
  86. package/src/components/app-icon/app-icon.css +1 -1
  87. package/src/components/app-rail/app-rail.css +191 -22
  88. package/src/components/app-sidebar/app-sidebar.css +349 -24
  89. package/src/components/app-sidebar/app-sidebar.js +86 -11
  90. package/src/components/aurora/aurora.css +5 -3
  91. package/src/components/avatar/avatar.css +32 -7
  92. package/src/components/avatar/avatar.js +72 -8
  93. package/src/components/badge/badge.css +54 -2
  94. package/src/components/badge/badge.js +29 -2
  95. package/src/components/button/button.css +74 -8
  96. package/src/components/button/button.js +44 -1
  97. package/src/components/calendar/calendar.css +46 -46
  98. package/src/components/calendar/calendar.js +33 -3
  99. package/src/components/card/card.css +2 -2
  100. package/src/components/card/card.js +12 -1
  101. package/src/components/card-view/card-view.css +10 -7
  102. package/src/components/card-view/card-view.js +25 -9
  103. package/src/components/card-view/record-card.js +7 -3
  104. package/src/components/chart/chart.css +4 -1
  105. package/src/components/chart/chart.js +12 -0
  106. package/src/components/check-button/check-button.css +10 -2
  107. package/src/components/checklist/checklist.css +9 -2
  108. package/src/components/checklist/checklist.js +11 -5
  109. package/src/components/checklist/field-adapter.js +3 -1
  110. package/src/components/code-editor/code-editor.css +68 -0
  111. package/src/components/code-editor/code-editor.js +306 -0
  112. package/src/components/code-editor/field-adapter.js +34 -0
  113. package/src/components/context-menu/context-menu.css +87 -5
  114. package/src/components/context-menu/context-menu.js +22 -30
  115. package/src/components/copy/copy-button.css +6 -0
  116. package/src/components/copy/copy-input.css +8 -3
  117. package/src/components/data-filter/data-filter.css +5 -4
  118. package/src/components/date-picker/date-picker.css +6 -6
  119. package/src/components/date-picker/date-picker.js +22 -8
  120. package/src/components/date-picker/date-range-picker.css +3 -3
  121. package/src/components/date-picker/month-picker.js +3 -3
  122. package/src/components/date-picker/time-picker.css +1 -1
  123. package/src/components/date-picker/time-picker.js +20 -8
  124. package/src/components/datebox/date-range-box.css +79 -2
  125. package/src/components/datebox/date-range-box.js +13 -2
  126. package/src/components/datebox/datebox.css +79 -2
  127. package/src/components/datebox/datebox.js +13 -2
  128. package/src/components/dialog/dialog.css +26 -0
  129. package/src/components/dialog/dialog.js +174 -70
  130. package/src/components/dropdown/dropdown.css +1 -1
  131. package/src/components/dropdown/dropdown.js +7 -5
  132. package/src/components/empty-state/empty-state.css +2 -2
  133. package/src/components/entity-ref/entity-ref.css +182 -0
  134. package/src/components/entity-ref/entity-ref.js +496 -0
  135. package/src/components/field/field.css +28 -9
  136. package/src/components/field/field.js +68 -26
  137. package/src/components/field-upload/field-upload.css +1 -1
  138. package/src/components/fieldset/fieldset.css +5 -3
  139. package/src/components/fieldset/fieldset.js +28 -5
  140. package/src/components/file-item/file-item.css +88 -0
  141. package/src/components/file-item/file-item.js +505 -0
  142. package/src/components/file-list/file-list.css +51 -0
  143. package/src/components/file-list/file-list.js +320 -0
  144. package/src/components/filter/filter.css +27 -1
  145. package/src/components/filter/filter.js +205 -47
  146. package/src/components/filter-panel/filter-panel.css +104 -0
  147. package/src/components/filter-panel/filter-panel.js +964 -0
  148. package/src/components/finder/finder.css +15 -13
  149. package/src/components/form/form.css +5 -4
  150. package/src/components/form/form.js +11 -2
  151. package/src/components/grid/grid.css +1 -1
  152. package/src/components/groupbox/groupbox.css +1 -1
  153. package/src/components/kanban-view/kanban-card.js +247 -0
  154. package/src/components/kanban-view/kanban-view.css +226 -8
  155. package/src/components/kanban-view/kanban-view.js +255 -12
  156. package/src/components/launcher/launcher.css +107 -25
  157. package/src/components/launcher/launcher.js +557 -63
  158. package/src/components/list-toolbar/list-toolbar.css +194 -0
  159. package/src/components/list-toolbar/list-toolbar.js +851 -0
  160. package/src/components/master-panel/master-panel.css +2 -0
  161. package/src/components/menu-button/menu-button.css +87 -5
  162. package/src/components/menu-button/menu-button.js +86 -46
  163. package/src/components/message/message.css +38 -5
  164. package/src/components/message/message.js +230 -17
  165. package/src/components/modal/modal.css +15 -0
  166. package/src/components/modal/modal.js +159 -3
  167. package/src/components/navigation-bar/navigation-bar.css +95 -11
  168. package/src/components/navigation-bar/navigation-bar.js +171 -4
  169. package/src/components/number-field/field-adapter.js +1 -0
  170. package/src/components/number-field/number-field.css +70 -0
  171. package/src/components/number-field/number-field.js +2 -0
  172. package/src/components/pagination/pagination.css +8 -6
  173. package/src/components/panel/panel.css +1 -1
  174. package/src/components/panel/panel.js +13 -2
  175. package/src/components/rating/rating.css +7 -0
  176. package/src/components/search/search.js +17 -5
  177. package/src/components/select/color.js +22 -0
  178. package/src/components/select/field-adapter.js +6 -1
  179. package/src/components/select/glyphs.js +165 -0
  180. package/src/components/select/select.css +138 -45
  181. package/src/components/select/select.js +86 -47
  182. package/src/components/sheet/sheet.css +11 -8
  183. package/src/components/slider/slider.css +16 -2
  184. package/src/components/slider/slider.js +1 -1
  185. package/src/components/sort-control/sort-control.css +20 -0
  186. package/src/components/sort-control/sort-control.js +140 -0
  187. package/src/components/stat-tile/stat-tile.css +208 -0
  188. package/src/components/stat-tile/stat-tile.js +601 -0
  189. package/src/components/tabbox/tabbox.css +32 -27
  190. package/src/components/tabbox/tabbox.js +17 -2
  191. package/src/components/table/table.css +155 -31
  192. package/src/components/table/table.js +386 -33
  193. package/src/components/table-view/table-view.css +8 -2
  194. package/src/components/table-view/table-view.js +21 -6
  195. package/src/components/tag-picker/tag-picker.css +86 -6
  196. package/src/components/tag-picker/tag-picker.js +25 -8
  197. package/src/components/timebox/timebox.css +22 -2
  198. package/src/components/timebox/timebox.js +18 -5
  199. package/src/components/toggle/toggle.css +12 -1
  200. package/src/components/toolbar/toolbar.js +2 -2
  201. package/src/components/tooltip/tooltip.css +4 -0
  202. package/src/components/tooltip/tooltip.js +10 -3
  203. package/src/components/tree/tree.css +25 -16
  204. package/src/components/tree/tree.js +31 -0
  205. package/src/components/value-list/value-list.css +3 -3
  206. package/src/components/value-list/value-list.js +22 -6
  207. package/src/components/view/record-view.css +5 -0
  208. package/src/components/view/record-view.js +100 -7
  209. package/src/core/breakpoint.js +1 -1
  210. package/src/core/icons.js +259 -57
  211. package/src/core/motion.js +147 -0
  212. package/src/core/overlay-host.js +21 -2
  213. package/src/index.js +30 -3
  214. package/src/internal/app-rail.js +18 -1
  215. package/src/internal/menu-items.js +142 -0
  216. package/src/zeyos/connect.js +6 -2
  217. package/src/zeyos/form.js +67 -27
  218. package/src/zeyos/index.js +1 -1
  219. package/src/zeyos/query.js +153 -0
  220. package/src/zeyos/schema.js +144 -27
  221. package/src/zeyos/table.js +68 -5
  222. package/src/zeyos/view.js +6 -0
  223. package/styles/base.css +56 -0
  224. package/styles/icons.css +11 -1
  225. package/styles/print.css +192 -0
  226. package/styles/tokens/dark.css +113 -37
  227. package/styles/tokens/global.css +121 -27
  228. package/styles/tokens/semantic.css +100 -31
  229. package/styles/tokens/themes.css +7 -6
  230. package/styles/zx.css +11 -1
  231. package/styles/tokens/density.css +0 -9
package/docs/llms.txt CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  > Xenon is a dependency-free design system for browser applications; Zx is its product-agnostic
4
4
  > vanilla-JavaScript implementation. ES2022 modules, WAI-ARIA-accessible native
5
- > controls, semantic `--zx-*` design tokens with light/dark/density theming, and lifecycle-safe
6
- > components. Source modules run directly in the browser; a build step emits ESM, IIFE-global,
5
+ > controls, semantic `--zx-*` design tokens with light/dark theming and one token-driven geometry,
6
+ > and lifecycle-safe components. Source modules run directly in the browser; a build step emits ESM, IIFE-global,
7
7
  > ZeyOS binding, and CSS bundles. Zero runtime dependencies.
8
8
 
9
9
  Instantiate every component as `new Component(target, options)` where `target` is an Element, a
@@ -26,16 +26,22 @@ exports and as `window.zx.*`.
26
26
  `copyButton()`/`CopyInput`, `DatePicker`, `MonthPicker`, `TimePicker`,
27
27
  `Datebox`/`DateTimeBox`, `DateRangePicker`/`DateRangeBox`, `Timebox`.
28
28
  - Overlays: `Message` (toasts/inline/progress), `Modal`, `Dialog` (+ `alert`/`confirm`/`prompt` Promises), `Sheet` (edge-anchored Dialog; `side`, `modal: true|'trap-focus'|false`, `backdrop`, `snap` detents, swipe-to-dismiss), `SheetStack` (drill-down; `stack`/`cascade`), `Dropdown`, `MenuButton`, `ContextMenu` (right-click; `selector` for per-row menus), `Tooltip`/`tooltip()`/`describe()`.
29
- - Data: `Table` (sortable, selectable, sticky header, opt-in inline cell/row editing, row reorder,
29
+ - Data: `EntityRef` (dense linked/static identity), `FileItem`/`FileList` (durable and transient
30
+ file presentation), `ActivityItem`/`ActivityList` (chronological entries and grouped feeds),
31
+ `Table` (sortable, selectable, sticky header, opt-in inline cell/row editing, row reorder,
30
32
  column visibility), shared `RecordView` state through `TableView`, `CardView`, and `KanbanView`,
31
33
  `Grid` with single-click editing and `Grid.BillingItems()`, engine-neutral
32
34
  `Chart` with injected `ChartJsAdapter`, `Calendar` (agenda/day/week/month/year, pointer/keyboard
33
35
  drag and resize, `optimistic: true|false`), backend-neutral nested `Filter`, simple client-side
34
- `DataFilter`, `Pagination` (+ pure `paginationRange()`), `TreeView` (APG tree),
35
- `Finder` (Miller columns).
36
- - Forms: `Form`, `Fieldset`, `Questionnaire` (guided one-question-at-a-time flow with branching), `Field` (type registry), `ValueList`, `MultiValueEditor`, `FieldUpload`.
36
+ `DataFilter`, `FilterPanel` (typed filter form built from a server's own field metadata;
37
+ `mode: 'draft'|'live'`, `serialize`), `ListToolbar` (search, live result count, view switch, and
38
+ tools whose badge is part of the accessible name), `Pagination` (+ pure `paginationRange()`),
39
+ `SortControl` (searchable field selector with a direction toggle, one atomic `{id,dir}`),
40
+ `TreeView` (APG tree), `Finder` (Miller columns).
41
+ - Forms: `Form`, `Fieldset`, `Questionnaire` (guided one-question-at-a-time flow with branching), `Field` (type registry), `CodeEditor` (structured text in a native textarea; never executes or injects the value), `ValueList`, `MultiValueEditor`, `FieldUpload`.
37
42
  - Layout: `stack()`/`grid()`/`aspect()` (spacing, an intrinsically reflowing grid, a fixed-ratio
38
- box), `Groupbox`, `Card` (media/title link/actions/footer), `AppIcon` (generic tile geometry;
43
+ box), `Groupbox`, `Card` (media/title link/actions/footer), `StatTile`/`statTile()` (labelled
44
+ metric with optional delta, sparkline, and loading state), `AppIcon` (generic tile geometry;
39
45
  circular `zeyosAppIcon()` application presets and compact `moduleChip()` identities),
40
46
  `Aurora` (one- to four-colour ambient
41
47
  canvas light; shared material roles govern chrome and overlays), `Avatar`, `Panel` (header/footer action
@@ -50,7 +56,7 @@ exports and as `window.zx.*`.
50
56
  - Helpers: `formatNumber`/`formatCurrency`/`formatPercent`/`formatFileSize`/`formatRelativeTime` (locale-aware, cached `Intl`), `debounce`/`throttle`, `groupBy`/`sortBy`/`uniqueBy`, `escapeRegExp`/`highlightMatch`, `storage()` (namespaced JSON, degrades to memory), `toCsv`/`downloadBlob`/`copyToClipboard`, `truncate()`/`isTruncated()` (line clamp with the full value on hover).
51
57
 
52
58
  ## Theming
53
- Load `zx.css` once; set `data-zx-theme` (`light`|`dark`|`auto`) and `data-zx-density` (`cozy`|`compact`) on any ancestor. Define a product theme by overriding semantic `--zx-color-*` / `--zx-control-*` tokens under `[data-zx-theme="name"]`. The theme studio controls accent, neutral tint, density, font, type size, radius, control height, and CSS-first glass material. Compact menus, pickers, tooltips, column menus, and toasts share responsive compact glass; Launcher, Modal, Dialog, and floating Sheets share a calmer reading panel. Both preserve scoped theme inheritance and refract Aurora/page content; docked Sheets and dense data surfaces remain opaque. Never use tier-1 palette tokens or raw color literals in application CSS.
59
+ Load `zx.css` once; set `data-zx-theme` (`light`|`dark`|`auto`) on any ancestor. There is one geometry: spacing steps are multiples of `--zx-space-unit` (4px), radius steps are fractions of `--zx-radius` (4px: 2/3/4/6px), and controls are `--zx-control-height` (30px) tall — override those to tighten or loosen an application. Define a product theme by overriding semantic `--zx-color-*` / `--zx-control-*` tokens under `[data-zx-theme="name"]`. The theme studio controls accent, neutral tint, spacing, font, type size, radius, control height, and CSS-first glass material. Compact menus, pickers, tooltips, column menus, and toasts share responsive compact glass; Launcher, Modal, Dialog, and floating Sheets share a calmer reading panel. Both preserve scoped theme inheritance and refract Aurora/page content; docked Sheets and dense data surfaces remain opaque. Never use tier-1 palette tokens or raw color literals in application CSS.
54
60
 
55
61
  ## Talking to ZeyOS
56
62
  Use the dedicated ZeyOS client library **`@zeyos/client`** (`npm install @zeyos/client`) for ZeyOS business data: `createZeyosClient({ platform, auth })`, typed `client.api.list/get/create/update<Resource>` over the full OpenAPI surface, and `normalizeListResult`. Zx accepts the client by injection and does not bundle it. See the `website/layouts/zeyos-invoices.layout.js` layout for a Zx-components-on-@zeyos/client reference. Zx also ships a minimal `Http`/`zeyosService` for ad-hoc in-app `remotecall`, but `@zeyos/client` is the recommended default.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeyos/zx",
3
- "version": "4.3.4",
3
+ "version": "5.0.0",
4
4
  "description": "Dependency-free JavaScript implementation of the Xenon Design System.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -3,26 +3,50 @@
3
3
  min-inline-size: 0;
4
4
  }
5
5
 
6
- .zx-account-menu__trigger {
6
+ /*
7
+ * The trigger is a flat row, not a button. MenuButton makes it a `.zx-btn.zx-menu-button`, and
8
+ * both of those stylesheets load after this one — `menu-button.css` centres it as an inline-flex
9
+ * pill and `button.css` gives it a border, a glass fill, a backdrop blur and a shadow. Every rule
10
+ * here is scoped under the root so it out-specifies them instead of depending on load order, and
11
+ * takes back each property they set rather than only the ones that were visible at the time.
12
+ */
13
+ .zx-account-menu .zx-account-menu__trigger {
7
14
  display: grid;
8
15
  grid-template-columns: auto minmax(0, 1fr) auto;
9
16
  align-items: center;
10
- gap: var(--zx-space-3);
17
+ justify-content: stretch;
18
+ gap: var(--zx-space-2);
11
19
  inline-size: 100%;
12
20
  min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
13
- border-color: transparent;
21
+ border: 0;
22
+ border-radius: var(--zx-radius-md);
14
23
  background: transparent;
15
- padding: var(--zx-space-2);
24
+ -webkit-backdrop-filter: none;
25
+ backdrop-filter: none;
26
+ box-shadow: none;
27
+ padding: var(--zx-space-1) var(--zx-space-2);
16
28
  color: inherit;
29
+ font-weight: var(--zx-weight-medium);
30
+ line-height: 1.3;
17
31
  text-align: start;
18
32
  }
19
33
 
20
- .zx-account-menu__trigger:hover,
21
- .zx-account-menu__trigger:focus-visible,
22
- .zx-account-menu__trigger[aria-expanded="true"] {
34
+ .zx-account-menu .zx-account-menu__trigger:is(:hover, [aria-expanded="true"]):not(:disabled) {
23
35
  background: var(--zx-color-bg-hover);
24
36
  }
25
37
 
38
+ .zx-account-menu .zx-account-menu__trigger:active:not(:disabled) {
39
+ background: var(--zx-color-bg-current);
40
+ }
41
+
42
+ .zx-account-menu .zx-account-menu__trigger:focus-visible {
43
+ box-shadow: var(--zx-focus-ring);
44
+ }
45
+
46
+ .zx-account-menu__chevron {
47
+ color: var(--zx-color-text-subtle);
48
+ }
49
+
26
50
  .zx-account-menu__identity {
27
51
  display: grid;
28
52
  min-inline-size: 0;
@@ -36,8 +60,8 @@
36
60
  white-space: nowrap;
37
61
  }
38
62
 
39
- .zx-account-menu__name { font-weight: 650; }
40
- .zx-account-menu__secondary { color: var(--zx-color-text-muted); font-size: var(--zx-text-xs); }
63
+ .zx-account-menu__name { font-weight: var(--zx-weight-semibold); }
64
+ .zx-account-menu__secondary { color: var(--zx-color-text-muted); font-size: var(--zx-text-xs); font-weight: 400; }
41
65
  .zx-account-menu__chevron { display: inline-flex; }
42
66
 
43
67
  .zx-account-menu[data-compact="true"] {
@@ -48,6 +72,7 @@
48
72
  display: inline-grid;
49
73
  grid-template-columns: auto;
50
74
  inline-size: auto;
75
+ padding: var(--zx-space-1);
51
76
  }
52
77
 
53
78
  .zx-account-menu[data-compact="true"] .zx-account-menu__identity,
@@ -61,7 +86,7 @@
61
86
  gap: 2px;
62
87
  margin: calc(-1 * var(--zx-space-1)) calc(-1 * var(--zx-space-1)) var(--zx-space-1);
63
88
  border-block-end: 1px solid var(--zx-color-overlay-divider);
64
- padding: var(--zx-space-3);
89
+ padding: var(--zx-space-2) var(--zx-space-3);
65
90
  }
66
91
 
67
92
  .zx-account-menu__panel-identity span {
@@ -0,0 +1,137 @@
1
+ .zx-activity-item {
2
+ inline-size: 100%;
3
+ min-inline-size: 0;
4
+ color: var(--zx-color-text);
5
+ list-style: none;
6
+ container-type: inline-size;
7
+ }
8
+
9
+ .zx-activity-item__article {
10
+ display: grid;
11
+ grid-template-columns: auto minmax(0, 1fr);
12
+ gap: var(--zx-space-3);
13
+ min-inline-size: 0;
14
+ padding-block: var(--zx-space-4);
15
+ }
16
+
17
+ .zx-activity-item__avatar {
18
+ position: relative;
19
+ z-index: 1;
20
+ display: flex;
21
+ align-items: start;
22
+ }
23
+
24
+ .zx-activity-item__main {
25
+ display: grid;
26
+ gap: var(--zx-space-2);
27
+ min-inline-size: 0;
28
+ }
29
+
30
+ .zx-activity-item__header {
31
+ display: flex;
32
+ flex-wrap: wrap;
33
+ align-items: baseline;
34
+ justify-content: space-between;
35
+ gap: var(--zx-space-1) var(--zx-space-3);
36
+ min-inline-size: 0;
37
+ }
38
+
39
+ .zx-activity-item__heading {
40
+ display: flex;
41
+ flex-wrap: wrap;
42
+ gap: var(--zx-space-1);
43
+ min-inline-size: 0;
44
+ margin: 0;
45
+ font-size: var(--zx-text-md);
46
+ line-height: 1.45;
47
+ overflow-wrap: anywhere;
48
+ }
49
+
50
+ .zx-activity-item__actor {
51
+ font-weight: var(--zx-weight-semibold);
52
+ }
53
+
54
+ .zx-activity-item__title {
55
+ font-weight: 400;
56
+ }
57
+
58
+ /*
59
+ * The auto inline-start margin takes the header's free space before `justify-content` can
60
+ * distribute it, so the badge and the timestamp stay together on the trailing edge instead of
61
+ * being spread across the row as a third column.
62
+ */
63
+ .zx-activity-item__state {
64
+ flex: none;
65
+ margin-inline-start: auto;
66
+ align-self: center;
67
+ }
68
+
69
+ .zx-activity-item__time {
70
+ flex: none;
71
+ color: var(--zx-color-text-muted);
72
+ font-size: var(--zx-text-xs);
73
+ white-space: nowrap;
74
+ }
75
+
76
+ .zx-activity-item__body {
77
+ min-inline-size: 0;
78
+ color: var(--zx-color-text);
79
+ line-height: 1.55;
80
+ overflow-wrap: anywhere;
81
+ }
82
+
83
+ .zx-activity-item__metadata {
84
+ display: flex;
85
+ flex-wrap: wrap;
86
+ gap: var(--zx-space-1) var(--zx-space-3);
87
+ margin: 0;
88
+ padding: 0;
89
+ color: var(--zx-color-text-muted);
90
+ font-size: var(--zx-text-sm);
91
+ list-style: none;
92
+ }
93
+
94
+ .zx-activity-item__metadata-item {
95
+ min-inline-size: 0;
96
+ overflow-wrap: anywhere;
97
+ }
98
+
99
+ .zx-activity-item__metadata-item:not(:last-child)::after {
100
+ content: "\00b7";
101
+ margin-inline-start: var(--zx-space-3);
102
+ color: var(--zx-color-text-placeholder);
103
+ }
104
+
105
+ .zx-activity-item__attachments {
106
+ display: grid;
107
+ gap: var(--zx-space-2);
108
+ min-inline-size: 0;
109
+ }
110
+
111
+ .zx-activity-item__attachments-item {
112
+ min-inline-size: 0;
113
+ }
114
+
115
+ .zx-activity-item__actions {
116
+ display: flex;
117
+ flex-wrap: wrap;
118
+ align-items: center;
119
+ gap: var(--zx-space-1);
120
+ }
121
+
122
+ .zx-activity-item__action {
123
+ text-decoration: none;
124
+ }
125
+
126
+ @container (max-width: 30rem) {
127
+ .zx-activity-item__header {
128
+ display: grid;
129
+ justify-content: stretch;
130
+ }
131
+
132
+ /* Stacked, the header is one column, so the badge reads as its own line at the start edge. */
133
+ .zx-activity-item__state {
134
+ margin-inline-start: 0;
135
+ justify-self: start;
136
+ }
137
+ }