@vonage/vivid 5.16.0 → 5.18.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 (564) hide show
  1. package/accordion/definition.cjs +6 -6
  2. package/accordion/definition.js +1 -1
  3. package/accordion/index.cjs +1 -1
  4. package/accordion/index.js +2 -2
  5. package/accordion-item/definition.cjs +5 -5
  6. package/accordion-item/definition.js +1 -1
  7. package/accordion-item/index.cjs +1 -1
  8. package/accordion-item/index.js +2 -2
  9. package/action-group/index.cjs +3 -3
  10. package/action-group/index.js +5 -5
  11. package/alert/definition.cjs +5 -5
  12. package/alert/definition.js +1 -1
  13. package/alert/index.cjs +3 -3
  14. package/alert/index.js +15 -14
  15. package/audio-player/definition.cjs +5 -5
  16. package/audio-player/definition.js +1 -1
  17. package/audio-player/index.cjs +16 -16
  18. package/audio-player/index.js +29 -28
  19. package/avatar/definition.cjs +5 -5
  20. package/avatar/definition.js +1 -1
  21. package/avatar/index.cjs +4 -4
  22. package/avatar/index.js +12 -11
  23. package/badge/definition.cjs +5 -5
  24. package/badge/definition.js +1 -1
  25. package/badge/index.cjs +1 -4
  26. package/badge/index.js +4 -20
  27. package/banner/definition.cjs +5 -5
  28. package/banner/definition.js +1 -1
  29. package/banner/index.cjs +3 -3
  30. package/banner/index.js +14 -13
  31. package/breadcrumb-item/definition.cjs +4 -4
  32. package/breadcrumb-item/definition.js +1 -1
  33. package/breadcrumb-item/index.cjs +1 -1
  34. package/breadcrumb-item/index.js +1 -0
  35. package/bundled/affix.cjs +1 -1
  36. package/bundled/affix.js +5 -5
  37. package/bundled/base-color-picker.cjs +2 -2
  38. package/bundled/base-color-picker.js +5 -5
  39. package/bundled/button.cjs +1 -1
  40. package/bundled/button.js +2 -2
  41. package/bundled/calendar-picker.template.cjs +2 -2
  42. package/bundled/calendar-picker.template.js +498 -498
  43. package/bundled/definition10.cjs +18 -30
  44. package/bundled/definition10.js +53 -155
  45. package/bundled/definition11.cjs +10 -19
  46. package/bundled/definition11.js +25 -74
  47. package/bundled/definition12.cjs +72 -18
  48. package/bundled/definition12.js +171 -107
  49. package/bundled/definition13.cjs +18 -17
  50. package/bundled/definition13.js +46 -66
  51. package/bundled/definition14.cjs +5 -10
  52. package/bundled/definition14.js +9 -27
  53. package/bundled/definition15.cjs +17 -71
  54. package/bundled/definition15.js +64 -181
  55. package/bundled/definition16.cjs +12 -4
  56. package/bundled/definition16.js +79 -14
  57. package/bundled/definition17.cjs +19 -13
  58. package/bundled/definition17.js +118 -69
  59. package/bundled/definition18.cjs +87 -12
  60. package/bundled/definition18.js +409 -52
  61. package/bundled/definition19.cjs +5 -87
  62. package/bundled/definition19.js +14 -422
  63. package/bundled/definition2.cjs +3 -14
  64. package/bundled/definition2.js +16 -49
  65. package/bundled/definition20.cjs +30 -5
  66. package/bundled/definition20.js +159 -9
  67. package/bundled/definition21.cjs +28 -19
  68. package/bundled/definition21.js +164 -47
  69. package/bundled/definition22.cjs +4 -24
  70. package/bundled/definition22.js +18 -88
  71. package/bundled/definition23.cjs +12 -0
  72. package/bundled/definition23.js +37 -0
  73. package/bundled/definition24.cjs +39 -0
  74. package/bundled/definition24.js +72 -0
  75. package/bundled/definition3.cjs +1 -1
  76. package/bundled/definition3.js +24 -21
  77. package/bundled/definition4.cjs +23 -38
  78. package/bundled/definition4.js +81 -63
  79. package/bundled/definition5.cjs +2 -2
  80. package/bundled/definition5.js +5 -5
  81. package/bundled/definition6.cjs +11 -11
  82. package/bundled/definition6.js +57 -41
  83. package/bundled/definition9.cjs +12 -30
  84. package/bundled/definition9.js +55 -148
  85. package/bundled/divider.cjs +1 -1
  86. package/bundled/divider.js +5 -5
  87. package/bundled/listbox.cjs +1 -1
  88. package/bundled/listbox.js +1 -1
  89. package/bundled/localized.cjs +1 -1
  90. package/bundled/localized.js +1 -0
  91. package/bundled/mixins.cjs +5 -5
  92. package/bundled/mixins.js +49 -49
  93. package/bundled/numberConverter.cjs +12 -0
  94. package/bundled/numberConverter.js +38 -0
  95. package/bundled/picker-field.template.cjs +8 -7
  96. package/bundled/picker-field.template.js +16 -15
  97. package/bundled/slider.template.cjs +7 -7
  98. package/bundled/slider.template.js +12 -12
  99. package/bundled/slottable-request.cjs +1 -1
  100. package/bundled/slottable-request.js +8 -38
  101. package/bundled/time-selection-picker.template.cjs +4 -4
  102. package/bundled/time-selection-picker.template.js +35 -35
  103. package/bundled/utils.cjs +1 -0
  104. package/bundled/utils.js +1420 -0
  105. package/bundled/vivid-element.cjs +1 -1
  106. package/bundled/vivid-element.js +1 -1
  107. package/button/definition.cjs +5 -5
  108. package/button/definition.js +1 -1
  109. package/button/index.cjs +1 -1
  110. package/button/index.js +1 -1
  111. package/calendar/index.cjs +11 -11
  112. package/calendar/index.js +30 -237
  113. package/calendar-event/index.cjs +3 -3
  114. package/calendar-event/index.js +4 -4
  115. package/card/definition.cjs +5 -5
  116. package/card/definition.js +1 -1
  117. package/card/index.cjs +15 -12
  118. package/card/index.js +17 -13
  119. package/checkbox/definition.cjs +5 -5
  120. package/checkbox/definition.js +1 -1
  121. package/checkbox/index.cjs +1 -1
  122. package/checkbox/index.js +2 -2
  123. package/color-picker/definition.cjs +5 -5
  124. package/color-picker/definition.js +2 -2
  125. package/color-picker/index.cjs +10 -10
  126. package/color-picker/index.js +58 -57
  127. package/combobox/definition.cjs +5 -5
  128. package/combobox/definition.js +2 -2
  129. package/combobox/index.cjs +9 -8
  130. package/combobox/index.js +40 -35
  131. package/contextual-help/definition.cjs +5 -5
  132. package/contextual-help/definition.js +2 -2
  133. package/contextual-help/index.cjs +1 -1
  134. package/contextual-help/index.js +2 -2
  135. package/country/definition.cjs +5 -5
  136. package/country/definition.js +1 -1
  137. package/country/index.cjs +1 -12
  138. package/country/index.js +4 -1216
  139. package/country-group/definition.cjs +6 -0
  140. package/country-group/definition.js +3 -0
  141. package/country-group/index.cjs +43 -0
  142. package/country-group/index.js +166 -0
  143. package/custom-elements.json +1274 -200
  144. package/data-grid/definition.cjs +9 -9
  145. package/data-grid/definition.js +2 -2
  146. package/data-grid/index.cjs +18 -18
  147. package/data-grid/index.js +260 -262
  148. package/date-picker/definition.cjs +5 -5
  149. package/date-picker/definition.js +2 -2
  150. package/date-picker/index.cjs +1 -1
  151. package/date-picker/index.js +13 -13
  152. package/date-range-picker/definition.cjs +5 -5
  153. package/date-range-picker/definition.js +2 -2
  154. package/date-range-picker/index.cjs +1 -1
  155. package/date-range-picker/index.js +8 -8
  156. package/date-time-picker/definition.cjs +5 -5
  157. package/date-time-picker/definition.js +2 -2
  158. package/date-time-picker/index.cjs +4 -4
  159. package/date-time-picker/index.js +25 -25
  160. package/dial-pad/definition.cjs +5 -5
  161. package/dial-pad/definition.js +2 -2
  162. package/dial-pad/index.cjs +6 -5
  163. package/dial-pad/index.js +14 -12
  164. package/dialog/definition.cjs +5 -5
  165. package/dialog/definition.js +2 -2
  166. package/dialog/index.cjs +6 -6
  167. package/dialog/index.js +17 -16
  168. package/divider/definition.cjs +1 -1
  169. package/divider/definition.js +1 -1
  170. package/divider/index.cjs +1 -1
  171. package/divider/index.js +1 -1
  172. package/empty-state/definition.cjs +5 -5
  173. package/empty-state/definition.js +2 -2
  174. package/empty-state/index.cjs +2 -2
  175. package/empty-state/index.js +6 -5
  176. package/fab/definition.cjs +5 -5
  177. package/fab/definition.js +2 -2
  178. package/fab/index.cjs +4 -4
  179. package/fab/index.js +13 -12
  180. package/file-picker/definition.cjs +5 -5
  181. package/file-picker/definition.js +2 -2
  182. package/file-picker/index.cjs +20 -17
  183. package/file-picker/index.js +40 -36
  184. package/flag/definition.cjs +6 -0
  185. package/flag/definition.js +3 -0
  186. package/flag/index.cjs +10 -0
  187. package/flag/index.js +61 -0
  188. package/header/definition.cjs +1 -1
  189. package/header/definition.js +1 -1
  190. package/header/index.cjs +4 -4
  191. package/header/index.js +5 -5
  192. package/icon/definition.cjs +1 -0
  193. package/icon/definition.js +1 -0
  194. package/icon/index.cjs +1 -1
  195. package/icon/index.js +1 -0
  196. package/index.cjs +204 -192
  197. package/index.js +55 -52
  198. package/layout/definition.cjs +1 -1
  199. package/layout/definition.js +1 -1
  200. package/lib/button/button.d.ts +1 -0
  201. package/lib/combobox/combobox.d.ts +0 -3
  202. package/lib/components.d.ts +2 -0
  203. package/lib/country/countries-data.d.ts +1 -0
  204. package/lib/country/{country-code-to-flag-icon.d.ts → utils.d.ts} +0 -3
  205. package/lib/country-group/country-group.d.ts +829 -0
  206. package/lib/country-group/country-group.template.d.ts +3 -0
  207. package/lib/country-group/definition.d.ts +3 -0
  208. package/lib/country-group/index.d.ts +1 -0
  209. package/lib/country-group/locale.d.ts +3 -0
  210. package/lib/date-picker/date-picker.d.ts +4 -0
  211. package/lib/date-range-picker/date-range-picker.d.ts +2 -0
  212. package/lib/date-time-picker/date-time-picker.d.ts +4 -4
  213. package/lib/dial-pad/dial-pad.d.ts +6 -2
  214. package/lib/dialog/dialog.d.ts +0 -1
  215. package/lib/flag/definition.d.ts +3 -0
  216. package/lib/flag/flag.d.ts +8 -0
  217. package/lib/flag/flag.template.d.ts +3 -0
  218. package/lib/flag/index.d.ts +1 -0
  219. package/lib/icon/icon.d.ts +1 -2
  220. package/lib/menu/menu.d.ts +0 -1
  221. package/lib/option/option.d.ts +0 -1
  222. package/lib/rich-text-editor/rte/exports.d.ts +1 -0
  223. package/lib/rich-text-editor/rte/features/alignment.d.ts +1 -1
  224. package/lib/rich-text-editor/rte/features/character-count.d.ts +21 -0
  225. package/lib/rich-text-editor/rte/features/font-size-picker.d.ts +1 -1
  226. package/lib/rich-text-editor/rte/features/internal/basic-text-blocks.d.ts +1 -1
  227. package/lib/rich-text-editor/rte/features/keyboard-shortcuts.d.ts +1 -1
  228. package/lib/rich-text-editor/rte/features/text-color-picker.d.ts +1 -1
  229. package/lib/rich-text-editor/rte/public-interface.d.ts +6 -0
  230. package/lib/searchable-select/option-tag.d.ts +3 -2
  231. package/lib/searchable-select/searchable-select.d.ts +3 -1
  232. package/lib/table/definition.d.ts +2 -1
  233. package/lib/table/table-header-cell.d.ts +3 -0
  234. package/lib/table/table-sorting-button.d.ts +415 -0
  235. package/lib/table/table-sorting-button.template.d.ts +3 -0
  236. package/lib/tag-name-map.d.ts +2 -1
  237. package/lib/time-picker/time-picker.d.ts +2 -0
  238. package/locales/de-DE.cjs +5 -178
  239. package/locales/de-DE.js +3 -179
  240. package/locales/en-GB.cjs +5 -9
  241. package/locales/en-GB.js +3 -10
  242. package/locales/en-US.cjs +269 -2
  243. package/locales/en-US.js +266 -1
  244. package/locales/ja-JP.cjs +5 -171
  245. package/locales/ja-JP.js +3 -172
  246. package/locales/zh-CN.cjs +5 -172
  247. package/locales/zh-CN.js +3 -173
  248. package/menu/definition.cjs +5 -5
  249. package/menu/definition.js +1 -1
  250. package/menu/index.cjs +1 -1
  251. package/menu/index.js +2 -2
  252. package/menu-item/definition.cjs +6 -6
  253. package/menu-item/definition.js +1 -1
  254. package/menu-item/index.cjs +1 -1
  255. package/menu-item/index.js +2 -2
  256. package/nav/definition.cjs +1 -1
  257. package/nav/definition.js +1 -1
  258. package/nav-disclosure/definition.cjs +5 -5
  259. package/nav-disclosure/definition.js +2 -2
  260. package/nav-disclosure/index.cjs +4 -4
  261. package/nav-disclosure/index.js +13 -12
  262. package/nav-item/definition.cjs +5 -5
  263. package/nav-item/definition.js +2 -2
  264. package/nav-item/index.cjs +2 -2
  265. package/nav-item/index.js +12 -11
  266. package/note/definition.cjs +5 -5
  267. package/note/definition.js +2 -2
  268. package/note/index.cjs +3 -3
  269. package/note/index.js +11 -10
  270. package/number-field/definition.cjs +5 -5
  271. package/number-field/definition.js +2 -2
  272. package/number-field/index.cjs +4 -4
  273. package/number-field/index.js +29 -28
  274. package/option/definition.cjs +5 -5
  275. package/option/definition.js +2 -2
  276. package/option/index.cjs +1 -1
  277. package/option/index.js +2 -2
  278. package/package.json +9 -10
  279. package/pagination/definition.cjs +5 -5
  280. package/pagination/definition.js +2 -2
  281. package/pagination/index.cjs +3 -3
  282. package/pagination/index.js +16 -16
  283. package/popover/definition.cjs +5 -5
  284. package/popover/definition.js +2 -2
  285. package/popover/index.cjs +7 -7
  286. package/popover/index.js +12 -11
  287. package/popup/definition.cjs +4 -4
  288. package/popup/definition.js +1 -1
  289. package/popup/index.cjs +1 -1
  290. package/popup/index.js +1 -1
  291. package/progress/definition.cjs +1 -1
  292. package/progress/definition.js +1 -1
  293. package/progress/index.cjs +2 -2
  294. package/progress/index.js +5 -5
  295. package/radio/definition.cjs +1 -1
  296. package/radio/definition.js +1 -1
  297. package/radio/index.cjs +1 -1
  298. package/radio/index.js +1 -1
  299. package/radio-group/definition.cjs +5 -5
  300. package/radio-group/definition.js +2 -2
  301. package/radio-group/index.cjs +4 -4
  302. package/radio-group/index.js +11 -11
  303. package/range-slider/definition.cjs +5 -5
  304. package/range-slider/definition.js +2 -2
  305. package/range-slider/index.cjs +4 -4
  306. package/range-slider/index.js +39 -36
  307. package/rich-text-editor/definition.cjs +32 -31
  308. package/rich-text-editor/definition.js +3 -3
  309. package/rich-text-editor/index.cjs +13 -13
  310. package/rich-text-editor/index.js +1887 -1830
  311. package/rich-text-view/definition.cjs +1 -1
  312. package/rich-text-view/definition.js +1 -1
  313. package/rich-text-view/index.cjs +1 -1
  314. package/rich-text-view/index.js +8 -8
  315. package/searchable-select/definition.cjs +4 -4
  316. package/searchable-select/definition.js +2 -2
  317. package/searchable-select/index.cjs +15 -13
  318. package/searchable-select/index.js +75 -72
  319. package/select/definition.cjs +5 -5
  320. package/select/definition.js +2 -2
  321. package/select/index.cjs +1 -1
  322. package/select/index.js +2 -2
  323. package/selectable-box/definition.cjs +5 -5
  324. package/selectable-box/definition.js +2 -2
  325. package/selectable-box/index.cjs +7 -7
  326. package/selectable-box/index.js +12 -12
  327. package/shared/foundation/test-utilities/fixture.d.ts +1 -1
  328. package/shared/icon/utils.d.ts +1 -0
  329. package/shared/localization/Locale.d.ts +2 -0
  330. package/shared/patterns/linkable.d.ts +1 -1
  331. package/shared/picker-field/mixins/calendar-picker.d.ts +1 -0
  332. package/shared/picker-field/mixins/calendar-picker.template.d.ts +1 -0
  333. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +1 -0
  334. package/shared/picker-field/mixins/single-date-picker.d.ts +1 -0
  335. package/shared/picker-field/mixins/single-value-picker.d.ts +1 -0
  336. package/shared/picker-field/mixins/time-selection-picker.d.ts +1 -0
  337. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +2 -0
  338. package/shared/picker-field/picker-field.d.ts +2 -0
  339. package/side-drawer/definition.cjs +1 -1
  340. package/side-drawer/definition.js +1 -1
  341. package/simple-color-picker/definition.cjs +5 -5
  342. package/simple-color-picker/definition.js +2 -2
  343. package/simple-color-picker/index.cjs +3 -3
  344. package/simple-color-picker/index.js +15 -14
  345. package/slider/definition.cjs +5 -5
  346. package/slider/definition.js +1 -1
  347. package/slider/index.cjs +1 -1
  348. package/slider/index.js +1 -1
  349. package/split-button/definition.cjs +5 -5
  350. package/split-button/definition.js +2 -2
  351. package/split-button/index.cjs +6 -6
  352. package/split-button/index.js +17 -16
  353. package/status/definition.cjs +5 -5
  354. package/status/definition.js +2 -2
  355. package/status/index.cjs +2 -2
  356. package/status/index.js +11 -10
  357. package/switch/definition.cjs +5 -5
  358. package/switch/definition.js +2 -2
  359. package/switch/index.cjs +4 -4
  360. package/switch/index.js +11 -10
  361. package/tab/definition.cjs +5 -5
  362. package/tab/definition.js +2 -2
  363. package/tab/index.cjs +1 -1
  364. package/tab/index.js +2 -2
  365. package/tab-panel/definition.cjs +1 -1
  366. package/tab-panel/definition.js +1 -1
  367. package/tab-panel/index.cjs +1 -1
  368. package/tab-panel/index.js +1 -1
  369. package/table/definition.cjs +4 -1
  370. package/table/definition.js +3 -2
  371. package/table/index.cjs +19 -10
  372. package/table/index.js +70 -21
  373. package/tabs/definition.cjs +6 -6
  374. package/tabs/definition.js +2 -2
  375. package/tabs/index.cjs +2 -2
  376. package/tabs/index.js +5 -5
  377. package/tag/definition.cjs +5 -5
  378. package/tag/definition.js +2 -2
  379. package/tag/index.cjs +8 -8
  380. package/tag/index.js +14 -13
  381. package/tag-group/definition.cjs +1 -1
  382. package/tag-group/definition.js +1 -1
  383. package/tag-group/index.cjs +3 -3
  384. package/tag-group/index.js +5 -5
  385. package/text-area/definition.cjs +5 -5
  386. package/text-area/definition.js +2 -2
  387. package/text-area/index.cjs +2 -2
  388. package/text-area/index.js +13 -13
  389. package/text-field/definition.cjs +5 -5
  390. package/text-field/definition.js +2 -2
  391. package/text-field/index.cjs +1 -1
  392. package/text-field/index.js +2 -2
  393. package/time-picker/definition.cjs +4 -4
  394. package/time-picker/definition.js +2 -2
  395. package/time-picker/index.cjs +1 -1
  396. package/time-picker/index.js +2 -2
  397. package/toggletip/definition.cjs +5 -5
  398. package/toggletip/definition.js +2 -2
  399. package/toggletip/index.cjs +1 -1
  400. package/toggletip/index.js +2 -2
  401. package/tooltip/definition.cjs +5 -5
  402. package/tooltip/definition.js +2 -2
  403. package/tooltip/index.cjs +1 -1
  404. package/tooltip/index.js +2 -2
  405. package/tree-item/definition.cjs +5 -5
  406. package/tree-item/definition.js +2 -2
  407. package/tree-item/index.cjs +1 -1
  408. package/tree-item/index.js +2 -2
  409. package/tree-view/definition.cjs +5 -5
  410. package/tree-view/definition.js +2 -2
  411. package/tree-view/index.cjs +3 -3
  412. package/tree-view/index.js +18 -18
  413. package/unbundled/button.cjs +2 -2
  414. package/unbundled/button.js +2 -2
  415. package/unbundled/calendar-picker.template.cjs +4347 -9
  416. package/unbundled/calendar-picker.template.js +4345 -7
  417. package/unbundled/chunk.cjs +0 -22
  418. package/unbundled/definition11.cjs +6 -0
  419. package/unbundled/definition11.js +6 -0
  420. package/unbundled/definition13.cjs +1 -8
  421. package/unbundled/definition13.js +1 -8
  422. package/unbundled/definition14.cjs +3 -2
  423. package/unbundled/definition14.js +3 -2
  424. package/unbundled/definition2.cjs +5 -75
  425. package/unbundled/definition2.js +1 -71
  426. package/unbundled/definition21.cjs +1 -2
  427. package/unbundled/definition21.js +1 -2
  428. package/unbundled/definition22.cjs +7 -2
  429. package/unbundled/definition22.js +7 -2
  430. package/unbundled/definition24.cjs +98 -979
  431. package/unbundled/definition24.js +93 -974
  432. package/unbundled/definition25.cjs +37 -322
  433. package/unbundled/definition25.js +33 -318
  434. package/unbundled/definition26.cjs +317 -91
  435. package/unbundled/definition26.js +313 -87
  436. package/unbundled/definition27.cjs +94 -192
  437. package/unbundled/definition27.js +91 -183
  438. package/unbundled/definition28.cjs +388 -395
  439. package/unbundled/definition28.js +388 -395
  440. package/unbundled/definition29.cjs +189 -110
  441. package/unbundled/definition29.js +180 -107
  442. package/unbundled/definition30.cjs +520 -36
  443. package/unbundled/definition30.js +519 -35
  444. package/unbundled/definition31.cjs +2 -1189
  445. package/unbundled/definition31.js +1 -1188
  446. package/unbundled/definition32.cjs +207 -1835
  447. package/unbundled/definition32.js +203 -1807
  448. package/unbundled/definition33.cjs +85 -228
  449. package/unbundled/definition33.js +82 -165
  450. package/unbundled/definition34.cjs +1887 -25
  451. package/unbundled/definition34.js +1857 -24
  452. package/unbundled/definition35.cjs +315 -121
  453. package/unbundled/definition35.js +236 -114
  454. package/unbundled/definition36.cjs +25 -405
  455. package/unbundled/definition36.js +22 -397
  456. package/unbundled/definition37.cjs +49 -140
  457. package/unbundled/definition37.js +46 -137
  458. package/unbundled/definition38.cjs +346 -329
  459. package/unbundled/definition38.js +343 -326
  460. package/unbundled/definition39.cjs +183 -234
  461. package/unbundled/definition39.js +181 -232
  462. package/unbundled/definition40.cjs +377 -47
  463. package/unbundled/definition40.js +372 -42
  464. package/unbundled/definition41.cjs +256 -57
  465. package/unbundled/definition41.js +255 -56
  466. package/unbundled/definition42.cjs +45 -421
  467. package/unbundled/definition42.js +41 -417
  468. package/unbundled/definition43.cjs +63 -49
  469. package/unbundled/definition43.js +61 -47
  470. package/unbundled/definition44.cjs +438 -30
  471. package/unbundled/definition44.js +434 -25
  472. package/unbundled/definition45.cjs +46 -84
  473. package/unbundled/definition45.js +43 -81
  474. package/unbundled/definition46.cjs +29 -54
  475. package/unbundled/definition46.js +24 -50
  476. package/unbundled/definition47.cjs +93 -21
  477. package/unbundled/definition47.js +91 -16
  478. package/unbundled/definition48.cjs +49 -33
  479. package/unbundled/definition48.js +46 -30
  480. package/unbundled/definition49.cjs +22 -347
  481. package/unbundled/definition49.js +16 -344
  482. package/unbundled/definition50.cjs +34 -211
  483. package/unbundled/definition50.js +30 -207
  484. package/unbundled/definition51.cjs +282 -242
  485. package/unbundled/definition51.js +275 -235
  486. package/unbundled/definition52.cjs +211 -51
  487. package/unbundled/definition52.js +209 -48
  488. package/unbundled/definition53.cjs +275 -131
  489. package/unbundled/definition53.js +272 -127
  490. package/unbundled/definition54.cjs +50 -261
  491. package/unbundled/definition54.js +48 -260
  492. package/unbundled/definition55.cjs +126 -443
  493. package/unbundled/definition55.js +123 -441
  494. package/unbundled/definition56.cjs +238 -12669
  495. package/unbundled/definition56.js +232 -12506
  496. package/unbundled/definition57.cjs +408 -729
  497. package/unbundled/definition57.js +406 -727
  498. package/unbundled/definition58.cjs +3619 -106
  499. package/unbundled/definition58.js +3449 -99
  500. package/unbundled/definition59.cjs +625 -868
  501. package/unbundled/definition59.js +620 -863
  502. package/unbundled/definition60.cjs +106 -108
  503. package/unbundled/definition60.js +102 -104
  504. package/unbundled/definition61.cjs +1040 -71
  505. package/unbundled/definition61.js +1035 -65
  506. package/unbundled/definition62.cjs +105 -169
  507. package/unbundled/definition62.js +101 -165
  508. package/unbundled/definition63.cjs +70 -113
  509. package/unbundled/definition63.js +65 -109
  510. package/unbundled/definition64.cjs +181 -53
  511. package/unbundled/definition64.js +178 -50
  512. package/unbundled/definition65.cjs +109 -76
  513. package/unbundled/definition65.js +109 -75
  514. package/unbundled/definition66.cjs +58 -21
  515. package/unbundled/definition66.js +55 -15
  516. package/unbundled/definition67.cjs +81 -74
  517. package/unbundled/definition67.js +79 -73
  518. package/unbundled/definition68.cjs +19 -344
  519. package/unbundled/definition68.js +14 -335
  520. package/unbundled/definition69.cjs +88 -26
  521. package/unbundled/definition69.js +85 -22
  522. package/unbundled/definition7.cjs +18 -3
  523. package/unbundled/definition7.js +18 -3
  524. package/unbundled/definition70.cjs +330 -111
  525. package/unbundled/definition70.js +320 -108
  526. package/unbundled/definition71.cjs +26 -271
  527. package/unbundled/definition71.js +21 -267
  528. package/unbundled/definition72.cjs +134 -28
  529. package/unbundled/definition72.js +125 -26
  530. package/unbundled/definition73.cjs +245 -113
  531. package/unbundled/definition73.js +242 -104
  532. package/unbundled/definition74.cjs +28 -212
  533. package/unbundled/definition74.js +26 -202
  534. package/unbundled/definition75.cjs +120 -52190
  535. package/unbundled/definition75.js +112 -52188
  536. package/unbundled/definition76.cjs +232 -0
  537. package/unbundled/definition76.js +213 -0
  538. package/unbundled/definition77.cjs +533 -0
  539. package/unbundled/definition77.js +513 -0
  540. package/unbundled/listbox.cjs +1 -1
  541. package/unbundled/listbox.js +1 -1
  542. package/unbundled/localized.cjs +2 -2
  543. package/unbundled/localized.js +1 -1
  544. package/unbundled/numberConverter.cjs +91 -0
  545. package/unbundled/numberConverter.js +74 -0
  546. package/unbundled/picker-field.template.cjs +3 -1
  547. package/unbundled/picker-field.template.js +3 -1
  548. package/unbundled/slottable-request.cjs +2 -3168
  549. package/unbundled/slottable-request.js +3 -3097
  550. package/unbundled/time-selection-picker.template.cjs +1 -1
  551. package/unbundled/time-selection-picker.template.js +1 -1
  552. package/unbundled/utils.cjs +1439 -0
  553. package/unbundled/utils.js +1428 -0
  554. package/unbundled/vivid-element.cjs +1 -1
  555. package/unbundled/vivid-element.js +1 -1
  556. package/video-player/definition.cjs +1 -1
  557. package/video-player/definition.js +1 -1
  558. package/video-player/index.cjs +3 -3
  559. package/video-player/index.js +9 -9
  560. package/vivid.api.json +860 -409
  561. package/unbundled/chunk.js +0 -33
  562. package/unbundled/en-US.cjs +0 -447
  563. package/unbundled/en-US.js +0 -443
  564. /package/{lib/icon/icon.placeholder.d.ts → shared/icon/icon-placeholder.d.ts} +0 -0
