@adia-ai/web-components 0.2.2 → 0.2.4

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 (121) hide show
  1. package/components/agent-trace/agent-trace.css +24 -3
  2. package/components/button/button.js +3 -0
  3. package/components/demo-toggle/demo-toggle.a2ui.json +144 -0
  4. package/components/demo-toggle/demo-toggle.css +120 -0
  5. package/components/demo-toggle/demo-toggle.js +144 -0
  6. package/components/demo-toggle/demo-toggle.test.js +102 -0
  7. package/components/demo-toggle/demo-toggle.yaml +144 -0
  8. package/components/index.js +1 -0
  9. package/components/input/input.js +11 -0
  10. package/components/list/list.css +66 -3
  11. package/components/nav-group/nav-group.a2ui.json +1 -1
  12. package/components/nav-group/nav-group.css +5 -5
  13. package/components/nav-group/nav-group.yaml +1 -1
  14. package/components/nav-item/nav-item.a2ui.json +1 -1
  15. package/components/nav-item/nav-item.css +3 -4
  16. package/components/nav-item/nav-item.yaml +1 -1
  17. package/components/textarea/textarea.js +10 -0
  18. package/core/icons.js +13 -1
  19. package/package.json +1 -1
  20. package/styles/components.css +1 -0
  21. package/styles/typography.css +1 -1
  22. package/traits/_catalog.json +258 -5
  23. package/traits/active-state.test.js +1 -1
  24. package/traits/anchor-positioning.js +205 -52
  25. package/traits/anchor-positioning.test.js +77 -4
  26. package/traits/announcer-stage.js +157 -0
  27. package/traits/announcer.js +145 -0
  28. package/traits/announcer.test.js +268 -0
  29. package/traits/arrow-grid-nav.js +234 -0
  30. package/traits/arrow-grid-nav.test.js +375 -0
  31. package/traits/attention-pulse.js +1 -1
  32. package/traits/attention-pulse.test.js +1 -1
  33. package/traits/confetti-burst.js +90 -60
  34. package/traits/confetti-burst.test.js +16 -8
  35. package/traits/confetti-stage.js +143 -0
  36. package/traits/confetti.js +44 -47
  37. package/traits/confetti.test.js +24 -5
  38. package/traits/count-up.js +31 -6
  39. package/traits/count-up.test.js +1 -1
  40. package/traits/declarative.test.js +1 -1
  41. package/traits/dirty-state.test.js +1 -1
  42. package/traits/drag-ghost.js +55 -3
  43. package/traits/drag-ghost.test.js +1 -1
  44. package/traits/draggable-list-item.js +279 -0
  45. package/traits/draggable-list-item.test.js +51 -0
  46. package/traits/draggable.js +14 -4
  47. package/traits/draggable.test.js +1 -1
  48. package/traits/drop-target.js +223 -0
  49. package/traits/drop-target.test.js +241 -0
  50. package/traits/droppable-collection.js +89 -0
  51. package/traits/droppable-collection.test.js +99 -0
  52. package/traits/droppable.js +125 -0
  53. package/traits/droppable.test.js +54 -0
  54. package/traits/error-shake.js +157 -0
  55. package/traits/error-shake.test.js +114 -0
  56. package/traits/fade-presence.test.js +1 -1
  57. package/traits/focus-restore.js +135 -0
  58. package/traits/focus-restore.test.js +202 -0
  59. package/traits/focus-trap.test.js +1 -1
  60. package/traits/focusable.test.js +1 -1
  61. package/traits/glow-focus.js +1 -1
  62. package/traits/glow-focus.test.js +1 -1
  63. package/traits/gradient-shift.js +1 -1
  64. package/traits/gradient-shift.test.js +1 -1
  65. package/traits/haptic-feedback.test.js +1 -1
  66. package/traits/hotkey.test.js +1 -1
  67. package/traits/hoverable.test.js +1 -1
  68. package/traits/index.js +15 -0
  69. package/traits/inertia-drag.js +9 -0
  70. package/traits/inertia-drag.test.js +1 -1
  71. package/traits/input-mask.js +328 -0
  72. package/traits/input-mask.test.js +151 -0
  73. package/traits/intersection-observer.test.js +1 -1
  74. package/traits/keyboard-nav.test.js +1 -1
  75. package/traits/keyboard-reorderable.js +254 -0
  76. package/traits/keyboard-reorderable.test.js +45 -0
  77. package/traits/layout-animation.js +229 -0
  78. package/traits/layout-animation.test.js +114 -0
  79. package/traits/long-press.js +212 -0
  80. package/traits/long-press.test.js +244 -0
  81. package/traits/magnetic-hover.js +1 -1
  82. package/traits/magnetic-hover.test.js +1 -1
  83. package/traits/noise-texture.js +7 -3
  84. package/traits/noise-texture.test.js +1 -1
  85. package/traits/parallax.js +1 -1
  86. package/traits/parallax.test.js +1 -1
  87. package/traits/portal.test.js +1 -1
  88. package/traits/pressable.test.js +1 -1
  89. package/traits/resettable.js +29 -3
  90. package/traits/resettable.test.js +34 -1
  91. package/traits/resizable.test.js +1 -1
  92. package/traits/resize-observer.test.js +1 -1
  93. package/traits/ripple.js +1 -1
  94. package/traits/ripple.test.js +1 -1
  95. package/traits/roving-tabindex.test.js +1 -1
  96. package/traits/scale-press.test.js +1 -1
  97. package/traits/scroll-lock.test.js +1 -1
  98. package/traits/scroll-progress.js +201 -0
  99. package/traits/scroll-progress.test.js +182 -0
  100. package/traits/shimmer-loading.js +1 -1
  101. package/traits/shimmer-loading.test.js +1 -1
  102. package/traits/{_smoke.test.js → smoke.test.js} +1 -1
  103. package/traits/snap-to-grid.test.js +1 -1
  104. package/traits/sound-feedback.test.js +1 -1
  105. package/traits/spring-animate.js +8 -3
  106. package/traits/spring-animate.test.js +1 -1
  107. package/traits/success-checkmark.js +222 -0
  108. package/traits/success-checkmark.test.js +120 -0
  109. package/traits/tilt-hover.js +1 -1
  110. package/traits/tilt-hover.test.js +1 -1
  111. package/traits/tossable.js +9 -0
  112. package/traits/tossable.test.js +1 -1
  113. package/traits/traits-host.test.js +1 -1
  114. package/traits/typeahead.test.js +1 -1
  115. package/traits/typewriter.js +1 -1
  116. package/traits/typewriter.test.js +1 -1
  117. package/traits/validation.test.js +1 -1
  118. package/traits/view-transition.js +140 -0
  119. package/traits/view-transition.test.js +268 -0
  120. /package/traits/{_motion.js → motion.js} +0 -0
  121. /package/traits/{_test-helpers.js → test-helpers.js} +0 -0
