@lmvz-ds/components 0.36.0 → 0.36.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 (139) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/cjs/aria.constants-DPK5mQEL.js +65 -0
  3. package/cjs/{stencil.util-TjS8_DoU.js → async.util-Dnl6c82X.js} +1 -13
  4. package/cjs/{directional-focus-controller-3uDoin45.js → directional-focus-controller-8Xd_7MHT.js} +1 -1
  5. package/cjs/{element-activation-controller-BWtUKzu2.js → element-activation-controller-DzTUocEO.js} +1 -1
  6. package/cjs/{element.util-CctmBvUY.js → element.util-BlhcwmfR.js} +2 -62
  7. package/cjs/lmvz-action-list.cjs.entry.js +3 -2
  8. package/cjs/lmvz-button-group.cjs.entry.js +2 -1
  9. package/cjs/lmvz-button_2.cjs.entry.js +3 -2
  10. package/cjs/lmvz-checkbox.cjs.entry.js +38 -4
  11. package/cjs/lmvz-components.cjs.js +1 -1
  12. package/cjs/lmvz-datepicker.cjs.entry.js +10 -3
  13. package/cjs/lmvz-header_2.cjs.entry.js +4 -3
  14. package/cjs/lmvz-input.cjs.entry.js +242 -0
  15. package/cjs/lmvz-menuitem.cjs.entry.js +3 -2
  16. package/cjs/lmvz-modal.cjs.entry.js +2 -1
  17. package/cjs/{lmvz-input_2.cjs.entry.js → lmvz-popover.cjs.entry.js} +24 -228
  18. package/cjs/lmvz-radio.cjs.entry.js +61 -3
  19. package/cjs/lmvz-select.cjs.entry.js +423 -16
  20. package/cjs/lmvz-snackbar.cjs.entry.js +1 -1
  21. package/cjs/lmvz-spinner.cjs.entry.js +1 -1
  22. package/cjs/lmvz-tab.cjs.entry.js +1 -1
  23. package/cjs/lmvz-tabs.cjs.entry.js +4 -3
  24. package/cjs/lmvz-toggle.cjs.entry.js +7 -3
  25. package/cjs/loader.cjs.js +1 -1
  26. package/cjs/stencil.util-CBrPLd-F.js +17 -0
  27. package/collection/components/lmvz-checkbox/lmvz-checkbox.css +4 -2
  28. package/collection/components/lmvz-checkbox/lmvz-checkbox.js +68 -8
  29. package/collection/components/lmvz-datepicker/lmvz-datepicker.css +0 -5
  30. package/collection/components/lmvz-datepicker/lmvz-datepicker.js +17 -3
  31. package/collection/components/lmvz-input/lmvz-input.css +1 -1
  32. package/collection/components/lmvz-input/lmvz-input.js +47 -12
  33. package/collection/components/lmvz-popover/lmvz-popover.css +1 -1
  34. package/collection/components/lmvz-popover/lmvz-popover.js +45 -5
  35. package/collection/components/lmvz-radio/lmvz-radio.js +77 -9
  36. package/collection/components/lmvz-select/lmvz-select.css +96 -34
  37. package/collection/components/lmvz-select/lmvz-select.js +412 -21
  38. package/collection/components/lmvz-snackbar/lmvz-snackbar.js +1 -1
  39. package/collection/components/lmvz-spinner/lmvz-spinner.js +1 -1
  40. package/collection/components/lmvz-tab/lmvz-tab.js +1 -1
  41. package/collection/components/lmvz-tabs/lmvz-tabs.js +1 -1
  42. package/collection/components/lmvz-toggle/lmvz-toggle.js +21 -1
  43. package/collection/integration/header-integration/header-integration.js +1 -1
  44. package/collection/styles/fragments/_focus-within.css +2 -2
  45. package/collection/utils/aria/listbox-controller.js +154 -0
  46. package/collection/utils/radio/radio-group-controller.js +17 -0
  47. package/components/lmvz-checkbox.js +1 -1
  48. package/components/lmvz-datepicker.js +1 -1
  49. package/components/lmvz-input.js +1 -1
  50. package/components/lmvz-popover.js +1 -1
  51. package/components/lmvz-radio.js +1 -1
  52. package/components/lmvz-select.js +1 -1
  53. package/components/lmvz-snackbar.js +1 -1
  54. package/components/lmvz-spinner.js +1 -1
  55. package/components/lmvz-tab.js +1 -1
  56. package/components/lmvz-tabs.js +1 -1
  57. package/components/lmvz-toggle.js +1 -1
  58. package/components/p-BApwCp0R.js +1 -0
  59. package/components/p-C5gRiLRR.js +1 -0
  60. package/esm/aria.constants-DIyiticz.js +62 -0
  61. package/esm/{stencil.util-C3QOYC8E.js → async.util-DZj20TV1.js} +1 -13
  62. package/esm/{directional-focus-controller-Bhu7RqYE.js → directional-focus-controller-QukTTWBE.js} +1 -1
  63. package/esm/{element-activation-controller-BuwyVq4A.js → element-activation-controller-dxJZKMag.js} +1 -1
  64. package/esm/{element.util-Bd9JyKJZ.js → element.util-3ydVsxUW.js} +2 -61
  65. package/esm/lmvz-action-list.entry.js +3 -2
  66. package/esm/lmvz-button-group.entry.js +2 -1
  67. package/esm/lmvz-button_2.entry.js +3 -2
  68. package/esm/lmvz-checkbox.entry.js +38 -4
  69. package/esm/lmvz-components.js +1 -1
  70. package/esm/lmvz-datepicker.entry.js +10 -3
  71. package/esm/lmvz-header_2.entry.js +4 -3
  72. package/esm/lmvz-input.entry.js +240 -0
  73. package/esm/lmvz-menuitem.entry.js +3 -2
  74. package/esm/lmvz-modal.entry.js +2 -1
  75. package/esm/{lmvz-input_2.entry.js → lmvz-popover.entry.js} +23 -226
  76. package/esm/lmvz-radio.entry.js +61 -3
  77. package/esm/lmvz-select.entry.js +423 -16
  78. package/esm/lmvz-snackbar.entry.js +1 -1
  79. package/esm/lmvz-spinner.entry.js +1 -1
  80. package/esm/lmvz-tab.entry.js +1 -1
  81. package/esm/lmvz-tabs.entry.js +4 -3
  82. package/esm/lmvz-toggle.entry.js +7 -3
  83. package/esm/loader.js +1 -1
  84. package/esm/stencil.util-D2-5rsN3.js +15 -0
  85. package/hydrate/index.js +625 -68
  86. package/hydrate/index.mjs +625 -68
  87. package/lmvz-components/lmvz-components.esm.js +1 -1
  88. package/lmvz-components/{p-544e3ccb.entry.js → p-0f65d001.entry.js} +1 -1
  89. package/lmvz-components/p-137b1fe1.entry.js +1 -0
  90. package/lmvz-components/p-26dd9684.entry.js +1 -0
  91. package/lmvz-components/p-36f44108.entry.js +1 -0
  92. package/lmvz-components/p-398b5cf4.entry.js +1 -0
  93. package/lmvz-components/p-3a396fc8.entry.js +1 -0
  94. package/lmvz-components/p-40716828.entry.js +1 -0
  95. package/lmvz-components/p-70f1e31a.entry.js +1 -0
  96. package/lmvz-components/p-71d06d1d.entry.js +1 -0
  97. package/lmvz-components/{p-d280d21a.entry.js → p-88661c50.entry.js} +1 -1
  98. package/lmvz-components/p-91eb71bb.entry.js +1 -0
  99. package/lmvz-components/p-BA3wizqg.js +1 -0
  100. package/lmvz-components/{p-GGkwaiT6.js → p-CHxiS3ja.js} +1 -1
  101. package/lmvz-components/{p-UhNgD4L3.js → p-CPSyM_e-.js} +1 -1
  102. package/lmvz-components/p-DIyiticz.js +1 -0
  103. package/lmvz-components/p-DZj20TV1.js +1 -0
  104. package/lmvz-components/p-a680a7b2.entry.js +1 -0
  105. package/lmvz-components/{p-d48203f9.entry.js → p-a6fe9b61.entry.js} +1 -1
  106. package/lmvz-components/{p-dbfbcb74.entry.js → p-a99acb02.entry.js} +1 -1
  107. package/lmvz-components/p-bh9cItsP.js +1 -0
  108. package/lmvz-components/p-f16a19fc.entry.js +1 -0
  109. package/lmvz-components/p-f3f0ed49.entry.js +1 -0
  110. package/lmvz-components/p-f516a949.entry.js +1 -0
  111. package/manifest.json +366 -30
  112. package/package.json +1 -1
  113. package/types/api/ds.types.d.ts +1 -0
  114. package/types/components/lmvz-checkbox/lmvz-checkbox.d.ts +9 -1
  115. package/types/components/lmvz-datepicker/lmvz-datepicker.d.ts +2 -0
  116. package/types/components/lmvz-input/lmvz-input.d.ts +3 -0
  117. package/types/components/lmvz-popover/lmvz-popover.d.ts +2 -0
  118. package/types/components/lmvz-radio/lmvz-radio.d.ts +12 -2
  119. package/types/components/lmvz-select/lmvz-select.d.ts +53 -4
  120. package/types/components/lmvz-toggle/lmvz-toggle.d.ts +1 -0
  121. package/types/components.d.ts +96 -12
  122. package/types/utils/aria/listbox-controller.d.ts +42 -0
  123. package/types/utils/radio/radio-group-controller.d.ts +3 -0
  124. package/components/p-CPuI0_r_.js +0 -1
  125. package/components/p-CWpl0WaZ.js +0 -1
  126. package/lmvz-components/p-63f6a596.entry.js +0 -1
  127. package/lmvz-components/p-8022c6dc.entry.js +0 -1
  128. package/lmvz-components/p-Bd9JyKJZ.js +0 -1
  129. package/lmvz-components/p-C3QOYC8E.js +0 -1
  130. package/lmvz-components/p-a611c110.entry.js +0 -1
  131. package/lmvz-components/p-b1bb4393.entry.js +0 -1
  132. package/lmvz-components/p-b50b1cb5.entry.js +0 -1
  133. package/lmvz-components/p-b932cf91.entry.js +0 -1
  134. package/lmvz-components/p-bff115d4.entry.js +0 -1
  135. package/lmvz-components/p-d9aede81.entry.js +0 -1
  136. package/lmvz-components/p-f0e28f3a.entry.js +0 -1
  137. package/lmvz-components/p-f853faae.entry.js +0 -1
  138. package/lmvz-components/p-fa2efc42.entry.js +0 -1
  139. package/lmvz-components/p-fe6f5bdc.entry.js +0 -1
