@adukiorg/anza 0.3.9 → 0.4.1

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 (43) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/bin/anza/anza-linux-arm64 +0 -0
  3. package/bin/anza/anza-linux-x64 +0 -0
  4. package/bin/anza/anza-macos-arm64 +0 -0
  5. package/bin/anza/anza-macos-x64 +0 -0
  6. package/bin/anza/anza-windows-x64.exe +0 -0
  7. package/package.json +1 -1
  8. package/src/core/ui/define/element.js +36 -28
  9. package/src/core/ui/define/utils.js +39 -25
  10. package/src/elements/data/card/style.css +1 -1
  11. package/src/elements/data/chart/style.css +1 -1
  12. package/src/elements/data/list/style.css +1 -1
  13. package/src/elements/data/stat/style.css +1 -1
  14. package/src/elements/data/table/style.css +1 -1
  15. package/src/elements/feedback/alert/style.css +1 -1
  16. package/src/elements/feedback/empty/style.css +1 -1
  17. package/src/elements/feedback/progress/style.css +1 -1
  18. package/src/elements/feedback/toast/style.css +1 -1
  19. package/src/elements/forms/checkbox/style.css +1 -1
  20. package/src/elements/forms/field/style.css +1 -1
  21. package/src/elements/forms/input/style.css +1 -1
  22. package/src/elements/forms/radio/style.css +1 -1
  23. package/src/elements/forms/select/style.css +1 -1
  24. package/src/elements/forms/textarea/style.css +1 -1
  25. package/src/elements/forms/toggle/style.css +1 -1
  26. package/src/elements/forms/upload/style.css +1 -1
  27. package/src/elements/layout/app/style.css +1 -1
  28. package/src/elements/navigation/breadcrumb/style.css +1 -1
  29. package/src/elements/navigation/nav/style.css +1 -1
  30. package/src/elements/navigation/pagination/style.css +1 -1
  31. package/src/elements/navigation/steps/style.css +1 -1
  32. package/src/elements/navigation/tabs/style.css +1 -1
  33. package/src/elements/overlay/dialog/style.css +1 -1
  34. package/src/elements/overlay/drawer/style.css +1 -1
  35. package/src/elements/overlay/menu/style.css +1 -1
  36. package/src/elements/overlay/popover/style.css +1 -1
  37. package/src/elements/overlay/sheet/style.css +1 -1
  38. package/src/elements/overlay/tooltip/style.css +1 -1
  39. package/src/elements/primitives/avatar/style.css +1 -1
  40. package/src/elements/primitives/badge/style.css +1 -1
  41. package/src/elements/primitives/button/style.css +1 -1
  42. package/src/elements/primitives/text/style.css +1 -1
  43. package/src/styles/base.css +2 -2
