@aceshooting/lyra-ui 25.4.0 → 25.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.
Files changed (179) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +15 -3
  3. package/custom-elements.json +1 -1
  4. package/dist/all.d.ts +1 -1
  5. package/dist/all.js +1 -1
  6. package/dist/cli/migration-contract.json +1 -1
  7. package/dist/components/forms/button/button.class.d.ts +13 -3
  8. package/dist/components/forms/button/button.class.js +2 -2
  9. package/dist/components/forms/catalog-picker-base.d.ts +48 -0
  10. package/dist/components/forms/catalog-picker-base.js +29 -0
  11. package/dist/components/forms/catalog-picker-base.styles.d.ts +1 -0
  12. package/dist/components/forms/catalog-picker-base.styles.js +1 -0
  13. package/dist/components/forms/combobox/combobox.class.d.ts +4 -1
  14. package/dist/components/forms/combobox/combobox.class.js +2 -2
  15. package/dist/components/forms/country-picker/country-picker.class.d.ts +40 -0
  16. package/dist/components/forms/country-picker/country-picker.class.js +1 -0
  17. package/dist/components/forms/country-picker/country-picker.d.ts +1 -0
  18. package/dist/components/forms/country-picker/country-picker.js +1 -0
  19. package/dist/components/forms/country-picker/country-picker.styles.d.ts +1 -0
  20. package/dist/components/forms/country-picker/country-picker.styles.js +1 -0
  21. package/dist/components/forms/currency-picker/currency-catalog.d.ts +19 -0
  22. package/dist/components/forms/currency-picker/currency-catalog.js +1 -0
  23. package/dist/components/forms/currency-picker/currency-picker.class.d.ts +95 -0
  24. package/dist/components/forms/currency-picker/currency-picker.class.js +30 -0
  25. package/dist/components/forms/currency-picker/currency-picker.d.ts +1 -0
  26. package/dist/components/forms/currency-picker/currency-picker.js +1 -0
  27. package/dist/components/forms/currency-picker/currency-picker.styles.d.ts +1 -0
  28. package/dist/components/forms/currency-picker/currency-picker.styles.js +1 -0
  29. package/dist/components/forms/currency-picker/currency-presentation.d.ts +3 -0
  30. package/dist/components/forms/currency-picker/currency-presentation.js +1 -0
  31. package/dist/components/forms/currency-picker/currency-types.d.ts +3 -0
  32. package/dist/components/forms/index.d.ts +1 -1
  33. package/dist/components/forms/index.js +1 -1
  34. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +37 -11
  35. package/dist/components/forms/locale-picker/locale-picker.class.js +43 -8
  36. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  37. package/dist/components/forms/select/select.class.d.ts +9 -2
  38. package/dist/components/forms/select/select.class.js +2 -2
  39. package/dist/components/forms/select/select.styles.js +1 -1
  40. package/dist/components/forms/time-zone-picker/time-zone-picker.class.d.ts +40 -0
  41. package/dist/components/forms/time-zone-picker/time-zone-picker.class.js +1 -0
  42. package/dist/components/forms/time-zone-picker/time-zone-picker.d.ts +1 -0
  43. package/dist/components/forms/time-zone-picker/time-zone-picker.js +1 -0
  44. package/dist/components/forms/time-zone-picker/time-zone-picker.styles.d.ts +1 -0
  45. package/dist/components/forms/time-zone-picker/time-zone-picker.styles.js +1 -0
  46. package/dist/components/forms/unit-picker/unit-picker.class.d.ts +38 -0
  47. package/dist/components/forms/unit-picker/unit-picker.class.js +1 -0
  48. package/dist/components/forms/unit-picker/unit-picker.d.ts +1 -0
  49. package/dist/components/forms/unit-picker/unit-picker.js +1 -0
  50. package/dist/components/forms/unit-picker/unit-picker.styles.d.ts +1 -0
  51. package/dist/components/forms/unit-picker/unit-picker.styles.js +1 -0
  52. package/dist/components/lr-country-picker.js +1 -0
  53. package/dist/components/lr-currency-picker.js +1 -0
  54. package/dist/components/lr-time-zone-picker.js +1 -0
  55. package/dist/components/lr-unit-picker.js +1 -0
  56. package/dist/components/overlays/overlay/popover.class.d.ts +6 -5
  57. package/dist/components/overlays/overlay/popover.class.js +1 -1
  58. package/dist/countries.d.ts +7 -0
  59. package/dist/countries.js +1 -0
  60. package/dist/currency.d.ts +39 -0
  61. package/dist/currency.js +1 -0
  62. package/dist/custom-elements-jsx.d.ts +1 -1
  63. package/dist/events.d.ts +28 -24
  64. package/dist/framework-types.d.ts +2 -2
  65. package/dist/internal/autoloader-manifest.js +1 -1
  66. package/dist/internal/autoloader-tags.d.ts +1 -1
  67. package/dist/internal/autoloader-tags.js +1 -1
  68. package/dist/internal/default-strings.generated.d.ts +1 -1
  69. package/dist/internal/default-strings.generated.js +1 -1
  70. package/dist/internal/form-associated.d.ts +3 -1
  71. package/dist/internal/form-associated.js +1 -1
  72. package/dist/internal/localization-types.d.ts +1 -1
  73. package/dist/internal/localization.js +1 -1
  74. package/dist/internal/package-metadata.d.ts +1 -1
  75. package/dist/internal/package-metadata.js +1 -1
  76. package/dist/internal/root-registration-allowlist.d.ts +1 -1
  77. package/dist/internal/root-registration-allowlist.js +1 -1
  78. package/dist/internal/scoped-definitions.generated.js +1 -1
  79. package/dist/internal/selection-catalog.d.ts +4 -0
  80. package/dist/internal/selection-catalog.js +1 -0
  81. package/dist/lyra.d.ts +1 -1
  82. package/dist/lyra.js +1 -1
  83. package/dist/ssr/all.d.ts +1 -1
  84. package/dist/ssr/all.js +1 -1
  85. package/dist/ssr.d.ts +4 -4
  86. package/dist/ssr.js +1 -1
  87. package/dist/svelte.d.ts +1 -1
  88. package/dist/testing/lyra-tag-event-map.d.ts +2 -2
  89. package/dist/testing/lyra-tag-event-map.js +1 -1
  90. package/dist/time-zones.d.ts +8 -0
  91. package/dist/time-zones.js +1 -0
  92. package/dist/translations/am/forms.js +1 -1
  93. package/dist/translations/ar/forms.js +1 -1
  94. package/dist/translations/bho/forms.js +1 -1
  95. package/dist/translations/bn/forms.js +1 -1
  96. package/dist/translations/cs/forms.js +1 -1
  97. package/dist/translations/da/forms.js +1 -1
  98. package/dist/translations/de/forms.js +1 -1
  99. package/dist/translations/el/forms.js +1 -1
  100. package/dist/translations/es/forms.js +1 -1
  101. package/dist/translations/fa/forms.js +1 -1
  102. package/dist/translations/fa-AF/forms.js +1 -1
  103. package/dist/translations/fi/forms.js +1 -1
  104. package/dist/translations/fr/forms.js +1 -1
  105. package/dist/translations/gu/forms.js +1 -1
  106. package/dist/translations/ha/forms.js +1 -1
  107. package/dist/translations/he/forms.js +1 -1
  108. package/dist/translations/hi/forms.js +1 -1
  109. package/dist/translations/hr/forms.js +1 -1
  110. package/dist/translations/hu/forms.js +1 -1
  111. package/dist/translations/id/forms.js +1 -1
  112. package/dist/translations/ig/forms.js +1 -1
  113. package/dist/translations/it/forms.js +1 -1
  114. package/dist/translations/ja/forms.js +1 -1
  115. package/dist/translations/jv/forms.js +1 -1
  116. package/dist/translations/kk/forms.js +1 -1
  117. package/dist/translations/kn/forms.js +1 -1
  118. package/dist/translations/ko/forms.js +1 -1
  119. package/dist/translations/ln/forms.js +1 -1
  120. package/dist/translations/ml/forms.js +1 -1
  121. package/dist/translations/mr/forms.js +1 -1
  122. package/dist/translations/ms/forms.js +1 -1
  123. package/dist/translations/my/forms.js +1 -1
  124. package/dist/translations/nb/forms.js +1 -1
  125. package/dist/translations/ne/forms.js +1 -1
  126. package/dist/translations/nl/forms.js +1 -1
  127. package/dist/translations/nn/forms.js +1 -1
  128. package/dist/translations/om/forms.js +1 -1
  129. package/dist/translations/or/forms.js +1 -1
  130. package/dist/translations/pa/forms.js +1 -1
  131. package/dist/translations/pcm/forms.js +1 -1
  132. package/dist/translations/pl/forms.js +1 -1
  133. package/dist/translations/pnb/forms.js +1 -1
  134. package/dist/translations/ps/forms.js +1 -1
  135. package/dist/translations/pt-BR/forms.js +1 -1
  136. package/dist/translations/pt-PT/forms.js +1 -1
  137. package/dist/translations/ro/forms.js +1 -1
  138. package/dist/translations/ru/forms.js +1 -1
  139. package/dist/translations/sd/forms.js +1 -1
  140. package/dist/translations/sl/forms.js +1 -1
  141. package/dist/translations/su/forms.js +1 -1
  142. package/dist/translations/sv/forms.js +1 -1
  143. package/dist/translations/sw/forms.js +1 -1
  144. package/dist/translations/ta/forms.js +1 -1
  145. package/dist/translations/te/forms.js +1 -1
  146. package/dist/translations/th/forms.js +1 -1
  147. package/dist/translations/tl/forms.js +1 -1
  148. package/dist/translations/tr/forms.js +1 -1
  149. package/dist/translations/uk/forms.js +1 -1
  150. package/dist/translations/ur/forms.js +1 -1
  151. package/dist/translations/uz/forms.js +1 -1
  152. package/dist/translations/vi/forms.js +1 -1
  153. package/dist/translations/yo/forms.js +1 -1
  154. package/dist/translations/zh-CN/forms.js +1 -1
  155. package/dist/translations/zh-TW/forms.js +1 -1
  156. package/dist/translations/zu/forms.js +1 -1
  157. package/dist/units.d.ts +5 -0
  158. package/dist/units.js +1 -0
  159. package/dist/vue.d.ts +1 -1
  160. package/llms/components/lr-button.md +9 -0
  161. package/llms/components/lr-combobox.md +5 -0
  162. package/llms/components/lr-country-picker.md +92 -0
  163. package/llms/components/lr-currency-picker.md +101 -0
  164. package/llms/components/lr-locale-picker.md +18 -4
  165. package/llms/components/lr-popover.md +10 -4
  166. package/llms/components/lr-select.md +29 -0
  167. package/llms/components/lr-time-zone-picker.md +56 -0
  168. package/llms/components/lr-unit-picker.md +54 -0
  169. package/llms/index.md +6 -2
  170. package/llms/shared/events-and-types.md +16 -0
  171. package/llms/shared/imports-and-registration.md +1 -1
  172. package/llms/shared/testing-and-utilities.md +4 -1
  173. package/llms/shared.md +21 -2
  174. package/llms.txt +1 -1
  175. package/locales.json +138 -138
  176. package/package.json +55 -3
  177. package/registrations.json +1 -1
  178. package/vscode-html-data.json +1 -1
  179. package/web-types.json +1 -1