@@ -36,6 +36,7 @@ class RadioGroup {
36
36
  if (wasEmpty) {
37
37
  document.addEventListener('focusin', this._focusinHandler, true);
38
38
  }
39
+ this.refreshValidity();
39
40
  }
40
41
  }
41
42
  unregister(host) {
@@ -46,10 +47,19 @@ class RadioGroup {
46
47
  if (this.hosts.length === 0) {
47
48
  document.removeEventListener('focusin', this._focusinHandler, true);
48
49
  }
50
+ this.refreshValidity();
49
51
  }
50
52
  get sortedEnabled() {
51
53
  return this.hosts.filter((h) => !h.disabled);
52
54
  }
55
+ isAnyChecked() {
56
+ return this.hosts.some((host) => host.checked);
57
+ }
58
+ refreshValidity() {
59
+ for (const host of this.hosts) {
60
+ host.updateValidity();
61
+ }
62
+ }
53
63
  setFocused(host) {
54
64
  this._focusedHost = host;
55
65
  this.updateTabindex();
@@ -65,6 +75,7 @@ class RadioGroup {
65
75
  host.checked = host === selectedHost;
66
76
  }
67
77
  this.updateTabindex();
78
+ this.refreshValidity();
68
79
  }
69
80
  updateTabindex() {
70
81
  const enabled = this.sortedEnabled;
@@ -126,6 +137,12 @@ class RadioGroupController {
126
137
  select(selectedHost) {
127
138
  this.group?.select(selectedHost);
128
139
  }
140
+ isAnyChecked() {
141
+ return this.group?.isAnyChecked() ?? false;
142
+ }
143
+ refreshValidity() {
144
+ this.group?.refreshValidity();
145
+ }
129
146
  setFocused(host) {
130
147
  this.group?.setFocused(host);
131
148
  }
@@ -168,7 +185,7 @@ class RadioGroupController {
168
185
 
169
186
  const lmvzRadioCss = () => `@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } } .sc-lmvz-radio-h { display: inline-block; --radio-circle-size: var(--lmvz-global-s18, 18px); --radio-dot-size: 0.5rem; --radio-bg: var(--lmvz-semantic-color-surface-input-primary, #ffffff); --radio-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0); --radio-border-color-hover: var(--lmvz-semantic-color-border-hover, #a1a1a1); --radio-border-color-checked: var(--lmvz-semantic-color-border-active, #0f8acc); --radio-border-color-error: var(--lmvz-semantic-color-status-on-danger, #a31419); --radio-dot-color: var(--lmvz-semantic-color-border-active, #0f8acc); --radio-wrapper-bg-hover: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0); --radio-wrapper-bg-active: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0); --radio-label-color: var(--lmvz-semantic-color-on-surface-primary, #000000); --radio-label-color-checked: var(--lmvz-semantic-color-status-on-active, #0e7ab4); --radio-helper-color: var(--lmvz-semantic-color-on-surface-secondary, #545454); --radio-easing: var(--lmvz-global-easing-default, ease); --radio-duration: 0.2s; display: flex; align-items: center; gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); padding-block: var(--lmvz-dimension-8-2, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem)); padding-inline: var(--lmvz-dimension-12-8, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); border-radius: var(--lmvz-semantic-border-radius-round, 999px); overflow: clip; cursor: pointer; background-color: transparent; position: relative; transition: background-color var(--radio-duration) var(--radio-easing); } input.sc-lmvz-radio { position: absolute; inset-block-start: var(--lmvz-dimension-8-2, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem)); inset-inline-start: var(--lmvz-dimension-10-4, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); opacity: 0; width: var(--radio-circle-size); height: var(--radio-circle-size); margin: 0; cursor: pointer; z-index: 1; } .circle.sc-lmvz-radio { width: var(--radio-circle-size); height: var(--radio-circle-size); border-radius: 50%; border: var(--lmvz-semantic-border-width-default, 1px) solid var(--radio-border-color); background-color: var(--radio-bg); pointer-events: none; flex-shrink: 0; display: flex; align-items: center; justify-content: center; box-sizing: border-box; transition: border-color var(--radio-duration) var(--radio-easing); } .dot.sc-lmvz-radio { width: var(--radio-dot-size); height: var(--radio-dot-size); border-radius: 50%; background-color: var(--radio-dot-color); } .content.sc-lmvz-radio { display: flex; flex-direction: column; overflow-wrap: break-word; min-width: 0; } label.sc-lmvz-radio { font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); color: var(--radio-label-color); cursor: pointer; transition: color var(--radio-duration) var(--radio-easing); } .helper-text.sc-lmvz-radio { display: block; font: var(--lmvz-typography-body-sm, 400 clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem) / 1.5 Router); color: var(--radio-helper-color); margin-block-start: 2px; } .helper-text.sc-lmvz-radio:empty { display: none; } @media (hover: hover) { .sc-lmvz-radio-h:hover .circle.sc-lmvz-radio { border-color: var(--radio-border-color-hover); } .sc-lmvz-radio-h:hover { background-color: var(--radio-wrapper-bg-hover); } } .sc-lmvz-radio-h:active { background-color: var(--radio-wrapper-bg-active); } [checked].sc-lmvz-radio-h .circle.sc-lmvz-radio { border-color: var(--radio-border-color-checked); } [checked].sc-lmvz-radio-h label.sc-lmvz-radio { color: var(--radio-label-color-checked); } [error].sc-lmvz-radio-h .circle.sc-lmvz-radio { border-color: var(--radio-border-color-error); } [error].sc-lmvz-radio-h .helper-text.sc-lmvz-radio { color: var(--lmvz-semantic-color-status-on-danger, #a31419); } [disabled].sc-lmvz-radio-h { opacity: var(--lmvz-component-input-disabled-opacity, 40%); pointer-events: none; cursor: not-allowed; } @media (forced-colors: active) { .circle.sc-lmvz-radio { forced-color-adjust: auto; border-color: ButtonText; background-color: Field; } [checked].sc-lmvz-radio-h .circle.sc-lmvz-radio { border-color: Highlight; } .dot.sc-lmvz-radio { background-color: ButtonText; } [checked].sc-lmvz-radio-h .dot.sc-lmvz-radio { background-color: HighlightText; } }`;
170
187
 
171
- const focusWithinCss = () => `.sc-lmvz-radio-h:focus-within{outline:var(--lmvz-ds-outline, 1px solid #0e7ab4);outline-offset:var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem))}@media (forced-colors: active){.sc-lmvz-radio-h:focus-within{outline-color:Highlight;box-shadow:none}}`;
188
+ const focusWithinCss = () => `.sc-lmvz-radio-h:has(:focus-visible){outline:var(--lmvz-ds-outline, 1px solid #0e7ab4);outline-offset:var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem))}@media (forced-colors: active){.sc-lmvz-radio-h:has(:focus-visible){outline-color:Highlight;box-shadow:none}}`;
172
189
 
173
190
  let radioIdCounter = 0;
174
191
  const LmvzRadio = class extends reactiveControllerHost.ReactiveControllerHost {
@@ -190,7 +207,14 @@ const LmvzRadio = class extends reactiveControllerHost.ReactiveControllerHost {
190
207
  name;
191
208
  disabled = false;
192
209
  required = false;
193
- error = false;
210
+ nativeError = false;
211
+ errorFromProp = false;
212
+ get error() {
213
+ return this.errorFromProp || this.nativeError;
214
+ }
215
+ set error(value) {
216
+ this.errorFromProp = value;
217
+ }
194
218
  helperText;
195
219
  form;
196
220
  autofocus = false;
@@ -198,6 +222,7 @@ const LmvzRadio = class extends reactiveControllerHost.ReactiveControllerHost {
198
222
  _handlingFormReset = false;
199
223
  handleCheckedChange(newVal, oldVal) {
200
224
  this.internals.setFormValue?.(newVal ? this.value : null);
225
+ this.updateValidity();
201
226
  if (!newVal && oldVal && !this._handlingNativeChange && !this._handlingFormReset) {
202
227
  this.lmvzChange.emit(false);
203
228
  }
@@ -205,6 +230,9 @@ const LmvzRadio = class extends reactiveControllerHost.ReactiveControllerHost {
205
230
  this.lmvzChange.emit(true);
206
231
  }
207
232
  }
233
+ handleRequiredChange() {
234
+ this.updateValidity();
235
+ }
208
236
  handleValueChange(newVal) {
209
237
  if (this.checked) {
210
238
  this.internals.setFormValue?.(newVal);
@@ -226,6 +254,9 @@ const LmvzRadio = class extends reactiveControllerHost.ReactiveControllerHost {
226
254
  async reportValidity() {
227
255
  return this.internals?.reportValidity() ?? true;
228
256
  }
257
+ async getValidationMessage() {
258
+ return this.internals?.validationMessage ?? '';
259
+ }
229
260
  constructor(hostRef) {
230
261
  super();
231
262
  index.registerInstance(this, hostRef);
@@ -247,8 +278,13 @@ const LmvzRadio = class extends reactiveControllerHost.ReactiveControllerHost {
247
278
  componentWillLoad() {
248
279
  this.initialChecked = this.checked;
249
280
  this.internals.setFormValue?.(this.checked ? this.value : null);
281
+ this.updateValidity();
250
282
  super.componentWillLoad();
251
283
  }
284
+ componentDidLoad() {
285
+ this.updateValidity();
286
+ super.componentDidLoad();
287
+ }
252
288
  formAssociatedCallback() {
253
289
  this.internals.setFormValue?.(this.checked ? this.value : null);
254
290
  }
@@ -260,6 +296,8 @@ const LmvzRadio = class extends reactiveControllerHost.ReactiveControllerHost {
260
296
  finally {
261
297
  this._handlingFormReset = false;
262
298
  }
299
+ this.updateValidity();
300
+ this.radioGroupController.refreshValidity();
263
301
  }
264
302
  formStateRestoreCallback(state) {
265
303
  if (typeof state !== 'string')
@@ -272,6 +310,20 @@ const LmvzRadio = class extends reactiveControllerHost.ReactiveControllerHost {
272
310
  this._handlingFormReset = false;
273
311
  }
274
312
  }
313
+ isAnyInGroupChecked() {
314
+ return this.radioGroupController.isAnyChecked();
315
+ }
316
+ updateValidity() {
317
+ if (this.required && !this.isAnyInGroupChecked()) {
318
+ this.internals.setValidity?.({ valueMissing: true }, 'Please select an option.', this.nativeInput);
319
+ return;
320
+ }
321
+ this.internals.setValidity?.({});
322
+ this.nativeError = false;
323
+ }
324
+ handleInvalid() {
325
+ this.nativeError = true;
326
+ }
275
327
  handleChange = (event) => {
276
328
  this._handlingNativeChange = true;
277
329
  try {
@@ -314,14 +366,20 @@ const LmvzRadio = class extends reactiveControllerHost.ReactiveControllerHost {
314
366
  return;
315
367
  this.radioGroupController.setFocused(target);
316
368
  }
369
+ retargetInnerClicks() {
370
+ this.nativeInput?.click();
371
+ }
317
372
  render() {
318
- return (index.h(index.Host, { key: 'cb2db48956ca781f226fbbddcf1d8ea819f9192a' }, index.h("input", { key: 'ec208dbaa714ae015415370b0d38ef916955b023', type: "radio", id: this.radioId, name: this.name ?? undefined, value: this.value, checked: this.checked, disabled: this.disabled, required: this.required, autoFocus: this.autofocus, "aria-invalid": this.error ? 'true' : undefined, "aria-describedby": this.helperId, ref: (el) => (this.nativeInput = el), onChange: this.handleChange }), index.h("span", { key: 'ef8221077d410d59248ce30678989f6bf7fbbebb', class: "circle", "aria-hidden": "true" }, this.checked && index.h("span", { key: '7faa45b58d39f05f64a7782329046fe07b0c2a98', class: "dot" })), index.h("span", { key: 'e508b4bf061ab0e038df7c169a80285bb7930dc3', class: "content" }, index.h("label", { key: '8117be47e7b0ae9cc17bab21bb7cc5d9300d2146', htmlFor: this.radioId }, this.label), index.h("span", { key: '44ab845ee18415b54fb5d23e533f85644f4e5e50', "aria-live": "polite", class: "helper-text", id: this.helperId }, this.helperText))));
373
+ return (index.h(index.Host, { key: 'f1fdc1167c4e59c2524e1e545c3382ca32853788' }, index.h("input", { key: 'c1b711444475ed401766cc5827eeaec0c46b62cf', type: "radio", id: this.radioId, value: this.value, checked: this.checked, disabled: this.disabled, autoFocus: this.autofocus, "aria-required": this.required ? 'true' : 'false', "aria-invalid": this.error ? 'true' : undefined, "aria-describedby": this.helperId, ref: (el) => (this.nativeInput = el), onChange: this.handleChange }), index.h("span", { key: 'b25e623269df05bdf8159e72da4df2e0bfb5d7bc', class: "circle", "aria-hidden": "true" }, this.checked && index.h("span", { key: '93d12890c7ba0abe203c63953ea1115aee37d7a0', class: "dot" })), index.h("span", { key: '44dcfdc4e7ee3820624b0d02a438139f45bb8733', class: "content" }, index.h("label", { key: 'd0547cd5e79642b298da155c9937715224b52cae', htmlFor: this.radioId }, this.label), index.h("span", { key: 'a9df5dd8a775a2f7422d5bac296869f88553e33f', onClick: this.retargetInnerClicks.bind(this), "aria-live": "polite", class: "helper-text", id: this.helperId }, this.helperText))));
319
374
  }
320
375
  static get formAssociated() { return true; }
321
376
  static get watchers() { return {
322
377
  "checked": [{
323
378
  "handleCheckedChange": 0
324
379
  }],
380
+ "required": [{
381
+ "handleRequiredChange": 0
382
+ }],
325
383
  "value": [{
326
384
  "handleValueChange": 0
327
385
  }],