@@ -0,0 +1,144 @@
1
+ # Edit this file; run `node scripts/build/components.mjs` to regenerate a2ui.json.
2
+ $schema: ../../../../scripts/schemas/component.yaml.schema.json
3
+ name: UIDemoToggle
4
+ tag: demo-toggle-ui
5
+ component: DemoToggle
6
+ category: container
7
+ version: 1
8
+ description: >-
9
+ Side-by-side comparison primitive — header bar with a switch + two child
10
+ slots ("on" / "off"); toggling the switch swaps which slot is visible.
11
+ Used on trait detail pages to show "with trait" vs "without trait" on
12
+ the same chrome. data-mode="overlay" stacks the slots on the same
13
+ coordinates so layout never shifts.
14
+ props:
15
+ labelOn:
16
+ description: Header label rendered when state is "on".
17
+ type: string
18
+ default: "On"
19
+ attribute: label-on
20
+ reflect: true
21
+ labelOff:
22
+ description: Header label rendered when state is "off".
23
+ type: string
24
+ default: "Off"
25
+ attribute: label-off
26
+ reflect: true
27
+ initial:
28
+ description: Initial state when [state] is not set on connect ("on" | "off").
29
+ type: string
30
+ default: "off"
31
+ enum:
32
+ - "on"
33
+ - "off"
34
+ reflect: true
35
+ state:
36
+ description: Current toggle state ("on" | "off"). Reflected as data-state on the host.
37
+ type: string
38
+ default: ""
39
+ enum:
40
+ - ""
41
+ - "on"
42
+ - "off"
43
+ reflect: true
44
+ events:
45
+ change:
46
+ description: Fired when the toggle flips. detail contains { state }.
47
+ slots:
48
+ bar:
49
+ description: Internal header bar (auto-stamped). Hosts the embedded switch + label.
50
+ "on":
51
+ description: Surface rendered when state is "on" (the "with trait" variant).
52
+ "off":
53
+ description: Surface rendered when state is "off" (the "without trait" variant).
54
+ states:
55
+ - name: idle
56
+ description: Default, ready for interaction.
57
+ - name: on
58
+ description: On slot is active; bar leans accent.
59
+ attribute: data-state
60
+ - name: off
61
+ description: Off slot is active; bar is neutral.
62
+ attribute: data-state
63
+ traits: []
64
+ tokens:
65
+ --demo-toggle-radius:
66
+ description: Outer border-radius
67
+ --demo-toggle-bg:
68
+ description: Stage background
69
+ --demo-toggle-border:
70
+ description: Border color
71
+ --demo-toggle-bar-bg:
72
+ description: Header bar background (accent when state=on)
73
+ --demo-toggle-bar-fg:
74
+ description: Header bar foreground
75
+ --demo-toggle-stage-padding:
76
+ description: Inner padding around each slot
77
+ a2ui:
78
+ rules: []
79
+ anti_patterns: []
80
+ examples:
81
+ - name: with-without-trait
82
+ description: Compare a trait-bearing surface against the bare control on the same chrome.
83
+ a2ui: >-
84
+ [
85
+ {
86
+ "id": "root",
87
+ "component": "DemoToggle",
88
+ "labelOn": "With shimmer-loading",
89
+ "labelOff": "Without shimmer-loading",
90
+ "initial": "off",
91
+ "children": ["off", "on"]
92
+ },
93
+ {
94
+ "id": "off",
95
+ "component": "Card",
96
+ "slot": "off",
97
+ "children": ["off-section"]
98
+ },
99
+ {
100
+ "id": "off-section",
101
+ "component": "Section",
102
+ "children": ["off-text"]
103
+ },
104
+ {
105
+ "id": "off-text",
106
+ "component": "Text",
107
+ "textContent": "Bare surface — no trait attached."
108
+ },
109
+ {
110
+ "id": "on",
111
+ "component": "Card",
112
+ "slot": "on",
113
+ "children": ["on-section"]
114
+ },
115
+ {
116
+ "id": "on-section",
117
+ "component": "Section",
118
+ "children": ["on-text"]
119
+ },
120
+ {
121
+ "id": "on-text",
122
+ "component": "Text",
123
+ "textContent": "Same surface, with trait attached."
124
+ }
125
+ ]
126
+ keywords:
127
+ - demo
128
+ - toggle
129
+ - compare
130
+ - comparison
131
+ - trait
132
+ - before-after
133
+ - a-b
134
+ - switch
135
+ synonyms:
136
+ compare:
137
+ - demo-toggle
138
+ - segmented
139
+ switch:
140
+ - demo-toggle
141
+ - toggle-group
142
+ related:
143
+ - Switch
144
+ - Card
@@ -85,6 +85,7 @@ export { UIEmbed } from './embed/embed.js';
85
85
  export { UIBlock } from './block/block.js';