@@ -0,0 +1,101 @@
1
+ <!-- GENERATED by scripts/build-llms.mjs from llms/forms.md — do not edit this file. -->
2
+
3
+ # `lr-currency-picker`
4
+
5
+ - **Import** `import '@aceshooting/lyra-ui/components/lr-currency-picker.js';` (stable tag alias; registers the tag)
6
+ - **Class** `LyraCurrencyPicker`, also available unregistered from `@aceshooting/lyra-ui/components/forms/currency-picker/currency-picker.class.js`
7
+ - **Family** `components/forms/` — see `llms/index.md` for its siblings
8
+ - **Status** `experimental` since `25.5.0` — see the maturity and deprecation policy in `llms/shared.md`
9
+ - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [forms](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/forms.md)
10
+ - **Deprecations** none
11
+ - **Optional peers** none
12
+ - **Themeable via** 11 parts, 0 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
+ - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
+
15
+ ---
16
+
17
+ ## `lr-currency-picker`
18
+
19
+ A form-associated, single-currency selector with a compact ISO-code trigger and localized currency
20
+ names and symbols in its options. It composes `lr-select` (or `lr-combobox` when searchable) and `lr-option`; no additional popover,
21
+ currency-name table or optional peer is needed. Selection changes the field value only: exchange
22
+ rates, amount conversion, persistence and the application's display-currency preference belong to
23
+ the application. Selecting a currency does not change the interface language.
24
+
25
+ **Value and catalog.** `value` defaults to `''`; no currency is inferred or selected automatically.
26
+ Set `value="EUR"` when your application wants euros by default. Valid three-letter codes are trimmed
27
+ and uppercased. The default catalog contains the pinned ISO 4217 currency, fund and metal codes,
28
+ excluding the testing/no-currency codes `XTS` and `XXX`. Use `.currencies` for an ordered everyday
29
+ subset. Omitted, `undefined` or `null` restores the default catalog; `[]` means no options.
30
+
31
+ `currencies` accepts `LyraCurrencyCatalog = readonly string[] | readonly LyraCurrencyEntry[]`.
32
+ Each `LyraCurrencyEntry { readonly code: string; readonly label?: string; readonly symbol?: string;
33
+ readonly group?: string; readonly disabled?: boolean }` supplies one option. Names and symbols come from `Intl` using the field's
34
+ effective locale, with code fallbacks where display data is unavailable. Caller labels/symbols,
35
+ including explicit empty strings, override that presentation. The catalog is copied; reassign it
36
+ to change options. At most 512 rows are examined, invalid rows are skipped, and the first valid
37
+ entry for each normalized code wins. Caller order is preserved.
38
+
39
+ **Unavailable values stay visible.** A value outside the configured catalog, a malformed nonempty
40
+ value, or a selected entry that becomes disabled is retained and marked unavailable. It fails
41
+ validation until cleared or replaced; it is never silently switched to another currency. Such a
42
+ value is not added as a selectable option. A caller's `setCustomValidity()` message takes priority.
43
+
44
+ **Field API.** `label`, `hint`, `errorText` (`error-text`) and their slots supply field chrome.
45
+ `accessibleLabel` (host attribute `aria-label`) overrides the computed field name; otherwise a label or localized Currency name
46
+ names the actual control. `placeholder` defaults to localized Select, with explicit empty strings
47
+ preserved. `name`, `form`, `required`, `disabled`, `defaultValue`, native form submission/reset,
48
+ fieldset disablement, `checkValidity()`, `reportValidity()` and `setCustomValidity()` follow the
49
+ shared form contracts. `size` defaults to `m`; `clearable` defaults to `false`. `focus()`, `blur()`
50
+ and `click()` forward to the visible control.
51
+
52
+ `customError: string | null = null` (attribute `custom-error`, reflected) supplies a consumer
53
+ validation message. `getForm()` returns the browser-resolved form owner, including an external
54
+ owner selected by `form`. `setCustomValidity(message)` sets or clears `customError`;
55
+ `resetValidity()` clears only that consumer error and recomputes the current required/catalog
56
+ constraints, leaving `value`, `defaultValue` and interaction state unchanged.
57
+
58
+ `topLayer` (attribute `top-layer`) defaults to `false`; enable it inside clipped headers or dialogs.
59
+ An explicit `positioningStrategy` (attribute `positioning-strategy`) of `"fixed"` or `"absolute"`
60
+ overrides inherited `--lr-positioning-strategy`.
61
+ Keyboard navigation and ISO-code type-ahead use the select contract by default. Set
62
+ `searchable` (default `false`) to enable a text filter matching codes, localized names, literal
63
+ labels, and regular/narrow symbols. Typing only filters; it does not change `value` or emit
64
+ selection events. A query matching the current displayed code follows the combobox convention
65
+ of showing the complete list. An empty or unmatched query never creates a currency.
66
+ `group` supplies caller-owned headings for contiguous rows; order is never rearranged.
67
+ `autocomplete='off'`, `inputMode=''` (attribute `inputmode`), `enterKeyHint=''`
68
+ (attribute `enterkeyhint`), `spellcheck=false`,
69
+ `autocapitalize=''`, and `autocorrect=true` forward native editing guidance in searchable mode.
70
+ The readonly `input: HTMLInputElement | null` exposes that native filter (null in compact mode).
71
+ After directly changing its DOM value, dispatch a native `input` event to update filtering.
72
+ Mode changes, reset and reconnect clear unfinished filtering without changing the reset default.
73
+
74
+ **Events:** An accepted user choice or clear updates `value` synchronously, then emits exactly one
75
+ `input`, `lr-input`, `change`, `lr-change` sequence. The prefixed details are
76
+ `LyraCurrencyChangeDetail { readonly value: string; readonly previousValue: string }`.
77
+ Re-selecting the current code, programmatic
78
+ updates, resets, locale changes and catalog replacements emit no change event. Native `focus` and
79
+ `blur` relay once; the cancelable `lr-invalid` alias follows native validation.
80
+
81
+ **Slots:** `label`, `hint`, `error` — custom field copy. There is no option/default content slot;
82
+ bind `currencies` to supply rows.
83
+
84
+ **CSS parts:** `form-control`, `form-control-label`, `hint`, `error`;
85
+ `select-trigger`, `select-display-input`, `select-listbox`, `select-option`, `select-option-sub`,
86
+ `select-clear-button`, `select-group-label`. Both composed controls preserve these part names
87
+ and inherit shared form-control and surface tokens.
88
+
89
+ ```html
90
+ <script type="module">
91
+ import '@aceshooting/lyra-ui/components/lr-currency-picker.js';
92
+
93
+ const picker = document.querySelector('lr-currency-picker');
94
+ picker.currencies = ['EUR', 'USD', 'GBP', 'CHF', 'JPY', 'CAD', 'AUD'];
95
+ picker.addEventListener('lr-change', ({ detail }) => {
96
+ console.log(detail.value, detail.previousValue);
97
+ });
98
+ </script>
99
+
100
+ <lr-currency-picker name="currency" label="Display currency" value="EUR"></lr-currency-picker>
101
+ ```
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [forms](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/forms.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 15 parts, 25 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 17 parts, 25 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -20,8 +20,8 @@ A closed-list locale switcher over the library's own locale registry. First-part
20
20
  Web Awesome equivalent). With `locales` unset (the default), the offered rows are exactly
