@adia-ai/web-components 0.5.21 → 0.6.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.
package/CHANGELOG.md CHANGED
@@ -11,6 +11,12 @@ runtime ships in the sibling `@adia-ai/a2ui-runtime` package
11
11
 
12
12
  _No pending changes._
13
13
 
14
+ ## [0.6.0] - 2026-05-18
15
+
16
+ _Lockstep ride-along (no source change in this package; companion to web-components v0.6.0 — see root CHANGELOG)._
17
+
18
+ **MINOR-line internal-dep range update:** internal `@adia-ai/*` dependency ranges move from `^0.5.0` to `^0.6.0` per AdiaUI lockstep policy.
19
+
14
20
  ## [0.5.21] - 2026-05-18
15
21
 
16
22
  _Lockstep ride-along (no source change in this package; companion to web-components v0.5.21 — see root CHANGELOG)._
@@ -86,8 +86,7 @@ export { UINavItem } from './nav-item/nav-item.js';
86
86
  export { UIOtpInput } from './otp-input/otp-input.js';
87
87
  export { UIImage } from './image/image.js';
88
88
  export { UISearch } from './search/search.js';
89
- // Suffixed `-ui` to dodge ad-blocker rules that match `/stat.js$script`.
90
- export { UIStat } from './stat/stat-ui.js';
89
+ export { UIStat } from './stat/stat.js';
91
90
  export { UIProgressRow } from './progress-row/progress-row.js';
92
91
  export { UIActionList, UIActionItem } from './action-list/action-list.js';
93
92
  export { UIEmptyState } from './empty-state/empty-state.js';
@@ -13,6 +13,7 @@
13
13
 
14
14
  import { UIFormElement } from '../../core/form.js';
15
15
  import { anchorPopover } from '../../core/anchor.js';
16
+ import { untracked } from '../../core/signals.js';
16
17
 
17
18
  function escapeHTML(s) {
18
19
  return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
@@ -244,21 +245,30 @@ export class UISelect extends UIFormElement {
244
245
  }
245
246
 
246
247
  set options(list) {
247
- this.#options = list;
248
- // Ensure listbox exists before rendering (may be called before first render)
249
- if (!this.#listbox) {
250
- this.#listbox = this.querySelector('[slot="listbox"]');
248
+ // Wrap the internal rebuild in `untracked` so reads of `this.value` inside
249
+ // `#renderOptions()` (for aria-selected) and `#displayText()` (for the
250
+ // trigger label) don't subscribe a calling effect to this element's value
251
+ // signal. Without this, setting `.options` followed by `.value` from
252
+ // inside an effect creates a self-trigger cycle — the effect subscribes
253
+ // to value via #renderOptions, then notifies itself via the value write,
254
+ // and re-runs until the drain-loop guard fires.
255
+ untracked(() => {
256
+ this.#options = list;
257
+ // Ensure listbox exists before rendering (may be called before first render)
251
258
  if (!this.#listbox) {
252
- this.#listbox = document.createElement('div');
253
- this.#listbox.setAttribute('slot', 'listbox');
254
- this.#listbox.setAttribute('role', 'listbox');
255
- this.#listbox.setAttribute('popover', 'manual');
256
- this.appendChild(this.#listbox);
259
+ this.#listbox = this.querySelector('[slot="listbox"]');
260
+ if (!this.#listbox) {
261
+ this.#listbox = document.createElement('div');
262
+ this.#listbox.setAttribute('slot', 'listbox');
263
+ this.#listbox.setAttribute('role', 'listbox');
264
+ this.#listbox.setAttribute('popover', 'manual');
265
+ this.appendChild(this.#listbox);
266
+ }
257
267
  }
258
- }
259
- this.#renderOptions();
260
- const display = this.querySelector('[slot="display"]');
261
- if (display) display.textContent = this.#displayText();
268
+ this.#renderOptions();
269
+ const display = this.querySelector('[slot="display"]');
270
+ if (display) display.textContent = this.#displayText();
271
+ });
262
272
  }
263
273
 
264
274
  get options() { return this.#options; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/web-components",
3
- "version": "0.5.21",
3
+ "version": "0.6.0",
4
4
  "description": "AdiaUI web components — vanilla custom elements. A2UI runtime (renderer, registry, streams, wiring) lives in @adia-ai/a2ui-runtime.",
5
5
  "type": "module",
6
6
  "types": "./index.d.ts",
@@ -85,7 +85,7 @@
85
85
  "./core/icons-phosphor.js"
86
86
  ],
87
87
  "dependencies": {
88
- "@adia-ai/a2ui-runtime": "^0.5.0",
88
+ "@adia-ai/a2ui-runtime": "^0.6.0",
89
89
  "@codemirror/commands": "^6.10.3",
90
90
  "@codemirror/language": "^6.12.3",
91
91
  "@codemirror/lint": "^6.9.5",