@@ -1,528 +1,521 @@
1
- import { o as defineVividComponent, s as createRegisterFunction } from "./vivid-element.js";
2
- import { t as iconDefinition } from "./definition2.js";
1
+ import { o as defineVividComponent, s as createRegisterFunction, t as VividElement } from "./vivid-element.js";
2
+ import { r as Icon, t as iconDefinition } from "./definition2.js";
3
3
  import { t as __decorate } from "./decorate.js";
4
- import { a as affixIconTemplateFactory, i as IconWrapper, t as AffixIcon } from "./affix.js";
5
- import { n as FormAssociated } from "./form-associated.js";
6
- import { t as FormElement } from "./form-element.js";
4
+ import { n as delegateAria, t as DelegatesAria } from "./delegates-aria.js";
7
5
  import { t as WithSuccessText } from "./with-success-text.js";
8
6
  import { t as WithErrorText } from "./with-error-text.js";
9
7
  import { t as WithContextualHelp } from "./with-contextual-help.js";
10
- import { r as chevronTemplateFactory } from "./definition7.js";
8
+ import { t as TrappedFocus } from "./trapped-focus.js";
9
+ import { i as Button, t as buttonDefinition } from "./definition7.js";
11
10
  import { t as handleEscapeKeyAndStopPropogation } from "./dialog.js";