21
21
  `getRegisteredLyraLocales()` — every locale with strings registered via `registerLyraLocale()`,
22
22
  plus `en` — kept live via `subscribeLyraLocaleRegistry()`. Built directly on `lr-select`'s
23
- trigger-button/`aria-activedescendant` listbox technique, not composed from it — a plain closed
24
- list, no filter/free-text mode.
23
+ trigger-button/`aria-activedescendant` listbox technique, not composed from it. Optional
24
+ `searchable` adds a text filter; free text never becomes a locale selection.
25
25
 
26
26
  Host `aria-describedby` references resolve onto the role=combobox trigger before its local error and
27
27
  hint guidance. The relationship tracks missing IDs, target replacement, removal/reinsertion,
@@ -52,6 +52,18 @@ readonly LyraLocaleEntry[]`, `LyraLocaleEntry { tag: string; label?: string; cou
52
52
  the catalog while the listbox is open keeps keyboard navigation valid: an active row beyond the
53
53
  new end is rehomed to the last remaining row. Arrow/Home/End/typeahead changes scroll the active
54
54
  owned option into nearest view after render; replacement and disconnect cancel stale scrolls.
55
+ - `searchable: boolean = false` — add a search field inside the open menu. Substring matching
56
+ ignores case and accents across language tags, native names, localized names and caller labels;
57
+ for example, `eng` finds English. Filtering emits no selection events and does not invoke a
58
+ locale loader. Arrow keys and Enter select an offered match; ordinary text editing and IME
59
+ composition remain native. Empty results show localized guidance. Closing, disabling, resetting,
60
+ reconnecting or turning search off clears unfinished filtering. The default keeps the existing
61
+ compact list without an input.
62
+ - `autocomplete: string = 'off'`, `inputMode: string = ''` (attribute `inputmode`),
63
+ `enterKeyHint: string = ''` (attribute `enterkeyhint`), `spellcheck: boolean = false`,
64
+ `autocapitalize: string = ''`, `autocorrect: boolean = true` — native guidance for the filter.
65
+ The readonly `input: HTMLInputElement | null` exposes it in searchable mode. After directly
66
+ editing `input.value`, dispatch a native `input` event to update the matches.
55
67
  - `topLayer: boolean = false` (attribute `top-layer`, reflected) — same contract as `<lr-popover>`:
56
68
  always shows the open listbox in the browser top layer, placed `fixed` whatever the positioning
57
69
  strategy resolves to, so it paints above a sibling surface stacked higher than a `z-index`ed fixed
@@ -177,7 +189,9 @@ visually hidden in flag-only mode), `listbox`, `option`, `option-flag` (present
177
189
  `optionDisplay` is `label-tag`, and absent from the DOM entirely under `optionDisplay="label"`),
178
190
  `expand-icon`,
179
191
  `hint`, `error`, `load-status` (the optional localized loading or failure message), and
180
- `load-retry` (the retry button shown after a locale load fails).
192
+ `load-retry` (the retry button shown after a locale load fails), `search-input` (the opt-in
193
+ filter) and `empty` (the no-match message). Search uses the localized `localePickerSearchLabel`
194
+ and `localePickerEmpty` string keys.
181
195
 
182
196
  **The required marker.** `required` with a non-empty `label` paints the library's shared marker on
183
197
  `[part="form-control-label"]` — the one `::after` rule described under "The required-field marker"
@@ -183,10 +183,16 @@ If the import fails, leave the native disclosure visible and usable.
183
183
  To preserve the previous Lyra-shaped defaults explicitly, use
184
184
  `placement="bottom-start" distance="4" without-arrow`; origin-aware migration emits those tokens.
185
185
 
