@vonage/vivid 5.1.0 → 5.3.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 (386) hide show
  1. package/accordion-item/definition.cjs +2 -1
  2. package/accordion-item/definition.js +2 -1
  3. package/alert/index.cjs +1 -1
  4. package/alert/index.js +1 -1
  5. package/audio-player/definition.cjs +41 -6
  6. package/audio-player/definition.js +41 -6
  7. package/audio-player/index.cjs +27 -25
  8. package/audio-player/index.js +88 -62
  9. package/badge/index.cjs +2 -2
  10. package/badge/index.js +4 -4
  11. package/banner/index.cjs +3 -3
  12. package/banner/index.js +6 -6
  13. package/breadcrumb-item/index.cjs +1 -1
  14. package/breadcrumb-item/index.js +1 -1
  15. package/bundled/affix.cjs +7 -7
  16. package/bundled/affix.js +5 -5
  17. package/bundled/anchored.cjs +1 -1
  18. package/bundled/anchored.js +6 -6
  19. package/bundled/attribute-binding-behaviour.cjs +1 -1
  20. package/bundled/attribute-binding-behaviour.js +15 -13
  21. package/bundled/base-color-picker.cjs +13 -0
  22. package/bundled/base-color-picker.js +194 -0
  23. package/bundled/button.cjs +1 -1
  24. package/bundled/button.js +2 -2
  25. package/bundled/calendar-picker.template.cjs +1 -1
  26. package/bundled/calendar-picker.template.js +21 -21
  27. package/bundled/char-count.cjs +1 -1
  28. package/bundled/char-count.js +1 -1
  29. package/bundled/children.cjs +1 -1
  30. package/bundled/children.js +28 -20
  31. package/bundled/definition.cjs +3 -3
  32. package/bundled/definition.js +38 -38
  33. package/bundled/definition10.cjs +72 -18
  34. package/bundled/definition10.js +351 -65
  35. package/bundled/definition11.cjs +19 -10
  36. package/bundled/definition11.js +66 -37
  37. package/bundled/definition12.cjs +10 -1
  38. package/bundled/definition12.js +38 -14
  39. package/bundled/definition13.cjs +1 -73
  40. package/bundled/definition13.js +15 -354
  41. package/bundled/definition15.cjs +1 -1
  42. package/bundled/definition15.js +1 -1
  43. package/bundled/definition16.cjs +2 -2
  44. package/bundled/definition16.js +8 -8
  45. package/bundled/definition17.cjs +7 -7
  46. package/bundled/definition17.js +17 -17
  47. package/bundled/definition19.cjs +17 -14
  48. package/bundled/definition19.js +85 -77
  49. package/bundled/definition2.cjs +9 -5
  50. package/bundled/definition2.js +21 -17
  51. package/bundled/definition22.cjs +9 -9
  52. package/bundled/definition22.js +31 -31
  53. package/bundled/definition3.cjs +1 -1
  54. package/bundled/definition3.js +1 -1
  55. package/bundled/definition6.cjs +6 -6
  56. package/bundled/definition6.js +34 -31
  57. package/bundled/definition7.cjs +1 -1
  58. package/bundled/definition7.js +6 -6
  59. package/bundled/definition8.cjs +2 -2
  60. package/bundled/definition8.js +4 -4
  61. package/bundled/definition9.cjs +1 -1
  62. package/bundled/definition9.js +1 -1
  63. package/bundled/delegates-aria.cjs +1 -1
  64. package/bundled/delegates-aria.js +59 -46
  65. package/bundled/form-associated.cjs +1 -1
  66. package/bundled/form-associated.js +3 -3
  67. package/bundled/host-semantics.cjs +1 -1
  68. package/bundled/host-semantics.js +48 -34
  69. package/bundled/localized.cjs +1 -1
  70. package/bundled/localized.js +43 -31
  71. package/bundled/mixins.cjs +18 -18
  72. package/bundled/mixins.js +99 -93
  73. package/bundled/normalize.cjs +1 -0
  74. package/bundled/normalize.js +7 -0
  75. package/bundled/picker-field.template.cjs +18 -13
  76. package/bundled/picker-field.template.js +45 -37
  77. package/bundled/ref.cjs +1 -1
  78. package/bundled/ref.js +8 -25
  79. package/bundled/repeat.cjs +1 -1
  80. package/bundled/repeat.js +459 -233
  81. package/bundled/slider.template.cjs +1 -1
  82. package/bundled/slider.template.js +2 -2
  83. package/bundled/slotted.cjs +1 -1
  84. package/bundled/slotted.js +62 -45
  85. package/bundled/text-field.cjs +1 -1
  86. package/bundled/text-field.js +1 -1
  87. package/bundled/time-selection-picker.template.cjs +1 -1
  88. package/bundled/time-selection-picker.template.js +5 -5
  89. package/bundled/vivid-element.cjs +1 -1
  90. package/bundled/vivid-element.js +2126 -1172
  91. package/bundled/when.cjs +1 -1
  92. package/bundled/when.js +8 -7
  93. package/bundled/with-contextual-help.cjs +1 -1
  94. package/bundled/with-contextual-help.js +17 -7
  95. package/calendar/definition.cjs +1 -1
  96. package/calendar/definition.js +2 -2
  97. package/calendar/index.cjs +1 -1
  98. package/calendar/index.js +6 -6
  99. package/calendar-event/index.cjs +1 -1
  100. package/calendar-event/index.js +1 -1
  101. package/card/definition.cjs +10 -2
  102. package/card/definition.js +10 -2
  103. package/card/index.cjs +19 -11
  104. package/card/index.js +35 -27
  105. package/color-picker/definition.cjs +1079 -0
  106. package/color-picker/definition.js +1073 -0
  107. package/color-picker/index.cjs +127 -0
  108. package/color-picker/index.js +726 -0
  109. package/combobox/definition.cjs +13 -6
  110. package/combobox/definition.js +14 -7
  111. package/combobox/index.cjs +15 -11
  112. package/combobox/index.js +82 -75
  113. package/contextual-help/index.cjs +1 -1
  114. package/contextual-help/index.js +1 -1
  115. package/custom-elements.json +1621 -325
  116. package/data-grid/definition.cjs +862 -27
  117. package/data-grid/definition.js +863 -28
  118. package/data-grid/index.cjs +25 -25
  119. package/data-grid/index.js +175 -168
  120. package/date-picker/index.cjs +1 -1
  121. package/date-picker/index.js +2 -2
  122. package/date-range-picker/index.cjs +1 -1
  123. package/date-range-picker/index.js +2 -2
  124. package/date-time-picker/index.cjs +1 -1
  125. package/date-time-picker/index.js +2 -2
  126. package/dial-pad/definition.cjs +55 -1
  127. package/dial-pad/definition.js +56 -2
  128. package/dial-pad/index.cjs +21 -18
  129. package/dial-pad/index.js +138 -104
  130. package/dialog/definition.cjs +4 -1
  131. package/dialog/definition.js +4 -1
  132. package/dialog/index.cjs +21 -18
  133. package/dialog/index.js +43 -40
  134. package/empty-state/definition.cjs +7 -2
  135. package/empty-state/definition.js +7 -2
  136. package/empty-state/index.cjs +10 -5
  137. package/empty-state/index.js +18 -13
  138. package/fab/index.cjs +2 -2
  139. package/fab/index.js +4 -4
  140. package/file-picker/definition.cjs +16 -7
  141. package/file-picker/definition.js +17 -8
  142. package/file-picker/index.cjs +12 -9
  143. package/file-picker/index.js +103 -93
  144. package/icon/definition.cjs +10 -6
  145. package/icon/definition.js +10 -6
  146. package/index.cjs +4 -0
  147. package/index.js +1 -0
  148. package/lib/accordion-item/accordion-item.d.ts +2 -2
  149. package/lib/action-group/action-group.d.ts +2 -2
  150. package/lib/alert/alert.d.ts +4 -4
  151. package/lib/audio-player/audio-player.d.ts +6 -2
  152. package/lib/avatar/avatar.d.ts +2 -2
  153. package/lib/badge/badge.d.ts +2 -2
  154. package/lib/banner/banner.d.ts +6 -6
  155. package/lib/breadcrumb/breadcrumb.d.ts +2 -2
  156. package/lib/breadcrumb-item/breadcrumb-item.d.ts +2 -2
  157. package/lib/button/button.d.ts +6 -6
  158. package/lib/button/button.template.d.ts +2 -1
  159. package/lib/calendar/calendar.d.ts +1 -1
  160. package/lib/calendar-event/calendar-event.d.ts +2 -2
  161. package/lib/card/card.d.ts +2 -2
  162. package/lib/checkbox/checkbox.d.ts +12 -12
  163. package/lib/color-picker/color-picker.d.ts +2420 -0
  164. package/lib/color-picker/color-picker.template.d.ts +3 -0
  165. package/lib/color-picker/definition.d.ts +4 -0
  166. package/lib/color-picker/locale.d.ts +9 -0
  167. package/lib/combobox/combobox.d.ts +495 -78
  168. package/lib/components.d.ts +1 -0
  169. package/lib/data-grid/data-grid-cell.d.ts +4 -4
  170. package/lib/data-grid/data-grid-row.d.ts +3 -4
  171. package/lib/data-grid/data-grid.d.ts +1 -2
  172. package/lib/date-picker/date-picker.d.ts +906 -894
  173. package/lib/date-range-picker/date-range-picker.d.ts +596 -590
  174. package/lib/date-time-picker/date-time-picker.d.ts +907 -895
  175. package/lib/dial-pad/dial-pad.d.ts +3 -2
  176. package/lib/dial-pad/dial-pad.template.d.ts +1 -1
  177. package/lib/dial-pad/locale.d.ts +1 -0
  178. package/lib/dialog/dialog.d.ts +4 -4
  179. package/lib/divider/divider.d.ts +2 -2
  180. package/lib/fab/fab.d.ts +2 -2
  181. package/lib/file-picker/file-picker.d.ts +495 -78
  182. package/lib/header/header.d.ts +2 -2
  183. package/lib/menu/menu.d.ts +5 -4
  184. package/lib/menu-item/menu-item.d.ts +4 -4
  185. package/lib/nav/nav.d.ts +2 -2
  186. package/lib/nav-disclosure/nav-disclosure.d.ts +4 -4
  187. package/lib/nav-item/nav-item.d.ts +4 -4
  188. package/lib/note/note.d.ts +2 -2
  189. package/lib/number-field/number-field.d.ts +19 -18
  190. package/lib/option/option.d.ts +4 -4
  191. package/lib/pagination/pagination.d.ts +2 -2
  192. package/lib/progress/progress.d.ts +2 -2
  193. package/lib/progress-ring/progress-ring.d.ts +2 -2
  194. package/lib/radio/radio.d.ts +6 -6
  195. package/lib/radio-group/radio-group.d.ts +2 -2
  196. package/lib/range-slider/range-slider.d.ts +6 -6
  197. package/lib/rich-text-editor/menubar/menubar.d.ts +2 -2
  198. package/lib/rich-text-editor/rich-text-editor.d.ts +2 -2
  199. package/lib/searchable-select/option-tag.d.ts +2 -2
  200. package/lib/searchable-select/searchable-select.d.ts +521 -104
  201. package/lib/select/select.d.ts +484 -67
  202. package/lib/selectable-box/selectable-box.d.ts +2 -2
  203. package/lib/simple-color-picker/locale.d.ts +0 -1
  204. package/lib/simple-color-picker/simple-color-picker.d.ts +47 -821
  205. package/lib/slider/slider.d.ts +6 -6
  206. package/lib/split-button/split-button.d.ts +6 -6
  207. package/lib/switch/switch.d.ts +4 -4
  208. package/lib/tab/tab.d.ts +6 -6
  209. package/lib/tab-panel/tab-panel.d.ts +2 -2
  210. package/lib/tag/tag.d.ts +6 -6
  211. package/lib/tag-group/tag-group.d.ts +2 -2
  212. package/lib/tag-name-map.d.ts +2 -1
  213. package/lib/text-area/text-area.d.ts +17 -16
  214. package/lib/text-field/text-field.d.ts +19 -18
  215. package/lib/time-picker/time-picker.d.ts +579 -573
  216. package/lib/toggletip/toggletip.d.ts +4 -4
  217. package/lib/tooltip/tooltip.d.ts +2 -2
  218. package/lib/tree-item/tree-item.d.ts +4 -4
  219. package/lib/tree-view/tree-view.d.ts +2 -2
  220. package/lib/video-player/video-player.d.ts +2 -2
  221. package/locales/de-DE.cjs +15 -3
  222. package/locales/de-DE.js +15 -3
  223. package/locales/en-GB.cjs +15 -3
  224. package/locales/en-GB.js +15 -3
  225. package/locales/en-US.cjs +15 -3
  226. package/locales/en-US.js +15 -3
  227. package/locales/ja-JP.cjs +15 -3
  228. package/locales/ja-JP.js +15 -3
  229. package/locales/zh-CN.cjs +15 -3
  230. package/locales/zh-CN.js +15 -3
  231. package/menu/definition.cjs +8 -4
  232. package/menu/definition.js +9 -5
  233. package/note/index.cjs +2 -2
  234. package/note/index.js +4 -4
  235. package/number-field/definition.cjs +3 -3
  236. package/number-field/definition.js +4 -4
  237. package/number-field/index.cjs +8 -8
  238. package/number-field/index.js +41 -40
  239. package/option/index.cjs +1 -1
  240. package/option/index.js +1 -1
  241. package/package.json +5 -5
  242. package/pagination/definition.cjs +2 -1
  243. package/pagination/definition.js +2 -1
  244. package/pagination/index.cjs +12 -12
  245. package/pagination/index.js +59 -59
  246. package/progress/index.cjs +1 -1
  247. package/progress/index.js +1 -1
  248. package/radio/definition.cjs +9 -9
  249. package/radio/definition.js +10 -10
  250. package/radio-group/definition.cjs +2 -1
  251. package/radio-group/definition.js +2 -1
  252. package/radio-group/index.cjs +5 -5
  253. package/radio-group/index.js +80 -77
  254. package/range-slider/index.cjs +1 -1
  255. package/range-slider/index.js +1 -1
  256. package/rich-text-editor/definition.cjs +1 -1
  257. package/rich-text-editor/definition.js +2 -2
  258. package/rich-text-editor/index.cjs +2 -2
  259. package/rich-text-editor/index.js +3 -3
  260. package/searchable-select/definition.cjs +30 -21
  261. package/searchable-select/definition.js +31 -22
  262. package/searchable-select/index.cjs +28 -25
  263. package/searchable-select/index.js +149 -140
  264. package/select/definition.cjs +15 -7
  265. package/select/definition.js +16 -8
  266. package/selectable-box/definition.cjs +1 -1
  267. package/selectable-box/definition.js +1 -1
  268. package/selectable-box/index.cjs +3 -3
  269. package/selectable-box/index.js +20 -20
  270. package/shared/aria/aria-change-subscription.d.ts +0 -1
  271. package/shared/aria/aria-mixin.d.ts +2 -2
  272. package/shared/aria/delegate-aria-behavior.d.ts +5 -10
  273. package/shared/aria/delegates-aria.d.ts +3 -3
  274. package/shared/aria/host-semantics-behavior.d.ts +5 -8
  275. package/shared/aria/host-semantics.d.ts +3 -3
  276. package/shared/color-picker/base-color-picker.d.ts +436 -0
  277. package/shared/color-picker/index.d.ts +1 -0
  278. package/shared/color-picker/locale.d.ts +3 -0
  279. package/shared/color-picker/utils.d.ts +1 -0
  280. package/shared/deprecation/replaced-props.d.ts +317 -2
  281. package/shared/design-system/defineVividComponent.d.ts +2 -2
  282. package/shared/feedback/feedback-message.d.ts +2 -2
  283. package/shared/feedback/mixins.d.ts +4 -4
  284. package/shared/foundation/button/button.d.ts +4 -4
  285. package/shared/foundation/form-associated/form-associated.d.ts +4 -4
  286. package/shared/foundation/vivid-element/vivid-element.d.ts +335 -8
  287. package/shared/localization/Locale.d.ts +4 -0
  288. package/shared/patterns/affix.d.ts +4 -4
  289. package/shared/patterns/anchored.d.ts +4 -4
  290. package/shared/patterns/char-count/char-count.d.ts +2 -2
  291. package/shared/patterns/form-elements/form-element.d.ts +4 -4
  292. package/shared/patterns/form-elements/index.d.ts +1 -0
  293. package/shared/patterns/form-elements/with-contextual-help.d.ts +7 -6
  294. package/shared/patterns/form-elements/with-error-text.d.ts +6 -6
  295. package/shared/patterns/form-elements/with-success-text.d.ts +2 -2
  296. package/shared/patterns/linkable.d.ts +2 -2
  297. package/shared/patterns/localized.d.ts +2 -2
  298. package/shared/patterns/trapped-focus.d.ts +2 -2
  299. package/shared/picker-field/mixins/calendar-picker.d.ts +454 -451
  300. package/shared/picker-field/mixins/calendar-picker.template.d.ts +454 -451
  301. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +2 -2
  302. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +600 -594
  303. package/shared/picker-field/mixins/single-date-picker.d.ts +746 -737
  304. package/shared/picker-field/mixins/single-value-picker.d.ts +451 -448
  305. package/shared/picker-field/mixins/time-selection-picker.d.ts +580 -574
  306. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +579 -573
  307. package/shared/picker-field/picker-field.d.ts +495 -78
  308. package/shared/templating/attribute-binding-behaviour.d.ts +3 -4
  309. package/shared/templating/render-in-light-dom.d.ts +13 -12
  310. package/side-drawer/index.cjs +1 -1
  311. package/side-drawer/index.js +1 -1
  312. package/simple-color-picker/definition.cjs +28 -215
  313. package/simple-color-picker/definition.js +29 -216
  314. package/simple-color-picker/index.cjs +9 -21
  315. package/simple-color-picker/index.js +71 -185
  316. package/styles/core/all.css +1 -1
  317. package/styles/core/theme.css +1 -1
  318. package/styles/core/typography.css +1 -1
  319. package/styles/tokens/theme-dark.css +4 -4
  320. package/styles/tokens/theme-light.css +4 -4
  321. package/styles/tokens/vivid-2-compat.css +1 -1
  322. package/switch/index.cjs +2 -2
  323. package/switch/index.js +4 -4
  324. package/tabs/definition.cjs +1 -1
  325. package/tabs/definition.js +2 -2
  326. package/tabs/index.cjs +2 -2
  327. package/tabs/index.js +16 -16
  328. package/tag/index.cjs +1 -1
  329. package/tag/index.js +1 -1
  330. package/text-area/definition.cjs +1 -1
  331. package/text-area/definition.js +1 -1
  332. package/text-area/index.cjs +3 -3
  333. package/text-area/index.js +9 -9
  334. package/text-field/definition.cjs +3 -3
  335. package/text-field/definition.js +4 -4
  336. package/text-field/index.cjs +1 -1
  337. package/text-field/index.js +1 -1
  338. package/time-picker/index.cjs +1 -1
  339. package/time-picker/index.js +2 -2
  340. package/toggletip/definition.cjs +1 -1
  341. package/toggletip/definition.js +2 -2
  342. package/tree-view/definition.cjs +1 -1
  343. package/tree-view/definition.js +2 -2
  344. package/tree-view/index.cjs +2 -2
  345. package/tree-view/index.js +6 -6
  346. package/unbundled/_commonjsHelpers.cjs +36 -0
  347. package/unbundled/_commonjsHelpers.js +32 -0
  348. package/unbundled/affix.cjs +1 -1
  349. package/unbundled/affix.js +1 -1
  350. package/unbundled/attribute-binding-behaviour.cjs +11 -10
  351. package/unbundled/attribute-binding-behaviour.js +11 -10
  352. package/unbundled/base-color-picker.cjs +278 -0
  353. package/unbundled/base-color-picker.js +275 -0
  354. package/unbundled/button.cjs +1 -1
  355. package/unbundled/button.js +2 -2
  356. package/unbundled/calendar-picker.template.cjs +3 -3
  357. package/unbundled/calendar-picker.template.js +4 -4
  358. package/unbundled/definition2.cjs +1 -1
  359. package/unbundled/definition2.js +2 -2
  360. package/unbundled/definition3.cjs +2 -1
  361. package/unbundled/definition3.js +2 -1
  362. package/unbundled/delegates-aria.cjs +67 -33
  363. package/unbundled/delegates-aria.js +69 -35
  364. package/unbundled/form-associated.cjs +2 -2
  365. package/unbundled/form-associated.js +3 -3
  366. package/unbundled/host-semantics.cjs +47 -22
  367. package/unbundled/host-semantics.js +48 -23
  368. package/unbundled/mixins.cjs +34 -27
  369. package/unbundled/mixins.js +35 -28
  370. package/unbundled/picker-field.template.cjs +13 -5
  371. package/unbundled/picker-field.template.js +14 -6
  372. package/unbundled/text-field.cjs +1 -1
  373. package/unbundled/text-field.js +1 -1
  374. package/unbundled/time-selection-picker.template.cjs +4 -4
  375. package/unbundled/time-selection-picker.template.js +5 -5
  376. package/unbundled/vivid-element.cjs +22 -15
  377. package/unbundled/vivid-element.js +23 -15
  378. package/unbundled/with-contextual-help.cjs +11 -0
  379. package/unbundled/with-contextual-help.js +11 -0
  380. package/video-player/definition.cjs +69007 -1
  381. package/video-player/definition.js +69007 -1
  382. package/video-player/index.cjs +35 -35
  383. package/video-player/index.js +1358 -1384
  384. package/visually-hidden/index.cjs +1 -1
  385. package/visually-hidden/index.js +1 -1
  386. package/vivid.api.json +347 -69