86
86
  export { UIText } from './text/text.js';
87
87
  export { UIToggleGroup, UIToggleOption } from './toggle-group/toggle-group.js';
88
+ export { UIDemoToggle } from './demo-toggle/demo-toggle.js';
88
89
  export { UIRichText } from './richtext/richtext.js';
89
90
  export { UIStream } from './stream/stream.js';
90
91
  export { UICanvas } from './canvas/canvas.js';
@@ -120,10 +120,14 @@ class UIInput extends UIFormElement {
120
120
  render() {
121
121
  if (!this.#textEl) return;
122
122
 
123
+ const text = this.value || '';
124
+
123
125
  if (this.#isNativeInput) {
124
126
  this.#textEl.placeholder = this.placeholder;
125
127
  this.#textEl.disabled = this.disabled;
126
128
  this.#textEl.readOnly = this.readonly;
129
+ // Sync programmatic value writes (form.reset(), trait assignments).
130
+ if (this.#textEl.value !== text) this.#textEl.value = text;
127
131
  } else {
128
132
  this.#textEl.setAttribute('data-placeholder', this.placeholder);
129
133
  if (this.disabled || this.readonly) {
@@ -131,6 +135,13 @@ class UIInput extends UIFormElement {
131
135
  } else {
132
136
  this.#textEl.contentEditable = 'plaintext-only';
133
137
  }
138
+ // Sync programmatic value writes into the contenteditable surface.
139
+ // Skip when already in sync to avoid clobbering an in-flight edit's
140
+ // caret position.
141
+ if (this.#textEl.textContent !== text) {
142
+ this.#textEl.textContent = text;
143
+ this.#textEl.toggleAttribute('data-empty', !text);
144
+ }
134
145
  }
135
146
 
136
147
  if (this.#labelEl) this.#labelEl.textContent = this.label || '';
@@ -92,20 +92,83 @@
92
92
  @scope (list-item-ui) {
93
93
  :where(:scope) {
94
94
  /* ── Layout ── */
95
- --list-item-inset: var(--a-inset);
95
+ --list-item-inset: var(--a-inset);
96
+ --list-item-gap-column: var(--a-space-3);
97
+ --list-item-gap-row: var(--a-space-1);
96
98
 
97
99
  /* ── Colors ── */
98
100
  --list-item-text-color: var(--a-fg);
101
+ --list-item-desc-color: var(--a-fg-muted);
102
+ --list-item-icon-color: var(--a-fg-muted);
99
103
 
100
104
  /* ── Typography ── */
101
- --list-item-font-size: var(--a-ui-size);
105
+ --list-item-font-size: var(--a-ui-size);
106
+ --list-item-desc-font-size: var(--a-ui-sm);
102
107
  }
103
108
 
109
+ /* Anatomy:
110
+ col 1 = icon (auto width; collapses to 0 when no icon)
111
+ col 2 = content stack (text on row 1, description on row 2)
112
+ The icon spans both rows + centers vertically with the stack.
113
+ `[slot="content"]` (used when consumer provides custom rendering)
114
+ spans all columns. */
104
115
  :scope {
105
116
  box-sizing: border-box;
106
- display: block;
117
+ display: grid;
118
+ grid-template-columns: auto 1fr;
119
+ column-gap: var(--list-item-gap-column);
120
+ row-gap: var(--list-item-gap-row);
107
121
  font-size: var(--list-item-font-size);
108
122
  color: var(--list-item-text-color);
109
123
  line-height: 1.4;
124
+ /* Defensive floor: empty list-item-ui (no text/icon/children) collapses
125
+ to 0 height and disappears. Keep a visible row instead. */
126
+ min-height: var(--a-space-6);
127
+ }
128
+
129
+ :scope > [slot="icon"] {
130
+ grid-column: 1;
131
+ grid-row: 1 / -1;
132
+ align-self: center;
133
+ color: var(--list-item-icon-color);
134
+ }
135
+
136
+ :scope > [slot="text"] {
137
+ grid-column: 2;
138
+ grid-row: 1;
139
+ }
140
+
141
+ :scope > [slot="description"] {
142
+ grid-column: 2;
143
+ grid-row: 2;
144
+ color: var(--list-item-desc-color);
145
+ font-size: var(--list-item-desc-font-size);
146
+ line-height: 1.3;
147
+ }
148
+
149
+ /* Custom-content escape hatch — consumer authored a [slot="content"]
150
+ child, the auto-stamp early-returned, and the consumer owns the
151
+ full body. Span all columns so the consumer's layout isn't boxed
152
+ into the content column. */
153
+ :scope > [slot="content"] {
154
+ grid-column: 1 / -1;
155
+ }
156
+
157
+ /* ── Active state ──
158
+ `[data-active]` is the consumer-driven "current item" hook used by
159
+ keyboard-nav-style demos and any host that owns its own active-index
160
+ model (separate from list-ui[selectable] / aria-selected). Reuses
161
+ the accent-muted/accent-strong pair so the two mechanisms paint
162
+ consistently. No border-radius on the row itself — dividers (when
163
+ present) span full-width and rounded corners would clash. */
164
+ :scope[data-active] {
165
+ background: var(--a-accent-muted);
166
+ color: var(--a-accent-strong);
167
+ box-shadow: inset 2px 0 0 var(--a-accent-strong);
168
+ }
169
+
170
+ :scope[data-active] > [slot="icon"],
171
+ :scope[data-active] > [slot="description"] {
172
+ color: var(--a-accent-strong);
110
173
  }
111
174
  }
@@ -42,7 +42,7 @@
42
42
  "default": ""
43
43
  },
44
44
  "variant": {
45
- "description": "Visual treatment. Default ('') renders as a primary-rail group (icon row, caret, collapsible). 'section' renders the header as a static kicker label with always-visible children — matches the prior <section-nav-group-ui>. When the parent <nav-ui> carries variant=\"section\", this group inherits it via CSS cascade unless an explicit variant is set on the group.",
45
+ "description": "Visual treatment. Default ('') renders as a primary-rail group (icon row, caret, collapsible). 'section' renders the header as a static kicker label with always-visible children. When the parent <nav-ui> carries variant=\"section\", this group inherits it via CSS cascade unless an explicit variant is set on the group.",
46
46
  "type": "string",
47
47
  "enum": [
48
48
  "",
@@ -264,11 +264,11 @@ nav-group-ui [slot="popover"] [role="option"][aria-selected="true"]::before {
264
264
  }
265
265
 
266
266
  /* ── Section variant — groups render as kicker labels ──
267
- The prior <section-nav-group-ui> defaulted to collapsible:false
268
- (header was a label, children always visible). The consolidated
269
- nav-group-ui defaults collapsible:true (the primary-variant default).
270
- Section variant restores the old kicker rendering so subnav rails
271
- show all children without an explicit [open] toggle.
267
+ Primary variant defaults to collapsible:true (caret-toggleable).
268
+ Section variant flips to collapsible:false-shape header is a
269
+ static kicker label, children always visible — so subnav rails
270
+ show their full structure without requiring an explicit [open]
271
+ toggle.
272
272
 
273
273
  Two ways to enable: either
274
274
  (a) `<nav-group-ui variant="section">` directly, or
@@ -39,7 +39,7 @@ props:
39
39
  type: string
40
40
  default: ''
41
41
  enum: ['', section]
42
- description: "Visual treatment. Default ('') renders as a primary-rail group (icon row, caret, collapsible). 'section' renders the header as a static kicker label with always-visible children — matches the prior <section-nav-group-ui>. When the parent <nav-ui> carries variant=\"section\", this group inherits it via CSS cascade unless an explicit variant is set on the group."
42
+ description: "Visual treatment. Default ('') renders as a primary-rail group (icon row, caret, collapsible). 'section' renders the header as a static kicker label with always-visible children. When the parent <nav-ui> carries variant=\"section\", this group inherits it via CSS cascade unless an explicit variant is set on the group."
43
43
 
44
44
  events:
45
45
  group-toggle:
@@ -47,7 +47,7 @@
47
47
  "default": ""
48
48
  },
49
49
  "variant": {
50
- "description": "Visual treatment. Default ('') renders as a primary-rail item (reserved icon space, in-icon selected accent). 'section' renders flat — no icon space when absent, left-edge accent bar for selected — matching the prior <section-nav-item-ui>. When the parent <nav-ui> carries variant=\"section\", this item inherits it via CSS cascade unless an explicit variant is set.",
50
+ "description": "Visual treatment. Default ('') renders as a primary-rail item (reserved icon space, in-icon selected accent). 'section' renders flat — no icon space when absent, left-edge accent bar for selected. When the parent <nav-ui> carries variant=\"section\", this item inherits it via CSS cascade unless an explicit variant is set.",
51
51
  "type": "string",
52
52
  "enum": [
53
53
  "",
@@ -162,10 +162,9 @@ nav-item-ui[selected] [slot="icon"]:empty::before {
162
162
  }
163
163
 
164
164
  /* ── Section variant — items render flat (no icon space, no indent) ──
165
- The prior <section-nav-item-ui> didn't reserve space for an absent icon
166
- and used a left-edge accent bar for the selected state. Restore that
167
- shape so subnav rails read as plain links rather than a primary-style
168
- row with a hidden icon slot.
165
+ Section-variant rails read as plain links rather than primary-style
166
+ rows: no reserved icon space when absent, left-edge accent bar for
167
+ the selected state instead of an in-icon accent.
169
168
 
170
169
  Two ways to enable: either
171
170
  (a) `<nav-item-ui variant="section">` directly, or
@@ -43,7 +43,7 @@ props:
43
43
  type: string
44
44
  default: ''
45
45
  enum: ['', section]
46
- description: "Visual treatment. Default ('') renders as a primary-rail item (reserved icon space, in-icon selected accent). 'section' renders flat — no icon space when absent, left-edge accent bar for selected — matching the prior <section-nav-item-ui>. When the parent <nav-ui> carries variant=\"section\", this item inherits it via CSS cascade unless an explicit variant is set."
46
+ description: "Visual treatment. Default ('') renders as a primary-rail item (reserved icon space, in-icon selected accent). 'section' renders flat — no icon space when absent, left-edge accent bar for selected. When the parent <nav-ui> carries variant=\"section\", this item inherits it via CSS cascade unless an explicit variant is set."
47
47
 
48
48
  events:
49
49
  nav-select:
@@ -55,6 +55,16 @@ class UITextarea extends UIFormElement {
55
55
  this.#textEl.contentEditable = 'plaintext-only';
56
56
  }
57
57
 
58
+ // Sync programmatic `value` assignments (form.reset(), trait writes,
59
+ // controlled-input patterns) into the contenteditable surface. Skip
60
+ // when the surface already matches to avoid clobbering an in-flight
61
+ // edit's caret.
62
+ const text = this.value || '';
63
+ if (this.#textEl.textContent !== text) {
64
+ this.#textEl.textContent = text;
65
+ this.#textEl.toggleAttribute('data-empty', !text);
66
+ }
67
+
58
68
  const label = this.querySelector('[slot="label"]');
59
69
  if (label && this.label) label.setAttribute('label', this.label);
60
70
 
package/core/icons.js CHANGED
@@ -212,7 +212,18 @@ const ICON_ALIASES = {
212
212
  'phone': 'phone', 'location': 'map-pin', 'calendar': 'calendar-blank',
213
213
  'time': 'clock', 'user': 'user', 'users': 'users-three',
214
214
  'menu': 'list', 'more': 'dots-three', 'dots-vertical': 'dots-three-vertical', 'filter': 'funnel',
215
- 'inbox': 'tray', 'text-bold': 'text-b',
215
+ 'inbox': 'tray',
216
+ 'text-bold': 'text-b', 'bold': 'text-b', 'italic': 'text-italic', 'underline': 'text-underline',
217
+ 'reset': 'arrow-counter-clockwise', 'undo': 'arrow-counter-clockwise', 'redo': 'arrow-clockwise',
218
+ 'success-checkmark': 'seal-check', 'circuit': 'circuitry',
219
+ 'contrast': 'circle-half', 'theme': 'circle-half', 'dark-mode': 'moon', 'light-mode': 'sun',
220
+ 'alert-triangle': 'warning', 'alert-octagon': 'warning-octagon', 'alert-diamond': 'warning-diamond',
221
+ 'number': 'hash', 'numbered-list': 'list-numbers', 'numeric': 'hash',
222
+ // Phosphor uses suffix-circle for these, but consumers reach for the
223
+ // prefix form ("circle-warning") just as often. Resolve both shapes.
224
+ 'circle-warning': 'warning-circle', 'circle-x': 'x-circle',
225
+ 'circle-check': 'check-circle', 'circle-info': 'info',
226
+ 'circle-question': 'question', 'circle-plus': 'plus-circle', 'circle-minus': 'minus-circle',
216
227
  'sort': 'sort-ascending', 'refresh': 'arrow-clockwise', 'download': 'download-simple',
217
228
  'upload': 'upload-simple', 'share': 'share-network', 'copy': 'copy-simple',
218
229
  'link': 'link-simple', 'external-link': 'arrow-square-out',
@@ -224,6 +235,7 @@ const ICON_ALIASES = {
224
235
  'attachment': 'paperclip', 'attach': 'paperclip',
225
236
  'expand': 'arrows-out', 'collapse': 'arrows-in',
226
237
  'fullscreen': 'arrows-out', 'exit-fullscreen': 'arrows-in',
238
+ 'fade': 'gradient', 'fade-presence': 'gradient',
227
239
  'notification': 'bell', 'notifications': 'bell',
228
240
  'bookmark': 'bookmark-simple', 'favorite': 'heart', 'like': 'heart',
229
241
  'comment': 'chat-circle', 'chat': 'chat-circle',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/web-components",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "AdiaUI web components — vanilla custom elements. A2UI runtime (renderer, registry, streams, wiring) lives in @adia-ai/a2ui-utils.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -83,6 +83,7 @@
83
83
  @import "../components/block/block.css";
84
84
  @import "../components/text/text.css";
85
85
  @import "../components/toggle-group/toggle-group.css";
86
+ @import "../components/demo-toggle/demo-toggle.css";
86
87
  @import "../components/richtext/richtext.css";
87
88
  @import "../components/stream/stream.css";
88
89
  @import "../components/canvas/canvas.css";
@@ -256,7 +256,7 @@
256
256
 
257
257
  /* section — h2/h3, major division within content */
258
258
  --a-section-family: var(--a-font-family-heading);
259
- --a-section-weight: var(--a-weight-semibold);
259
+ --a-section-weight: var(--a-weight-normal);
260
260
  --a-section-sm: 16px;
261
261
  --a-section-md: 17px;
262
262
  --a-section-lg: 19px;