186
- The slotted trigger receives `aria-haspopup`, `aria-expanded`, and `aria-controls`. With no slotted
187
- trigger, a live HTML `for` target receives the identical ownership contract. A wrapper/custom
188
- trigger's composed descendant that actually receives focus receives the same semantics and becomes
189
- the focus-return target. The component supplies the real popup to the shared relationship owner;
186
+ The slotted trigger owns interaction; with no slotted trigger, a live HTML `for` target owns it.
187
+ Only its semantic focus target receives `aria-haspopup`, `aria-expanded`, and `aria-controls`.
188
+ For wrapper/custom triggers such as `lr-button`, the composed native control receives these
189
+ attributes and becomes the focus-return target; the generic host receives no generated trigger
190
+ ARIA, including when the host forwards a roving `tabindex` to its native control. Native triggers
191
+ and focusable hosts with an authored role supporting expansion (such as `button`) own their state
192
+ directly; roles such as `img` and ordinary text fields receive no generated expansion state.
193
+ Ownership follows replacement controls and waits for an unresolved slotted or `for` custom trigger
194
+ to upgrade.
195
+ The component supplies the real popup to the shared relationship owner;
190
196
  because current browsers reject a light-DOM reference into a private shadow tree, that inward edge
191
197
  is exposed as the public `lr-popover` host. Target insertion, removal, replacement, `id` changes,
192
198
  and late custom-element upgrade are tracked live. Authored relationship tokens compose, generated
@@ -32,6 +32,29 @@ Session-history/autofill restoration assigns the stored string through the same
32
32
  value/form/validity path as a programmatic value write and does not emit `input`, `change`, or
33
33
  `lr-change`.
34
34
 
