@xmesh/system-design 0.0.4 → 0.0.5

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 (290) hide show
  1. package/README.md +2 -1
  2. package/custom-elements.json +18382 -0
  3. package/dist/lit/components/alert/index.d.ts +5 -0
  4. package/dist/lit/components/alert/index.js +8 -2
  5. package/dist/lit/components/alert/index.styles.js +215 -0
  6. package/dist/lit/components/app-bar/index.d.ts +1 -0
  7. package/dist/lit/components/app-bar/index.js +4 -2
  8. package/dist/lit/components/app-bar/index.styles.js +94 -0
  9. package/dist/lit/components/artifact/index.d.ts +5 -0
  10. package/dist/lit/components/artifact/index.js +14 -10
  11. package/dist/lit/components/artifact/index.styles.js +180 -0
  12. package/dist/lit/components/autocomplete/index.d.ts +5 -0
  13. package/dist/lit/components/autocomplete/index.js +11 -2
  14. package/dist/lit/components/autocomplete/index.styles.js +185 -0
  15. package/dist/lit/components/avatar/index.d.ts +1 -0
  16. package/dist/lit/components/avatar/index.js +4 -2
  17. package/dist/lit/components/avatar/index.styles.js +76 -0
  18. package/dist/lit/components/avatar-group/index.d.ts +1 -0
  19. package/dist/lit/components/avatar-group/index.js +4 -2
  20. package/dist/lit/components/avatar-group/index.styles.js +74 -0
  21. package/dist/lit/components/badge/index.d.ts +1 -0
  22. package/dist/lit/components/badge/index.js +4 -2
  23. package/dist/lit/components/badge/index.styles.js +86 -0
  24. package/dist/lit/components/brand-mark/index.js +8 -9
  25. package/dist/lit/components/brand-mark/index.styles.js +123 -0
  26. package/dist/lit/components/breadcrumbs/index.d.ts +1 -0
  27. package/dist/lit/components/breadcrumbs/index.js +5 -4
  28. package/dist/lit/components/breadcrumbs/index.styles.js +105 -0
  29. package/dist/lit/components/bubble/index.d.ts +4 -0
  30. package/dist/lit/components/bubble/index.js +14 -11
  31. package/dist/lit/components/bubble/index.styles.js +196 -0
  32. package/dist/lit/components/button/index.d.ts +1 -0
  33. package/dist/lit/components/button/index.js +6 -13
  34. package/dist/lit/components/button/index.styles.js +356 -0
  35. package/dist/lit/components/card/index.d.ts +1 -0
  36. package/dist/lit/components/card/index.js +4 -2
  37. package/dist/lit/components/card/index.styles.js +113 -0
  38. package/dist/lit/components/chat/index.d.ts +6 -0
  39. package/dist/lit/components/chat/index.js +15 -10
  40. package/dist/lit/components/chat/index.styles.js +306 -0
  41. package/dist/lit/components/checkbox/index.d.ts +1 -0
  42. package/dist/lit/components/checkbox/index.js +7 -4
  43. package/dist/lit/components/checkbox/index.styles.js +140 -0
  44. package/dist/lit/components/chip/index.d.ts +5 -0
  45. package/dist/lit/components/chip/index.js +8 -2
  46. package/dist/lit/components/chip/index.styles.js +159 -0
  47. package/dist/lit/components/chip-group/index.d.ts +4 -0
  48. package/dist/lit/components/chip-group/index.js +7 -2
  49. package/dist/lit/components/chip-group/index.styles.js +33 -0
  50. package/dist/lit/components/code/index.d.ts +1 -0
  51. package/dist/lit/components/code/index.js +4 -3
  52. package/dist/lit/components/code/index.styles.js +56 -0
  53. package/dist/lit/components/composer/index.d.ts +6 -0
  54. package/dist/lit/components/composer/index.js +15 -10
  55. package/dist/lit/components/composer/index.styles.js +562 -0
  56. package/dist/lit/components/data-table/index.css +18 -0
  57. package/dist/lit/components/data-table/index.d.ts +30 -0
  58. package/dist/lit/components/data-table/index.js +120 -34
  59. package/dist/lit/components/data-table/index.styles.js +198 -0
  60. package/dist/lit/components/date-range/index.d.ts +4 -0
  61. package/dist/lit/components/date-range/index.js +7 -2
  62. package/dist/lit/components/date-range/index.styles.js +338 -0
  63. package/dist/lit/components/dialog/index.d.ts +4 -0
  64. package/dist/lit/components/dialog/index.js +7 -2
  65. package/dist/lit/components/dialog/index.styles.js +138 -0
  66. package/dist/lit/components/divider/index.d.ts +1 -0
  67. package/dist/lit/components/divider/index.js +4 -2
  68. package/dist/lit/components/divider/index.styles.js +41 -0
  69. package/dist/lit/components/empty-state/index.d.ts +1 -0
  70. package/dist/lit/components/empty-state/index.js +4 -2
  71. package/dist/lit/components/empty-state/index.styles.js +83 -0
  72. package/dist/lit/components/expansion-panel/index.d.ts +5 -0
  73. package/dist/lit/components/expansion-panel/index.js +8 -2
  74. package/dist/lit/components/expansion-panel/index.styles.js +134 -0
  75. package/dist/lit/components/field/index.d.ts +4 -0
  76. package/dist/lit/components/field/index.js +9 -4
  77. package/dist/lit/components/field/index.styles.js +237 -0
  78. package/dist/lit/components/file-input/index.d.ts +4 -0
  79. package/dist/lit/components/file-input/index.js +10 -4
  80. package/dist/lit/components/file-input/index.styles.js +271 -0
  81. package/dist/lit/components/form/index.d.ts +4 -0
  82. package/dist/lit/components/form/index.js +7 -2
  83. package/dist/lit/components/form/index.styles.js +43 -0
  84. package/dist/lit/components/grid/index.d.ts +1 -0
  85. package/dist/lit/components/grid/index.js +4 -2
  86. package/dist/lit/components/grid/index.styles.js +67 -0
  87. package/dist/lit/components/kbd/index.d.ts +1 -0
  88. package/dist/lit/components/kbd/index.js +4 -2
  89. package/dist/lit/components/kbd/index.styles.js +49 -0
  90. package/dist/lit/components/list/index.d.ts +4 -0
  91. package/dist/lit/components/list/index.js +7 -2
  92. package/dist/lit/components/list/index.styles.js +29 -0
  93. package/dist/lit/components/list-item/index.d.ts +1 -0
  94. package/dist/lit/components/list-item/index.js +4 -2
  95. package/dist/lit/components/list-item/index.styles.js +133 -0
  96. package/dist/lit/components/menu/index.d.ts +8 -0
  97. package/dist/lit/components/menu/index.js +11 -3
  98. package/dist/lit/components/menu/index.styles.js +108 -0
  99. package/dist/lit/components/multi-select/index.css +156 -0
  100. package/dist/lit/components/multi-select/index.d.ts +70 -0
  101. package/dist/lit/components/multi-select/index.js +497 -0
  102. package/dist/lit/components/multi-select/index.styles.js +170 -0
  103. package/dist/lit/components/navigation-drawer/index.d.ts +4 -0
  104. package/dist/lit/components/navigation-drawer/index.js +7 -2
  105. package/dist/lit/components/navigation-drawer/index.styles.js +128 -0
  106. package/dist/lit/components/overlay/index.d.ts +5 -0
  107. package/dist/lit/components/overlay/index.js +8 -2
  108. package/dist/lit/components/overlay/index.styles.js +185 -0
  109. package/dist/lit/components/pagination/index.d.ts +17 -0
  110. package/dist/lit/components/pagination/index.js +53 -8
  111. package/dist/lit/components/pagination/index.styles.js +116 -0
  112. package/dist/lit/components/popover/index.d.ts +5 -0
  113. package/dist/lit/components/popover/index.js +8 -2
  114. package/dist/lit/components/popover/index.styles.js +48 -0
  115. package/dist/lit/components/primitives/index.js +8 -9
  116. package/dist/lit/components/primitives/index.styles.js +518 -0
  117. package/dist/lit/components/progress/index.d.ts +1 -0
  118. package/dist/lit/components/progress/index.js +4 -2
  119. package/dist/lit/components/progress/index.styles.js +157 -0
  120. package/dist/lit/components/radio-group/index.d.ts +5 -0
  121. package/dist/lit/components/radio-group/index.js +10 -6
  122. package/dist/lit/components/radio-group/index.styles.js +192 -0
  123. package/dist/lit/components/select/index.d.ts +4 -0
  124. package/dist/lit/components/select/index.js +10 -2
  125. package/dist/lit/components/select/index.styles.js +165 -0
  126. package/dist/lit/components/sidebar-item/index.js +8 -9
  127. package/dist/lit/components/sidebar-item/index.styles.js +147 -0
  128. package/dist/lit/components/skeleton/index.d.ts +1 -0
  129. package/dist/lit/components/skeleton/index.js +4 -2
  130. package/dist/lit/components/skeleton/index.styles.js +95 -0
  131. package/dist/lit/components/slider/index.d.ts +5 -0
  132. package/dist/lit/components/slider/index.js +11 -4
  133. package/dist/lit/components/slider/index.styles.js +185 -0
  134. package/dist/lit/components/snackbar/index.d.ts +4 -0
  135. package/dist/lit/components/snackbar/index.js +14 -10
  136. package/dist/lit/components/snackbar/index.styles.js +293 -0
  137. package/dist/lit/components/stack/index.d.ts +1 -0
  138. package/dist/lit/components/stack/index.js +4 -2
  139. package/dist/lit/components/stack/index.styles.js +55 -0
  140. package/dist/lit/components/switch/index.d.ts +1 -0
  141. package/dist/lit/components/switch/index.js +7 -4
  142. package/dist/lit/components/switch/index.styles.js +140 -0
  143. package/dist/lit/components/table/index.d.ts +1 -0
  144. package/dist/lit/components/table/index.js +4 -2
  145. package/dist/lit/components/table/index.styles.js +99 -0
  146. package/dist/lit/components/tabs/index.d.ts +4 -0
  147. package/dist/lit/components/tabs/index.js +8 -4
  148. package/dist/lit/components/tabs/index.styles.js +130 -0
  149. package/dist/lit/components/text-field/index.d.ts +1 -0
  150. package/dist/lit/components/text-field/index.js +7 -2
  151. package/dist/lit/components/text-field/index.styles.js +104 -0
  152. package/dist/lit/components/textarea/index.d.ts +1 -0
  153. package/dist/lit/components/textarea/index.js +7 -2
  154. package/dist/lit/components/textarea/index.styles.js +69 -0
  155. package/dist/lit/components/tooltip/index.d.ts +1 -0
  156. package/dist/lit/components/tooltip/index.js +4 -2
  157. package/dist/lit/components/tooltip/index.styles.js +51 -0
  158. package/dist/lit/components/validation/index.d.ts +6 -0
  159. package/dist/lit/components/validation/index.js +15 -10
  160. package/dist/lit/components/validation/index.styles.js +400 -0
  161. package/dist/lit/index.d.ts +1 -0
  162. package/dist/lit/index.js +1 -0
  163. package/dist/react/XmAlert.d.ts +99 -0
  164. package/dist/react/XmAlert.js +45 -0
  165. package/dist/react/XmAppBar.d.ts +59 -0
  166. package/dist/react/XmAppBar.js +34 -0
  167. package/dist/react/XmArtifact.d.ts +113 -0
  168. package/dist/react/XmArtifact.js +45 -0
  169. package/dist/react/XmArtifactChip.d.ts +56 -0
  170. package/dist/react/XmArtifactChip.js +32 -0
  171. package/dist/react/XmAutocomplete.d.ts +153 -0
  172. package/dist/react/XmAutocomplete.js +68 -0
  173. package/dist/react/XmAvatar.d.ts +71 -0
  174. package/dist/react/XmAvatar.js +40 -0
  175. package/dist/react/XmAvatarGroup.d.ts +59 -0
  176. package/dist/react/XmAvatarGroup.js +34 -0
  177. package/dist/react/XmBadge.d.ts +67 -0
  178. package/dist/react/XmBadge.js +38 -0
  179. package/dist/react/XmBrandGlyph.d.ts +46 -0
  180. package/dist/react/XmBrandGlyph.js +24 -0
  181. package/dist/react/XmBrandMark.d.ts +71 -0
  182. package/dist/react/XmBrandMark.js +40 -0
  183. package/dist/react/XmBreadcrumbs.d.ts +56 -0
  184. package/dist/react/XmBreadcrumbs.js +32 -0
  185. package/dist/react/XmBubble.d.ts +69 -0
  186. package/dist/react/XmBubble.js +38 -0
  187. package/dist/react/XmBubbleActions.d.ts +59 -0
  188. package/dist/react/XmBubbleActions.js +34 -0
  189. package/dist/react/XmBubbleGroup.d.ts +82 -0
  190. package/dist/react/XmBubbleGroup.js +36 -0
  191. package/dist/react/XmButton.d.ts +89 -0
  192. package/dist/react/XmButton.js +48 -0
  193. package/dist/react/XmCard.d.ts +59 -0
  194. package/dist/react/XmCard.js +34 -0
  195. package/dist/react/XmChatShell.d.ts +110 -0
  196. package/dist/react/XmChatShell.js +44 -0
  197. package/dist/react/XmCheckbox.d.ts +145 -0
  198. package/dist/react/XmCheckbox.js +58 -0
  199. package/dist/react/XmChip.d.ts +99 -0
  200. package/dist/react/XmChip.js +46 -0
  201. package/dist/react/XmChipGroup.d.ts +79 -0
  202. package/dist/react/XmChipGroup.js +35 -0
  203. package/dist/react/XmCode.d.ts +55 -0
  204. package/dist/react/XmCode.js +32 -0
  205. package/dist/react/XmComposer.d.ts +123 -0
  206. package/dist/react/XmComposer.js +52 -0
  207. package/dist/react/XmDataTable.d.ts +125 -0
  208. package/dist/react/XmDataTable.js +65 -0
  209. package/dist/react/XmDateRange.d.ts +93 -0
  210. package/dist/react/XmDateRange.js +41 -0
  211. package/dist/react/XmDialog.d.ts +87 -0
  212. package/dist/react/XmDialog.js +40 -0
  213. package/dist/react/XmDivider.d.ts +55 -0
  214. package/dist/react/XmDivider.js +32 -0
  215. package/dist/react/XmEmptyState.d.ts +61 -0
  216. package/dist/react/XmEmptyState.js +34 -0
  217. package/dist/react/XmExpansionPanel.d.ts +101 -0
  218. package/dist/react/XmExpansionPanel.js +48 -0
  219. package/dist/react/XmFileInput.d.ts +151 -0
  220. package/dist/react/XmFileInput.js +68 -0
  221. package/dist/react/XmFileValidationBlock.d.ts +111 -0
  222. package/dist/react/XmFileValidationBlock.js +45 -0
  223. package/dist/react/XmForm.d.ts +91 -0
  224. package/dist/react/XmForm.js +37 -0
  225. package/dist/react/XmGrid.d.ts +59 -0
  226. package/dist/react/XmGrid.js +34 -0
  227. package/dist/react/XmKbd.d.ts +46 -0
  228. package/dist/react/XmKbd.js +24 -0
  229. package/dist/react/XmList.d.ts +83 -0
  230. package/dist/react/XmList.js +37 -0
  231. package/dist/react/XmListItem.d.ts +67 -0
  232. package/dist/react/XmListItem.js +38 -0
  233. package/dist/react/XmMenu.d.ts +98 -0
  234. package/dist/react/XmMenu.js +42 -0
  235. package/dist/react/XmMenuItem.d.ts +63 -0
  236. package/dist/react/XmMenuItem.js +36 -0
  237. package/dist/react/XmMultiSelect.d.ts +161 -0
  238. package/dist/react/XmMultiSelect.js +72 -0
  239. package/dist/react/XmNavigationDrawer.d.ts +93 -0
  240. package/dist/react/XmNavigationDrawer.js +41 -0
  241. package/dist/react/XmOverlay.d.ts +120 -0
  242. package/dist/react/XmOverlay.js +54 -0
  243. package/dist/react/XmPagination.d.ts +117 -0
  244. package/dist/react/XmPagination.js +57 -0
  245. package/dist/react/XmPopover.d.ts +90 -0
  246. package/dist/react/XmPopover.js +40 -0
  247. package/dist/react/XmProgress.d.ts +75 -0
  248. package/dist/react/XmProgress.js +42 -0
  249. package/dist/react/XmRadio.d.ts +88 -0
  250. package/dist/react/XmRadio.js +41 -0
  251. package/dist/react/XmRadioGroup.d.ts +139 -0
  252. package/dist/react/XmRadioGroup.js +56 -0
  253. package/dist/react/XmSelect.d.ts +152 -0
  254. package/dist/react/XmSelect.js +68 -0
  255. package/dist/react/XmSidebarItem.d.ts +75 -0
  256. package/dist/react/XmSidebarItem.js +42 -0
  257. package/dist/react/XmSkeleton.d.ts +71 -0
  258. package/dist/react/XmSkeleton.js +40 -0
  259. package/dist/react/XmSlider.d.ts +160 -0
  260. package/dist/react/XmSlider.js +74 -0
  261. package/dist/react/XmSnackbar.d.ts +110 -0
  262. package/dist/react/XmSnackbar.js +49 -0
  263. package/dist/react/XmStack.d.ts +71 -0
  264. package/dist/react/XmStack.js +40 -0
  265. package/dist/react/XmSwitch.d.ts +136 -0
  266. package/dist/react/XmSwitch.js +56 -0
  267. package/dist/react/XmTab.d.ts +79 -0
  268. package/dist/react/XmTab.js +37 -0
  269. package/dist/react/XmTabPanel.d.ts +55 -0
  270. package/dist/react/XmTabPanel.js +32 -0
  271. package/dist/react/XmTable.d.ts +57 -0
  272. package/dist/react/XmTable.js +32 -0
  273. package/dist/react/XmTabs.d.ts +82 -0
  274. package/dist/react/XmTabs.js +37 -0
  275. package/dist/react/XmTextField.d.ts +147 -0
  276. package/dist/react/XmTextField.js +60 -0
  277. package/dist/react/XmTextarea.d.ts +155 -0
  278. package/dist/react/XmTextarea.js +64 -0
  279. package/dist/react/XmTooltip.d.ts +67 -0
  280. package/dist/react/XmTooltip.js +38 -0
  281. package/dist/react/index.d.ts +59 -0
  282. package/dist/react/index.js +59 -0
  283. package/dist/react/react-utils.js +67 -0
  284. package/package.json +37 -9
  285. package/styles/_base-typography.css +86 -0
  286. package/styles/_primitives.css +54 -0
  287. package/styles/_reset.css +58 -0
  288. package/styles/base.css +23 -0
  289. package/vscode.css-custom-data.json +6 -0
  290. package/vscode.html-custom-data.json +979 -0