12
11
  import { i as Popup, t as popupDefinition } from "./definition10.js";
13
12
  import { a as feedbackMessageDefinition, t as WithFeedback } from "./mixins.js";
14
- import { t as listboxOptionDefinition } from "./definition27.js";
15
- import { t as text_field_default } from "./text-field.js";
16
- import { t as Listbox } from "./listbox.js";
17
- import { Observable, attr, html, observable, ref, slotted, when } from "@microsoft/fast-element";
18
- import { classNames, limit, uniqueId } from "@microsoft/fast-web-utilities";
19
- //#region src/lib/combobox/combobox.scss?inline
20
- var combobox_default = ".label-wrapper{align-items:center;gap:var(--label-wrapper-gap,4px);flex-direction:row;display:flex}.label-wrapper[hidden]{display:none}.label:not(slot),.label::slotted(label){flex:0 auto}.chevron{font:var(--vvd-typography-base-extended);flex-shrink:0;transition:transform .2s;display:flex;transform:rotate(0)}:host([data-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:not(.disabled) .chevron{cursor:pointer}.disabled .chevron{color:var(--_low-ink-color);cursor:not-allowed}:host{--_low-ink-color:var(--vvd-color-neutral-600);flex-direction:column;gap:4px;display:inline-flex;position:relative}:host([disabled]){--_low-ink-color:var(--vvd-color-neutral-400);cursor:not-allowed}.base{--_text-field-gutter-end:8px;--_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}@media (hover:hover){.base: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: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.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.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: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:disabled.appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.base.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.disabled.appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.base.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.readonly:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-600);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.base.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.error:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:notSet;--_appearance-color-fill:var(--vvd-color-alert-50);--_appearance-color-outline:transparent}.base.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.success:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:notSet;--_appearance-color-fill:var(--vvd-color-success-50);--_appearance-color-outline:transparent}.base:not(.shape-pill) .base{border-radius:var(--_text-field-border-radius)}.base.shape-pill .base{border-radius:var(--_text-field-pill-border-radius)}.base slot[name=icon]{z-index:1;color:var(--_low-ink-color);font-size:var(--_text-field-icon-size);pointer-events:none;line-height:1;display:inline-block;position:absolute;inset-block-start:50%;inset-inline-start:var(--_text-field-gutter-start);transform:translateY(-50%)}.base.has-meta{padding-inline-end:16px}.control{text-overflow:ellipsis;white-space:nowrap}.fieldset .leading-items-wrapper{flex-shrink:0;align-items:center;gap:8px;padding-inline-end:16px;display:flex;position:relative}.listbox{max-height:var(--combobox-height,408px);contain:paint;border-radius:8px;flex-direction:column;gap:2px;padding:4px;display:flex;overflow-y:auto}::part(popup-base){inline-size:max-content;min-inline-size:var(--_combobox-fixed-width,100%)}@supports selector(:has(*)){.base:not(.has-activedescendant) .fieldset:has(.control:focus-within):after{--focus-stroke-gap-color:transparent;box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,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))}}@supports not selector(:has(*)){.base:not(.has-activedescendant) .fieldset:focus-within:after{box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,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));--focus-stroke-gap-color:transparent;z-index:1;border-radius:inherit;content:\"\";pointer-events:none;display:block;position:absolute;inset:0}}::slotted([data-vvd-component=option][current-selected]){box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,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));--focus-stroke-gap-color:transparent;border-radius:8px}";
13
+ import { n as textFieldDefinition, r as TextField } from "./definition26.js";
14
+ import { n as tooltipDefinition, r as Tooltip } from "./definition27.js";
15
+ import { n as isValidHexColor, t as BaseColorPicker } from "./base-color-picker.js";
16
+ import { attr, html, nullableNumberConverter, observable, ref, repeat, slotted, when } from "@microsoft/fast-element";
17
+ import { classNames } from "@microsoft/fast-web-utilities";
18
+ import { HexColorPicker } from "vanilla-colorful/hex-color-picker.js";
19
+ import { HexInput } from "vanilla-colorful/hex-input.js";
20
+ //#region src/lib/color-picker/color-picker.scss?inline
21
+ var color_picker_default = ".palette{grid-template-columns:repeat(var(--swatches-per-row,7), var(--_color-swatch-size,24px));display:grid}.swatch{background-color:var(--swatch-color);block-size:var(--_color-swatch-size,24px);color:var(--vvd-color-canvas);cursor:pointer;inline-size:var(--_color-swatch-size,24px);border-radius:4px;padding:0;position:relative}.swatch:not(.contrast){border:none}.swatch.contrast{border:1px solid var(--vvd-color-neutral-400);color:var(--vvd-color-canvas-text)}.swatch:focus-visible{box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:none;outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px));--focus-stroke-gap-color:transparent;--focus-inset:-3px}:host{--_low-ink-color:var(--vvd-color-neutral-600);display:inline-block}.base{min-inline-size:var(--_color-picker-min-inline-size,280px);display:inline-block}.control{inline-size:100%}.button{box-sizing:border-box;background-color:var(--button-color,var(--vvd-color-canvas-text));block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8));color:var(--vvd-color-canvas);inline-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8));padding-inline:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8)) / 4);vertical-align:middle;border:0;border-radius:4px;align-items:center;margin:0;text-decoration:none;display:inline-flex}.button.contrast{color:var(--vvd-color-canvas-text)}.button:not(.disabled){cursor:pointer}.button.disabled{background-color:var(--vvd-color-neutral-300);color:var(--vvd-color-neutral-500);cursor:not-allowed}.button:focus-visible{--focus-stroke-gap-color:transparent;box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,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))}.button [data-vvd-component=icon]{font-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8)) / 2);line-height:1}.dialog{min-inline-size:var(--_color-picker-popup-min-inline-size,264px);flex-direction:column;display:flex}.dialog .header{justify-content:space-between;align-items:center;padding-block:8px;padding-inline:16px;display:inline-flex}.dialog .header-title{font:var(--vvd-typography-base-extended-bold);margin-block:0}.dialog .body{flex-direction:column;gap:16px;margin-block-end:16px;padding-inline:16px;display:flex}.dialog .hex-input-wrapper{align-items:stretch;gap:8px;display:flex}.dialog .hex-input-wrapper [data-vvd-component=button]{flex:none}.dialog .footer{border-top:1px solid var(--vvd-color-neutral-200);padding:16px}.dialog .footer-header{margin-block-end:8px}.dialog .swatches-count{color:var(--_low-ink-color);font:var(--vvd-typography-base)}.dialog .palette{gap:var(--_color-swatches-gap,8px)}vvd-hex-input{flex:auto;min-width:0}vvd-hex-input::part(input),vvd-hex-input>input{box-sizing:border-box;background-color:var(--vvd-color-canvas);width:100%;height:100%;box-shadow:inset 0 0 0 1px var(--vvd-color-neutral-500);font:var(--vvd-typography-base);padding-inline:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2.5);border:0;border-radius:8px;outline:#0000}vvd-hex-input::part(input):focus-visible,vvd-hex-input>input:focus-visible{box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,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));--focus-stroke-gap-color:transparent}vvd-hex-picker{width:auto;height:auto;gap:16px;inline-size:100%}vvd-hex-picker::part(saturation){border-radius:8px;block-size:120px}vvd-hex-picker::part(hue){border-radius:8px;flex:0 0 8px}vvd-hex-picker::part(hue-pointer){width:10px;height:10px}vvd-hex-picker::part(saturation-pointer){width:18px;height:18px}::part(popup-base){inline-size:max-content;min-block-size:var(--_color-picker-popup-min-inline-size,264px);min-inline-size:var(--_color-picker-popup-min-inline-size,264px)}.visually-hidden{clip:rect(0 0 0 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}";
21
22
  //#endregion
