@vonage/vivid 4.21.1 → 4.23.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 (231) hide show
  1. package/custom-elements.json +2055 -640
  2. package/index.cjs +1 -1
  3. package/index.js +2 -2
  4. package/lib/accordion-item/accordion-item.d.ts +11 -5
  5. package/lib/action-group/action-group.d.ts +8 -6
  6. package/lib/alert/alert.d.ts +21 -9
  7. package/lib/audio-player/audio-player.d.ts +13 -6
  8. package/lib/badge/badge.d.ts +11 -5
  9. package/lib/banner/banner.d.ts +26 -12
  10. package/lib/breadcrumb/breadcrumb.d.ts +333 -1
  11. package/lib/breadcrumb/breadcrumb.template.d.ts +2 -3
  12. package/lib/breadcrumb-item/breadcrumb-item.d.ts +8 -6
  13. package/lib/button/button.d.ts +11 -5
  14. package/lib/calendar/calendar.d.ts +3 -1
  15. package/lib/calendar-event/calendar-event.d.ts +333 -1
  16. package/lib/checkbox/checkbox.d.ts +8 -6
  17. package/lib/combobox/combobox.d.ts +11 -5
  18. package/lib/date-picker/date-picker.d.ts +74 -50
  19. package/lib/date-range-picker/date-range-picker.d.ts +38 -26
  20. package/lib/date-time-picker/date-time-picker.d.ts +76 -52
  21. package/lib/dial-pad/dial-pad.d.ts +11 -5
  22. package/lib/dialog/dialog.d.ts +16 -8
  23. package/lib/divider/divider.d.ts +8 -6
  24. package/lib/enums.d.ts +0 -4
  25. package/lib/fab/fab.d.ts +11 -5
  26. package/lib/file-picker/file-picker.d.ts +338 -1
  27. package/lib/header/header.d.ts +333 -1
  28. package/lib/menu/menu.d.ts +16 -8
  29. package/lib/menu-item/menu-item.d.ts +338 -2
  30. package/lib/nav/nav.d.ts +333 -1
  31. package/lib/nav-disclosure/nav-disclosure.d.ts +16 -8
  32. package/lib/nav-item/nav-item.d.ts +11 -5
  33. package/lib/note/note.d.ts +11 -5
  34. package/lib/number-field/number-field.d.ts +26 -12
  35. package/lib/option/option.d.ts +341 -3
  36. package/lib/progress/progress.d.ts +8 -6
  37. package/lib/progress-ring/progress-ring.d.ts +8 -6
  38. package/lib/radio-group/radio-group.d.ts +333 -1
  39. package/lib/range-slider/range-slider.d.ts +11 -5
  40. package/lib/rich-text-editor/facades/prose-mirror-vivid.schema.d.ts +1 -1
  41. package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +7 -1
  42. package/lib/rich-text-editor/menubar/consts.d.ts +18 -0
  43. package/lib/rich-text-editor/menubar/menubar.d.ts +3 -0
  44. package/lib/rich-text-editor/rich-text-editor.d.ts +14 -3
  45. package/lib/searchable-select/option-tag.d.ts +14 -6
  46. package/lib/searchable-select/searchable-select.d.ts +349 -7
  47. package/lib/select/select.d.ts +339 -3
  48. package/lib/selectable-box/selectable-box.d.ts +8 -6
  49. package/lib/slider/slider.d.ts +16 -8
  50. package/lib/split-button/split-button.d.ts +26 -12
  51. package/lib/switch/switch.d.ts +8 -6
  52. package/lib/tab/tab.d.ts +349 -7
  53. package/lib/tab-panel/tab-panel.d.ts +333 -1
  54. package/lib/tabs/definition.d.ts +1 -0
  55. package/lib/tabs/tabs.d.ts +6 -1
  56. package/lib/tag/tag.d.ts +338 -2
  57. package/lib/tag-group/tag-group.d.ts +8 -6
  58. package/lib/text-anchor/text-anchor.d.ts +16 -8
  59. package/lib/text-area/text-area.d.ts +8 -6
  60. package/lib/text-field/text-field.d.ts +16 -8
  61. package/lib/time-picker/time-picker.d.ts +38 -26
  62. package/lib/toggletip/toggletip.d.ts +9 -3
  63. package/lib/tooltip/tooltip.d.ts +9 -3
  64. package/lib/tree-item/tree-item.d.ts +338 -2
  65. package/lib/tree-view/tree-view.d.ts +333 -1
  66. package/lib/video-player/video-player.d.ts +14 -6
  67. package/package.json +1 -1
  68. package/shared/affix.js +1 -1
  69. package/shared/aria/aria-change-subscription.d.ts +6 -0
  70. package/shared/aria/aria-mixin.d.ts +338 -0
  71. package/shared/aria/delegate-aria-behavior.d.ts +31 -0
  72. package/shared/aria/delegates-aria.d.ts +14 -9
  73. package/shared/aria/host-semantics-behavior.d.ts +22 -0
  74. package/shared/aria/host-semantics.d.ts +337 -0
  75. package/shared/attribute-binding-behaviour.cjs +41 -0
  76. package/shared/attribute-binding-behaviour.js +39 -0
  77. package/shared/calendar-event.cjs +2 -1
  78. package/shared/calendar-event.js +2 -1
  79. package/shared/definition.js +1 -1
  80. package/shared/definition10.cjs +8 -2
  81. package/shared/definition10.js +9 -3
  82. package/shared/definition11.cjs +4 -28
  83. package/shared/definition11.js +5 -29
  84. package/shared/definition12.cjs +4 -1
  85. package/shared/definition12.js +5 -2
  86. package/shared/definition13.js +1 -1
  87. package/shared/definition14.js +1 -1
  88. package/shared/definition15.cjs +9 -8
  89. package/shared/definition15.js +11 -10
  90. package/shared/definition16.cjs +1 -1
  91. package/shared/definition16.js +2 -2
  92. package/shared/definition17.js +1 -1
  93. package/shared/definition18.js +1 -1
  94. package/shared/definition19.cjs +3 -0
  95. package/shared/definition19.js +4 -1
  96. package/shared/definition2.js +1 -1
  97. package/shared/definition20.js +1 -1
  98. package/shared/definition21.js +1 -1
  99. package/shared/definition22.cjs +3 -2
  100. package/shared/definition22.js +5 -4
  101. package/shared/definition23.cjs +4 -2
  102. package/shared/definition23.js +6 -4
  103. package/shared/definition24.js +1 -1
  104. package/shared/definition25.cjs +2 -14
  105. package/shared/definition25.js +3 -15
  106. package/shared/definition26.cjs +15 -2
  107. package/shared/definition26.js +16 -3
  108. package/shared/definition27.cjs +3 -2
  109. package/shared/definition27.js +4 -3
  110. package/shared/definition28.cjs +1 -1
  111. package/shared/definition28.js +2 -2
  112. package/shared/definition29.js +1 -1
  113. package/shared/definition3.cjs +4 -3
  114. package/shared/definition3.js +6 -5
  115. package/shared/definition30.cjs +34 -34
  116. package/shared/definition30.js +36 -36
  117. package/shared/definition31.cjs +6 -4
  118. package/shared/definition31.js +8 -6
  119. package/shared/definition32.js +1 -1
  120. package/shared/definition33.cjs +7 -2
  121. package/shared/definition33.js +8 -3
  122. package/shared/definition34.js +1 -1
  123. package/shared/definition35.cjs +3 -14
  124. package/shared/definition35.js +5 -16
  125. package/shared/definition36.cjs +8 -5
  126. package/shared/definition36.js +9 -6
  127. package/shared/definition37.js +1 -1
  128. package/shared/definition38.cjs +7 -8
  129. package/shared/definition38.js +9 -10
  130. package/shared/definition39.cjs +7 -8
  131. package/shared/definition39.js +9 -10
  132. package/shared/definition4.cjs +1 -1
  133. package/shared/definition4.js +2 -2
  134. package/shared/definition40.cjs +8 -5
  135. package/shared/definition40.js +9 -6
  136. package/shared/definition41.cjs +1 -1
  137. package/shared/definition41.js +2 -2
  138. package/shared/definition42.js +1 -1
  139. package/shared/definition43.cjs +506 -93
  140. package/shared/definition43.js +502 -89
  141. package/shared/definition44.cjs +27 -10
  142. package/shared/definition44.js +28 -11
  143. package/shared/definition45.cjs +12 -6
  144. package/shared/definition45.js +13 -7
  145. package/shared/definition46.cjs +18 -6
  146. package/shared/definition46.js +20 -8
  147. package/shared/definition47.js +1 -1
  148. package/shared/definition48.js +1 -1
  149. package/shared/definition49.cjs +10 -3
  150. package/shared/definition49.js +12 -5
  151. package/shared/definition5.cjs +7 -2
  152. package/shared/definition5.js +8 -3
  153. package/shared/definition50.cjs +8 -7
  154. package/shared/definition50.js +10 -9
  155. package/shared/definition51.cjs +3 -2
  156. package/shared/definition51.js +4 -3
  157. package/shared/definition52.cjs +8 -4
  158. package/shared/definition52.js +9 -5
  159. package/shared/definition53.cjs +5 -0
  160. package/shared/definition53.js +6 -2
  161. package/shared/definition54.cjs +4 -3
  162. package/shared/definition54.js +6 -5
  163. package/shared/definition55.cjs +7 -4
  164. package/shared/definition55.js +8 -5
  165. package/shared/definition56.cjs +69 -15
  166. package/shared/definition56.js +70 -16
  167. package/shared/definition57.cjs +163 -112
  168. package/shared/definition57.js +165 -114
  169. package/shared/definition58.js +1 -1
  170. package/shared/definition59.js +1 -1
  171. package/shared/definition6.js +1 -1
  172. package/shared/definition60.js +1 -1
  173. package/shared/definition61.cjs +8 -5
  174. package/shared/definition61.js +9 -6
  175. package/shared/definition62.cjs +5 -2
  176. package/shared/definition62.js +6 -3
  177. package/shared/definition63.js +1 -1
  178. package/shared/definition64.js +1 -1
  179. package/shared/definition65.js +1 -1
  180. package/shared/definition7.js +1 -1
  181. package/shared/definition8.cjs +4 -2
  182. package/shared/definition8.js +6 -4
  183. package/shared/definition9.js +1 -1
  184. package/shared/delegates-aria.cjs +106 -56
  185. package/shared/delegates-aria.js +107 -58
  186. package/shared/enums.cjs +0 -6
  187. package/shared/enums.js +1 -6
  188. package/shared/foundation/button/button.d.ts +8 -6
  189. package/shared/foundation/vivid-element/vivid-element.d.ts +339 -1
  190. package/shared/host-semantics.cjs +65 -0
  191. package/shared/host-semantics.js +62 -0
  192. package/shared/option.cjs +7 -1
  193. package/shared/option.js +7 -1
  194. package/shared/patterns/affix.d.ts +22 -10
  195. package/shared/patterns/anchored.d.ts +18 -6
  196. package/shared/patterns/localized.d.ts +11 -5
  197. package/shared/patterns/trapped-focus.d.ts +11 -5
  198. package/shared/picker-field/mixins/calendar-picker.d.ts +19 -13
  199. package/shared/picker-field/mixins/calendar-picker.template.d.ts +19 -13
  200. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +11 -5
  201. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +38 -26
  202. package/shared/picker-field/mixins/single-date-picker.d.ts +55 -37
  203. package/shared/picker-field/mixins/single-value-picker.d.ts +17 -11
  204. package/shared/picker-field/mixins/time-selection-picker.d.ts +38 -26
  205. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +38 -26
  206. package/shared/picker-field/picker-field.d.ts +21 -9
  207. package/shared/picker-field.template.js +1 -1
  208. package/shared/repeat.js +1 -1
  209. package/shared/single-value-picker.cjs +3 -0
  210. package/shared/single-value-picker.js +3 -0
  211. package/shared/slider.template.cjs +10 -9
  212. package/shared/slider.template.js +10 -9
  213. package/shared/templating/attribute-binding-behaviour.d.ts +15 -0
  214. package/shared/templating/render-in-light-dom.d.ts +22 -0
  215. package/shared/text-anchor.template.cjs +2 -13
  216. package/shared/text-anchor.template.js +2 -13
  217. package/shared/text-field.cjs +1 -1
  218. package/shared/text-field.js +1 -1
  219. package/shared/time-selection-picker.template.js +1 -1
  220. package/shared/vivid-element.cjs +96 -2
  221. package/shared/vivid-element.js +93 -3
  222. package/styles/core/all.css +1 -1
  223. package/styles/core/theme.css +1 -1
  224. package/styles/core/typography.css +1 -1
  225. package/styles/tokens/theme-dark.css +4 -4
  226. package/styles/tokens/theme-light.css +4 -4
  227. package/styles/tokens/vivid-2-compat.css +1 -1
  228. package/text-anchor/index.js +1 -1
  229. package/vivid.api.json +316 -70
  230. package/shared/Reflector.cjs +0 -71
  231. package/shared/Reflector.js +0 -69