@@ -0,0 +1,185 @@
1
+ // GENERATED by scripts/gen-styles.mjs — do not edit. Source: lit/components/autocomplete/index.css
2
+ // SSR-safe: constructable stylesheets need the DOM, so in a non-DOM context
3
+ // (Node/SSR import) this exports [] instead of throwing. The CSS self-declares
4
+ // the @layer order so the override contract holds even without ./base (AD-2).
5
+ let sheets = [];
6
+ if (typeof CSSStyleSheet !== "undefined") {
7
+ const sheet = new CSSStyleSheet();
8
+ sheet.replaceSync(`@layer reset, base, tokens, components, utilities;
9
+ @layer components {
10
+ /* ============================================
11
+ xm-autocomplete — filtering select for XmField (Story 2.4).
12
+
13
+ Same composition as xm-select: XmField (chrome) + xm-overlay (anchored
14
+ listbox). This file styles ONLY the bespoke parts — the text-input control
15
+ row + chevron, the option rows + match highlight, and the inline no-match
16
+ empty-state. Positioning / elevation of the panel surface is owned by
17
+ xm-overlay.
18
+
19
+ Surface & ink (AD-13): control + panel ride the inverse-surface card tier →
20
+ inverse-on-surface ink, on-surface-variant placeholder. The SELECTED option
21
+ tints coral primary-container + on-primary-container ink. The match highlight
22
+ carries coral ink AND an underline so the cue survives grayscale — color is
23
+ never the sole carrier (NFR-15). Coral = selection / match, never severity
24
+ (AD-11).
25
+
26
+ BEM block: \`autocomplete\`. Registered in scripts/check-bem.sh STRICT_BLOCKS.
27
+ ============================================ */
28
+
29
+ /* ---------- Control row — text input + chevron in the field wrapper ---------- */
30
+ .autocomplete__control {
31
+ display: flex;
32
+ align-items: center;
33
+ flex: 1;
34
+ min-width: 0;
35
+ width: 100%;
36
+ height: 100%;
37
+ }
38
+
39
+ /* The native <input> is already transparent / full-bleed via the base
40
+ \`.field__control input\` rule; here only the trailing chevron needs room. */
41
+ .autocomplete__input {
42
+ flex: 1;
43
+ min-width: 0;
44
+ }
45
+
46
+ .autocomplete__chevron {
47
+ display: inline-flex;
48
+ align-items: center;
49
+ flex-shrink: 0;
50
+ padding-right: var(--s-3);
51
+ color: var(--md-sys-color-inverse-on-surface);
52
+ transition: transform var(--md-sys-motion-duration-short3)
53
+ var(--md-sys-motion-easing-standard);
54
+ }
55
+ .autocomplete__chevron--open {
56
+ transform: rotate(180deg);
57
+ }
58
+
59
+ /* ---------- Listbox panel content (inside the overlay) ---------- */
60
+ .autocomplete__listbox {
61
+ list-style: none;
62
+ margin: 0;
63
+ padding: 0;
64
+ display: flex;
65
+ flex-direction: column;
66
+ gap: var(--s-0-5);
67
+ min-width: 220px;
68
+ max-height: 320px;
69
+ overflow-y: auto;
70
+ }
71
+
72
+ .autocomplete__option {
73
+ display: flex;
74
+ align-items: center;
75
+ gap: var(--s-2);
76
+ padding: var(--s-2) var(--s-3);
77
+ border-radius: var(--md-sys-shape-corner-small);
78
+ color: var(--md-sys-color-inverse-on-surface);
79
+ font:
80
+ var(--md-sys-typescale-body-medium-weight)
81
+ var(--md-sys-typescale-body-medium-size) /
82
+ var(--md-sys-typescale-body-medium-line-height)
83
+ var(--md-sys-typescale-body-medium-font);
84
+ cursor: pointer;
85
+ user-select: none;
86
+ }
87
+ .autocomplete__option-label {
88
+ flex: 1;
89
+ min-width: 0;
90
+ overflow: hidden;
91
+ white-space: nowrap;
92
+ text-overflow: ellipsis;
93
+ }
94
+ .autocomplete__option-check {
95
+ display: inline-flex;
96
+ align-items: center;
97
+ flex-shrink: 0;
98
+ color: var(--md-sys-color-primary);
99
+ }
100
+
101
+ /* Match highlight — coral ink + underline (dual cue, NFR-15). Background stays
102
+ transparent so it reads on both the panel ink and the selected coral tint. */
103
+ .autocomplete__mark {
104
+ background: transparent;
105
+ color: var(--md-sys-color-primary);
106
+ font-weight: 600;
107
+ text-decoration: underline;
108
+ text-underline-offset: 2px;
109
+ }
110
+
111
+ /* Active (keyboard / hover) — MD3 state layer over the panel ink. */
112
+ .autocomplete__option--active {
113
+ background: color-mix(
114
+ in oklab,
115
+ var(--md-sys-color-inverse-on-surface)
116
+ var(--md-sys-state-hover-state-layer-opacity),
117
+ transparent
118
+ );
119
+ }
120
+
121
+ /* Selected — coral primary-container tint + paired ink (AD-13). */
122
+ .autocomplete__option--selected {
123
+ background: var(--md-sys-color-primary-container);
124
+ color: var(--md-sys-color-on-primary-container);
125
+ }
126
+ .autocomplete__option--selected .autocomplete__option-check {
127
+ color: var(--md-sys-color-on-primary-container);
128
+ }
129
+ .autocomplete__option--selected .autocomplete__mark {
130
+ color: var(--md-sys-color-on-primary-container);
131
+ }
132
+ .autocomplete__option--selected.autocomplete__option--active {
133
+ background: color-mix(
134
+ in oklab,
135
+ var(--md-sys-color-on-primary-container)
136
+ var(--md-sys-state-hover-state-layer-opacity),
137
+ var(--md-sys-color-primary-container)
138
+ );
139
+ }
140
+
141
+ .autocomplete__option--disabled {
142
+ opacity: 0.4;
143
+ cursor: not-allowed;
144
+ }
145
+
146
+ /* ---------- No-match empty-state (inline; → xm-empty-state in Epic 4) ---------- */
147
+ .autocomplete__empty {
148
+ display: flex;
149
+ flex-direction: column;
150
+ align-items: center;
151
+ text-align: center;
152
+ gap: var(--s-1);
153
+ padding: var(--s-5) var(--s-4);
154
+ min-width: 220px;
155
+ }
156
+ .autocomplete__empty-icon {
157
+ display: inline-flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ margin-bottom: var(--s-1);
161
+ color: var(--xm-color-inverse-on-surface-muted);
162
+ }
163
+ .autocomplete__empty-title {
164
+ margin: 0;
165
+ color: var(--md-sys-color-inverse-on-surface);
166
+ font:
167
+ var(--md-sys-typescale-title-small-weight)
168
+ var(--md-sys-typescale-title-small-size) /
169
+ var(--md-sys-typescale-title-small-line-height)
170
+ var(--md-sys-typescale-title-small-font);
171
+ }
172
+ .autocomplete__empty-copy {
173
+ margin: 0;
174
+ color: var(--xm-color-inverse-on-surface-muted);
175
+ font:
176
+ var(--md-sys-typescale-body-small-weight)
177
+ var(--md-sys-typescale-body-small-size) /
178
+ var(--md-sys-typescale-body-small-line-height)
179
+ var(--md-sys-typescale-body-small-font);
180
+ }
181
+
182
+ }`);
183
+ sheets = [sheet];
184
+ }
185
+ export default sheets;
@@ -2,6 +2,7 @@ import { LitElement } from "lit";
2
2
  import type { TemplateResult } from "lit";