22
- //#region src/lib/combobox/combobox.options.ts
23
- /**
24
- * Autocomplete values for combobox.
25
- * @public
26
- */
27
- var ComboboxAutocomplete = {
28
- inline: "inline",
29
- list: "list",
30
- both: "both",
31
- none: "none"
23
+ //#region src/lib/color-picker/color-picker.ts
24
+ var VC_HEX_PICKER_TAG = "vvd-hex-picker";
25
+ var VC_HEX_INPUT_TAG = "vvd-hex-input";
26
+ var VvdHexPicker = class extends HexColorPicker {
27
+ static {
28
+ this.displayName = "VvdHexPicker";
29
+ }
32
30
  };
33
- //#endregion
34
- //#region src/lib/combobox/combobox.ts
31
+ var VvdHexInput = class extends HexInput {
32
+ static {
33
+ this.displayName = "VvdHexInput";
34
+ }
35
+ };
36
+ /* v8 ignore if -- @preserve */
37
+ if (!customElements.get(VC_HEX_PICKER_TAG)) customElements.define(VC_HEX_PICKER_TAG, VvdHexPicker);
38
+ /* v8 ignore if -- @preserve */
39
+ if (!customElements.get(VC_HEX_INPUT_TAG)) customElements.define(VC_HEX_INPUT_TAG, VvdHexInput);
40
+ var vcPickerTag = VC_HEX_PICKER_TAG;
41
+ var vcInputTag = VC_HEX_INPUT_TAG;
35
42
  /**
36
43
  * @public
37
- * @component combobox
38
- * @slot - Default slot.
39
- * @slot icon - The preferred way to add an icon to the combobox control.
40
- * @slot meta - Slot to add meta content to the combobox control.
41
- * @slot helper-text - Describes how to use the combobox. Alternative to the `helper-text` attribute.
42
- * @event {CustomEvent<undefined>} change - Fires a custom 'change' event when the value updates
43
- * @vueModel modelValue value change `event.currentTarget.value`
44
- * @testAction fill comboboxFill
45
- * @testAction clear comboboxClear
46
- * @testAction selectOptionByText selectOptionByText
47
- * @testAction selectOptionByValue selectOptionByValue
48
- * @testRef control shadow input.control
44
+ * @component color-picker
45
+ * @slot helper-text - Describes how to use the text-field. Alternative to the `helper-text` attribute.
46
+ * @slot popup-text - Overrides the default "Color Picker" title of the Popup window.
47
+ * @slot swatches-text - Overrides the default "Saved colors:" text above color swatches.
48
+ * @event {CustomEvent<undefined>} change - Fires when the value changes
49
+ * @event {Event} input - Fires when the value of the element changes.
50
+ * @vueModel modelValue value input,@lazy:change `event.currentTarget.value`
49
51
  */
50
- var Combobox = class extends WithContextualHelp(WithFeedback(WithErrorText(WithSuccessText(FormElement(AffixIcon(FormAssociated(Listbox))))))) {
52
+ var ColorPicker = class extends WithContextualHelp(WithFeedback(WithErrorText(WithSuccessText(DelegatesAria(TrappedFocus(BaseColorPicker(VividElement))))))) {
51
53
  constructor(..._args) {
52
54
  super(..._args);
53
- this.filteredOptions = [];
54
- this.filter = "";
55
- this.fixedDropdown = false;
56
- this.listboxId = uniqueId("listbox-");
57
- this.maxHeight = 0;
58
- this.open = false;
59
- this.proxy = document.createElement("input");
55
+ this.disableSavedColors = false;
56
+ this.savedColors = [];
57
+ this.maxSwatches = 6;
58
+ this.copyIconName = "copy-2-line";
59
+ this._copyValueToClipboard = async (value) => {
60
+ try {
61
+ await navigator.clipboard.writeText(value);
62
+ this._setTemporaryCopyIcon("check-circle-line");
63
+ this._ariaLiveDescription = this.locale.colorPicker.copySuccessMessage(value);
64
+ } catch {
65
+ alert(this.locale.colorPicker.copyErrorText);
66
+ this._setTemporaryCopyIcon("error-line");
67
+ this._ariaLiveDescription = this.locale.colorPicker.copyErrorText;
68
+ }
69
+ };
70
+ this._ariaLiveDescription = "";
71
+ }
72
+ static {
73
+ this.HEX_COLOR_PATTERN = /^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$/;
60
74
  }
61
75
  /**
62
76
  * @internal
63
77
  */
64
- formResetCallback() {
65
- super.formResetCallback();
66
- this.selectedIndex = this._newDefaultSelectedIndex([], this.options, -1) ?? -1;
67
- this.value = this.firstSelectedOption?.text || "";
68
- }
69
- /** {@inheritDoc (FormAssociated:interface).validate} */
70
- validate() {
71
- super.validate(this.control);
72
- }
73
- get isAutocompleteInline() {
74
- return this.autocomplete === ComboboxAutocomplete.inline || this.isAutocompleteBoth;
75
- }
76
- get isAutocompleteList() {
77
- return this.autocomplete === ComboboxAutocomplete.list || this.isAutocompleteBoth;
78
+ placeholderChanged() {
79
+ /* v8 ignore if -- @preserve */
80
+ if (this.proxy instanceof HTMLInputElement) this.proxy.placeholder = this.placeholder;
78
81
  }
79
- get isAutocompleteBoth() {
80
- return this.autocomplete === ComboboxAutocomplete.both;
82
+ /**
83
+ * Change event handler for inner control.
84
+ * @remarks
85
+ * @internal
86
+ */
87
+ handleChange() {
88
+ this.$emit("change");
81
89
  }
82
90
  /**
83
91
  * @internal
84
92
  */
85
- openChanged() {
86
- if (this.open) this.enqueueScrollSelectedOptionIntoViewIfNeeded();
93
+ openChanged(_oldValue, newValue) {
94
+ if (newValue && this.isConnected) requestAnimationFrame(() => {
95
+ this._refreshCanvasColor();
96
+ });
87
97
  }
88
98
  /**
89
- * A read-only list of options.
90
- *
91
- * @public
92
- * @remarks
93
- * Overrides `Listbox.options`.
99
+ * @internal
94
100
  */
95
- get options() {
96
- Observable.track(this, "options");
97
- return this.filteredOptions.length ? this.filteredOptions : this._options;
101
+ savedColorsKeyChanged() {
102
+ this.savedColors = this._loadSavedColors();
98
103
  }
99
- set options(value) {
100
- super.options = value;
104
+ /**
105
+ * @internal
106
+ */
107
+ get _savedColorsStorageKey() {
108
+ if (this.savedColorsKey) return this.savedColorsKey;
109
+ return `vvd-saved-colors:${this.tagName.toLowerCase()}`;
101
110
  }
102
111
  /**
103
- * Updates the placeholder on the proxy element.
104
112
  * @internal
105
113
  */
106
- placeholderChanged() {
107
- /* v8 ignore if -- @preserve */
108
- if (this.proxy instanceof HTMLInputElement) this.proxy.placeholder = this.placeholder;
114
+ _handleColorSaving() {
115
+ this._saveCurrentColor();
109
116
  }
110
117
  /**
111
118
  * @internal
112
119
  */
113
- valueChanged(prev, next) {
114
- if (this.$fastController.isConnected && this.options) {
115
- const selectedIndex = this.options.findIndex((el) => el.text.toLowerCase() === next.toLowerCase());
116
- this.selectedIndex = this.options[this.selectedIndex]?.text !== this.options[selectedIndex]?.text ? selectedIndex : this.selectedIndex;
117
- }
118
- super.valueChanged(prev, next);
120
+ _saveCurrentColor() {
121
+ const value = this.value;
122
+ if (typeof value !== "string" || !isValidHexColor(value)) return;
123
+ const swatches = Array.isArray(this.savedColors) ? [...this.savedColors] : [];
124
+ const idx = swatches.findIndex((s) => s?.value === value);
125
+ if (idx !== -1) swatches.splice(idx, 1);
126
+ swatches.unshift({ value });
127
+ this.savedColors = swatches.slice(0, this._maxSwatchesNormalized);
128
+ this._setSavedColors(this.savedColors);
119
129
  }
120
130
  /**
121
- * Handle opening and closing the listbox when the combobox is clicked.
122
- *
123
- * @param e - the mouse event
124
131
  * @internal
125
132
  */
126
- clickHandler(e) {
127
- if (this.disabled || this._isFromContextualHelp(e)) return;
128
- if (this.open) {
129
- const capturedOption = e.target.closest(`option,[role=option],[data-vvd-component=option]`);
130
- if (!capturedOption || capturedOption.disabled) return;
131
- this.selectedOptions = [capturedOption];
132
- this.control.value = capturedOption.text;
133
- this.clearSelectionRange();
134
- this.updateValue(true);
133
+ _loadSavedColors() {
134
+ try {
135
+ const savedColors = localStorage.getItem(this._savedColorsStorageKey);
136
+ if (!savedColors) return [];
137
+ const parsed = JSON.parse(savedColors);
138
+ if (!Array.isArray(parsed)) return [];
139
+ return parsed.filter((x) => x && typeof x.value === "string" && isValidHexColor(x.value)).map((x) => ({
140
+ value: x.value,
141
+ label: typeof x.label === "string" ? x.label : void 0
142
+ }));
143
+ } catch {
144
+ return [];
135
145
  }
136
- this.open = !this.open;
137
- if (this.open) this.control.focus();
138
- return true;
139
146
  }
140
147
  /**
141
- * Handle closing the listbox when the combobox is open and the chevron icon is clicked.
142
- *
143
- * @param e - the mouse event
144
148
  * @internal
145
149
  */
146
- _chevronIconClickHandler(e) {
147
- if (!this.open) return;
148
- e.stopPropagation();
149
- this.open = false;
150
+ _setSavedColors(swatches) {
151
+ try {
152
+ localStorage.setItem(this._savedColorsStorageKey, JSON.stringify(swatches));
153
+ } catch {}
150
154
  }
151
- connectedCallback() {
152
- super.connectedCallback();
153
- if (this.value) this.initialValue = this.value;
154
- this._popup.anchor = this._anchor;
155
+ /**
156
+ * Get all color swatches combined, both from swatches property and saved colors
157
+ * @internal
158
+ */
159
+ get allSwatches() {
160
+ const predefinedColors = Array.isArray(this.swatches) ? this.swatches : [];
161
+ const savedColors = Array.isArray(this.savedColors) ? this.savedColors : [];
162
+ const seen = /* @__PURE__ */ new Set();
163
+ const merged = [];
164
+ const appendIfUniqueAndValid = (swatch) => {
165
+ if (!swatch || typeof swatch.value !== "string") return;
166
+ if (!isValidHexColor(swatch.value) || seen.has(swatch.value)) return;
167
+ seen.add(swatch.value);
168
+ merged.push(swatch);
169
+ };
170
+ if (!this.disableSavedColors) savedColors.forEach(appendIfUniqueAndValid);
171
+ predefinedColors.forEach(appendIfUniqueAndValid);
172
+ return merged.slice(0, this._maxSwatchesNormalized);
155
173
  }
156
174
  /**
157
- * Filter available options by text value.
158
- *
159
- * @public
175
+ * @internal
160
176
  */
161
- filterOptions() {
162
- if (!this.autocomplete || this.autocomplete === ComboboxAutocomplete.none) this.filter = "";
163
- this.filteredOptions = this._options.filter((o) => o.text.toLowerCase().startsWith(this.filter.toLowerCase()));
164
- if (this.isAutocompleteList) this._options.forEach((o) => {
165
- o.hidden = !this.filteredOptions.includes(o);
166
- });
177
+ get _maxSwatchesNormalized() {
178
+ return Number.isFinite(this.maxSwatches) ? Math.max(0, Math.floor(this.maxSwatches)) : 0;
167
179
  }
168
180
  /**
169
- * Focus the control and scroll the first selected option into view.
170
- *
171
181
  * @internal
172
- * @remarks
173
- * Overrides: `Listbox.focusAndScrollOptionIntoView`
174
182
  */
175
- focusAndScrollOptionIntoView() {
176
- if (this.contains(document.activeElement)) {
177
- this.control.focus();
178
- this.enqueueScrollSelectedOptionIntoViewIfNeeded();
183
+ maxSwatchesChanged() {
184
+ const maxCount = this._maxSwatchesNormalized;
185
+ if (this.savedColors?.length > maxCount) {
186
+ this.savedColors = this.savedColors.slice(0, maxCount);
187
+ this._setSavedColors(this.savedColors);
179
188
  }
180
189
  }
181
190
  /**
182
191
  * @internal
183
192
  */
184
- enqueueScrollSelectedOptionIntoViewIfNeeded() {
185
- const firstSelectedOption = this.firstSelectedOption;
186
- /* v8 ignore else -- @preserve */
187
- if (firstSelectedOption) requestAnimationFrame(() => {
188
- firstSelectedOption.scrollIntoView({ block: "nearest" });
189
- });
193
+ _onPickerColorChanged(e) {
194
+ if (typeof e.detail?.value === "string") this.value = e.detail?.value;
190
195
  }
191
196
  /**
192
- * Handle focus state when the element or its children lose focus.
193
- *
194
- * @param e - The focus event
195
197
  * @internal
196
198
  */
197
- focusoutHandler(e) {
198
- this.syncValue();
199
- if (!this.open) return true;
200
- const focusTarget = e.relatedTarget;
201
- if (this.isSameNode(focusTarget)) {
202
- this.focus();
203
- return;
204
- }
205
- this.open = false;
199
+ valueChanged(_oldVal, newVal) {
200
+ if (this._vcHexPickerEl && typeof newVal === "string") this._vcHexPickerEl.color = newVal;
201
+ if (this._vcHexInputEl && typeof newVal === "string") this._vcHexInputEl.color = newVal;
206
202
  }
207
203
  /**
208
- * Handle content changes on the control input.
209
- *
210
- * @param e - the input event
211
204
  * @internal
212
205
  */
213
- inputHandler(e) {
214
- this.filter = this.control.value;
215
- this.filterOptions();
216
- if (!this.isAutocompleteInline) this.selectedIndex = this.options.map((option) => option.text).indexOf(this.control.value);
217
- if (e.inputType.includes("deleteContent") || !this.filter.length) return true;
218
- if (this.isAutocompleteList && !this.open) this.open = true;
219
- if (this.isAutocompleteInline) if (this.filteredOptions.length) {
220
- this.selectedOptions = [this.filteredOptions[0]];
221
- this.selectedIndex = this.options.indexOf(this.firstSelectedOption);
222
- this.setInlineSelection();
223
- } else this.selectedIndex = -1;
206
+ _onTextFieldInput(event) {
207
+ this.value = event.currentTarget.value;
224
208
  }
225
209
  /**
226
- * Handle keydown actions for listbox navigation.
227
- *
228
- * @param e - the keyboard event
229
210
  * @internal
230
211
  */
231
- keydownHandler(e) {
232
- const key = e.key;
233
- if (e.ctrlKey || e.shiftKey) return true;
234
- switch (key) {
235
- case "Enter":
236
- this.syncValue();
237
- /* v8 ignore else -- @preserve */
238
- if (this.isAutocompleteInline) this.filter = this.value;
239
- this.open = false;
240
- this.clearSelectionRange();
241
- break;
242
- case "Escape":
243
- /* v8 ignore else -- @preserve */
244
- if (!this.isAutocompleteInline) this.selectedIndex = -1;
245
- if (this.open) {
246
- this.open = false;
247
- break;
248
- }
249
- this.value = "";
250
- this.control.value = "";
251
- this.filter = "";
252
- this.filterOptions();
253
- break;
254
- case "Tab":
255
- this.setInputToSelection();
256
- if (!this.open) return true;
257
- e.preventDefault();
258
- this.open = false;
259
- break;
260
- case "ArrowUp":
261
- case "ArrowDown":
262
- this.filterOptions();
263
- if (!this.open) {
264
- this.open = true;
265
- break;
266
- }
267
- /* v8 ignore else -- @preserve */
268
- if (this.filteredOptions.length > 0) super.keydownHandler(e);
269
- if (this.isAutocompleteInline) this.setInlineSelection();
270
- break;
271
- default: return true;
272
- }
212
+ get _buttonColor() {
213
+ /* v8 ignore else -- @preserve */
214
+ if (!this._canvasColor) this._refreshCanvasColor();
215
+ if (this.value && isValidHexColor(this.value)) return this.value;
216
+ return "var(--vvd-color-canvas-text)";
273
217
  }
274
218
  /**
275
- * Ensure that the selectedIndex is within the current allowable filtered range.
276
- *
277
- * @param prev - the previous selected index value
278
- * @param next - the current selected index value
279
- *
280
219
  * @internal
281
220
  */
282
- selectedIndexChanged(prev, next) {
283
- if (this.$fastController.isConnected) {
284
- next = limit(-1, this.options.length - 1, next);
285
- if (next !== this.selectedIndex) {
286
- this.selectedIndex = next;
287
- return;
288
- }
289
- super.selectedIndexChanged(prev, next);
290
- }
221
+ _onButtonClick() {
222
+ this.open = !this.open;
291
223
  }
292
224
  /**
293
- * Move focus to the previous selectable option.
294
- *
295
225
  * @internal
296
- * @remarks
297
- * Overrides `Listbox.selectPreviousOption`
298
226
  */
299
- selectPreviousOption() {
300
- if (!this.disabled && this.selectedIndex >= 0) this.selectedIndex = this.selectedIndex - 1;
301
- }
302
- _isDefaultSelected(option) {
303
- return super._isDefaultSelected(option) || option.text !== "" && option.text === this.initialValue;
227
+ _handleCloseRequest() {
228
+ this.open = false;
304
229
  }
305
230
  /**
306
- * Focus and set the content of the control based on the first selected option.
307
- *
308
231
  * @internal
309
232
  */
310
- setInputToSelection() {
311
- if (this.firstSelectedOption) {
312
- this.control.value = this.firstSelectedOption.text;
313
- this.control.focus();
314
- }
233
+ _isInPath(e, el) {
234
+ if (!el) return false;
235
+ const path = e.composedPath?.();
236
+ return !!(path && path.includes(el));
315
237
  }
316
238
  /**
317
- * Focus, set and select the content of the control based on the first selected option.
318
- *
319
239
  * @internal
320
240
  */
321
- setInlineSelection() {
322
- /* v8 ignore else -- @preserve */
323
- if (this.firstSelectedOption) {
324
- this.setInputToSelection();
325
- this.control.setSelectionRange(this.filter.length, this.control.value.length, "backward");
326
- }
241
+ #closeOnPointerOutside = (e) => {
242
+ if (this._isInPath(e, this._buttonEl) || this._isInPath(e, this._popupEl)) return;
243
+ this.open = false;
244
+ };
245
+ connectedCallback() {
246
+ super.connectedCallback();
247
+ this.savedColors = this._loadSavedColors();
248
+ document.addEventListener("mousedown", this.#closeOnPointerOutside, true);
327
249
  }
250
+ disconnectedCallback() {
251
+ super.disconnectedCallback();
252
+ document.removeEventListener("mousedown", this.#closeOnPointerOutside, true);
253
+ }
254
+ #iconResetTimer = null;
328
255
  /**
329
- * Determines if a value update should involve emitting a change event, then updates the value.
330
- *
331
256
  * @internal
332
257
  */
333
- syncValue() {
334
- const newValue = this.firstSelectedOption?.text ?? this.control.value;
335
- this.updateValue(this.value !== newValue);
258
+ _setTemporaryCopyIcon(name, ms = 2e3) {
259
+ this.copyIconName = name;
260
+ if (this.#iconResetTimer) clearTimeout(this.#iconResetTimer);
261
+ this.#iconResetTimer = setTimeout(() => {
262
+ this.copyIconName = "copy-2-line";
263
+ this.#iconResetTimer = null;
264
+ }, ms);
336
265
  }
337
266
  /**
338
- * Ensure that the entire list of options is used when setting the selected property.
339
- *
340
- * @param prev - the previous list of selected options
341
- * @param next - the current list of selected options
342
- *
343
267
  * @internal
344
- * @remarks
345
- * Overrides: `Listbox.selectedOptionsChanged`
346
268
  */
347
- selectedOptionsChanged(_prev, next) {
348
- if (this.$fastController.isConnected) this._options.forEach((o) => {
349
- o.selected = next.includes(o);
350
- });
269
+ _onBaseKeydown(event) {
270
+ if (this.open && handleEscapeKeyAndStopPropogation(event)) {
271
+ this.open = false;
272
+ return false;
273
+ }
274
+ if (this._trappedFocus(event, () => this._focusableElsWithinDialog())) return false;
275
+ return true;
351
276
  }
352
277
  /**
353
- * Synchronize the form-associated proxy and update the value property of the element.
354
- *
355
- * @param prev - the previous collection of slotted option elements
356
- * @param next - the next collection of slotted option elements
357
- *
358
278
  * @internal
359
279
  */
360
- slottedOptionsChanged(prev, next) {
361
- super.slottedOptionsChanged(prev, next);
362
- this.updateValue();
363
- const scale = this.getAttribute("scale") || this.scale;
364
- next.forEach((element) => {
365
- if (scale) {
366
- element.setAttribute("scale", scale);
367
- element.scale = scale;
368
- }
369
- });
280
+ _focusableElsWithinDialog() {
281
+ return this._popupEl.querySelectorAll("button:not([role=\"gridcell\"]), [data-vvd-component=\"button\"], vwc-button:not([role=\"gridcell\"])");
370
282
  }
371
283
  /**
372
- * Sets the value and to match the first selected option.
373
- *
374
- * @param shouldEmit - if true, the change event will be emitted
375
- *
376
284
  * @internal
377
285
  */
378
- updateValue(shouldEmit) {
379
- if (this.$fastController.isConnected) this.value = this.firstSelectedOption?.text || this.control.value;
380
- if (shouldEmit) this.$emit("change");
286
+ _handleCellKeydown(event, value, index, isSaveCell) {
287
+ if (event.key === "Tab") {
288
+ event.preventDefault();
289
+ const focusableEls = this._focusableElsWithinDialog();
290
+ const idx = Array.prototype.indexOf.call(focusableEls, event.currentTarget);
291
+ focusableEls[event.shiftKey ? (idx - 1 + focusableEls.length) % focusableEls.length : (idx + 1) % focusableEls.length]?.focus();
292
+ return false;
293
+ }
294
+ return super._handleCellKeydown(event, value, index, isSaveCell);
381
295
  }
382
296
  /**
383
297
  * @internal
384
298
  */
385
- clearSelectionRange() {
386
- const controlValueLength = this.control.value.length;
387
- this.control.setSelectionRange(controlValueLength, controlValueLength);
299
+ _handleSwatchSelection(value) {
300
+ /* v8 ignore else -- @preserve */
301
+ if (this.value !== value) this._ariaLiveDescription = this.locale.colorPicker.selectionSuccessMessage(value);
302
+ super._handleSwatchSelection(value);
388
303
  }
389
304
  };
390
- __decorate([attr({
391
- attribute: "autocomplete",
392
- mode: "fromView"
393
- })], Combobox.prototype, "autocomplete", void 0);
394
- __decorate([attr], Combobox.prototype, "appearance", void 0);
395
- __decorate([attr], Combobox.prototype, "shape", void 0);
396
- __decorate([attr()], Combobox.prototype, "scale", void 0);
397
- __decorate([attr], Combobox.prototype, "placement", void 0);
305
+ __decorate([attr], ColorPicker.prototype, "placeholder", void 0);
306
+ __decorate([attr({ attribute: "saved-colors-key" })], ColorPicker.prototype, "savedColorsKey", void 0);
398
307
  __decorate([attr({
399
308
  mode: "boolean",
400
- attribute: "fixed-dropdown"
401
- })], Combobox.prototype, "fixedDropdown", void 0);
402
- __decorate([observable], Combobox.prototype, "metaSlottedContent", void 0);
403
- __decorate([observable], Combobox.prototype, "maxHeight", void 0);
309
+ attribute: "disable-saved-colors"
310
+ })], ColorPicker.prototype, "disableSavedColors", void 0);
311
+ __decorate([observable], ColorPicker.prototype, "savedColors", void 0);
404
312
  __decorate([attr({
405
- attribute: "open",
406
- mode: "boolean"
407
- })], Combobox.prototype, "open", void 0);
408
- __decorate([attr], Combobox.prototype, "placeholder", void 0);
313
+ attribute: "max-swatches",
314
+ mode: "fromView",
315
+ converter: nullableNumberConverter
316
+ })], ColorPicker.prototype, "maxSwatches", void 0);
317
+ __decorate([observable], ColorPicker.prototype, "copyIconName", void 0);
318
+ __decorate([observable], ColorPicker.prototype, "_ariaLiveDescription", void 0);
409
319
  //#endregion
410
- //#region src/lib/combobox/combobox.template.ts
411
- var getStateClasses = ({ icon, iconSlottedContent, metaSlottedContent, errorValidationMessage, successText, shape, scale, disabled, placeholder, label, appearance, open, _activeDescendant }) => classNames("base", ["disabled", disabled], [`shape-${shape}`, Boolean(shape)], [`size-${scale}`, Boolean(scale)], ["placeholder", Boolean(placeholder)], [`appearance-${appearance}`, Boolean(appearance)], ["no-label", !label], ["has-icon", !!icon || Boolean(iconSlottedContent?.length)], ["has-meta", Boolean(metaSlottedContent?.length)], ["has-activedescendant", Boolean(_activeDescendant) && open], ["error", Boolean(errorValidationMessage)], ["success", !!successText]);
412
- function renderLabel() {
413
- return html` <label for="control" class="label">
414
- ${(x) => x.label}
415
- </label>`;
416
- }
417
- function setFixedDropdownVarWidth(x) {
418
- return x.open && x.fixedDropdown ? `--_combobox-fixed-width: ${Math.round(x.getBoundingClientRect().width)}px` : null;
419
- }
420
- function renderInput(context) {
421
- const affixIconTemplate = affixIconTemplateFactory(context);
422
- const chevronTemplate = chevronTemplateFactory(context);
423
- return html` <div class="${getStateClasses}" ${ref("_anchor")}>
424
- <div
425
- class="label-wrapper"
426
- ?hidden=${(x) => !x.label && !x._hasContextualHelp}
320
+ //#region src/lib/color-picker/color-picker.template.ts
321
+ function renderTextField(textFieldTag, iconTag) {
322
+ const getClasses = (_) => classNames("control");
323
+ return html`
324
+ <${textFieldTag}
325
+ id="text-field"
326
+ class="${getClasses}"
327
+ pattern="${ColorPicker.HEX_COLOR_PATTERN.source}"
328
+ maxlength="7"
329
+ label="${(x) => x.label}"
330
+ :value="${(x) => x.value}"
331
+ placeholder="${(x) => x.placeholder}"
332
+ helper-text="${(x) => x.helperText}"
333
+ error-text="${(x) => x.errorValidationMessage}"
334
+ success-text="${(x) => x.successText}"
335
+ ?disabled="${(x) => x.disabled}"
336
+ ?required="${(x) => x.required}"
337
+ @input='${(x, c) => x._onTextFieldInput(c.event)}'
338
+ @change="${(x) => x.handleChange()}"
339
+ @blur="${(x) => {
340
+ x.$emit("blur", void 0, { bubbles: false });
341
+ }}"
342
+ @focus="${(x) => {
343
+ x.$emit("focus", void 0, { bubbles: false });
344
+ }}"
345
+ ${delegateAria()}
346
+ ${ref("_textFieldEl")}
427
347
  >
428
- ${when((x) => x.label, renderLabel())}
348
+ <button
349
+ aria-label="${(x) => x.locale.colorPicker.pickerButtonLabel}"
350
+ aria-expanded="${(x) => x.open}"
351
+ aria-haspopup="dialog"
352
+ class="button ${(x) => classNames(x._applyContrastClass(x._buttonColor) ? "contrast" : "", x.disabled ? "disabled" : "")}"
353
+ style="--button-color: ${(x) => x._buttonColor};"
354
+ ?disabled="${(x) => x.disabled}"
355
+ @click="${(x) => x._onButtonClick()}"
356
+ slot="action-items"
357
+ ${ref("_buttonEl")}>
358
+ <${iconTag} name="edit-line"></${iconTag}>
359
+ </button>
360
+ <slot
361
+ slot="${(x) => x._helperTextSlottedContent?.length ? "helper-text" : void 0}"
362
+ name="helper-text"
363
+ ${slotted("_helperTextSlottedContent")}
364
+ ></slot>
429
365
  <slot
430
- name="contextual-help"
366
+ slot='${(x) => x._contextualHelpSlottedContent?.length ? "contextual-help" : void 0}'
367
+ name='contextual-help'
431
368
  ${slotted("_contextualHelpSlottedContent")}
432
369
  ></slot>
370
+ </${textFieldTag}>
371
+ `;
372
+ }
373
+ function renderPopupHeader(buttonTag, iconTag) {
374
+ return html`
375
+ <div class="header">
376
+ <h2 class="header-title" id="color-picker-title">
377
+ <slot name="popup-text">${(x) => x.locale.colorPicker.popupLabel}</slot>
378
+ </h2>
379
+ <${buttonTag} size="condensed"
380
+ aria-label="${(x) => x.locale.colorPicker.closeButtonLabel}"
381
+ @click="${(x) => x._handleCloseRequest()}">
382
+ <${iconTag} slot="icon" name="close-line"></${iconTag}>
383
+ </${buttonTag}>
433
384
  </div>
434
- <div class="fieldset">
435
- ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
436
- <div class="wrapper">
437
- <input
438
- id="control"
439
- autocomplete="off"
440
- class="control"
441
- aria-activedescendant="${(x) => x.open ? x._activeDescendant : null}"
442
- aria-autocomplete="${(x) => x.autocomplete}"
443
- aria-controls="${(x) => x.listboxId}"
444
- aria-expanded="${(x) => x.open}"
445
- aria-haspopup="listbox"
446
- aria-describedby="${(x) => x._feedbackDescribedBy}"
447
- placeholder="${(x) => x.placeholder}"
448
- role="combobox"
449
- type="text"
450
- ?disabled="${(x) => x.disabled}"
451
- :value="${(x) => x.value}"
452
- @input="${(x, c) => x.inputHandler(c.event)}"
453
- ${ref("control")}
454
- />
455
- </div>
456
- <div class="leading-items-wrapper">
457
- <slot name="meta" ${slotted("metaSlottedContent")}></slot>
458
- <div
459
- @click="${(x, c) => x._chevronIconClickHandler(c.event)}"
385
+ `;
386
+ }
387
+ function renderPopupBody(buttonTag, iconTag, tooltipTag) {
388
+ return html`
389
+ <div class="body">
390
+ <${html.partial(vcPickerTag)}
391
+ part="hex-picker"
392
+ color="${(x) => x.value}"
393
+ @color-changed="${(x, c) => x._onPickerColorChanged(c.event)}"
394
+ ${ref("_vcHexPickerEl")}
395
+ ></${html.partial(vcPickerTag)}>
396
+ <div class="hex-input-wrapper">
397
+ <${html.partial(vcInputTag)}
398
+ part="hex-input"
399
+ prefixed
400
+ color="${(x) => x.value}"
401
+ @color-changed="${(x, c) => x._onPickerColorChanged(c.event)}"
402
+ ${ref("_vcHexInputEl")}
460
403
  >
461
- ${chevronTemplate}
462
- </div>
404
+ <input name="hex-code-input" aria-label="${(x) => x.locale.colorPicker.hexInputLabel}"
405
+ placeholder="${(x) => x.placeholder}"
406
+ @blur="${(x, c) => c.event.stopImmediatePropagation()}"
407
+ part="input">
408
+ </${html.partial(vcInputTag)}>
409
+ <${tooltipTag} placement="top"
410
+ text="${(x) => x.locale.colorPicker.copyButtonLabel}"
411
+ exportparts="vvd-theme-alternate">
412
+ <${buttonTag}
413
+ slot="anchor" size="normal"
414
+ aria-label="${(x) => x.locale.colorPicker.copyButtonLabel}"
415
+ @click="${(x) => x._copyValueToClipboard(x.value)}">
416
+ <${iconTag} slot="icon" name="${(x) => x.copyIconName}"></${iconTag}>
417
+ </${buttonTag}>
418
+ </${tooltipTag}>
463
419
  </div>
464
420
  </div>
465
- </div>`;
421
+ `;
466
422
  }
467
- var comboboxTemplate = (context) => {
468
- const popupTag = context.tagFor(Popup);
423
+ function renderPopupFooter(buttonTag, iconTag, tooltipTag) {
469
424
  return html`
470
- <template
471
- tabindex="${(x) => !x.disabled ? "0" : null}"
472
- @click="${(x, c) => x.clickHandler(c.event)}"
473
- @focusout="${(x, c) => x.focusoutHandler(c.event)}"
474
- @keydown="${(x, { event }) => {
475
- x.open && handleEscapeKeyAndStopPropogation(event);
476
- return x.keydownHandler(event);
477
- }}"
478
- >
479
- <div class="control-wrapper">
480
- ${() => renderInput(context)}
481
- <${popupTag} class="popup"
482
- style="${setFixedDropdownVarWidth}"
483
- ?open="${(x) => x.open}"
484
- placement="${(x) => x.placement ?? "bottom-start"}"
485
- strategy="${(x) => x.fixedDropdown ? "fixed" : "absolute"}"
486
- ${ref("_popup")}>
487
- <div id="${(x) => x.listboxId}"
488
- class="listbox"
489
- role="listbox"
490
- ?disabled="${(x) => x.disabled}"
491
- ${ref("listbox")}>
492
- <slot ${slotted({
493
- filter: Listbox.slottedOptionFilter,
494
- flatten: true,
495
- property: "slottedOptions"
496
- })}>
497
- </slot>
498
- </div>
499
- </${popupTag}>
425
+ <div class="footer">
426
+ <div class="footer-header">
427
+ <span class="footer-title" id="color-picker-footer-title"
428
+ ><slot name="swatches-text"
429
+ >${(x) => x.locale.colorPicker.swatchesLabel}</slot
430
+ ></span
431
+ >
432
+ ${when((x) => !x.disableSavedColors, renderSwatchesCount())}
500
433
  </div>
501
- <div class="feedback-wrapper" @click="${(_, c) => c.event.stopPropagation()}">
502
- ${(x) => x._getFeedbackTemplate(context)}
434
+ <div
435
+ class="palette"
436
+ role="grid"
437
+ aria-rowcount="${(x) => Math.ceil(x.allSwatches.length / x._getRowLength())}"
438
+ aria-colcount="${(x) => x._getRowLength()}"
439
+ style="--swatches-per-row: ${(x) => x._getRowLength()};"
440
+ aria-labelledby="color-picker-footer-title"
441
+ >
442
+ ${repeat((x) => x.allSwatches, (x) => x._renderColorSwatch(iconTag, tooltipTag), { positioning: true })}
443
+ ${when((x) => !x.disableSavedColors, html`
444
+ <${tooltipTag} placement="top"
445
+ text="${(x) => x.locale.colorPicker.saveButtonLabel}"
446
+ exportparts="vvd-theme-alternate">
447
+ <${buttonTag}
448
+ slot="anchor"
449
+ appearance="outlined"
450
+ size="super-condensed"
451
+ role="gridcell"
452
+ tabindex="${(x) => x.allSwatches.length ? "-1" : "0"}"
453
+ aria-label="${(x) => x.locale.colorPicker.saveButtonLabel}"
454
+ @click="${(x) => x._saveCurrentColor()}"
455
+ @keydown="${(x, c) => x._handleCellKeydown(c.event, x.value, x.allSwatches.length, true)}">
456
+ <${iconTag} slot="icon" name="plus-line"></${iconTag}>
457
+ </${buttonTag}>
458
+ </${tooltipTag}>
459
+ `)}
503
460
  </div>
504
- </template>
461
+ </div>
462
+ `;
463
+ }
464
+ function renderSwatchesCount() {
465
+ return html`
466
+ <span
467
+ id="swatches-count"
468
+ class="swatches-count"
469
+ aria-label="${(x) => x.locale.colorPicker.maxSwatchesMessage(x.allSwatches.length, x.maxSwatches)}"
470
+ >${(x) => `${x.allSwatches.length}/${x.maxSwatches}`}</span
471
+ >
472
+ `;
473
+ }
474
+ var ColorPickerTemplate = (context) => {
475
+ const textFieldTag = context.tagFor(TextField);
476
+ const iconTag = context.tagFor(Icon);
477
+ const popupTag = context.tagFor(Popup);
478
+ const buttonTag = context.tagFor(Button);
479
+ const tooltipTag = context.tagFor(Tooltip);
480
+ return html`
481
+ <div class="base" @keydown="${(x, { event }) => x._onBaseKeydown(event)}">
482
+ <span aria-live="assertive" aria-relevant="text" class="visually-hidden">
483
+ ${(x) => x._ariaLiveDescription}
484
+ </span>
485
+ ${renderTextField(textFieldTag, iconTag)}
486
+ <${popupTag}
487
+ :open="${(x) => x.open}"
488
+ :anchor="${(x) => x._buttonEl}"
489
+ placement="top"
490
+ offset="10"
491
+ ${ref("_popupEl")}>
492
+ <div class="dialog"
493
+ role="dialog"
494
+ aria-modal="true"
495
+ aria-labelledby="color-picker-title">
496
+ ${renderPopupHeader(buttonTag, iconTag)}
497
+ ${renderPopupBody(buttonTag, iconTag, tooltipTag)}
498
+ ${when((x) => !x.disableSavedColors || x.allSwatches.length > 0, renderPopupFooter(buttonTag, iconTag, tooltipTag))}
499
+ </div>
500
+ </${popupTag}>
501
+ </div>
505
502
  `;
506
503
  };
507
504
  //#endregion
508
- //#region src/lib/combobox/definition.ts
509
- /**
510
- * @internal
511
- */
512
- var comboboxDefinition = defineVividComponent("combobox", Combobox, comboboxTemplate, [
513
- iconDefinition,
505
+ //#region src/lib/color-picker/definition.ts
506
+ var colorPickerDefinition = defineVividComponent("color-picker", ColorPicker, ColorPickerTemplate, [
514
507
  popupDefinition,
515
- listboxOptionDefinition,
508
+ iconDefinition,
509
+ textFieldDefinition,
510
+ buttonDefinition,
511
+ tooltipDefinition,
516
512
  feedbackMessageDefinition
517
- ], {
518
- styles: [text_field_default, combobox_default],
519
- shadowOptions: { delegatesFocus: true }
520
- });
513
+ ], { styles: color_picker_default });
521
514
  /**
522
- * Registers the combobox elements with the design system.
515
+ * Registers the color-picker element with the design system.
523
516
  *
524
517
  * @param prefix - the prefix to use for the component name
525
518
  */
526
- var registerCombobox = createRegisterFunction(comboboxDefinition);
519
+ var registerColorPicker = createRegisterFunction(colorPickerDefinition);
527
520
  //#endregion
528
- export { registerCombobox as n, Combobox as r, comboboxDefinition as t };
521
+ export { registerColorPicker as n, ColorPicker as r, colorPickerDefinition as t };