package/CHANGELOG.md CHANGED
@@ -17,6 +17,34 @@ Versioning follows [Semantic Versioning](https://semver.org/).
17
17
 
18
18
  ---
19
19
 
20
+ ## [0.4.1] — 2026-06-14
21
+
22
+ ### Fixed
23
+
24
+ - **URL Detection Bug**: Fixed a critical bug in both the JS runtime (`utils.js`, `element.js`) and the Rust compiler (`parse.rs`) where inline CSS strings starting with `/*` or `<!--` were mistakenly identified as file URLs. This bug was bypassing inline CSS injection when providing CSS string arrays.
25
+
26
+ ---
27
+
28
+ ## [0.4.0] — 2026-06-14
29
+
30
+ ### Added
31
+
32
+ - Natively support arrays of multiple CSS imports in component definitions (`template: { html, css: ['./a.css', './b.css'] }`) across both the JavaScript library runtime and the Rust compiler.
33
+
34
+ ### Changed
35
+
36
+ - Replaced CSS Custom Highlight API implementation with PrismJS for `view-code` syntax highlighting.
37
+
38
+ ---
39
+
40
+ ## [0.3.9] — 2026-06-13
41
+
42
+ ### Changed
43
+
44
+ - Updated core component rendering to correctly process nested syntax logic and perform full syntax highlighting.
45
+
46
+ ---
47
+
20
48
  ## [0.3.7] — 2026-06-13
21
49
 
22
50
  ### Changed
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adukiorg/anza",
3
- "version": "0.3.9",
3
+ "version": "0.4.1",
4
4
  "description": "Anza web platform library — reactive state, networking, offline, animations, custom elements. Instant build step. Pure browser ESM.",
5
5
  "author": "fescii",
6
6
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  import { BaseElement } from '../base.js';
2
2
  import { scheduleFrame, yieldTask } from '../schedule.js';
3
3
  import { router } from '../../router/index.js';
4
- import { specRegistry, internalsMap, initializedMap, pendingUpdatesMap, updateScheduledMap } from './state.js';
4
+ import { specRegistry, internalsMap, initializedMap, pendingUpdatesMap, updateScheduledMap, assetCache } from './state.js';
5
5
  import { preloadResources } from './utils.js';
6
6
  import { createComponentContext } from './proxy.js';
7
7
 
@@ -49,41 +49,49 @@ export function element(tag, spec, base) {
49
49
  warnMissingBase(tag, 'style', spec.style, base);
50
50
  warnMissingBase(tag, 'template', spec.template, base);
51
51
 
52
+ const isStyleUrl = s => typeof s === 'string' && (s.endsWith('.css') || ((s.startsWith('./') || s.startsWith('/')) && !s.startsWith('/*') && !s.includes('{')));
53
+ const isTemplateUrl = s => typeof s === 'string' && (s.endsWith('.html') || ((s.startsWith('./') || s.startsWith('/')) && !s.startsWith('<!--') && !s.includes('<')));
54
+
52
55
  // Resolve absolute URLs relative to import.meta.url (base)
53
- const styleUrl = spec.style && base && (spec.style.endsWith('.css') || spec.style.startsWith('./') || spec.style.startsWith('/'))
54
- ? new URL(spec.style, base).href
55
- : null;
56
- const templateUrl = spec.template && base && (spec.template.endsWith('.html') || spec.template.startsWith('./') || spec.template.startsWith('/'))
56
+ const styleUrls = Array.isArray(spec.style)
57
+ ? spec.style.filter(s => s && base && isStyleUrl(s)).map(s => new URL(s, base).href)
58
+ : (spec.style && base && isStyleUrl(spec.style)
59
+ ? [new URL(spec.style, base).href]
60
+ : []);
61
+
62
+ const templateUrl = spec.template && base && isTemplateUrl(spec.template)
57
63
  ? new URL(spec.template, base).href
58
64
  : null;
59
65
 
60
66
  // Initiate resource fetching exactly once per component registration (R-06)
61
67
  let resolved = null;
62
- let resourcesPromise = preloadResources(tag, styleUrl, templateUrl, spec.template, spec.style).then(res => {
68
+ let resourcesPromise = preloadResources(tag, styleUrls, templateUrl, spec.template, spec.style).then(res => {
63
69
  resolved = res;
64
70
  return res;
65
71
  });
66
72
 
67
73
  // Handle hot reloading of constructable stylesheets (one global listener per unique styleUrl - R-05)
68
- if (styleUrl && typeof window !== 'undefined') {
74
+ if (styleUrls.length > 0 && typeof window !== 'undefined') {
69
75
  if (!window.__native_hmr_listeners__) {
70
76
  window.__native_hmr_listeners__ = new Set();
71
77
  }
72
- if (!window.__native_hmr_listeners__.has(styleUrl)) {
73
- window.__native_hmr_listeners__.add(styleUrl);
74
- const hmrHandler = async (e) => {
75
- const { path: changedPath, css } = e.detail;
76
- const absoluteChangedUrl = new URL(changedPath, window.location.origin).href;
77
-
78
- if (styleUrl === absoluteChangedUrl || styleUrl.endsWith(changedPath)) {
79
- const res = await resourcesPromise;
80
- if (res.stylesheet) {
81
- res.stylesheet.replaceSync(css);
82
- console.log(`[HMR] Shared AdoptedStyleSheet hot-swapped for <${tag}>`);
78
+ for (const styleUrl of styleUrls) {
79
+ if (!window.__native_hmr_listeners__.has(styleUrl)) {
80
+ window.__native_hmr_listeners__.add(styleUrl);
81
+ const hmrHandler = async (e) => {
82
+ const { path: changedPath, css } = e.detail;
83
+ const absoluteChangedUrl = new URL(changedPath, window.location.origin).href;
84
+
85
+ if (styleUrl === absoluteChangedUrl || styleUrl.endsWith(changedPath)) {
86
+ const sheet = assetCache.get(styleUrl);
87
+ if (sheet && typeof sheet.replaceSync === 'function') {
88
+ sheet.replaceSync(css);
89
+ console.log(`[HMR] Shared AdoptedStyleSheet hot-swapped for <${tag}>`);
90
+ }
83
91
  }
84
- }
85
- };
86
- window.addEventListener('anza:hmr:css', hmrHandler);
92
+ };
93
+ window.addEventListener('anza:hmr:css', hmrHandler);
94
+ }
87
95
  }
88
96
  }
89
97
 
@@ -100,7 +108,7 @@ export function element(tag, spec, base) {
100
108
 
101
109
  if (templateUrl === absoluteChangedUrl || templateUrl.endsWith(changedPath)) {
102
110
  // Re-parse HTML into the cached resolved object
103
- resourcesPromise = preloadResources(tag, styleUrl, null, html, spec.style).then(res => {
111
+ resourcesPromise = preloadResources(tag, styleUrls, null, html, spec.style).then(res => {
104
112
  resolved = res;
105
113
  // Now re-bind instances!
106
114
  const instances = window.__native_hmr_instances__?.get(tag) || [];
@@ -169,7 +177,7 @@ export function element(tag, spec, base) {
169
177
  if (!res) {
170
178
  res = await resourcesPromise;
171
179
  }
172
- const { templateNode, stylesheet, cssText, tagsDescriptor } = res;
180
+ const { templateNode, stylesheets, cssText, tagsDescriptor } = res;
173
181
 
174
182
  if (!this.ctrl || this.ctrl.signal.aborted || !this.isConnected) {
175
183
  return;
@@ -186,9 +194,9 @@ export function element(tag, spec, base) {
186
194
  this.shadowRoot.appendChild(templateNode.cloneNode(true));
187
195
  }
188
196
 
189
- if (stylesheet) {
197
+ if (stylesheets && stylesheets.length > 0) {
190
198
  // Constructable stylesheets path
191
- this.shadowRoot.adoptedStyleSheets = [stylesheet];
199
+ this.shadowRoot.adoptedStyleSheets = stylesheets;
192
200
  } else if (cssText) {
193
201
  // Fallback: inject <style> for browsers without adoptedStyleSheets
194
202
  const style = document.createElement('style');
@@ -263,13 +271,13 @@ export function element(tag, spec, base) {
263
271
  if (!res) {
264
272
  res = await resourcesPromise;
265
273
  }
266
- const { templateNode, stylesheet, cssText, tagsDescriptor } = res;
274
+ const { templateNode, stylesheets, cssText, tagsDescriptor } = res;
267
275
 
268
276
  if (templateNode) {
269
277
  this.shadowRoot.appendChild(templateNode.cloneNode(true));
270
278
  }
271
- if (stylesheet) {
272
- this.shadowRoot.adoptedStyleSheets = [stylesheet];
279
+ if (stylesheets && stylesheets.length > 0) {
280
+ this.shadowRoot.adoptedStyleSheets = stylesheets;
273
281
  } else if (cssText) {
274
282
  const style = document.createElement('style');
275
283
  style.textContent = cssText;
@@ -8,52 +8,66 @@ const supportsSheets =
8
8
 
9
9
  /**
10
10
  * Preloads style and HTML template resources asynchronously exactly once.
11
- * Returns { templateNode, stylesheet, cssText, tagsDescriptor }.
12
- * When constructable stylesheets are unsupported, stylesheet is null and
13
- * cssText carries the raw CSS for <style> injection.
11
+ * Returns { templateNode, stylesheets, cssText, tagsDescriptor }.
12
+ * When constructable stylesheets are unsupported, stylesheets is an empty array and
13
+ * cssText carries the concatenated raw CSS for <style> injection.
14
14
  */
15
- export async function preloadResources(tag, styleUrl, templateUrl, inlineTemplate, inlineStyle) {
15
+ export async function preloadResources(tag, styleUrls, templateUrl, inlineTemplate, inlineStyle) {
16
16
  let templateNode = null;
17
- let stylesheet = null;
18
- let cssText = null;
17
+ let stylesheets = [];
18
+ let cssTextAcc = '';
19
19
  let tagsDescriptor = null;
20
20
 
21
21
  // Compile / Fetch styles
22
- if (styleUrl) {
23
- if (assetCache.has(styleUrl)) {
24
- const cached = assetCache.get(styleUrl);
22
+ const urls = Array.isArray(styleUrls) ? styleUrls : (styleUrls ? [styleUrls] : []);
23
+
24
+ await Promise.all(urls.map(async (url) => {
25
+ if (assetCache.has(url)) {
26
+ const cached = assetCache.get(url);
25
27
  if (supportsSheets) {
26
- stylesheet = cached;
28
+ stylesheets.push(cached);
27
29
  } else {
28
- cssText = cached;
30
+ cssTextAcc += cached + '\n';
29
31
  }
30
32
  } else {
31
33
  try {
32
- const res = await fetch(styleUrl);
34
+ const res = await fetch(url);
33
35
  if (res.ok) {
34
36
  const css = await res.text();
35
37
  if (supportsSheets) {
36
- stylesheet = new CSSStyleSheet();
37
- stylesheet.replaceSync(css);
38
- assetCache.set(styleUrl, stylesheet);
38
+ const sheet = new CSSStyleSheet();
39
+ sheet.replaceSync(css);
40
+ assetCache.set(url, sheet);
41
+ stylesheets.push(sheet);
39
42
  } else {
40
- cssText = css;
41
- assetCache.set(styleUrl, css);
43
+ assetCache.set(url, css);
44
+ cssTextAcc += css + '\n';
42
45
  }
43
46
  }
44
47
  } catch (err) {
45
- console.error(`Failed to load style resource for element ${tag}:`, err);
48
+ console.error(`Failed to load style resource ${url} for element ${tag}:`, err);
46
49
  }
47
50
  }
48
- } else if (inlineStyle) {
49
- if (supportsSheets) {
50
- stylesheet = new CSSStyleSheet();
51
- stylesheet.replaceSync(inlineStyle);
52
- } else {
53
- cssText = inlineStyle;
51
+ }));
52
+
53
+ if (inlineStyle) {
54
+ const inlineStyles = Array.isArray(inlineStyle) ? inlineStyle : [inlineStyle];
55
+ // Filter out ones that are likely URLs (they were fetched above)
56
+ const isUrl = s => typeof s === 'string' && (s.endsWith('.css') || ((s.startsWith('./') || s.startsWith('/')) && !s.startsWith('/*') && !s.includes('{')));
57
+ const inlines = inlineStyles.filter(s => !isUrl(s));
58
+ for (const style of inlines) {
59
+ if (supportsSheets) {
60
+ const sheet = new CSSStyleSheet();
61
+ sheet.replaceSync(style);
62
+ stylesheets.push(sheet);
63
+ } else {
64
+ cssTextAcc += style + '\n';
65
+ }
54
66
  }
55
67
  }
56
68
 
69
+ const cssText = cssTextAcc.trim() ? cssTextAcc : null;
70
+
57
71
  // Compile / Fetch Template markup
58
72
  if (templateUrl) {
59
73
  if (assetCache.has(templateUrl)) {
@@ -91,7 +105,7 @@ export async function preloadResources(tag, styleUrl, templateUrl, inlineTemplat
91
105
  templateNode = createTemplateFragment(inlineTemplate);
92
106
  }
93
107
 
94
- return { templateNode, stylesheet, cssText, tagsDescriptor };
108
+ return { templateNode, stylesheets, cssText, tagsDescriptor };
95
109
  }
96
110
 
97
111
  /**
@@ -6,7 +6,7 @@
6
6
  border-radius: var(--radius-lg);
7
7
  box-shadow: var(--shadow-sm);
8
8
  overflow: hidden;
9
- font-family: var(--font-family-sans);
9
+ font-family: var(--font-sans);
10
10
  transition:
11
11
  transform var(--duration-fast) var(--ease-out),
12
12
  box-shadow var(--duration-fast) var(--ease-out),
@@ -3,7 +3,7 @@
3
3
  width: 100%;
4
4
  height: calc(var(--space-24) * 3);
5
5
  position: relative;
6
- font-family: var(--font-family-sans);
6
+ font-family: var(--font-sans);
7
7
  }
8
8
 
9
9
  canvas {
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  width: 100%;
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  }
7
7
 
8
8
  .list {
@@ -6,7 +6,7 @@
6
6
  border-radius: var(--radius-lg);
7
7
  padding: var(--space-6);
8
8
  box-shadow: var(--shadow-sm);
9
- font-family: var(--font-family-sans);
9
+ font-family: var(--font-sans);
10
10
  box-sizing: border-box;
11
11
  width: 100%;
12
12
  }
@@ -13,7 +13,7 @@
13
13
  width: 100%;
14
14
  border-collapse: collapse;
15
15
  border-spacing: 0;
16
- font-family: var(--font-family-sans);
16
+ font-family: var(--font-sans);
17
17
  font-size: var(--font-size-sm);
18
18
  color: var(--color-content-primary);
19
19
  text-align: left;
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  width: 100%;
5
5
  /* Component Tokens — Semantic Reference Only */
6
6
  --alert-radius: var(--radius-md);
@@ -5,7 +5,7 @@
5
5
  justify-content: center;
6
6
  text-align: center;
7
7
  padding: var(--space-12) var(--space-6);
8
- font-family: var(--font-family-sans);
8
+ font-family: var(--font-sans);
9
9
  box-sizing: border-box;
10
10
  width: 100%;
11
11
  }
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--space-1);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  width: 100%;
7
7
  /* Component Tokens — Semantic Reference Only */
8
8
  --progress-bg: var(--color-border-default);
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  .toast {
@@ -2,7 +2,7 @@
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  gap: var(--space-2);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  cursor: pointer;
7
7
  user-select: none;
8
8
  /* Component Tokens — Semantic Reference Only */
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--space-1-5);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  width: 100%;
7
7
  }
8
8
 
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--space-1);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  }
7
7
 
8
8
  input {
@@ -2,7 +2,7 @@
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  gap: var(--space-2);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  cursor: pointer;
7
7
  user-select: none;
8
8
  /* Component Tokens — Semantic Reference Only */
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--space-1);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  position: relative;
7
7
  /* Component Tokens — Semantic Reference Only */
8
8
  --select-bg: var(--color-surface-page);
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--space-1);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  }
7
7
 
8
8
  textarea {
@@ -2,7 +2,7 @@
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  gap: var(--space-2);
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  cursor: pointer;
7
7
  user-select: none;
8
8
  /* Component Tokens — Semantic Reference Only */
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  width: 100%;
5
5
  /* Component Tokens — Semantic Reference Only */
6
6
  --upload-bg: var(--color-surface-page);
@@ -5,7 +5,7 @@
5
5
  width: 100%;
6
6
  background: var(--color-surface-page);
7
7
  color: var(--color-content-primary);
8
- font-family: var(--font-family-sans);
8
+ font-family: var(--font-sans);
9
9
  }
10
10
 
11
11
  .app-frame {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  ol {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  nav {
@@ -3,7 +3,7 @@
3
3
  align-items: center;
4
4
  justify-content: center;
5
5
  gap: var(--space-2);
6
- font-family: var(--font-family-sans);
6
+ font-family: var(--font-sans);
7
7
  width: 100%;
8
8
  }
9
9
 
@@ -3,7 +3,7 @@
3
3
  align-items: center;
4
4
  justify-content: space-between;
5
5
  width: 100%;
6
- font-family: var(--font-family-sans);
6
+ font-family: var(--font-sans);
7
7
  position: relative;
8
8
  }
9
9
 
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  width: 100%;
5
- font-family: var(--font-family-sans);
5
+ font-family: var(--font-sans);
6
6
  }
7
7
 
8
8
  .tablist {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: inline-block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  dialog {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: inline-block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  dialog {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: inline-block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  [popover] {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: inline-block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  [popover] {
@@ -1,6 +1,6 @@
1
1
  :host {
2
2
  display: inline-block;
3
- font-family: var(--font-family-sans);
3
+ font-family: var(--font-sans);
4
4
  }
5
5
 
6
6
  dialog {
@@ -22,7 +22,7 @@
22
22
  padding: var(--space-1) var(--space-2);
23
23
  border-radius: var(--radius-sm);
24
24
  font-size: var(--font-size-xs);
25
- font-family: var(--font-family-sans);
25
+ font-family: var(--font-sans);
26
26
  white-space: nowrap;
27
27
  box-shadow: var(--shadow-sm);
28
28
  transition:
@@ -10,7 +10,7 @@
10
10
  overflow: hidden;
11
11
  background: var(--color-interactive-disabled);
12
12
  color: var(--color-content-secondary);
13
- font-family: var(--font-family-sans);
13
+ font-family: var(--font-sans);
14
14
  font-size: calc(var(--avatar-size, var(--space-8)) * 0.4);
15
15
  font-weight: var(--font-weight-medium);
16
16
  user-select: none;
@@ -4,7 +4,7 @@
4
4
  display: inline-flex;
5
5
  /* Component Tokens — Semantic Reference Only */
6
6
  --badge-radius: var(--radius-full);
7
- --badge-font: var(--font-family-sans);
7
+ --badge-font: var(--font-sans);
8
8
  --badge-weight: var(--font-weight-semibold);
9
9
  --badge-size: var(--font-size-xs);
10
10
 
@@ -10,7 +10,7 @@
10
10
  --btn-bg-disabled: var(--color-interactive-disabled);
11
11
  --btn-color: var(--color-content-inverse);
12
12
  --btn-radius: var(--radius-md);
13
- --btn-font: var(--font-family-sans);
13
+ --btn-font: var(--font-sans);
14
14
  --btn-size: var(--font-size-sm);
15
15
  --btn-weight: var(--font-weight-medium);
16
16
  --btn-padding-y: var(--space-2);
@@ -5,7 +5,7 @@
5
5
  /* Component Tokens — Semantic Reference Only */
6
6
  --text-size: var(--font-size-base);
7
7
  --text-weight: var(--font-weight-regular);
8
- --text-family: var(--font-family-sans);
8
+ --text-family: var(--font-sans);
9
9
  --text-height: var(--line-height-normal);
10
10
  --text-color: var(--color-content-primary);
11
11
  }
@@ -8,7 +8,7 @@
8
8
 
9
9
  @layer base {
10
10
  :root {
11
- font-family: var(--font-family-sans);
11
+ font-family: var(--font-sans);
12
12
  font-size: var(--font-size-base);
13
13
  color-scheme: light dark;
14
14
  }
@@ -24,7 +24,7 @@
24
24
 
25
25
  /* Typography Defaults */
26
26
  h1, h2, h3, h4, h5, h6 {
27
- font-family: var(--font-family-sans);
27
+ font-family: var(--font-sans);
28
28
  color: var(--color-content-primary);
29
29
  font-weight: var(--font-weight-semibold);
30
30
  line-height: var(--line-height-tight);