@@ -1,15 +1,80 @@
1
1
  import { i as iconDefinition } from './definition28.js';
2
- import { V as VividElement, a as attr, n as nullableNumberConverter, o as observable, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
3
- import { R as Reflector } from './Reflector.js';
2
+ import { O as Observable, D as DOM, V as VividElement, a as attr, n as nullableNumberConverter, o as observable, h as html, g as createRegisterFunction, i as defineVividComponent } from './vivid-element.js';
4
3
  import { a as applyMixinsWithObservables } from './applyMixinsWithObservables.js';
5
- import { D as DelegatesAria } from './delegates-aria.js';
4
+ import { D as DelegatesAria, d as delegateAria } from './delegates-aria.js';
6
5
  import { F as FormAssociated } from './form-associated.js';
7
6
  import { F as FormElementSuccessText, a as FormElementHelperText, b as FormElementCharCount, e as errorText, f as formElements, g as getFeedbackTemplate } from './form-elements.js';
8
7
  import { c as classNames } from './class-names.js';
9
8
  import { w as when } from './when.js';
10
9
  import { r as ref } from './ref.js';
11
10
 
12
- const styles = ":host{display:inline-block}.base{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--_connotation-color-intermediate)}.base.appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--_connotation-color-fierce)}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-100);--_appearance-color-outline: var(--vvd-color-neutral-300)}.base:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.readonly):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: var(--vvd-color-neutral-400)}.base:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.error):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: var(--vvd-color-alert-500)}.base:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.base:where(.success):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: var(--vvd-color-success-500)}.base:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.base.connotation-success{--_connotation-color-primary: var(--vvd-text-area-success-primary, var(--vvd-color-success-500));--_connotation-color-primary-text: var(--vvd-text-area-success-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-text-area-success-primary-increment, var(--vvd-color-success-600));--_connotation-color-intermediate: var(--vvd-text-area-success-intermediate, var(--vvd-color-success-500));--_connotation-color-firm: var(--vvd-text-area-success-firm, var(--vvd-color-success-600));--_connotation-color-fierce: var(--vvd-text-area-success-fierce, var(--vvd-color-success-700));--_connotation-color-faint: var(--vvd-text-area-success-faint, var(--vvd-color-success-50));--_connotation-color-soft: var(--vvd-text-area-success-soft, var(--vvd-color-success-100))}.base.connotation-alert{--_connotation-color-primary: var(--vvd-text-area-alert-primary, var(--vvd-color-alert-500));--_connotation-color-primary-text: var(--vvd-text-area-alert-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-text-area-alert-primary-increment, var(--vvd-color-alert-600));--_connotation-color-intermediate: var(--vvd-text-area-alert-intermediate, var(--vvd-color-alert-500));--_connotation-color-firm: var(--vvd-text-area-alert-firm, var(--vvd-color-alert-600));--_connotation-color-fierce: var(--vvd-text-area-alert-fierce, var(--vvd-color-alert-700));--_connotation-color-faint: var(--vvd-text-area-alert-faint, var(--vvd-color-alert-50));--_connotation-color-soft: var(--vvd-text-area-alert-soft, var(--vvd-color-alert-100))}.base:not(.connotation-success,.connotation-alert){--_connotation-color-primary: var(--vvd-text-area-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-text-area-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-text-area-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-intermediate: var(--vvd-text-area-accent-intermediate, var(--vvd-color-neutral-500));--_connotation-color-firm: var(--vvd-text-area-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-fierce: var(--vvd-text-area-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-faint: var(--vvd-text-area-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-text-area-accent-soft, var(--vvd-color-neutral-100))}.base{display:inline-grid;grid-template-columns:1fr max-content;inline-size:100%;row-gap:4px}@supports (user-select: none){.base{user-select:none}}.base:not(.disabled){--_low-ink-color: var(--vvd-color-neutral-600)}.base.disabled{--_low-ink-color: var(--_appearance-color-text);cursor:not-allowed}.label{color:var(--vvd-color-canvas-text);contain:inline-size;font:var(--vvd-typography-base);grid-column:1/2;grid-row:1;line-height:20px}.char-count{color:var(--_low-ink-color);font:var(--vvd-typography-base);grid-column:2/-1}.control{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.control{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.control ::-webkit-scrollbar{width:4px}.control ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.control ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}.control{box-sizing:border-box;padding:8px 16px;border:0 none;border-radius:8px;appearance:none;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);grid-column:1/-1;min-block-size:calc(1px*(32 + 4*clamp(-1,var(--vvd-size-density, 0),2)));resize:none;transition:box-shadow .2s,background-color .2s,color .2s}@supports selector(::-webkit-resizer){.control::-webkit-resizer{background-image:linear-gradient(315deg,transparent 0,transparent 2px,var(--vvd-color-canvas-text) 2px,var(--vvd-color-canvas-text) 3px,transparent 3px,transparent 5px,var(--vvd-color-canvas-text) 5px,var(--vvd-color-canvas-text) 6px,transparent 6px,transparent 8px,transparent 100%);background-repeat:no-repeat;background-size:10px 10px;block-size:10px;inline-size:10px}}.control:disabled{opacity:1;pointer-events:none;-webkit-text-fill-color:var(--_appearance-color-text)}.control::placeholder,.control:disabled::placeholder{opacity:1;pointer-events:none;-webkit-text-fill-color:var(--_low-ink-color)}.control:focus-visible{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}:host([resize=both]) .control{resize:both}:host([resize=horizontal]) .control{resize:horizontal}:host([resize=vertical]) .control{resize:vertical}";
11
+ const styles = ":host{display:inline-block}.base{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.base.appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-700)}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-100);--_appearance-color-outline: var(--vvd-color-neutral-300)}.base:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.readonly):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: var(--vvd-color-neutral-400)}.base:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.error):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: var(--vvd-color-alert-500)}.base:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.base:where(.success):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: var(--vvd-color-success-500)}.base:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.base.connotation-success{--_connotation-color-primary: var(--vvd-text-area-success-primary, var(--vvd-color-success-500));--_connotation-color-primary-text: var(--vvd-text-area-success-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-text-area-success-primary-increment, var(--vvd-color-success-600));--_connotation-color-intermediate: var(--vvd-text-area-success-intermediate, var(--vvd-color-success-500));--_connotation-color-firm: var(--vvd-text-area-success-firm, var(--vvd-color-success-600));--_connotation-color-fierce: var(--vvd-text-area-success-fierce, var(--vvd-color-success-700));--_connotation-color-faint: var(--vvd-text-area-success-faint, var(--vvd-color-success-50));--_connotation-color-soft: var(--vvd-text-area-success-soft, var(--vvd-color-success-100))}.base.connotation-alert{--_connotation-color-primary: var(--vvd-text-area-alert-primary, var(--vvd-color-alert-500));--_connotation-color-primary-text: var(--vvd-text-area-alert-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-text-area-alert-primary-increment, var(--vvd-color-alert-600));--_connotation-color-intermediate: var(--vvd-text-area-alert-intermediate, var(--vvd-color-alert-500));--_connotation-color-firm: var(--vvd-text-area-alert-firm, var(--vvd-color-alert-600));--_connotation-color-fierce: var(--vvd-text-area-alert-fierce, var(--vvd-color-alert-700));--_connotation-color-faint: var(--vvd-text-area-alert-faint, var(--vvd-color-alert-50));--_connotation-color-soft: var(--vvd-text-area-alert-soft, var(--vvd-color-alert-100))}.base:not(.connotation-success,.connotation-alert){--_connotation-color-primary: var(--vvd-text-area-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-text-area-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-text-area-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-intermediate: var(--vvd-text-area-accent-intermediate, var(--vvd-color-neutral-500));--_connotation-color-firm: var(--vvd-text-area-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-fierce: var(--vvd-text-area-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-faint: var(--vvd-text-area-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-text-area-accent-soft, var(--vvd-color-neutral-100))}.base{display:inline-grid;grid-template-columns:1fr max-content;inline-size:100%;row-gap:4px}@supports (user-select: none){.base{user-select:none}}.base:not(.disabled){--_low-ink-color: var(--vvd-color-neutral-600)}.base.disabled{--_low-ink-color: var(--_appearance-color-text);cursor:not-allowed}.label{color:var(--vvd-color-canvas-text);contain:inline-size;font:var(--vvd-typography-base);grid-column:1/2;grid-row:1;line-height:20px}.char-count{color:var(--_low-ink-color);font:var(--vvd-typography-base);grid-column:2/-1}.control{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.control{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.control ::-webkit-scrollbar{width:4px}.control ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.control ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}.control{box-sizing:border-box;padding:8px 16px;border:0 none;border-radius:8px;appearance:none;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);grid-column:1/-1;min-block-size:calc(1px*(32 + 4*clamp(-1,var(--vvd-size-density, 0),2)));resize:none;transition:box-shadow .2s,background-color .2s,color .2s}@supports selector(::-webkit-resizer){.control::-webkit-resizer{background-image:linear-gradient(315deg,transparent 0,transparent 2px,var(--vvd-color-canvas-text) 2px,var(--vvd-color-canvas-text) 3px,transparent 3px,transparent 5px,var(--vvd-color-canvas-text) 5px,var(--vvd-color-canvas-text) 6px,transparent 6px,transparent 8px,transparent 100%);background-repeat:no-repeat;background-size:10px 10px;block-size:10px;inline-size:10px}}.control:disabled{opacity:1;pointer-events:none;-webkit-text-fill-color:var(--_appearance-color-text)}.control::placeholder,.control:disabled::placeholder{opacity:1;pointer-events:none;-webkit-text-fill-color:var(--_low-ink-color)}.control:focus-visible{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}:host([resize=both]) .control{resize:both}:host([resize=horizontal]) .control{resize:horizontal}:host([resize=vertical]) .control{resize:vertical}";
12
+
13
+ class Reflector {
14
+ #reflectedProperties = /* @__PURE__ */ new Map();
15
+ #source;
16
+ #target;
17
+ constructor(source, target) {
18
+ this.#source = source;
19
+ this.#target = target;
20
+ }
21
+ attribute(propertyName, attributeName) {
22
+ this.#addReflectedProperty(propertyName, {
23
+ type: "attribute",
24
+ destination: attributeName
25
+ });
26
+ }
27
+ booleanAttribute(propertyName, attributeName) {
28
+ this.#addReflectedProperty(propertyName, {
29
+ type: "boolean-attribute",
30
+ destination: attributeName
31
+ });
32
+ }
33
+ property(propertyName, targetProperty, skipIfEqual = false) {
34
+ this.#addReflectedProperty(propertyName, {
35
+ type: "property",
36
+ destination: targetProperty,
37
+ skipIfEqual
38
+ });
39
+ }
40
+ destroy() {
41
+ const notifier = Observable.getNotifier(this.#source);
42
+ for (const prop of this.#reflectedProperties.keys()) {
43
+ notifier.unsubscribe(this.#propertyChangeHandler, prop);
44
+ }
45
+ this.#reflectedProperties.clear();
46
+ }
47
+ #addReflectedProperty(name, reflected) {
48
+ this.#reflectedProperties.set(name, reflected);
49
+ const notifier = Observable.getNotifier(this.#source);
50
+ notifier.subscribe(this.#propertyChangeHandler, name);
51
+ this.#propertyChangeHandler.handleChange(this.#source, name);
52
+ }
53
+ #propertyChangeHandler = {
54
+ handleChange: (source, propertyName) => {
55
+ const reflectedProperty = this.#reflectedProperties.get(propertyName);
56
+ const value = source[propertyName];
57
+ switch (reflectedProperty.type) {
58
+ case "boolean-attribute":
59
+ DOM.setBooleanAttribute(
60
+ this.#target,
61
+ reflectedProperty.destination,
62
+ Boolean(value)
63
+ );
64
+ break;
65
+ case "attribute":
66
+ DOM.setAttribute(this.#target, reflectedProperty.destination, value);
67
+ break;
68
+ case "property":
69
+ if (reflectedProperty.skipIfEqual && this.#target[reflectedProperty.destination] === value) {
70
+ return;
71
+ }
72
+ this.#target[reflectedProperty.destination] = value;
73
+ break;
74
+ }
75
+ }
76
+ };
77
+ }
13
78
 
14
79
  class _TextArea extends VividElement {
15
80
  }
@@ -252,18 +317,7 @@ const TextAreaTemplate = (context) => {
252
317
  ?disabled="${(x) => x.disabled}"
253
318
  ?required="${(x) => x.required}"
254
319
  ?spellcheck="${(x) => x.spellcheck}"
255
- aria-atomic="${(x) => x.ariaAtomic}"
256
- aria-busy="${(x) => x.ariaBusy}"
257
- aria-current="${(x) => x.ariaCurrent}"
258
- aria-disabled="${(x) => x.ariaDisabled}"
259
- aria-haspopup="${(x) => x.ariaHasPopup}"
260
- aria-hidden="${(x) => x.ariaHidden}"
261
- aria-invalid="${(x) => x.ariaInvalid}"
262
- aria-keyshortcuts="${(x) => x.ariaKeyShortcuts}"
263
- aria-label="${(x) => x.ariaLabel}"
264
- aria-live="${(x) => x.ariaLive}"
265
- aria-relevant="${(x) => x.ariaRelevant}"
266
- aria-roledescription="${(x) => x.ariaRoleDescription}"
320
+ ${delegateAria()}
267
321
  @input="${(x) => x.handleTextInput()}"
268
322
  @change="${(x) => x.handleChange()}"
269
323
  ${ref("control")}
@@ -2,7 +2,6 @@
2
2
 
3
3
  const definition = require('./definition28.cjs');
4
4
  const vividElement = require('./vivid-element.cjs');
5
- const Reflector = require('./Reflector.cjs');
6
5
  const applyMixinsWithObservables = require('./applyMixinsWithObservables.cjs');
7
6
  const delegatesAria = require('./delegates-aria.cjs');
8
7
  const formAssociated = require('./form-associated.cjs');
@@ -12,6 +11,7 @@ const textField = require('./text-field.cjs');
12
11
  const classNames = require('./class-names.cjs');
13
12
  const when = require('./when.cjs');
14
13
  const slotted = require('./slotted.cjs');
14
+ const ref = require('./ref.cjs');
15
15
 
16
16
  const byteToHex = [];
17
17
  for (let i = 0; i < 256; ++i) {
@@ -98,7 +98,7 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
98
98
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
99
99
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
100
100
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
101
- var _TextField_instances, handleLabelChange_fn, _reflectToInput, _helperTextMirrorEl, _helperTextSlotMutationObserver, updateHelperTextMutationObserver_fn, updateMirroredHelperText_fn;
101
+ var _randomId, _helperTextSlotMutationObserver, _TextField_instances, updateHelperTextMutationObserver_fn, updateMirroredHelperText_fn;
102
102
  const TextFieldType = {
103
103
  /**
104
104
  * A text TextField
@@ -120,7 +120,11 @@ const getSafariWorkaroundStyleSheet = definition.memoizeWith(
120
120
  return styleSheet;
121
121
  }
122
122
  );
123
- const installSafariWorkaroundStyle = (forElement) => {
123
+ const installSafariWorkaroundStyleIfNeeded = (forElement) => {
124
+ if (forElement._isSafariWorkaroundInstalled) {
125
+ return;
126
+ }
127
+ forElement._isSafariWorkaroundInstalled = true;
124
128
  const root = forElement.getRootNode();
125
129
  const workaroundStyleSheet = getSafariWorkaroundStyleSheet();
126
130
  const supportsAdoptedStyleSheets = "adoptedStyleSheets" in root;
@@ -142,12 +146,8 @@ exports.TextField = class TextField extends affix.AffixIcon(
142
146
  __privateAdd(this, _TextField_instances);
143
147
  // eslint-disable-next-line @nrwl/nx/workspace/no-attribute-default-value
144
148
  this.type = TextFieldType.text;
145
- /**
146
- * @internal
147
- */
148
- this._labelEl = null;
149
- __privateAdd(this, _reflectToInput);
150
- __privateAdd(this, _helperTextMirrorEl);
149
+ __privateAdd(this, _randomId, generateRandomId());
150
+ this._mirroredHelperText = "";
151
151
  __privateAdd(this, _helperTextSlotMutationObserver);
152
152
  }
153
153
  /**
@@ -237,6 +237,24 @@ exports.TextField = class TextField extends affix.AffixIcon(
237
237
  this.proxy.spellcheck = this.spellcheck;
238
238
  }
239
239
  }
240
+ /**
241
+ * @internal
242
+ */
243
+ valueChanged(previous, next) {
244
+ super.valueChanged(previous, next);
245
+ this._updateControlValueIfNeeded();
246
+ }
247
+ /**
248
+ * Update the controls value only if it is actually different from the actual value.
249
+ * This is important as to not reset the browser's "dirtiness" flag on the input, which is used for min/maxlength
250
+ * constraints.
251
+ * @internal
252
+ */
253
+ _updateControlValueIfNeeded() {
254
+ if (this.control && this.control.value !== this.value) {
255
+ this.control.value = this.value;
256
+ }
257
+ }
240
258
  /**
241
259
  * Selects all the text in the text field
242
260
  *
@@ -268,14 +286,6 @@ exports.TextField = class TextField extends affix.AffixIcon(
268
286
  validate() {
269
287
  super.validate(this.control);
270
288
  }
271
- /**
272
- * @internal
273
- */
274
- labelChanged() {
275
- if (this._labelEl) {
276
- __privateMethod(this, _TextField_instances, handleLabelChange_fn).call(this, this._labelEl);
277
- }
278
- }
279
289
  connectedCallback() {
280
290
  super.connectedCallback();
281
291
  this.proxy.setAttribute("type", this.type);
@@ -285,82 +295,23 @@ exports.TextField = class TextField extends affix.AffixIcon(
285
295
  this.focus();
286
296
  });
287
297
  }
288
- if (!this.control) {
289
- const uniqueId = this.id || generateRandomId();
290
- const controlId = `vvd-text-field-control-${uniqueId}`;
291
- const helperTextId = `vvd-text-field-helper-text-${uniqueId}`;
292
- const input = document.createElement("input");
293
- input.slot = "_control";
294
- input.id = controlId;
295
- input.className = safariWorkaroundClassName;
296
- this.control = input;
297
- input.addEventListener("input", () => {
298
- this.handleTextInput();
299
- });
300
- input.addEventListener("change", () => {
301
- this.handleChange();
302
- });
303
- input.addEventListener("blur", () => {
304
- this.$emit("blur", void 0, { bubbles: false });
305
- });
306
- input.addEventListener("focus", () => {
307
- this.$emit("focus", void 0, { bubbles: false });
308
- });
309
- this.appendChild(input);
310
- const label = document.createElement("label");
311
- label.slot = "_label";
312
- label.htmlFor = controlId;
313
- this._labelEl = label;
314
- __privateMethod(this, _TextField_instances, handleLabelChange_fn).call(this, label);
315
- __privateSet(this, _helperTextMirrorEl, document.createElement("div"));
316
- __privateGet(this, _helperTextMirrorEl).id = helperTextId;
317
- __privateGet(this, _helperTextMirrorEl).slot = "_mirrored-helper-text";
318
- __privateMethod(this, _TextField_instances, updateMirroredHelperText_fn).call(this);
319
- this.appendChild(__privateGet(this, _helperTextMirrorEl));
320
- installSafariWorkaroundStyle(this);
321
- }
322
- __privateSet(this, _reflectToInput, new Reflector.Reflector(this, this.control));
323
- __privateGet(this, _reflectToInput).booleanAttribute("autofocus", "autofocus");
324
- __privateGet(this, _reflectToInput).booleanAttribute("disabled", "disabled");
325
- __privateGet(this, _reflectToInput).booleanAttribute("readOnly", "readonly");
326
- __privateGet(this, _reflectToInput).booleanAttribute("required", "required");
327
- __privateGet(this, _reflectToInput).booleanAttribute("spellcheck", "spellcheck");
328
- __privateGet(this, _reflectToInput).attribute("list", "list");
329
- __privateGet(this, _reflectToInput).attribute("maxlength", "maxlength");
330
- __privateGet(this, _reflectToInput).attribute("minlength", "minlength");
331
- __privateGet(this, _reflectToInput).attribute("pattern", "pattern");
332
- __privateGet(this, _reflectToInput).attribute("placeholder", "placeholder");
333
- __privateGet(this, _reflectToInput).attribute("size", "size");
334
- __privateGet(this, _reflectToInput).attribute("autoComplete", "autocomplete");
335
- __privateGet(this, _reflectToInput).attribute("type", "type");
336
- __privateGet(this, _reflectToInput).attribute("inputMode", "inputmode");
337
- __privateGet(this, _reflectToInput).attribute("ariaAtomic", "aria-atomic");
338
- __privateGet(this, _reflectToInput).attribute("ariaBusy", "aria-busy");
339
- __privateGet(this, _reflectToInput).attribute("ariaCurrent", "aria-current");
340
- __privateGet(this, _reflectToInput).attribute("ariaDisabled", "aria-disabled");
341
- __privateGet(this, _reflectToInput).attribute("ariaHasPopup", "aria-haspopup");
342
- __privateGet(this, _reflectToInput).attribute("ariaHidden", "aria-hidden");
343
- __privateGet(this, _reflectToInput).attribute("ariaInvalid", "aria-invalid");
344
- __privateGet(this, _reflectToInput).attribute("ariaKeyShortcuts", "aria-keyshortcuts");
345
- __privateGet(this, _reflectToInput).attribute("ariaLabel", "aria-label");
346
- __privateGet(this, _reflectToInput).attribute("ariaLive", "aria-live");
347
- __privateGet(this, _reflectToInput).attribute("ariaRelevant", "aria-relevant");
348
- __privateGet(this, _reflectToInput).attribute(
349
- "ariaRoleDescription",
350
- "aria-roledescription"
351
- );
352
- __privateGet(this, _reflectToInput).property("value", "value", true);
298
+ this._updateControlValueIfNeeded();
353
299
  __privateMethod(this, _TextField_instances, updateHelperTextMutationObserver_fn).call(this);
300
+ installSafariWorkaroundStyleIfNeeded(this);
354
301
  }
355
302
  disconnectedCallback() {
356
303
  super.disconnectedCallback();
357
- __privateGet(this, _reflectToInput).destroy();
358
- __privateSet(this, _reflectToInput, void 0);
359
304
  __privateMethod(this, _TextField_instances, updateHelperTextMutationObserver_fn).call(this);
360
305
  }
361
306
  focus() {
362
307
  this.control?.focus();
363
308
  }
309
+ /**
310
+ * @internal
311
+ */
312
+ get _uniqueId() {
313
+ return this.id || __privateGet(this, _randomId);
314
+ }
364
315
  /**
365
316
  * @internal
366
317
  */
@@ -375,26 +326,20 @@ exports.TextField = class TextField extends affix.AffixIcon(
375
326
  __privateMethod(this, _TextField_instances, updateHelperTextMutationObserver_fn).call(this);
376
327
  }
377
328
  };
378
- _TextField_instances = new WeakSet();
379
- handleLabelChange_fn = function(labelEl) {
380
- if (!this.label) {
381
- labelEl.remove();
382
- } else {
383
- labelEl.textContent = this.label;
384
- if (!labelEl.isConnected) {
385
- this.appendChild(labelEl);
386
- }
387
- }
388
- };
389
- _reflectToInput = new WeakMap();
390
- _helperTextMirrorEl = new WeakMap();
329
+ _randomId = new WeakMap();
391
330
  _helperTextSlotMutationObserver = new WeakMap();
331
+ _TextField_instances = new WeakSet();
392
332
  updateHelperTextMutationObserver_fn = function() {
393
333
  const usesHelperTextSlot = this._helperTextSlottedContent.length;
394
334
  const shouldHaveMutationObserver = usesHelperTextSlot && this.isConnected;
395
335
  if (shouldHaveMutationObserver && !__privateGet(this, _helperTextSlotMutationObserver)) {
396
336
  __privateSet(this, _helperTextSlotMutationObserver, new MutationObserver((records) => {
397
- if (records.some((record) => record.target !== __privateGet(this, _helperTextMirrorEl))) {
337
+ if (
338
+ // Ignore updates to the mirrored helper text itself
339
+ records.some(
340
+ (record) => record.target instanceof HTMLElement && record.target.slot !== "_mirrored-helper-text"
341
+ )
342
+ ) {
398
343
  __privateMethod(this, _TextField_instances, updateMirroredHelperText_fn).call(this);
399
344
  }
400
345
  }));
@@ -414,17 +359,7 @@ updateMirroredHelperText_fn = function() {
414
359
  if (this._helperTextSlottedContent?.length) {
415
360
  helperText = this._helperTextSlottedContent.map((node) => node.innerText).join(" ");
416
361
  }
417
- if (__privateGet(this, _helperTextMirrorEl)) {
418
- __privateGet(this, _helperTextMirrorEl).textContent = helperText;
419
- if (helperText) {
420
- this.control.setAttribute(
421
- "aria-describedby",
422
- __privateGet(this, _helperTextMirrorEl).id
423
- );
424
- } else {
425
- this.control.removeAttribute("aria-describedby");
426
- }
427
- }
362
+ this._mirroredHelperText = helperText;
428
363
  };
429
364
  __decorateClass([
430
365
  vividElement.attr({ attribute: "readonly", mode: "boolean" })
@@ -477,6 +412,9 @@ __decorateClass([
477
412
  __decorateClass([
478
413
  vividElement.observable
479
414
  ], exports.TextField.prototype, "leadingActionItemsSlottedContent", 2);
415
+ __decorateClass([
416
+ vividElement.observable
417
+ ], exports.TextField.prototype, "_mirroredHelperText", 2);
480
418
  exports.TextField = __decorateClass([
481
419
  formElements.errorText,
482
420
  formElements.formElements
@@ -488,6 +426,67 @@ applyMixinsWithObservables.applyMixinsWithObservables(
488
426
  formElements.FormElementSuccessText
489
427
  );
490
428
 
429
+ class RenderInLightDomBehaviour {
430
+ constructor(templateBinding, isTemplateBindingVolatile) {
431
+ this.source = null;
432
+ this.templateBindingObserver = vividElement.Observable.binding(
433
+ templateBinding,
434
+ this,
435
+ isTemplateBindingVolatile
436
+ );
437
+ }
438
+ bind(source, context) {
439
+ this.source = source;
440
+ this.context = context;
441
+ if (!this.insertionPoint) {
442
+ this.insertionPoint = document.createComment("");
443
+ source.appendChild(this.insertionPoint);
444
+ }
445
+ this.handleChange();
446
+ }
447
+ unbind() {
448
+ this.source = null;
449
+ this.view.unbind();
450
+ this.templateBindingObserver.disconnect();
451
+ }
452
+ /**
453
+ * Handles change of the template itself.
454
+ */
455
+ handleChange() {
456
+ this.instantiateTemplate(
457
+ this.templateBindingObserver.observe(this.source, this.context)
458
+ );
459
+ }
460
+ instantiateTemplate(template) {
461
+ if (this.view) {
462
+ this.view.dispose();
463
+ }
464
+ this.view = template.create();
465
+ this.view.bind(this.source, this.context);
466
+ this.view.insertBefore(this.insertionPoint);
467
+ }
468
+ }
469
+ class RenderInLightDomDirective extends vividElement.HTMLDirective {
470
+ constructor(templateBinding) {
471
+ super();
472
+ this.templateBinding = templateBinding;
473
+ this.createPlaceholder = vividElement.DOM.createBlockPlaceholder;
474
+ this.isTemplateBindingVolatile = vividElement.Observable.isVolatileBinding(templateBinding);
475
+ }
476
+ createBehavior() {
477
+ return new RenderInLightDomBehaviour(
478
+ this.templateBinding,
479
+ this.isTemplateBindingVolatile
480
+ );
481
+ }
482
+ }
483
+ function renderInLightDOM(templateOrTemplateBinding) {
484
+ const templateBinding = typeof templateOrTemplateBinding === "function" ? templateOrTemplateBinding : () => templateOrTemplateBinding;
485
+ return new RenderInLightDomDirective(templateBinding);
486
+ }
487
+
488
+ const getControlId = (id) => `vvd-text-field-control-${id}`;
489
+ const getHelperTextId = (id) => `vvd-text-field-helper-text-${id}`;
491
490
  const getStateClasses = ({
492
491
  errorValidationMessage,
493
492
  disabled,
@@ -527,9 +526,20 @@ function renderCharCount() {
527
526
  }
528
527
  const TextfieldTemplate = (context) => {
529
528
  const affixIconTemplate = affix.affixIconTemplateFactory(context);
530
- return vividElement.html` <div class="base ${getStateClasses}">
529
+ return vividElement.html`
530
+ <div class="base ${getStateClasses}">
531
531
  ${when.when((x) => x.charCount && x.maxlength, renderCharCount())}
532
532
  <slot class="label" name="_label"></slot>
533
+ ${renderInLightDOM(vividElement.html`
534
+ ${when.when(
535
+ (x) => x.label,
536
+ vividElement.html`
537
+ <label slot="_label" for="${(x) => getControlId(x._uniqueId)}">
538
+ ${(x) => x.label}
539
+ </label>
540
+ `
541
+ )}
542
+ `)}
533
543
  <div class="fieldset">
534
544
  <div class="leading-items-wrapper">
535
545
  <slot
@@ -538,9 +548,41 @@ const TextfieldTemplate = (context) => {
538
548
  ></slot>
539
549
  ${(x) => affixIconTemplate(x.icon)}
540
550
  </div>
541
-
542
551
  <div class="wrapper">
543
552
  <slot class="control" name="_control"></slot>
553
+ ${renderInLightDOM(
554
+ vividElement.html`<input
555
+ slot="_control"
556
+ id="${(x) => getControlId(x._uniqueId)}"
557
+ class="_vvd-3-text-field-safari-workaround"
558
+ @input="${(x) => x.handleTextInput()}"
559
+ @change="${(x) => x.handleChange()}"
560
+ @blur="${(x) => {
561
+ x.$emit("blur", void 0, { bubbles: false });
562
+ }}"
563
+ @focus="${(x) => {
564
+ x.$emit("focus", void 0, { bubbles: false });
565
+ }}"
566
+ ?autofocus="${(x) => x.autofocus}"
567
+ ?disabled="${(x) => x.disabled}"
568
+ ?readonly="${(x) => x.readOnly}"
569
+ ?required="${(x) => x.required}"
570
+ ?spellcheck="${(x) => x.spellcheck}"
571
+ list="${(x) => x.list}"
572
+ maxlength="${(x) => x.maxlength}"
573
+ minlength="${(x) => x.minlength}"
574
+ pattern="${(x) => x.pattern}"
575
+ placeholder="${(x) => x.placeholder}"
576
+ size="${(x) => x.size}"
577
+ autocomplete="${(x) => x.autoComplete}"
578
+ type="${(x) => x.type}"
579
+ inputmode="${(x) => x.inputMode}"
580
+ aria-describedby="${(x) => x._mirroredHelperText ? getHelperTextId(x._uniqueId) : null}"
581
+ value="${(x) => x.initialValue}"
582
+ ${delegatesAria.delegateAria()}
583
+ ${ref.ref("control")}
584
+ />`
585
+ )}
544
586
  </div>
545
587
  <div class="action-items-wrapper">
546
588
  <slot
@@ -551,7 +593,16 @@ const TextfieldTemplate = (context) => {
551
593
  </div>
552
594
  ${formElements.getFeedbackTemplate(context)}
553
595
  </div>
554
- <slot name="_mirrored-helper-text"></slot>`;
596
+ <slot name="_mirrored-helper-text"></slot>
597
+ ${renderInLightDOM(vividElement.html`
598
+ <div
599
+ id="${(x) => getHelperTextId(x._uniqueId)}"
600
+ slot="_mirrored-helper-text"
601
+ >
602
+ ${(x) => x._mirroredHelperText}
603
+ </div>
604
+ `)}
605
+ `;
555
606
  };
556
607
 
557
608
  const textFieldDefinition = vividElement.defineVividComponent(