@@ -0,0 +1,275 @@
1
+ import { Updates, when, html, attr, observable } from '@microsoft/fast-element';
2
+ import { classNames } from '@microsoft/fast-web-utilities';
3
+ import { F as FormAssociated } from './form-associated.js';
4
+ import { L as Localized } from './localized.js';
5
+ import { F as FormElement } from './form-element.js';
6
+
7
+ function parseHexColor(input) {
8
+ if (!input) return null;
9
+ const hex = input.trim().replace(/^#/, "");
10
+ if (/^[0-9a-fA-F]{3}$/.test(hex)) {
11
+ return hex.split("").map((char) => char + char).join("").toLowerCase();
12
+ }
13
+ if (/^[0-9a-fA-F]{6}$/.test(hex)) {
14
+ return hex.toLowerCase();
15
+ }
16
+ return null;
17
+ }
18
+ function isValidHexColor(input) {
19
+ return parseHexColor(input) !== null;
20
+ }
21
+ function getLuminance(hexColor) {
22
+ const hex = parseHexColor(hexColor);
23
+ if (!hex) return 0;
24
+ const r = parseInt(hex.slice(0, 2), 16) / 255;
25
+ const g = parseInt(hex.slice(2, 4), 16) / 255;
26
+ const b = parseInt(hex.slice(4, 6), 16) / 255;
27
+ const sR = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4);
28
+ const sG = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4);
29
+ const sB = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4);
30
+ return 0.2126 * sR + 0.7152 * sG + 0.0722 * sB;
31
+ }
32
+ function getContrastRatio(color1, color2) {
33
+ const lum1 = getLuminance(color1);
34
+ const lum2 = getLuminance(color2);
35
+ const brightest = Math.max(lum1, lum2);
36
+ const darkest = Math.min(lum1, lum2);
37
+ return (brightest + 0.05) / (darkest + 0.05);
38
+ }
39
+ function getCSSCustomProperty(propertyName, element) {
40
+ if (!element) {
41
+ element = document.querySelector(".vvd-root") || document.documentElement;
42
+ }
43
+ return getComputedStyle(element).getPropertyValue(propertyName).trim();
44
+ }
45
+
46
+ var __defProp = Object.defineProperty;
47
+ var __decorateClass = (decorators, target, key, kind) => {
48
+ var result = void 0 ;
49
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
50
+ if (decorator = decorators[i])
51
+ result = (decorator(target, key, result) ) || result;
52
+ if (result) __defProp(target, key, result);
53
+ return result;
54
+ };
55
+ const BaseColorPicker = (Base) => {
56
+ class BaseColorPickerElement extends Localized(
57
+ FormElement(FormAssociated(Base))
58
+ ) {
59
+ constructor() {
60
+ super(...arguments);
61
+ /**
62
+ * @internal
63
+ */
64
+ this.proxy = document.createElement("input");
65
+ this.open = false;
66
+ this.swatches = [];
67
+ /**
68
+ * @internal
69
+ */
70
+ this._canvasColor = "";
71
+ }
72
+ connectedCallback() {
73
+ super.connectedCallback();
74
+ this._refreshCanvasColor();
75
+ }
76
+ /**
77
+ * @internal
78
+ */
79
+ _refreshCanvasColor() {
80
+ this._canvasColor = getCSSCustomProperty("--vvd-color-canvas", this);
81
+ }
82
+ /**
83
+ * @internal
84
+ */
85
+ _applyContrastClass(color, threshold = 3) {
86
+ if (!color || !this._canvasColor) return false;
87
+ const ratio = getContrastRatio(color, this._canvasColor);
88
+ return ratio < threshold;
89
+ }
90
+ /**
91
+ * @internal
92
+ */
93
+ _getRowLength() {
94
+ return 7;
95
+ }
96
+ /**
97
+ * @internal
98
+ */
99
+ _handleSwatchSelection(value) {
100
+ if (this.value === value) {
101
+ this.value = "";
102
+ } else {
103
+ this.value = value;
104
+ }
105
+ this.$emit("change");
106
+ this.open = false;
107
+ }
108
+ /**
109
+ * @internal
110
+ */
111
+ _handleColorSaving() {
112
+ }
113
+ /**
114
+ * @internal
115
+ */
116
+ _getFocusReturnEl() {
117
+ return null;
118
+ }
119
+ /**
120
+ * @internal
121
+ */
122
+ _returnFocusToAnchor() {
123
+ const el = this._getFocusReturnEl();
124
+ if (!el) return;
125
+ Updates.enqueue(() => el.focus());
126
+ }
127
+ /**
128
+ * @internal
129
+ */
130
+ _getGridCells() {
131
+ const grid = this.shadowRoot?.querySelector('[role="grid"]');
132
+ return grid ? Array.from(
133
+ grid.querySelectorAll(
134
+ '[role="gridcell"], [data-vvd-role="gridcell"]'
135
+ )
136
+ ) : [];
137
+ }
138
+ /**
139
+ * @internal
140
+ */
141
+ _handleCellKeydown(event, value, index, isSaveCell) {
142
+ const rowLength = this._getRowLength();
143
+ const totalCells = this._getGridCells().length;
144
+ const currentRow = Math.floor(index / rowLength);
145
+ const currentCol = index % rowLength;
146
+ const totalRows = Math.ceil(totalCells / rowLength);
147
+ switch (event.key) {
148
+ case "ArrowRight":
149
+ if (currentCol < rowLength - 1 && index + 1 < totalCells) {
150
+ this._focusSwatchByIndex(index + 1);
151
+ }
152
+ return false;
153
+ case "ArrowLeft":
154
+ if (currentCol > 0) {
155
+ this._focusSwatchByIndex(index - 1);
156
+ }
157
+ return false;
158
+ case "ArrowDown":
159
+ if (currentRow < totalRows - 1 && index + rowLength < totalCells) {
160
+ this._focusSwatchByIndex(index + rowLength);
161
+ }
162
+ return false;
163
+ case "ArrowUp":
164
+ if (currentRow > 0) {
165
+ this._focusSwatchByIndex(index - rowLength);
166
+ }
167
+ return false;
168
+ case "PageDown": {
169
+ const lastRowStart = (totalRows - 1) * rowLength;
170
+ const targetIndex = Math.min(
171
+ lastRowStart + currentCol,
172
+ totalCells - 1
173
+ );
174
+ if (index !== targetIndex) {
175
+ this._focusSwatchByIndex(targetIndex);
176
+ }
177
+ return false;
178
+ }
179
+ case "PageUp": {
180
+ const targetIndex = Math.min(currentCol, totalCells - 1);
181
+ if (index !== targetIndex) {
182
+ this._focusSwatchByIndex(targetIndex);
183
+ }
184
+ return false;
185
+ }
186
+ case "Home":
187
+ if (event.ctrlKey) {
188
+ this._focusSwatchByIndex(0);
189
+ } else {
190
+ this._focusSwatchByIndex(currentRow * rowLength);
191
+ }
192
+ return false;
193
+ case "End":
194
+ if (event.ctrlKey) {
195
+ this._focusSwatchByIndex(totalCells - 1);
196
+ } else {
197
+ const rowEnd = Math.min(
198
+ (currentRow + 1) * rowLength - 1,
199
+ totalCells - 1
200
+ );
201
+ this._focusSwatchByIndex(rowEnd);
202
+ }
203
+ return false;
204
+ case "Enter":
205
+ case " ":
206
+ if (isSaveCell) {
207
+ this._handleColorSaving();
208
+ }
209
+ if (value && !isSaveCell) {
210
+ this._handleSwatchSelection(value);
211
+ this._returnFocusToAnchor();
212
+ }
213
+ return false;
214
+ case "Escape":
215
+ this.open = false;
216
+ this._returnFocusToAnchor();
217
+ return false;
218
+ case "Tab":
219
+ this.open = false;
220
+ return true;
221
+ default:
222
+ return true;
223
+ }
224
+ }
225
+ /**
226
+ * @internal
227
+ */
228
+ _focusSwatchByIndex(index) {
229
+ const cells = this._getGridCells();
230
+ if (index < 0 || index >= cells.length) return;
231
+ cells[index]?.focus();
232
+ }
233
+ /**
234
+ * @internal
235
+ */
236
+ _renderColorSwatch(iconTag) {
237
+ return html`
238
+ <button
239
+ class="swatch ${(x, c) => classNames(
240
+ c.parent.value === x.value ? "selected" : "",
241
+ c.parent._applyContrastClass(x.value) ? "contrast" : ""
242
+ )}"
243
+ role="gridcell"
244
+ style="--swatch-color: ${(x) => x.value};"
245
+ tabindex="${(x, c) => c.index === 0 ? "0" : "-1"}"
246
+ aria-label="${(x, c) => c.parent.locale.baseColorPicker.colorSwatchLabel(
247
+ x.value,
248
+ x.label,
249
+ c.parent.value === x.value
250
+ )}"
251
+ @click="${(x, c) => c.parent._handleSwatchSelection(x.value)}"
252
+ @keydown="${(x, c) => c.parent._handleCellKeydown(
253
+ c.event,
254
+ x.value,
255
+ c.index
256
+ )}"
257
+ >
258
+ ${when(
259
+ (x, c) => c.parent.value === x.value,
260
+ html`<${iconTag} size="-6" name="check-solid" aria-hidden="true"></${iconTag}>`
261
+ )}
262
+ </button>
263
+ `;
264
+ }
265
+ }
266
+ __decorateClass([
267
+ attr({ mode: "boolean" })
268
+ ], BaseColorPickerElement.prototype, "open");
269
+ __decorateClass([
270
+ observable
271
+ ], BaseColorPickerElement.prototype, "swatches");
272
+ return BaseColorPickerElement;
273
+ };
274
+
275
+ export { BaseColorPicker as B, isValidHexColor as i };
@@ -120,7 +120,7 @@ class VividFoundationButton extends delegatesAria.DelegatesAria(
120
120
  this.proxy.setAttribute("type", this.type);
121
121
  this.handleUnsupportedDelegatesFocus();
122
122
  if (this.autofocus) {
123
- fastElement.DOM.queueUpdate(() => {
123
+ fastElement.Updates.enqueue(() => {
124
124
  this.focus();
125
125
  });
126
126
  }
@@ -1,4 +1,4 @@
1
- import { DOM, attr } from '@microsoft/fast-element';
1
+ import { Updates, attr } from '@microsoft/fast-element';
2
2
  import { D as DelegatesAria } from './delegates-aria.js';
3
3
  import { V as VividElement } from './vivid-element.js';
4
4
  import { F as FormAssociated } from './form-associated.js';
@@ -118,7 +118,7 @@ class VividFoundationButton extends DelegatesAria(
118
118
  this.proxy.setAttribute("type", this.type);
119
119
  this.handleUnsupportedDelegatesFocus();
120
120
  if (this.autofocus) {
121
- DOM.queueUpdate(() => {
121
+ Updates.enqueue(() => {
122
122
  this.focus();
123
123
  });
124
124
  }
@@ -226,7 +226,7 @@ const CalendarPicker = (Base) => {
226
226
  _onPickerButtonClick() {
227
227
  super._onPickerButtonClick();
228
228
  if (this._popupOpen) {
229
- fastElement.DOM.processUpdates();
229
+ fastElement.Updates.process();
230
230
  const tabbableDate = this._tabbableDate;
231
231
  if (tabbableDate)
232
232
  this.shadowRoot.querySelector(
@@ -402,7 +402,7 @@ const CalendarPicker = (Base) => {
402
402
  }
403
403
  if (newDate && this._isDateInValidRange(newDate)) {
404
404
  if (this._adjustSelectedMonthToEnsureVisibilityOf(newDate)) {
405
- fastElement.DOM.processUpdates();
405
+ fastElement.Updates.process();
406
406
  }
407
407
  this._dialogEl.querySelector(
408
408
  `[data-date="${newDate}"]`
@@ -468,7 +468,7 @@ const CalendarPicker = (Base) => {
468
468
  if (newMonth && this._isMonthInValidRange(newMonth)) {
469
469
  if (newMonth.year !== this._monthPickerYear) {
470
470
  this._monthPickerYear = newMonth.year;
471
- fastElement.DOM.processUpdates();
471
+ fastElement.Updates.process();
472
472
  }
473
473
  this._dialogEl.querySelector(
474
474
  `[data-month="${monthToStr(newMonth)}"]`
@@ -1,5 +1,5 @@
1
1
  import { formatISO, format, parse, addDays as addDays$1 } from 'date-fns';
2
- import { observable, volatile, DOM, attr, repeat, when, html } from '@microsoft/fast-element';
2
+ import { observable, volatile, Updates, attr, repeat, when, html } from '@microsoft/fast-element';
3
3
  import { classNames } from '@microsoft/fast-web-utilities';
4
4
  import { D as Divider } from './divider.js';
5
5
  import { B as Button } from './definition.js';
@@ -224,7 +224,7 @@ const CalendarPicker = (Base) => {
224
224
  _onPickerButtonClick() {
225
225
  super._onPickerButtonClick();
226
226
  if (this._popupOpen) {
227
- DOM.processUpdates();
227
+ Updates.process();
228
228
  const tabbableDate = this._tabbableDate;
229
229
  if (tabbableDate)
230
230
  this.shadowRoot.querySelector(
@@ -400,7 +400,7 @@ const CalendarPicker = (Base) => {
400
400
  }
401
401
  if (newDate && this._isDateInValidRange(newDate)) {
402
402
  if (this._adjustSelectedMonthToEnsureVisibilityOf(newDate)) {
403
- DOM.processUpdates();
403
+ Updates.process();
404
404
  }
405
405
  this._dialogEl.querySelector(
406
406
  `[data-date="${newDate}"]`
@@ -466,7 +466,7 @@ const CalendarPicker = (Base) => {
466
466
  if (newMonth && this._isMonthInValidRange(newMonth)) {
467
467
  if (newMonth.year !== this._monthPickerYear) {
468
468
  this._monthPickerYear = newMonth.year;
469
- DOM.processUpdates();
469
+ Updates.process();
470
470
  }
471
471
  this._dialogEl.querySelector(
472
472
  `[data-month="${monthToStr(newMonth)}"]`
@@ -167,7 +167,7 @@ class MenuItem extends hostSemantics.HostSemantics(affix.AffixIcon(vividElement.
167
167
  */
168
168
  connectedCallback() {
169
169
  super.connectedCallback();
170
- fastElement.DOM.queueUpdate(() => {
170
+ fastElement.Updates.enqueue(() => {
171
171
  this._isPresentational = this._isPresentational ?? true;
172
172
  this.#ensureRoleMatchesPresentational();
173
173
  });
@@ -1,6 +1,6 @@
1
1
  import { VwcIconElement as Icon, iconDefinition } from '../icon/definition.js';
2
2
  import { V as VividElement, r as replaces, d as defineVividComponent, c as createRegisterFunction } from './vivid-element.js';
3
- import { DOM, attr, observable, slotted, when, html, elements } from '@microsoft/fast-element';
3
+ import { Updates, attr, observable, slotted, when, html, elements } from '@microsoft/fast-element';
4
4
  import { keySpace, keyEnter, classNames } from '@microsoft/fast-web-utilities';
5
5
  import { a as keyArrowLeft, k as keyArrowRight } from './key-codes.js';
6
6
  import { b as AffixIcon, a as affixIconTemplateFactory } from './affix.js';
@@ -165,7 +165,7 @@ class MenuItem extends HostSemantics(AffixIcon(VividElement)) {
165
165
  */
166
166
  connectedCallback() {
167
167
  super.connectedCallback();
168
- DOM.queueUpdate(() => {
168
+ Updates.enqueue(() => {
169
169
  this._isPresentational = this._isPresentational ?? true;
170
170
  this.#ensureRoleMatchesPresentational();
171
171
  });
@@ -157,6 +157,7 @@ const expandCollapseButton = (context) => {
157
157
  };
158
158
  const TreeItemTemplate = (context) => {
159
159
  const affixIconTemplate = affix.affixIconTemplateFactory(context);
160
+ const treeItemTagName = context.tagFor(TreeItem, true);
160
161
  return fastElement.html` <template
161
162
  slot="${(x) => x.isNestedItem() ? "item" : void 0}"
162
163
  tabindex="-1"
@@ -170,7 +171,7 @@ const TreeItemTemplate = (context) => {
170
171
  @focusout="${(x, c) => x.handleBlur(c.event)}"
171
172
  ${fastElement.children({
172
173
  property: "childItems",
173
- filter: fastElement.elements(context.tagFor(TreeItem))
174
+ filter: fastElement.elements(treeItemTagName)
174
175
  })}
175
176
  >
176
177
  <div class="${getClasses}">
@@ -155,6 +155,7 @@ const expandCollapseButton = (context) => {
155
155
  };
156
156
  const TreeItemTemplate = (context) => {
157
157
  const affixIconTemplate = affixIconTemplateFactory(context);
158
+ const treeItemTagName = context.tagFor(TreeItem, true);
158
159
  return html` <template
159
160
  slot="${(x) => x.isNestedItem() ? "item" : void 0}"
160
161
  tabindex="-1"
@@ -168,7 +169,7 @@ const TreeItemTemplate = (context) => {
168
169
  @focusout="${(x, c) => x.handleBlur(c.event)}"
169
170
  ${children({
170
171
  property: "childItems",
171
- filter: elements(context.tagFor(TreeItem))
172
+ filter: elements(treeItemTagName)
172
173
  })}
173
174
  >
174
175
  <div class="${getClasses}">
@@ -6,20 +6,35 @@ const vividElement = require('./vivid-element.cjs');
6
6
 
7
7
  class DelegateAriaBehavior {
8
8
  constructor(target, params) {
9
- this.target = target;
10
- this.source = null;
9
+ this.target = null;
10
+ // unbind() {
11
+ // if (this.source === null) {
12
+ // return;
13
+ // }
14
+ // this.releasePropertyBindings(this.source);
15
+ // this.stopForwardingPropertiesToTarget(this.source);
16
+ // this.source = null;
17
+ // }
11
18
  this.bindingBehaviours = [];
19
+ // private stopForwardingPropertiesToTarget(source: DelegatesAriaElement) {
20
+ // unsubscribeFromAriaPropertyChanges(
21
+ // source as AriaMixinElement,
22
+ // this.onSourceAriaPropertyChanged
23
+ // );
24
+ // }
12
25
  this.onSourceAriaPropertyChanged = (source, property) => {
13
- if (!this.forwardedProperties.has(property)) {
26
+ if (!this.forwardedProperties.has(property) || property in this.boundProperties) {
14
27
  return;
15
28
  }
16
29
  this.forwardPropertyToTarget(this.target, property, source[property]);
17
30
  };
31
+ this.target = target;
18
32
  this.boundProperties = params.boundProperties;
19
33
  this.forwardedProperties = params.forwardedProperties;
20
34
  }
21
- bind(source) {
22
- this.source = source;
35
+ // private source: DelegatesAriaElement | null = null;
36
+ bind(controller) {
37
+ const source = controller.source;
23
38
  this.bindPropertiesToTarget(source, this.boundProperties, this.target);
24
39
  this.startForwardingPropertiesToTarget(
25
40
  source,
@@ -27,63 +42,82 @@ class DelegateAriaBehavior {
27
42
  this.target
28
43
  );
29
44
  }
30
- unbind() {
31
- if (this.source === null) {
32
- return;
33
- }
34
- this.releasePropertyBindings(this.source);
35
- this.stopForwardingPropertiesToTarget(this.source);
36
- this.source = null;
37
- }
38
45
  bindPropertiesToTarget(source, boundProperties, target) {
39
46
  for (const [property, binding] of Object.entries(boundProperties)) {
40
47
  const bindingFn = binding instanceof Function ? binding : () => binding;
41
48
  this.bindingBehaviours.push(
42
49
  new attributeBindingBehaviour.AttributeBindingBehavior(
43
50
  target,
44
- bindingFn,
51
+ fastElement.oneWay(bindingFn),
45
52
  fastElement.Observable.isVolatileBinding(bindingFn),
46
53
  vividElement.ariaAttributeName(property)
47
54
  )
48
55
  );
49
56
  }
50
- source.$fastController.addBehaviors(this.bindingBehaviours);
51
- }
52
- releasePropertyBindings(source) {
53
- source.$fastController.removeBehaviors(this.bindingBehaviours);
54
- this.bindingBehaviours = [];
57
+ for (const behavior of this.bindingBehaviours) {
58
+ behavior.bind({
59
+ source,
60
+ context: source.$fastController.context
61
+ });
62
+ }
55
63
  }
64
+ // private releasePropertyBindings(source: DelegatesAriaElement) {
65
+ // for (const behavior of this.bindingBehaviours) {
66
+ // (behavior as any).unbind(); // TODO: fix type
67
+ // }
68
+ // this.bindingBehaviours = [];
69
+ // }
56
70
  startForwardingPropertiesToTarget(source, delegatedProperties, target) {
57
71
  for (const key of delegatedProperties) {
58
- this.forwardPropertyToTarget(target, key, source[key]);
72
+ if (!(key in this.boundProperties)) {
73
+ this.forwardPropertyToTarget(target, key, source[key]);
74
+ }
59
75
  }
60
- vividElement.subscribeToAriaPropertyChanges(source, this.onSourceAriaPropertyChanged);
61
- }
62
- stopForwardingPropertiesToTarget(source) {
63
- vividElement.unsubscribeFromAriaPropertyChanges(
76
+ vividElement.subscribeToAriaPropertyChanges(
64
77
  source,
65
78
  this.onSourceAriaPropertyChanged
66
79
  );
67
80
  }
68
81
  forwardPropertyToTarget(target, property, value) {
69
- fastElement.DOM.setAttribute(target, vividElement.ariaAttributeName(property), value);
82
+ if (value === null || value === void 0 || value === false) {
83
+ target.removeAttribute(vividElement.ariaAttributeName(property));
84
+ } else {
85
+ target.setAttribute(vividElement.ariaAttributeName(property), String(value));
86
+ }
70
87
  }
71
88
  }
72
89
 
90
+ class DelegateAriaDirective extends fastElement.StatelessAttachedAttributeDirective {
91
+ constructor(boundProperties, forwardedProperties) {
92
+ super("vvd-delegate-aria");
93
+ this.boundProperties = boundProperties;
94
+ this.forwardedProperties = forwardedProperties;
95
+ /**
96
+ * The structural id of the DOM node to which the created behavior will apply.
97
+ */
98
+ this.targetNodeId = "";
99
+ }
100
+ bind(controller) {
101
+ const targetElement = controller.targets[this.targetNodeId];
102
+ const behavior = new DelegateAriaBehavior(
103
+ targetElement,
104
+ // Pass the target element as target
105
+ {
106
+ boundProperties: this.boundProperties,
107
+ forwardedProperties: this.forwardedProperties
108
+ }
109
+ );
110
+ behavior.bind(controller);
111
+ }
112
+ }
113
+ fastElement.HTMLDirective.define(DelegateAriaDirective);
73
114
  function delegateAria(boundProperties = {}, options = {}) {
74
115
  const forwardedProperties = new Set(
75
116
  (options.onlySpecified ? [] : vividElement.ariaMixinProperties).filter(
76
117
  (p) => !(p in boundProperties)
77
118
  )
78
119
  );
79
- return new fastElement.AttachedBehaviorHTMLDirective(
80
- "vvd-delegate-aria",
81
- DelegateAriaBehavior,
82
- {
83
- boundProperties,
84
- forwardedProperties
85
- }
86
- );
120
+ return new DelegateAriaDirective(boundProperties, forwardedProperties);
87
121
  }
88
122
  const DelegatesAria = (Base) => {
89
123
  class DelegatesAriaElement extends Base {