3
3
  type AvatarSize = "xs" | "sm" | "md" | "lg";
4
4
  export declare class XmAvatar extends LitElement {
5
+ static styles: CSSStyleSheet[];
5
6
  title: string;
6
7
  name: string;
7
8
  initials: string;
@@ -27,7 +27,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
27
27
  };
28
28
  import { LitElement, html, nothing } from "lit";
29
29
  import { customElement, property } from "lit/decorators.js";
30
- const AVATAR_CSS = new URL("../avatar/index.css", import.meta.url).href;
30
+ import avatarSheets from "./index.styles.js";
31
31
  const deriveInitials = (name) => {
32
32
  const parts = name.trim().split(/\s+/).filter(Boolean);
33
33
  if (parts.length === 0)
@@ -47,6 +47,9 @@ let XmAvatar = class XmAvatar extends LitElement {
47
47
  this.src = "";
48
48
  this.size = "md";
49
49
  }
50
+ // Adopted from the build-generated sheets (scripts/gen-styles.mjs) — no
51
+ // runtime URL fetch (ADR 0012). Cascade order preserved from the old <link>s.
52
+ static { this.styles = [...avatarSheets]; }
50
53
  get _initials() {
51
54
  return (this.initials || deriveInitials(this.name)).toUpperCase();
52
55
  }
@@ -75,7 +78,6 @@ let XmAvatar = class XmAvatar extends LitElement {
75
78
  `;
76
79
  }
77
80
  return html `
78
- <link rel="stylesheet" href="${AVATAR_CSS}" />
79
81
  <style>
80
82
  :host {
81
83
  display: inline-flex;
@@ -0,0 +1,76 @@
1
+ // GENERATED by scripts/gen-styles.mjs — do not edit. Source: lit/components/avatar/index.css
2
+ // SSR-safe: constructable stylesheets need the DOM, so in a non-DOM context
3
+ // (Node/SSR import) this exports [] instead of throwing. The CSS self-declares
4
+ // the @layer order so the override contract holds even without ./base (AD-2).
5
+ let sheets = [];
6
+ if (typeof CSSStyleSheet !== "undefined") {
7
+ const sheet = new CSSStyleSheet();
8
+ sheet.replaceSync(`@layer reset, base, tokens, components, utilities;
9
+ @layer components {
10
+ /* ============================================
11
+ Avatar — circular identity token.
12
+
13
+ <xm-avatar> renders a circular identity chip: initials first,
14
+ then a Lucide-style person line-icon fallback, with an optional
15
+ image. No imagery is ever required (UX-DR8). The chip is an
16
+ opaque raise of the desk — it sits on a surface-container-* tier
17
+ (NOT a third surface family) with ink --md-sys-color-on-surface
18
+ matched to that backplate (AD-13). No gradient, no status hue.
19
+
20
+ Sizes share the canonical xs|sm|md|lg axis so an avatar lines up
21
+ with a same-size button / list row (AD-9).
22
+ ============================================ */
23
+
24
+ .avatar {
25
+ --avatar-size: 32px;
26
+ --avatar-font: var(--md-sys-typescale-label-large-size);
27
+
28
+ position: relative;
29
+ display: inline-flex;
30
+ align-items: center;
31
+ justify-content: center;
32
+ box-sizing: border-box;
33
+ width: var(--avatar-size);
34
+ height: var(--avatar-size);
35
+ flex-shrink: 0;
36
+ border-radius: var(--md-sys-shape-corner-full);
37
+ border: 1px solid var(--md-sys-color-outline-variant);
38
+ background: var(--md-sys-color-surface-container-high);
39
+ color: var(--md-sys-color-on-surface);
40
+ overflow: hidden;
41
+ user-select: none;
42
+ }
43
+
44
+ .avatar__initials {
45
+ font-family: var(--md-sys-typescale-label-large-font);
46
+ font-size: var(--avatar-font);
47
+ font-weight: 600;
48
+ line-height: 1;
49
+ letter-spacing: 0;
50
+ text-transform: uppercase;
51
+ }
52
+
53
+ .avatar__icon {
54
+ display: inline-flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ color: var(--md-sys-color-on-surface-variant);
58
+ }
59
+
60
+ .avatar__img {
61
+ width: 100%;
62
+ height: 100%;
63
+ object-fit: cover;
64
+ display: block;
65
+ }
66
+
67
+ /* ---------- Sizes — one diameter per shared size axis ---------- */
68
+ .avatar--xs { --avatar-size: 22px; --avatar-font: var(--md-sys-typescale-label-small-size); }
69
+ .avatar--sm { --avatar-size: 28px; --avatar-font: var(--md-sys-typescale-label-medium-size); }
70
+ .avatar--md { --avatar-size: 32px; --avatar-font: var(--md-sys-typescale-label-large-size); }
71
+ .avatar--lg { --avatar-size: 40px; --avatar-font: var(--md-sys-typescale-title-small-size); }
72
+
73
+ }`);
74
+ sheets = [sheet];
75
+ }
76
+ export default sheets;
@@ -2,6 +2,7 @@ import { LitElement } from "lit";
2
2
  import type { TemplateResult } from "lit";
3
3
  type AvatarSize = "xs" | "sm" | "md" | "lg";
4
4
  export declare class XmAvatarGroup extends LitElement {
5
+ static styles: CSSStyleSheet[];
5
6
  max: number;
6
7
  size: AvatarSize;
7
8
  private _overflow;
@@ -30,7 +30,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
30
30
  };
31
31
  import { LitElement, html, nothing } from "lit";
32
32
  import { customElement, property, state } from "lit/decorators.js";
33
- const GROUP_CSS = new URL("../avatar-group/index.css", import.meta.url).href;
33
+ import avatarGroupSheets from "./index.styles.js";
34
34
  let XmAvatarGroup = class XmAvatarGroup extends LitElement {
35
35
  constructor() {
36
36
  super(...arguments);
@@ -41,6 +41,9 @@ let XmAvatarGroup = class XmAvatarGroup extends LitElement {
41
41
  this._applyChildren();
42
42
  };
43
43
  }
44
+ // Adopted from the build-generated sheets (scripts/gen-styles.mjs) — no
45
+ // runtime URL fetch (ADR 0012). Cascade order preserved from the old <link>s.
46
+ static { this.styles = [...avatarGroupSheets]; }
44
47
  updated() {
45
48
  this._applyChildren();
46
49
  }
@@ -60,7 +63,6 @@ let XmAvatarGroup = class XmAvatarGroup extends LitElement {
60
63
  render() {
61
64
  const cls = `avatar-group avatar-group--${this.size}`;
62
65
  return html `
63
- <link rel="stylesheet" href="${GROUP_CSS}" />
64
66
  <style>
65
67
  :host {
66
68
  display: inline-flex;
@@ -0,0 +1,74 @@
1
+ // GENERATED by scripts/gen-styles.mjs — do not edit. Source: lit/components/avatar-group/index.css
2
+ // SSR-safe: constructable stylesheets need the DOM, so in a non-DOM context
3
+ // (Node/SSR import) this exports [] instead of throwing. The CSS self-declares
4
+ // the @layer order so the override contract holds even without ./base (AD-2).
5
+ let sheets = [];
6
+ if (typeof CSSStyleSheet !== "undefined") {
7
+ const sheet = new CSSStyleSheet();
8
+ sheet.replaceSync(`@layer reset, base, tokens, components, utilities;
9
+ @layer components {
10
+ /* ============================================
11
+ Avatar group — overlapped stack with +N overflow.
12
+
13
+ <xm-avatar-group> lays slotted <xm-avatar> children in an
14
+ overlapped row (consistent negative offset) and, past \`max\`,
15
+ renders a neutral "+N" overflow token in the same circular
16
+ avatar shape. The overflow ink is the plain on-surface neutral
17
+ — never coral, never a status hue (AD-11). Each avatar keeps a
18
+ thin ring so the stack reads as discrete chips, not a blob.
19
+ ============================================ */
20
+
21
+ .avatar-group {
22
+ --avatar-group-overlap: 8px;
23
+ --avatar-group-size: 32px;
24
+ --avatar-group-font: var(--md-sys-typescale-label-large-size);
25
+
26
+ display: inline-flex;
27
+ align-items: center;
28
+ }
29
+
30
+ /* The ring + overlap on each stacked avatar. ::slotted reaches the
31
+ light-DOM <xm-avatar> children; the ring uses the host surface so
32
+ the chips separate cleanly on whatever desk tier they sit on. */
33
+ .avatar-group ::slotted(xm-avatar) {
34
+ margin-left: calc(var(--avatar-group-overlap) * -1);
35
+ border-radius: var(--md-sys-shape-corner-full);
36
+ box-shadow: 0 0 0 2px var(--md-sys-color-surface);
37
+ }
38
+ .avatar-group ::slotted(xm-avatar:first-child) {
39
+ margin-left: 0;
40
+ }
41
+
42
+ /* +N overflow token — same circle, neutral surface ink. */
43
+ .avatar-group__overflow {
44
+ display: inline-flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ box-sizing: border-box;
48
+ width: var(--avatar-group-size);
49
+ height: var(--avatar-group-size);
50
+ margin-left: calc(var(--avatar-group-overlap) * -1);
51
+ flex-shrink: 0;
52
+ border-radius: var(--md-sys-shape-corner-full);
53
+ border: 1px solid var(--md-sys-color-outline-variant);
54
+ box-shadow: 0 0 0 2px var(--md-sys-color-surface);
55
+ background: var(--md-sys-color-surface-container-highest);
56
+ color: var(--md-sys-color-on-surface-variant);
57
+ font-family: var(--md-sys-typescale-label-large-font);
58
+ font-size: var(--avatar-group-font);
59
+ font-weight: 600;
60
+ line-height: 1;
61
+ letter-spacing: 0;
62
+ white-space: nowrap;
63
+ }
64
+
65
+ /* ---------- Sizes — match xm-avatar diameters + scale overlap ---------- */
66
+ .avatar-group--xs { --avatar-group-size: 22px; --avatar-group-font: var(--md-sys-typescale-label-small-size); --avatar-group-overlap: 6px; }
67
+ .avatar-group--sm { --avatar-group-size: 28px; --avatar-group-font: var(--md-sys-typescale-label-medium-size); --avatar-group-overlap: 7px; }
68
+ .avatar-group--md { --avatar-group-size: 32px; --avatar-group-font: var(--md-sys-typescale-label-large-size); --avatar-group-overlap: 8px; }
69
+ .avatar-group--lg { --avatar-group-size: 40px; --avatar-group-font: var(--md-sys-typescale-title-small-size); --avatar-group-overlap: 10px; }
70
+
71
+ }`);
72
+ sheets = [sheet];
73
+ }
74
+ export default sheets;
@@ -1,6 +1,7 @@
1
1
  import { LitElement } from "lit";
2
2
  import type { TemplateResult } from "lit";
3
3
  export declare class XmBadge extends LitElement {
4
+ static styles: CSSStyleSheet[];
4
5
  count: number | null;
5
6
  dot: boolean;
6
7
  max: number;
@@ -37,7 +37,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
37
37
  };
38
38
  import { LitElement, html, nothing } from "lit";
39
39
  import { customElement, property } from "lit/decorators.js";
40
- const BADGE_CSS = new URL("../badge/index.css", import.meta.url).href;
40
+ import badgeSheets from "./index.styles.js";
41
41
  let XmBadge = class XmBadge extends LitElement {
42
42
  constructor() {
43
43
  super(...arguments);
@@ -46,6 +46,9 @@ let XmBadge = class XmBadge extends LitElement {
46
46
  this.max = 99;
47
47
  this.label = "";
48
48
  }
49
+ // Adopted from the build-generated sheets (scripts/gen-styles.mjs) — no
50
+ // runtime URL fetch (ADR 0012). Cascade order preserved from the old <link>s.
51
+ static { this.styles = [...badgeSheets]; }
49
52
  get _hasCount() {
50
53
  return typeof this.count === "number" && this.count > 0;
51
54
  }
@@ -82,7 +85,6 @@ let XmBadge = class XmBadge extends LitElement {
82
85
  >`
83
86
  : nothing;
84
87
  return html `
85
- <link rel="stylesheet" href="${BADGE_CSS}" />
86
88
  <style>
87
89
  :host {
88
90
  display: inline-flex;
@@ -0,0 +1,86 @@
1
+ // GENERATED by scripts/gen-styles.mjs — do not edit. Source: lit/components/badge/index.css
2
+ // SSR-safe: constructable stylesheets need the DOM, so in a non-DOM context
3
+ // (Node/SSR import) this exports [] instead of throwing. The CSS self-declares
4
+ // the @layer order so the override contract holds even without ./base (AD-2).
5
+ let sheets = [];
6
+ if (typeof CSSStyleSheet !== "undefined") {
7
+ const sheet = new CSSStyleSheet();
8
+ sheet.replaceSync(`@layer reset, base, tokens, components, utilities;
9
+ @layer components {
10
+ /* ============================================
11
+ Badge — small count / dot anchored to a child.
12
+
13
+ <xm-badge> floats a coral count or a minimal dot at the
14
+ top-right corner of whatever it wraps (an icon button, an
15
+ avatar, a label). The coral fill (--md-sys-color-primary /
16
+ --md-sys-color-on-primary) means "count / attention" — the
17
+ same functional coral as a selected pill or the active-tab
18
+ indicator. It is NEVER a severity palette and never references
19
+ --md-sys-color-error*. Severity is communicated by icon + copy
20
+ elsewhere, never by this badge's hue.
21
+
22
+ The badge paints its own coral surface, so it pairs primary
23
+ with on-primary independent of the host's surface family
24
+ (AD-13) — it stays legible floating over any surface.
25
+ ============================================ */
26
+
27
+ .badge {
28
+ position: relative;
29
+ display: inline-flex;
30
+ }
31
+
32
+ /* The wrapper the badged child projects into. Establishes the
33
+ positioning context for the absolutely-placed count/dot. */
34
+ .badge__anchor {
35
+ display: inline-flex;
36
+ }
37
+
38
+ /* Shared corner-floated chip — both count and dot inherit this. */
39
+ .badge__count {
40
+ position: absolute;
41
+ top: 0;
42
+ right: 0;
43
+ transform: translate(35%, -35%);
44
+ z-index: 1;
45
+ display: inline-flex;
46
+ align-items: center;
47
+ justify-content: center;
48
+ box-sizing: border-box;
49
+ min-width: 18px;
50
+ height: 18px;
51
+ padding: 0 var(--s-1);
52
+ border-radius: var(--md-sys-shape-corner-full);
53
+ /* Hairline halo so the chip separates from a same-hued host
54
+ (e.g. a coral primary button) without a hard border. */
55
+ border: 1px solid var(--md-sys-color-surface);
56
+ background: var(--xm-color-primary-fill);
57
+ color: var(--md-sys-color-on-primary);
58
+ font-family: var(--md-sys-typescale-label-small-font);
59
+ font-size: var(--md-sys-typescale-label-small-size);
60
+ font-weight: var(--md-sys-typescale-label-small-weight);
61
+ line-height: 1;
62
+ letter-spacing: var(--md-sys-typescale-label-small-tracking);
63
+ white-space: nowrap;
64
+ }
65
+
66
+ /* Dot — no count, just a presence marker. Collapses to a small
67
+ circle in the same corner. */
68
+ .badge--dot .badge__count {
69
+ min-width: 0;
70
+ width: 10px;
71
+ height: 10px;
72
+ padding: 0;
73
+ }
74
+
75
+ /* Standalone badge (no anchored child) — drops the absolute
76
+ positioning so the chip flows inline beside text. */
77
+ .badge--standalone .badge__count {
78
+ position: static;
79
+ transform: none;
80
+ border: none;
81
+ }
82
+
83
+ }`);
84
+ sheets = [sheet];
85
+ }
86
+ export default sheets;
@@ -23,16 +23,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
23
23
  };
24
24
  import { LitElement, html, nothing } from "lit";
25
25
  import { customElement, property } from "lit/decorators.js";
26
+ import brandMarkSheets from "./index.styles.js";
27
+ // Light DOM: adopt the build-generated sheets into the document — no runtime
28
+ // URL fetch (ADR 0012). Deduped by sheet identity (the generated modules are
29
+ // singletons); the CSS is wrapped in @layer components (spine AD-2).
26
30
  if (typeof document !== "undefined") {
27
- for (const href of [
28
- new URL("../brand-mark/index.css", import.meta.url).href,
29
- ]) {
30
- if (document.querySelector(`link[rel="stylesheet"][href="${href}"]`))
31
- continue;
32
- const link = document.createElement("link");
33
- link.rel = "stylesheet";
34
- link.href = href;
35
- document.head.appendChild(link);
31
+ for (const sheet of [...brandMarkSheets]) {
32
+ if (!document.adoptedStyleSheets.includes(sheet)) {
33
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
34
+ }
36
35
  }
37
36
  }
38
37
  const DEFAULT_TAGLINE = "Smart-routing AI chat. The mark is an X-mesh — four nodes routing to a single hub through the letterform itself.";
@@ -0,0 +1,123 @@
1
+ // GENERATED by scripts/gen-styles.mjs — do not edit. Source: lit/components/brand-mark/index.css
2
+ // SSR-safe: constructable stylesheets need the DOM, so in a non-DOM context
3
+ // (Node/SSR import) this exports [] instead of throwing. The CSS self-declares
4
+ // the @layer order so the override contract holds even without ./base (AD-2).
5
+ let sheets = [];
6
+ if (typeof CSSStyleSheet !== "undefined") {
7
+ const sheet = new CSSStyleSheet();
8
+ sheet.replaceSync(`@layer reset, base, tokens, components, utilities;
9
+ @layer components {
10
+ /* ============================================================
11
+ <BrandMark /> — xmesh logo lockup.
12
+
13
+ Owns the canonical brand glyph (three nodes routing to a single
14
+ hub) and the wordmark. Three sizes:
15
+ sm — 28px chip · sidebar header
16
+ md — 40px chip · generic placement
17
+ lg — 96px chip · brand showcase / about pages
18
+
19
+ Pairs with components/brand-mark/index.jsx. The glyph is a single SVG
20
+ that renders at any size — only the chip dimensions change.
21
+ ============================================================ */
22
+
23
+ .brand-mark {
24
+ display: inline-flex;
25
+ align-items: center;
26
+ gap: var(--s-2-5);
27
+ min-width: 0;
28
+ color: var(--md-sys-color-on-surface);
29
+ }
30
+
31
+ .brand-mark__chip {
32
+ flex-shrink: 0;
33
+ border-radius: 7px;
34
+ background: transparent;
35
+ color: var(--md-sys-color-on-surface);
36
+ display: inline-flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ }
40
+
41
+ .brand-mark__info {
42
+ display: flex;
43
+ flex-direction: column;
44
+ gap: var(--s-1);
45
+ min-width: 0;
46
+ }
47
+
48
+ .brand-mark__wordmark {
49
+ font: 500 15px/1 var(--md-sys-typescale-display-large-font);
50
+ letter-spacing: -0.01em;
51
+ text-transform: uppercase;
52
+ color: var(--md-sys-color-on-surface);
53
+ white-space: nowrap;
54
+ overflow: hidden;
55
+ text-overflow: ellipsis;
56
+ }
57
+
58
+ .brand-mark__tagline {
59
+ font: 400 13px/1.5 var(--md-sys-typescale-body-large-font);
60
+ color: var(--xm-color-on-surface-soft);
61
+ max-width: 360px;
62
+ }
63
+
64
+ /* ---------- Sizes ---------- */
65
+ .brand-mark--sm {
66
+ gap: var(--s-1);
67
+ }
68
+ .brand-mark--sm .brand-mark__chip {
69
+ width: 24px; height: 24px;
70
+ border-radius: 6px;
71
+ }
72
+ .brand-mark--sm .brand-mark__chip svg { width: 20px; height: 20px; }
73
+
74
+ .brand-mark--md {
75
+ gap: var(--s-3-5);
76
+ }
77
+ .brand-mark--md .brand-mark__chip {
78
+ width: 40px; height: 40px;
79
+ border-radius: 10px;
80
+ }
81
+ .brand-mark--md .brand-mark__chip svg { width: 24px; height: 24px; }
82
+ .brand-mark--md .brand-mark__wordmark { font-size: 20px; }
83
+
84
+ .brand-mark--lg {
85
+ gap: var(--s-8);
86
+ }
87
+ .brand-mark--lg .brand-mark__chip {
88
+ width: 96px; height: 96px;
89
+ border-radius: 22px;
90
+ }
91
+ .brand-mark--lg .brand-mark__chip svg { width: 60px; height: 60px; }
92
+ .brand-mark--lg .brand-mark__wordmark {
93
+ font: 600 34px/1 var(--md-sys-typescale-body-large-font);
94
+ letter-spacing: -0.02em;
95
+ }
96
+
97
+ /* ---------- Wordmark-only (no glyph) ----------
98
+ The serif-driven brand wordmark used in the chat sidebar header
99
+ and editorial brand placements. Display family + medium weight.
100
+ Sizes scale with the wrapper modifier (--sm | --md | --lg). */
101
+ .brand-mark--wordmark-only { gap: 0; }
102
+ .brand-mark--wordmark-only .brand-mark__wordmark {
103
+ font:
104
+ var(--xm-typescale-wordmark-weight)
105
+ var(--xm-typescale-wordmark-size) /
106
+ var(--xm-typescale-wordmark-line-height)
107
+ var(--xm-typescale-wordmark-font);
108
+ letter-spacing: var(--xm-typescale-wordmark-tracking);
109
+ text-transform: none;
110
+ color: var(--md-sys-color-inverse-on-surface);
111
+ }
112
+ .brand-mark--wordmark-only.brand-mark--sm .brand-mark__wordmark { font-size: 16px; }
113
+ .brand-mark--wordmark-only.brand-mark--md .brand-mark__wordmark { font-size: 18px; }
114
+ .brand-mark--wordmark-only.brand-mark--lg .brand-mark__wordmark {
115
+ font-size: 28px;
116
+ font-weight: 400;
117
+ letter-spacing: -0.02em;
118
+ }
119
+
120
+ }`);
121
+ sheets = [sheet];
122
+ }
123
+ export default sheets;
@@ -6,6 +6,7 @@ export interface BreadcrumbItem {
6
6
  }
7
7
  type BreadcrumbSeparator = "chevron" | "slash";
8
8
  export declare class XmBreadcrumbs extends LitElement {
9
+ static styles: CSSStyleSheet[];
9
10
  items: BreadcrumbItem[];
10
11
  separator: BreadcrumbSeparator;
11
12
  render(): TemplateResult;