35
+ **Selecting options in browser tests.** The light-DOM `<lr-option>` children supply option data;
36
+ the clickable rows are rendered inside `<lr-select>`'s shadow-root listbox as
37
+ `[part="option"][role="option"]`, each with a `data-value` matching its represented value.
38
+ Click the trigger to open the listbox, then target a rendered row. For example, in Playwright:
39
+
40
+ ```ts
41
+ const select = page.locator('lr-select[name="country"]');
42
+ await select.getByRole('combobox').click();
43
+ await select.getByRole('option', { name: 'France' }).click();
44
+ // When the label is localized or otherwise variable, target its value instead:
45
+ await select.getByRole('combobox').click();
46
+ await select.locator('[part="option"][data-value="fr"]').click();
47
+ ```
48
+
49
+ For an in-page component test with a `LyraSelect` element, the public
50
+ `@aceshooting/lyra-ui/testing` `chooseOption(selectElement, 'fr')` driver opens the listbox,
51
+ clicks its first rendered row with that value, and awaits the component update. It also works in
52
+ DOM test environments without Playwright; see [interaction drivers](shared/testing-and-utilities.md#driving-a-components-real-activation-path-interaction-drivers).
53
+
54
+ Playwright's locators enter the open shadow root. A light-DOM `lr-option[value="fr"]` has no
55
+ clickable box in this picker. If multiple options share a value, `data-value` matches every
56
+ occurrence; narrow by accessible name or assert their order before choosing an occurrence.
57
+
35
58
  Mounted `option.selected` assignments update the picker value and form submission immediately,
36
59
  including deselection and equal-value writes. Duplicate-valued options retain their individual
37
60
  occurrence identities. These programmatic writes emit no user input/change event.
@@ -236,6 +259,12 @@ renders the same localized `loading` text in place of `placeholder`, so a consum
236
259
  hand-write a conditional placeholder bound to the same flag and re-localize, in its own catalogue,
237
260
  the string this control already owns.
238
261
 
262
+ When not loading, before the browser first reads the option slot, including during SSR, a committed
263
+ value renders as its raw code without an unavailable badge, synthetic unknown option, or custom unknown label.
264
+ After hydration observes the slot, real option labels and genuine unmatched-value feedback resolve
265
+ normally; an observed empty slot is an empty catalog. Server rendering does not inspect browser
266
+ slot assignments or provide an interactive popup without JavaScript.
267
+
239
268
  **Methods:** `focus(options?)`, `blur()`, and `click()` forward to the internal trigger button.
240
269
  `show()` and `hide()` return `Promise<void>` and resolve after `lr-after-show`/`lr-after-hide` once
241
270
  the matching transition settles. `getForm()` returns the browser-resolved form owner, including an
@@ -0,0 +1,56 @@
1
+ <!-- GENERATED by scripts/build-llms.mjs from llms/forms.md — do not edit this file. -->
2
+
3
+ # `lr-time-zone-picker`
4
+
5
+ - **Import** `import '@aceshooting/lyra-ui/components/lr-time-zone-picker.js';` (stable tag alias; registers the tag)
6
+ - **Class** `LyraTimeZonePicker`, also available unregistered from `@aceshooting/lyra-ui/components/forms/time-zone-picker/time-zone-picker.class.js`
7
+ - **Family** `components/forms/` — see `llms/index.md` for its siblings
8
+ - **Status** `experimental` since `25.5.0` — see the maturity and deprecation policy in `llms/shared.md`
9
+ - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [forms](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/forms.md)
10
+ - **Deprecations** none
11
+ - **Optional peers** none
12
+ - **Themeable via** 11 parts, 0 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
+ - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
+
15
+ ---
16
+
17
+ ## `lr-time-zone-picker`
18
+
19
+ A form-associated identifier selector. Import
20
+ `@aceshooting/lyra-ui/components/lr-time-zone-picker.js`. It follows the
21
+ [shared field contract](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/components/lr-country-picker.md),
22
+ with `.timeZones` accepting
23
+ `LyraTimeZoneCatalog = readonly string[] | readonly LyraTimeZoneEntry[]`.
24
+ Default options are `UTC` followed by the runtime's supported primary IANA identifiers, or only
25
+ `UTC` when that catalog API is unavailable. Supply the same explicit catalog on server and client
26
+ when their time-zone data may differ. `value=''` selects nothing automatically.
27
+
28
+ Identifiers are trimmed and case-sensitive, limited to 256 characters, and never canonicalized.
29
+ Caller catalogs can retain aliases or custom identifiers. Default labels replace underscores
30
+ with spaces; `label` overrides provide other display names, and `searchable` matches both.
31
+ Selection does not change the application's time zone or calculate offsets, clocks or daylight
32
+ saving transitions. Catalog types and `getTimeZoneCodes()` are documented in the
33
+ [catalog helper reference](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/forms.md#country-time-zone-and-unit-catalog-helpers).
34
+
35
+ **Field API:** `label`, `hint`, `errorText` (`error-text`), `placeholder`, `accessibleLabel`
36
+ (`aria-label`), `name`, `form`, `value`, `defaultValue`, `required`, `disabled`, `customError`
37
+ (`custom-error`), `size`, `clearable`, `searchable`, `topLayer` (`top-layer`),
38
+ `positioningStrategy` (`positioning-strategy`), `autocomplete`, `inputMode` (`inputmode`),
39
+ `enterKeyHint` (`enterkeyhint`), `spellcheck`, `autocapitalize`, `autocorrect`, and readonly `input`.
40
+ Defaults and form/editing methods follow the
41
+ [shared contract](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/components/lr-country-picker.md), including
42
+ `getForm()`, `checkValidity()`, `reportValidity()`, `setCustomValidity(message)` and
43
+ `resetValidity()` for the owning form and consumer validation messages.
44
+
45
+ **Events:** `input`, `lr-input`, `change`, `lr-change`, `focus`, `blur`, `lr-invalid`.
46
+ **Slots:** `label`, `hint`, `error`.
47
+ **CSS parts:** `form-control`, `form-control-label`, `hint`, `error`, `select-trigger`,
48
+ `select-display-input`, `select-listbox`, `select-option`, `select-option-sub`, `select-group-label`,
49
+ `select-clear-button`.
50
+
51
+ ```html
52
+ <script type="module">
53
+ import '@aceshooting/lyra-ui/components/lr-time-zone-picker.js';
54
+ </script>
55
+ <lr-time-zone-picker name="zone" label="Time zone" value="UTC" searchable></lr-time-zone-picker>
56
+ ```
@@ -0,0 +1,54 @@
1
+ <!-- GENERATED by scripts/build-llms.mjs from llms/forms.md — do not edit this file. -->
2
+
3
+ # `lr-unit-picker`
4
+
5
+ - **Import** `import '@aceshooting/lyra-ui/components/lr-unit-picker.js';` (stable tag alias; registers the tag)
6
+ - **Class** `LyraUnitPicker`, also available unregistered from `@aceshooting/lyra-ui/components/forms/unit-picker/unit-picker.class.js`
7
+ - **Family** `components/forms/` — see `llms/index.md` for its siblings
8
+ - **Status** `experimental` since `25.5.0` — see the maturity and deprecation policy in `llms/shared.md`
9
+ - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [forms](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/forms.md)
10
+ - **Deprecations** none
11
+ - **Optional peers** none
12
+ - **Themeable via** 11 parts, 0 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
+ - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
+
15
+ ---
16
+
17
+ ## `lr-unit-picker`
18
+
19
+ A form-associated measurement-unit selector. Import
20
+ `@aceshooting/lyra-ui/components/lr-unit-picker.js`. It follows the
21
+ [shared field contract](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/components/lr-country-picker.md),
22
+ with `.units` accepting
23
+ `LyraUnitCatalog = readonly string[] | readonly LyraUnitEntry[]`.
24
+ The default catalog contains the 45 standard ECMA-402 simple units. `value=''` selects nothing;
25
+ identifiers are trimmed and case-sensitive, limited to 256 characters. Caller catalogs may include
26
+ custom or compound units. `Intl.NumberFormat` resolves localized singular names and short symbols;
27
+ unsupported identifiers fall back to their code. Literal `label` and `symbol` overrides, including
28
+ empty strings, take precedence. `searchable` matches identifiers, localized/literal names and
29
+ symbols. Selection edits no amount and performs no unit conversion. Catalog types and name
30
+ resolution are documented in the
31
+ [catalog helper reference](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/forms.md#country-time-zone-and-unit-catalog-helpers).
32
+
33
+ **Field API:** `label`, `hint`, `errorText` (`error-text`), `placeholder`, `accessibleLabel`
34
+ (`aria-label`), `name`, `form`, `value`, `defaultValue`, `required`, `disabled`, `customError`
35
+ (`custom-error`), `size`, `clearable`, `searchable`, `topLayer` (`top-layer`),
36
+ `positioningStrategy` (`positioning-strategy`), `autocomplete`, `inputMode` (`inputmode`),
37
+ `enterKeyHint` (`enterkeyhint`), `spellcheck`, `autocapitalize`, `autocorrect`, and readonly `input`.
38
+ Defaults and form/editing methods follow the
39
+ [shared contract](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/components/lr-country-picker.md), including
40
+ `getForm()`, `checkValidity()`, `reportValidity()`, `setCustomValidity(message)` and
41
+ `resetValidity()` for the owning form and consumer validation messages.
42
+
43
+ **Events:** `input`, `lr-input`, `change`, `lr-change`, `focus`, `blur`, `lr-invalid`.
44
+ **Slots:** `label`, `hint`, `error`.
45
+ **CSS parts:** `form-control`, `form-control-label`, `hint`, `error`, `select-trigger`,
46
+ `select-display-input`, `select-listbox`, `select-option`, `select-option-sub`, `select-group-label`,
47
+ `select-clear-button`.
48
+
49
+ ```html
50
+ <script type="module">
51
+ import '@aceshooting/lyra-ui/components/lr-unit-picker.js';
52
+ </script>
53
+ <lr-unit-picker name="unit" label="Measurement unit" value="meter" searchable></lr-unit-picker>
54
+ ```
package/llms/index.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Component index
4
4
 
5
- 303 custom elements, grouped by the source family they live in.
5
+ 307 custom elements, grouped by the source family they live in.
6
6
 
7
7
  **Reading one component.** Its reference file path is derived from the tag — no search needed:
8
8
  `llms/components/<tag>.md` (e.g. `llms/components/lr-table.md`): import path, optional peers,
@@ -30,7 +30,7 @@ and testing and utilities (`llms/shared/testing-and-utilities.md`). The combined
30
30
  compatibility guide remains at `llms/shared.md`. Design tokens: `llms/tokens.md`.
31
31
  Optional peers: `llms/peers.md`. Safe `wa-*`/`sl-*` migration: `llms/migration.md`.
32
32
 
33
- ## Form controls & inputs — `components/forms/` (31)
33
+ ## Form controls & inputs — `components/forms/` (35)
34
34
 
35
35
  - `lr-combobox` · lr-combobox.js · `stable` since `4.0.0` — a filterable single/multi select that combines a text input with a listbox.
36
36
  - `lr-option` · lr-option.js · `stable` since `4.0.0` — a selectable option for `<lr-combobox>` and `<lr-select>`.
@@ -63,6 +63,10 @@ Optional peers: `llms/peers.md`. Safe `wa-*`/`sl-*` migration: `llms/migration.m
63
63
  - `lr-locale-picker` · lr-locale-picker.js · `stable` since `6.0.0` — a closed-list locale switcher over the library's own locale registry.
64
64
  - `lr-toggle` · lr-toggle.js · `experimental` since `21.0.0` — a two-state button that owns its `pressed` state.
65
65
  - `lr-toggle-group` · lr-toggle-group.js · `experimental` since `21.0.0` — a set of `<lr-toggle>` children behind one tab stop.
66
+ - `lr-currency-picker` · lr-currency-picker.js · `experimental` since `25.5.0` — a form-associated currency-code selector.
67
+ - `lr-country-picker` · lr-country-picker.js · `experimental` since `25.5.0` — a form-associated country and territory selector.
68
+ - `lr-time-zone-picker` · lr-time-zone-picker.js · `experimental` since `25.5.0` — a form-associated time-zone identifier selector.
69
+ - `lr-unit-picker` · lr-unit-picker.js · `experimental` since `25.5.0` — a form-associated measurement-unit identifier selector.
66
70
 
67
71
  ## Data display, dashboards & flow canvas — `components/data/` (26)
68
72
 
@@ -584,7 +584,9 @@ These named interfaces and helper signatures are available to typed integrations
584
584
  'lr-control-group': LyraControlGroupReactProps;
585
585
  'lr-conversation-item': LyraConversationItemReactProps;
586
586
  'lr-copy-button': LyraCopyButtonReactProps;
587
+ 'lr-country-picker': LyraCountryPickerReactProps;
587
588
  'lr-csv-viewer': LyraCsvViewerReactProps;
589
+ 'lr-currency-picker': LyraCurrencyPickerReactProps;
588
590
  'lr-dashboard-grid': LyraDashboardGridReactProps;
589
591
  'lr-data-grid': LyraDataGridReactProps;
590
592
  'lr-dataset-viewer': LyraDatasetViewerReactProps;
@@ -781,6 +783,7 @@ These named interfaces and helper signatures are available to typed integrations
781
783
  'lr-thread-list': LyraThreadListReactProps;
782
784
  'lr-time-input': LyraTimeInputReactProps;
783
785
  'lr-time-range': LyraTimeRangeReactProps;
786
+ 'lr-time-zone-picker': LyraTimeZonePickerReactProps;
784
787
  'lr-timeline': LyraTimelineReactProps;
785
788
  'lr-timeline-item': LyraTimelineItemReactProps;
786
789
  'lr-toast': LyraToastReactProps;
@@ -803,6 +806,7 @@ These named interfaces and helper signatures are available to typed integrations
803
806
  'lr-tree': LyraTreeReactProps;
804
807
  'lr-tree-item': LyraTreeItemReactProps;
805
808
  'lr-typing-indicator': LyraTypingIndicatorReactProps;
809
+ 'lr-unit-picker': LyraUnitPickerReactProps;
806
810
  'lr-usage-badge': LyraUsageBadgeReactProps;
807
811
  'lr-video': LyraVideoReactProps;
808
812
  'lr-video-playlist': LyraVideoPlaylistReactProps;
@@ -1012,7 +1016,9 @@ These named interfaces and helper signatures are available to typed integrations
1012
1016
  'lr-control-group': LyraComponentTypeMap['lr-control-group']['element'];
1013
1017
  'lr-conversation-item': LyraComponentTypeMap['lr-conversation-item']['element'];
1014
1018
  'lr-copy-button': LyraComponentTypeMap['lr-copy-button']['element'];
1019
+ 'lr-country-picker': LyraComponentTypeMap['lr-country-picker']['element'];
1015
1020
  'lr-csv-viewer': LyraComponentTypeMap['lr-csv-viewer']['element'];
1021
+ 'lr-currency-picker': LyraComponentTypeMap['lr-currency-picker']['element'];
1016
1022
  'lr-dashboard-grid': LyraComponentTypeMap['lr-dashboard-grid']['element'];
1017
1023
  'lr-data-grid': LyraComponentTypeMap['lr-data-grid']['element'];
1018
1024
  'lr-dataset-viewer': LyraComponentTypeMap['lr-dataset-viewer']['element'];
@@ -1209,6 +1215,7 @@ These named interfaces and helper signatures are available to typed integrations
1209
1215
  'lr-thread-list': LyraComponentTypeMap['lr-thread-list']['element'];
1210
1216
  'lr-time-input': LyraComponentTypeMap['lr-time-input']['element'];
1211
1217
  'lr-time-range': LyraComponentTypeMap['lr-time-range']['element'];
1218
+ 'lr-time-zone-picker': LyraComponentTypeMap['lr-time-zone-picker']['element'];
1212
1219
  'lr-timeline': LyraComponentTypeMap['lr-timeline']['element'];
1213
1220
  'lr-timeline-item': LyraComponentTypeMap['lr-timeline-item']['element'];
1214
1221
  'lr-toast': LyraComponentTypeMap['lr-toast']['element'];
@@ -1231,6 +1238,7 @@ These named interfaces and helper signatures are available to typed integrations
1231
1238
  'lr-tree': LyraComponentTypeMap['lr-tree']['element'];
1232
1239
  'lr-tree-item': LyraComponentTypeMap['lr-tree-item']['element'];
1233
1240
  'lr-typing-indicator': LyraComponentTypeMap['lr-typing-indicator']['element'];
1241
+ 'lr-unit-picker': LyraComponentTypeMap['lr-unit-picker']['element'];
1234
1242
  'lr-usage-badge': LyraComponentTypeMap['lr-usage-badge']['element'];
1235
1243
  'lr-video': LyraComponentTypeMap['lr-video']['element'];
1236
1244
  'lr-video-playlist': LyraComponentTypeMap['lr-video-playlist']['element'];
@@ -1317,7 +1325,9 @@ These named interfaces and helper signatures are available to typed integrations
1317
1325
  'lr-control-group': LyraControlGroupSvelteProps;
1318
1326
  'lr-conversation-item': LyraConversationItemSvelteProps;
1319
1327
  'lr-copy-button': LyraCopyButtonSvelteProps;
1328
+ 'lr-country-picker': LyraCountryPickerSvelteProps;
1320
1329
  'lr-csv-viewer': LyraCsvViewerSvelteProps;
1330
+ 'lr-currency-picker': LyraCurrencyPickerSvelteProps;
1321
1331
  'lr-dashboard-grid': LyraDashboardGridSvelteProps;
1322
1332
  'lr-data-grid': LyraDataGridSvelteProps;
1323
1333
  'lr-dataset-viewer': LyraDatasetViewerSvelteProps;
@@ -1514,6 +1524,7 @@ These named interfaces and helper signatures are available to typed integrations
1514
1524
  'lr-thread-list': LyraThreadListSvelteProps;
1515
1525
  'lr-time-input': LyraTimeInputSvelteProps;
1516
1526
  'lr-time-range': LyraTimeRangeSvelteProps;
1527
+ 'lr-time-zone-picker': LyraTimeZonePickerSvelteProps;
1517
1528
  'lr-timeline': LyraTimelineSvelteProps;
1518
1529
  'lr-timeline-item': LyraTimelineItemSvelteProps;
1519
1530
  'lr-toast': LyraToastSvelteProps;
@@ -1536,6 +1547,7 @@ These named interfaces and helper signatures are available to typed integrations
1536
1547
  'lr-tree': LyraTreeSvelteProps;
1537
1548
  'lr-tree-item': LyraTreeItemSvelteProps;
1538
1549
  'lr-typing-indicator': LyraTypingIndicatorSvelteProps;
1550
+ 'lr-unit-picker': LyraUnitPickerSvelteProps;
1539
1551
  'lr-usage-badge': LyraUsageBadgeSvelteProps;
1540
1552
  'lr-video': LyraVideoSvelteProps;
1541
1553
  'lr-video-playlist': LyraVideoPlaylistSvelteProps;
@@ -1734,7 +1746,9 @@ These named interfaces and helper signatures are available to typed integrations
1734
1746
  'lr-control-group': LyraControlGroupVueProps;
1735
1747
  'lr-conversation-item': LyraConversationItemVueProps;
1736
1748
  'lr-copy-button': LyraCopyButtonVueProps;
1749
+ 'lr-country-picker': LyraCountryPickerVueProps;
1737
1750
  'lr-csv-viewer': LyraCsvViewerVueProps;
1751
+ 'lr-currency-picker': LyraCurrencyPickerVueProps;
1738
1752
  'lr-dashboard-grid': LyraDashboardGridVueProps;
1739
1753
  'lr-data-grid': LyraDataGridVueProps;
1740
1754
  'lr-dataset-viewer': LyraDatasetViewerVueProps;
@@ -1931,6 +1945,7 @@ These named interfaces and helper signatures are available to typed integrations
1931
1945
  'lr-thread-list': LyraThreadListVueProps;
1932
1946
  'lr-time-input': LyraTimeInputVueProps;
1933
1947
  'lr-time-range': LyraTimeRangeVueProps;
1948
+ 'lr-time-zone-picker': LyraTimeZonePickerVueProps;
1934
1949
  'lr-timeline': LyraTimelineVueProps;
1935
1950
  'lr-timeline-item': LyraTimelineItemVueProps;
1936
1951
  'lr-toast': LyraToastVueProps;
@@ -1953,6 +1968,7 @@ These named interfaces and helper signatures are available to typed integrations
1953
1968
  'lr-tree': LyraTreeVueProps;
1954
1969
  'lr-tree-item': LyraTreeItemVueProps;
1955
1970
  'lr-typing-indicator': LyraTypingIndicatorVueProps;
1971
+ 'lr-unit-picker': LyraUnitPickerVueProps;
1956
1972
  'lr-usage-badge': LyraUsageBadgeVueProps;
1957
1973
  'lr-video': LyraVideoVueProps;
1958
1974
  'lr-video-playlist': LyraVideoPlaylistVueProps;
@@ -157,7 +157,7 @@ The entry points, then:
157
157
  but it is not an exhaustive promise that every component-owned type or future export is present.
158
158
  Prefer the owning component entry in application code, both for the smallest bundle and the
159
159
  complete contract of that component.
160
- - **`all.js` compatibility entry.** `import '@aceshooting/lyra-ui/all.js';` registers the 288
160
+ - **`all.js` compatibility entry.** `import '@aceshooting/lyra-ui/all.js';` registers the 292
161
161
  root-included tags — everything **except** the 15 inventory-designated optional-peer-family tags:
162
162
  `lr-chart` and its 8 typed subclasses (`lr-line-chart`, `lr-bar-chart`, `lr-pie-chart`,
163
163
  `lr-doughnut-chart`, `lr-radar-chart`, `lr-polar-area-chart`, `lr-bubble-chart`,
@@ -397,6 +397,8 @@ arrowPadding?: number; hoverBridge?: HTMLElement; onPlaced?: (result: PlacementR
397
397
  `validationMessage`, and `willValidate`; `setFormValue(next)`; `getForm()`; `checkValidity()`;
398
398
  `reportValidity()`; `setCustomValidity(message)`; `resetValidity()`; `formResetCallback()`; and
399
399
  `formStateRestoreCallback(state, reason)`.
400
+ Writing `null` to `defaultValue` removes its markup value and resets the default to the adapter's
401
+ empty value; reading it still returns `TValue`. This does not overwrite a dirty live value.
400
402
  The exact callable signatures are `attachInternalsSafely(host: HTMLElement): ElementInternals`,
401
403
  `createFallbackInternals(): ElementInternals`, `createStringArrayFormDataState(name: string,
402
404
  values: readonly string[]): FormData`, `readStringArrayFormDataState(state: string | File |
@@ -409,7 +411,8 @@ toFormValue(value: TValue): FormSubmissionValue; toFormState?(value: TValue):
409
411
  FormSubmissionValue; isEmpty?(value: TValue): boolean; fromAttribute?(attribute: string): TValue;
410
412
  toAttribute?(value: TValue): string | null; fromFormState?(state: FormSubmissionValue): TValue }`
411
413
  and `FormAssociatedInterface<TValue> { internals: ElementInternals; get name(): string; set
412
- name(next: string | null); value: TValue; defaultValue: TValue; customError: string | null;
414
+ name(next: string | null); value: TValue; get defaultValue(): TValue;
415
+ set defaultValue(next: TValue | null); customError: string | null;
413
416
  disabled: boolean; required: boolean; readonly effectiveDisabled: boolean; get form():
414
417
  HTMLFormElement | null; set form(owner: FormOwnerValue); readonly labels: NodeList; readonly
415
418
  validity: ValidityState; readonly validationMessage: string; readonly willValidate: boolean;
package/llms/shared.md CHANGED
@@ -156,7 +156,7 @@ The entry points, then:
156
156
  but it is not an exhaustive promise that every component-owned type or future export is present.
157
157
  Prefer the owning component entry in application code, both for the smallest bundle and the
158
158
  complete contract of that component.
159
- - **`all.js` compatibility entry.** `import '@aceshooting/lyra-ui/all.js';` registers the 288
159
+ - **`all.js` compatibility entry.** `import '@aceshooting/lyra-ui/all.js';` registers the 292
160
160
  root-included tags — everything **except** the 15 inventory-designated optional-peer-family tags:
161
161
  `lr-chart` and its 8 typed subclasses (`lr-line-chart`, `lr-bar-chart`, `lr-pie-chart`,
162
162
  `lr-doughnut-chart`, `lr-radar-chart`, `lr-polar-area-chart`, `lr-bubble-chart`,
@@ -3080,6 +3080,8 @@ arrowPadding?: number; hoverBridge?: HTMLElement; onPlaced?: (result: PlacementR
3080
3080
  `validationMessage`, and `willValidate`; `setFormValue(next)`; `getForm()`; `checkValidity()`;
3081
3081
  `reportValidity()`; `setCustomValidity(message)`; `resetValidity()`; `formResetCallback()`; and
3082
3082
  `formStateRestoreCallback(state, reason)`.
3083
+ Writing `null` to `defaultValue` removes its markup value and resets the default to the adapter's
3084
+ empty value; reading it still returns `TValue`. This does not overwrite a dirty live value.
3083
3085
  The exact callable signatures are `attachInternalsSafely(host: HTMLElement): ElementInternals`,
3084
3086
  `createFallbackInternals(): ElementInternals`, `createStringArrayFormDataState(name: string,
3085
3087
  values: readonly string[]): FormData`, `readStringArrayFormDataState(state: string | File |
@@ -3092,7 +3094,8 @@ toFormValue(value: TValue): FormSubmissionValue; toFormState?(value: TValue):
3092
3094
  FormSubmissionValue; isEmpty?(value: TValue): boolean; fromAttribute?(attribute: string): TValue;
3093
3095
  toAttribute?(value: TValue): string | null; fromFormState?(state: FormSubmissionValue): TValue }`
3094
3096
  and `FormAssociatedInterface<TValue> { internals: ElementInternals; get name(): string; set
3095
- name(next: string | null); value: TValue; defaultValue: TValue; customError: string | null;
3097
+ name(next: string | null); value: TValue; get defaultValue(): TValue;
3098
+ set defaultValue(next: TValue | null); customError: string | null;
3096
3099
  disabled: boolean; required: boolean; readonly effectiveDisabled: boolean; get form():
3097
3100
  HTMLFormElement | null; set form(owner: FormOwnerValue); readonly labels: NodeList; readonly
3098
3101
  validity: ValidityState; readonly validationMessage: string; readonly willValidate: boolean;
@@ -3938,7 +3941,9 @@ These named interfaces and helper signatures are available to typed integrations
3938
3941
  'lr-control-group': LyraControlGroupReactProps;
3939
3942
  'lr-conversation-item': LyraConversationItemReactProps;
3940
3943
  'lr-copy-button': LyraCopyButtonReactProps;
3944
+ 'lr-country-picker': LyraCountryPickerReactProps;
3941
3945
  'lr-csv-viewer': LyraCsvViewerReactProps;
3946
+ 'lr-currency-picker': LyraCurrencyPickerReactProps;
3942
3947
  'lr-dashboard-grid': LyraDashboardGridReactProps;
3943
3948
  'lr-data-grid': LyraDataGridReactProps;
3944
3949
  'lr-dataset-viewer': LyraDatasetViewerReactProps;
@@ -4135,6 +4140,7 @@ These named interfaces and helper signatures are available to typed integrations
4135
4140
  'lr-thread-list': LyraThreadListReactProps;
4136
4141
  'lr-time-input': LyraTimeInputReactProps;
4137
4142
  'lr-time-range': LyraTimeRangeReactProps;
4143
+ 'lr-time-zone-picker': LyraTimeZonePickerReactProps;
4138
4144
  'lr-timeline': LyraTimelineReactProps;
4139
4145
  'lr-timeline-item': LyraTimelineItemReactProps;
4140
4146
  'lr-toast': LyraToastReactProps;
@@ -4157,6 +4163,7 @@ These named interfaces and helper signatures are available to typed integrations
4157
4163
  'lr-tree': LyraTreeReactProps;
4158
4164
  'lr-tree-item': LyraTreeItemReactProps;
4159
4165
  'lr-typing-indicator': LyraTypingIndicatorReactProps;
4166
+ 'lr-unit-picker': LyraUnitPickerReactProps;
4160
4167
  'lr-usage-badge': LyraUsageBadgeReactProps;
4161
4168
  'lr-video': LyraVideoReactProps;
4162
4169
  'lr-video-playlist': LyraVideoPlaylistReactProps;
@@ -4366,7 +4373,9 @@ These named interfaces and helper signatures are available to typed integrations
4366
4373
  'lr-control-group': LyraComponentTypeMap['lr-control-group']['element'];
4367
4374
  'lr-conversation-item': LyraComponentTypeMap['lr-conversation-item']['element'];
4368
4375
  'lr-copy-button': LyraComponentTypeMap['lr-copy-button']['element'];
4376
+ 'lr-country-picker': LyraComponentTypeMap['lr-country-picker']['element'];
4369
4377
  'lr-csv-viewer': LyraComponentTypeMap['lr-csv-viewer']['element'];
4378
+ 'lr-currency-picker': LyraComponentTypeMap['lr-currency-picker']['element'];
4370
4379
  'lr-dashboard-grid': LyraComponentTypeMap['lr-dashboard-grid']['element'];
4371
4380
  'lr-data-grid': LyraComponentTypeMap['lr-data-grid']['element'];
4372
4381
  'lr-dataset-viewer': LyraComponentTypeMap['lr-dataset-viewer']['element'];
@@ -4563,6 +4572,7 @@ These named interfaces and helper signatures are available to typed integrations
4563
4572
  'lr-thread-list': LyraComponentTypeMap['lr-thread-list']['element'];
4564
4573
  'lr-time-input': LyraComponentTypeMap['lr-time-input']['element'];
4565
4574
  'lr-time-range': LyraComponentTypeMap['lr-time-range']['element'];
4575
+ 'lr-time-zone-picker': LyraComponentTypeMap['lr-time-zone-picker']['element'];
4566
4576
  'lr-timeline': LyraComponentTypeMap['lr-timeline']['element'];
4567
4577
  'lr-timeline-item': LyraComponentTypeMap['lr-timeline-item']['element'];
4568
4578
  'lr-toast': LyraComponentTypeMap['lr-toast']['element'];
@@ -4585,6 +4595,7 @@ These named interfaces and helper signatures are available to typed integrations
4585
4595
  'lr-tree': LyraComponentTypeMap['lr-tree']['element'];
4586
4596
  'lr-tree-item': LyraComponentTypeMap['lr-tree-item']['element'];
4587
4597
  'lr-typing-indicator': LyraComponentTypeMap['lr-typing-indicator']['element'];
4598
+ 'lr-unit-picker': LyraComponentTypeMap['lr-unit-picker']['element'];
4588
4599
  'lr-usage-badge': LyraComponentTypeMap['lr-usage-badge']['element'];
4589
4600
  'lr-video': LyraComponentTypeMap['lr-video']['element'];
4590
4601
  'lr-video-playlist': LyraComponentTypeMap['lr-video-playlist']['element'];
@@ -4671,7 +4682,9 @@ These named interfaces and helper signatures are available to typed integrations
4671
4682
  'lr-control-group': LyraControlGroupSvelteProps;
4672
4683
  'lr-conversation-item': LyraConversationItemSvelteProps;
4673
4684
  'lr-copy-button': LyraCopyButtonSvelteProps;
4685
+ 'lr-country-picker': LyraCountryPickerSvelteProps;
4674
4686
  'lr-csv-viewer': LyraCsvViewerSvelteProps;
4687
+ 'lr-currency-picker': LyraCurrencyPickerSvelteProps;
4675
4688
  'lr-dashboard-grid': LyraDashboardGridSvelteProps;
4676
4689
  'lr-data-grid': LyraDataGridSvelteProps;
4677
4690
  'lr-dataset-viewer': LyraDatasetViewerSvelteProps;
@@ -4868,6 +4881,7 @@ These named interfaces and helper signatures are available to typed integrations
4868
4881
  'lr-thread-list': LyraThreadListSvelteProps;
4869
4882
  'lr-time-input': LyraTimeInputSvelteProps;
4870
4883
  'lr-time-range': LyraTimeRangeSvelteProps;
4884
+ 'lr-time-zone-picker': LyraTimeZonePickerSvelteProps;
4871
4885
  'lr-timeline': LyraTimelineSvelteProps;
4872
4886
  'lr-timeline-item': LyraTimelineItemSvelteProps;
4873
4887
  'lr-toast': LyraToastSvelteProps;
@@ -4890,6 +4904,7 @@ These named interfaces and helper signatures are available to typed integrations
4890
4904
  'lr-tree': LyraTreeSvelteProps;
4891
4905
  'lr-tree-item': LyraTreeItemSvelteProps;
4892
4906
  'lr-typing-indicator': LyraTypingIndicatorSvelteProps;
4907
+ 'lr-unit-picker': LyraUnitPickerSvelteProps;
4893
4908
  'lr-usage-badge': LyraUsageBadgeSvelteProps;
4894
4909
  'lr-video': LyraVideoSvelteProps;
4895
4910
  'lr-video-playlist': LyraVideoPlaylistSvelteProps;
@@ -5088,7 +5103,9 @@ These named interfaces and helper signatures are available to typed integrations
5088
5103
  'lr-control-group': LyraControlGroupVueProps;
5089
5104
  'lr-conversation-item': LyraConversationItemVueProps;
5090
5105
  'lr-copy-button': LyraCopyButtonVueProps;
5106
+ 'lr-country-picker': LyraCountryPickerVueProps;
5091
5107
  'lr-csv-viewer': LyraCsvViewerVueProps;
5108
+ 'lr-currency-picker': LyraCurrencyPickerVueProps;
5092
5109
  'lr-dashboard-grid': LyraDashboardGridVueProps;
5093
5110
  'lr-data-grid': LyraDataGridVueProps;
5094
5111
  'lr-dataset-viewer': LyraDatasetViewerVueProps;
@@ -5285,6 +5302,7 @@ These named interfaces and helper signatures are available to typed integrations
5285
5302
  'lr-thread-list': LyraThreadListVueProps;
5286
5303
  'lr-time-input': LyraTimeInputVueProps;
5287
5304
  'lr-time-range': LyraTimeRangeVueProps;
5305
+ 'lr-time-zone-picker': LyraTimeZonePickerVueProps;
5288
5306
  'lr-timeline': LyraTimelineVueProps;
5289
5307
  'lr-timeline-item': LyraTimelineItemVueProps;
5290
5308
  'lr-toast': LyraToastVueProps;
@@ -5307,6 +5325,7 @@ These named interfaces and helper signatures are available to typed integrations
5307
5325
  'lr-tree': LyraTreeVueProps;
5308
5326
  'lr-tree-item': LyraTreeItemVueProps;
5309
5327
  'lr-typing-indicator': LyraTypingIndicatorVueProps;
5328
+ 'lr-unit-picker': LyraUnitPickerVueProps;
5310
5329
  'lr-usage-badge': LyraUsageBadgeVueProps;
5311
5330
  'lr-video': LyraVideoVueProps;
5312
5331
  'lr-video-playlist': LyraVideoPlaylistVueProps;