@vonage/vivid 5.0.0 → 5.2.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 (673) hide show
  1. package/{shared/definition2.cjs → accordion/definition.cjs} +20 -20
  2. package/{shared/definition2.js → accordion/definition.js} +5 -7
  3. package/accordion/index.cjs +5 -5
  4. package/accordion/index.js +129 -3
  5. package/accordion-item/definition.cjs +145 -0
  6. package/accordion-item/definition.js +139 -0
  7. package/accordion-item/index.cjs +1 -5
  8. package/accordion-item/index.js +2 -3
  9. package/{shared/definition3.cjs → action-group/definition.cjs} +12 -9
  10. package/{shared/definition3.js → action-group/definition.js} +5 -4
  11. package/action-group/index.cjs +6 -5
  12. package/action-group/index.js +49 -3
  13. package/{shared/definition4.cjs → alert/definition.cjs} +33 -31
  14. package/{shared/definition4.js → alert/definition.js} +11 -11
  15. package/alert/index.cjs +30 -5
  16. package/alert/index.js +158 -3
  17. package/{shared/definition5.cjs → audio-player/definition.cjs} +95 -61
  18. package/{shared/definition5.js → audio-player/definition.js} +48 -16
  19. package/audio-player/index.cjs +68 -4
  20. package/audio-player/index.js +333 -2
  21. package/{shared/definition6.cjs → avatar/definition.cjs} +28 -26
  22. package/{shared/definition6.js → avatar/definition.js} +7 -7
  23. package/avatar/index.cjs +18 -5
  24. package/avatar/index.js +93 -3
  25. package/{shared/definition7.cjs → badge/definition.cjs} +18 -16
  26. package/{shared/definition7.js → badge/definition.js} +6 -6
  27. package/badge/index.cjs +4 -5
  28. package/badge/index.js +66 -3
  29. package/{shared/definition8.cjs → banner/definition.cjs} +26 -25
  30. package/{shared/definition8.js → banner/definition.js} +10 -11
  31. package/banner/index.cjs +29 -4
  32. package/banner/index.js +128 -2
  33. package/{shared/definition10.cjs → breadcrumb/definition.cjs} +11 -9
  34. package/{shared/definition10.js → breadcrumb/definition.js} +5 -5
  35. package/breadcrumb/index.cjs +12 -5
  36. package/breadcrumb/index.js +69 -3
  37. package/{shared/definition9.cjs → breadcrumb-item/definition.cjs} +18 -15
  38. package/{shared/definition9.js → breadcrumb-item/definition.js} +7 -7
  39. package/breadcrumb-item/index.cjs +5 -5
  40. package/breadcrumb-item/index.js +33 -3
  41. package/bundled/_has.cjs +1 -0
  42. package/bundled/_has.js +34 -0
  43. package/bundled/affix.cjs +13 -0
  44. package/bundled/affix.js +63 -0
  45. package/bundled/anchored.cjs +4 -0
  46. package/bundled/anchored.js +67 -0
  47. package/bundled/aria.cjs +1 -0
  48. package/bundled/aria.js +7 -0
  49. package/bundled/attribute-binding-behaviour.cjs +1 -0
  50. package/bundled/attribute-binding-behaviour.js +27 -0
  51. package/bundled/base-progress.cjs +1 -0
  52. package/bundled/base-progress.js +57 -0
  53. package/bundled/breadcrumb-item.cjs +1 -0
  54. package/bundled/breadcrumb-item.js +21 -0
  55. package/bundled/button.cjs +1 -0
  56. package/bundled/button.js +106 -0
  57. package/bundled/calendar-event.cjs +1 -0
  58. package/bundled/calendar-event.js +34 -0
  59. package/bundled/calendar-picker.template.cjs +148 -0
  60. package/bundled/calendar-picker.template.js +3371 -0
  61. package/bundled/char-count.cjs +13 -0
  62. package/bundled/char-count.js +54 -0
  63. package/bundled/children.cjs +1 -0
  64. package/bundled/children.js +38 -0
  65. package/bundled/class-names.cjs +1 -0
  66. package/bundled/class-names.js +9 -0
  67. package/bundled/definition.cjs +39 -0
  68. package/bundled/definition.js +122 -0
  69. package/bundled/definition10.cjs +19 -0
  70. package/bundled/definition10.js +73 -0
  71. package/bundled/definition11.cjs +10 -0
  72. package/bundled/definition11.js +44 -0
  73. package/bundled/definition12.cjs +1 -0
  74. package/bundled/definition12.js +20 -0
  75. package/bundled/definition13.cjs +73 -0
  76. package/bundled/definition13.js +359 -0
  77. package/bundled/definition14.cjs +5 -0
  78. package/bundled/definition14.js +29 -0
  79. package/bundled/definition15.cjs +30 -0
  80. package/bundled/definition15.js +80 -0
  81. package/bundled/definition16.cjs +19 -0
  82. package/bundled/definition16.js +103 -0
  83. package/bundled/definition17.cjs +13 -0
  84. package/bundled/definition17.js +137 -0
  85. package/bundled/definition18.cjs +12 -0
  86. package/bundled/definition18.js +94 -0
  87. package/bundled/definition19.cjs +70 -0
  88. package/bundled/definition19.js +674 -0
  89. package/bundled/definition2.cjs +20 -0
  90. package/bundled/definition2.js +180 -0
  91. package/bundled/definition20.cjs +20 -0
  92. package/bundled/definition20.js +106 -0
  93. package/bundled/definition21.cjs +5 -0
  94. package/bundled/definition21.js +19 -0
  95. package/bundled/definition22.cjs +24 -0
  96. package/bundled/definition22.js +151 -0
  97. package/bundled/definition3.cjs +29 -0
  98. package/bundled/definition3.js +195 -0
  99. package/bundled/definition4.cjs +6 -0
  100. package/bundled/definition4.js +42 -0
  101. package/bundled/definition5.cjs +1 -0
  102. package/bundled/definition5.js +345 -0
  103. package/bundled/definition6.cjs +31 -0
  104. package/bundled/definition6.js +268 -0
  105. package/bundled/definition7.cjs +30 -0
  106. package/bundled/definition7.js +288 -0
  107. package/bundled/definition8.cjs +19 -0
  108. package/bundled/definition8.js +145 -0
  109. package/bundled/definition9.cjs +14 -0
  110. package/bundled/definition9.js +1406 -0
  111. package/bundled/delegates-aria.cjs +1 -0
  112. package/bundled/delegates-aria.js +77 -0
  113. package/bundled/divider.cjs +1 -0
  114. package/bundled/divider.js +34 -0
  115. package/bundled/dom.cjs +1 -0
  116. package/bundled/dom.js +6 -0
  117. package/bundled/enums.cjs +1 -0
  118. package/bundled/enums.js +9 -0
  119. package/bundled/form-associated.cjs +1 -0
  120. package/bundled/form-associated.js +320 -0
  121. package/bundled/form-element.cjs +1 -0
  122. package/bundled/form-element.js +56 -0
  123. package/bundled/host-semantics.cjs +1 -0
  124. package/bundled/host-semantics.js +57 -0
  125. package/bundled/index.cjs +1 -0
  126. package/bundled/index.js +6 -0
  127. package/bundled/key-codes.cjs +1 -0
  128. package/bundled/key-codes.js +16 -0
  129. package/bundled/linkable.cjs +15 -0
  130. package/bundled/linkable.js +49 -0
  131. package/bundled/listbox.cjs +1 -0
  132. package/bundled/listbox.js +345 -0
  133. package/bundled/localized.cjs +1 -0
  134. package/bundled/localized.js +460 -0
  135. package/bundled/mixins.cjs +33 -0
  136. package/bundled/mixins.js +226 -0
  137. package/bundled/numbers.cjs +1 -0
  138. package/bundled/numbers.js +14 -0
  139. package/bundled/option.cjs +1 -0
  140. package/bundled/option.js +158 -0
  141. package/bundled/picker-field.template.cjs +67 -0
  142. package/bundled/picker-field.template.js +242 -0
  143. package/bundled/playbackRates.cjs +1 -0
  144. package/bundled/playbackRates.js +11 -0
  145. package/bundled/ref.cjs +1 -0
  146. package/bundled/ref.js +32 -0
  147. package/bundled/repeat.cjs +1 -0
  148. package/bundled/repeat.js +341 -0
  149. package/bundled/scrollIntoView.cjs +1 -0
  150. package/bundled/scrollIntoView.js +33 -0
  151. package/bundled/single-date-picker.cjs +1 -0
  152. package/bundled/single-date-picker.js +39 -0
  153. package/bundled/single-value-picker.cjs +1 -0
  154. package/bundled/single-value-picker.js +87 -0
  155. package/bundled/slider.template.cjs +41 -0
  156. package/bundled/slider.template.js +100 -0
  157. package/bundled/slotted.cjs +1 -0
  158. package/bundled/slotted.js +81 -0
  159. package/bundled/strings.cjs +1 -0
  160. package/bundled/strings.js +7 -0
  161. package/bundled/text-field.cjs +1 -0
  162. package/bundled/text-field.js +4 -0
  163. package/bundled/time-selection-picker.template.cjs +46 -0
  164. package/bundled/time-selection-picker.template.js +575 -0
  165. package/bundled/vivid-element.cjs +1 -0
  166. package/bundled/vivid-element.js +1761 -0
  167. package/bundled/when.cjs +1 -0
  168. package/bundled/when.js +11 -0
  169. package/bundled/with-contextual-help.cjs +1 -0
  170. package/bundled/with-contextual-help.js +32 -0
  171. package/bundled/with-error-text.cjs +1 -0
  172. package/bundled/with-error-text.js +39 -0
  173. package/bundled/with-success-text.cjs +1 -0
  174. package/bundled/with-success-text.js +16 -0
  175. package/button/definition.cjs +14 -0
  176. package/button/definition.js +4 -0
  177. package/button/index.cjs +1 -5
  178. package/button/index.js +2 -3
  179. package/{shared/definition13.cjs → calendar/definition.cjs} +27 -449
  180. package/{shared/definition13.js → calendar/definition.js} +7 -431
  181. package/calendar/index.cjs +53 -5
  182. package/calendar/index.js +431 -3
  183. package/{shared/definition12.cjs → calendar-event/definition.cjs} +12 -9
  184. package/{shared/definition12.js → calendar-event/definition.js} +6 -6
  185. package/calendar-event/index.cjs +9 -5
  186. package/calendar-event/index.js +43 -3
  187. package/card/definition.cjs +186 -0
  188. package/{shared/definition14.js → card/definition.js} +10 -11
  189. package/card/index.cjs +47 -5
  190. package/card/index.js +163 -3
  191. package/{shared/definition15.cjs → checkbox/definition.cjs} +30 -29
  192. package/{shared/definition15.js → checkbox/definition.js} +12 -13
  193. package/checkbox/index.cjs +1 -5
  194. package/checkbox/index.js +2 -3
  195. package/{shared/definition16.cjs → combobox/definition.cjs} +61 -56
  196. package/{shared/definition16.js → combobox/definition.js} +30 -27
  197. package/combobox/index.cjs +69 -5
  198. package/combobox/index.js +519 -3
  199. package/contextual-help/definition.cjs +62 -0
  200. package/contextual-help/definition.js +57 -0
  201. package/contextual-help/index.cjs +1 -0
  202. package/contextual-help/index.js +2 -0
  203. package/custom-elements.json +2504 -335
  204. package/{shared/definition17.cjs → data-grid/definition.cjs} +111 -121
  205. package/{shared/definition17.js → data-grid/definition.js} +11 -23
  206. package/data-grid/index.cjs +81 -5
  207. package/data-grid/index.js +1011 -3
  208. package/{shared/definition18.cjs → date-picker/definition.cjs} +20 -17
  209. package/{shared/definition18.js → date-picker/definition.js} +12 -11
  210. package/date-picker/index.cjs +1 -5
  211. package/date-picker/index.js +115 -3
  212. package/{shared/definition19.cjs → date-range-picker/definition.cjs} +26 -23
  213. package/{shared/definition19.js → date-range-picker/definition.js} +10 -9
  214. package/date-range-picker/index.cjs +1 -5
  215. package/date-range-picker/index.js +335 -3
  216. package/{shared/definition20.cjs → date-time-picker/definition.cjs} +27 -24
  217. package/{shared/definition20.js → date-time-picker/definition.js} +13 -12
  218. package/date-time-picker/index.cjs +8 -5
  219. package/date-time-picker/index.js +216 -3
  220. package/{shared/definition21.cjs → dial-pad/definition.cjs} +89 -40
  221. package/{shared/definition21.js → dial-pad/definition.js} +60 -13
  222. package/dial-pad/index.cjs +57 -5
  223. package/dial-pad/index.js +245 -3
  224. package/{shared/definition22.cjs → dialog/definition.cjs} +48 -47
  225. package/{shared/definition22.js → dialog/definition.js} +10 -11
  226. package/dialog/index.cjs +44 -5
  227. package/dialog/index.js +257 -3
  228. package/{shared/definition23.cjs → divider/definition.cjs} +10 -6
  229. package/{shared/definition23.js → divider/definition.js} +6 -5
  230. package/divider/index.cjs +1 -5
  231. package/divider/index.js +2 -3
  232. package/elevation/definition.cjs +11 -0
  233. package/elevation/definition.js +2 -0
  234. package/elevation/index.cjs +1 -5
  235. package/elevation/index.js +2 -3
  236. package/empty-state/definition.cjs +81 -0
  237. package/empty-state/definition.js +75 -0
  238. package/empty-state/index.cjs +14 -5
  239. package/empty-state/index.js +64 -3
  240. package/fab/definition.cjs +105 -0
  241. package/fab/definition.js +99 -0
  242. package/fab/index.cjs +20 -5
  243. package/fab/index.js +86 -3
  244. package/file-picker/definition.cjs +519 -0
  245. package/file-picker/definition.js +513 -0
  246. package/file-picker/index.cjs +61 -5
  247. package/file-picker/index.js +391 -3
  248. package/{shared/definition27.cjs → header/definition.cjs} +14 -11
  249. package/{shared/definition27.js → header/definition.js} +6 -5
  250. package/header/index.cjs +19 -5
  251. package/header/index.js +57 -3
  252. package/{shared/definition28.cjs → icon/definition.cjs} +25 -149
  253. package/{shared/definition28.js → icon/definition.js} +6 -132
  254. package/icon/index.cjs +1 -5
  255. package/icon/index.js +2 -3
  256. package/index.cjs +268 -264
  257. package/index.js +72 -71
  258. package/{shared/definition29.cjs → layout/definition.cjs} +13 -10
  259. package/{shared/definition29.js → layout/definition.js} +4 -3
  260. package/layout/index.cjs +3 -5
  261. package/layout/index.js +52 -3
  262. package/lib/accordion-item/accordion-item.d.ts +0 -1
  263. package/lib/action-group/action-group.d.ts +0 -1
  264. package/lib/alert/alert.d.ts +0 -2
  265. package/lib/audio-player/audio-player.d.ts +4 -1
  266. package/lib/avatar/avatar.d.ts +0 -1
  267. package/lib/badge/badge.d.ts +0 -1
  268. package/lib/banner/banner.d.ts +0 -3
  269. package/lib/breadcrumb/breadcrumb.d.ts +0 -1
  270. package/lib/breadcrumb-item/breadcrumb-item.d.ts +0 -1
  271. package/lib/button/button.d.ts +1 -3
  272. package/lib/calendar-event/calendar-event.d.ts +0 -1
  273. package/lib/card/card.d.ts +0 -1
  274. package/lib/checkbox/checkbox.d.ts +0 -6
  275. package/lib/combobox/combobox.d.ts +483 -72
  276. package/lib/components.d.ts +1 -0
  277. package/lib/contextual-help/contextual-help.d.ts +5 -0
  278. package/lib/contextual-help/contextual-help.template.d.ts +3 -0
  279. package/lib/contextual-help/definition.d.ts +1 -0
  280. package/lib/data-grid/data-grid-cell.d.ts +0 -2
  281. package/lib/data-grid/data-grid-row.d.ts +0 -1
  282. package/lib/date-picker/date-picker.d.ts +892 -888
  283. package/lib/date-range-picker/date-range-picker.d.ts +590 -588
  284. package/lib/date-time-picker/date-time-picker.d.ts +893 -889
  285. package/lib/dial-pad/dial-pad.d.ts +0 -1
  286. package/lib/dial-pad/dial-pad.template.d.ts +1 -1
  287. package/lib/dial-pad/locale.d.ts +1 -0
  288. package/lib/dialog/dialog.d.ts +0 -2
  289. package/lib/divider/divider.d.ts +0 -1
  290. package/lib/fab/fab.d.ts +1 -1
  291. package/lib/file-picker/accept.d.ts +1 -0
  292. package/lib/file-picker/data-transfer.d.ts +1 -0
  293. package/lib/file-picker/file-picker.d.ts +490 -91
  294. package/lib/header/header.d.ts +0 -1
  295. package/lib/menu/menu.d.ts +1 -2
  296. package/lib/menu-item/menu-item.d.ts +0 -2
  297. package/lib/nav/nav.d.ts +0 -1
  298. package/lib/nav-disclosure/nav-disclosure.d.ts +0 -2
  299. package/lib/nav-item/nav-item.d.ts +0 -2
  300. package/lib/note/note.d.ts +0 -1
  301. package/lib/number-field/number-field.d.ts +505 -96
  302. package/lib/option/option.d.ts +1 -2
  303. package/lib/pagination/pagination.d.ts +0 -1
  304. package/lib/progress/progress.d.ts +0 -1
  305. package/lib/progress-ring/progress-ring.d.ts +0 -1
  306. package/lib/radio/radio.d.ts +0 -3
  307. package/lib/radio-group/radio-group.d.ts +0 -1
  308. package/lib/range-slider/range-slider.d.ts +0 -3
  309. package/lib/rich-text-editor/menubar/menubar.d.ts +0 -1
  310. package/lib/rich-text-editor/rich-text-editor.d.ts +0 -1
  311. package/lib/searchable-select/option-tag.d.ts +0 -1
  312. package/lib/searchable-select/searchable-select.d.ts +505 -96
  313. package/lib/select/select.d.ts +470 -60
  314. package/lib/selectable-box/selectable-box.d.ts +0 -1
  315. package/lib/simple-color-picker/definition.d.ts +4 -0
  316. package/lib/simple-color-picker/locale.d.ts +4 -0
  317. package/lib/simple-color-picker/simple-color-picker.d.ts +1600 -0
  318. package/lib/simple-color-picker/simple-color-picker.template.d.ts +3 -0
  319. package/lib/slider/slider.d.ts +0 -3
  320. package/lib/split-button/split-button.d.ts +2 -3
  321. package/lib/switch/switch.d.ts +0 -2
  322. package/lib/tab/tab.d.ts +0 -3
  323. package/lib/tab-panel/tab-panel.d.ts +0 -1
  324. package/lib/tag/tag.d.ts +0 -3
  325. package/lib/tag-group/tag-group.d.ts +0 -1
  326. package/lib/tag-name-map.d.ts +2 -1
  327. package/lib/text-area/text-area.d.ts +494 -84
  328. package/lib/text-field/text-field.d.ts +505 -96
  329. package/lib/time-picker/time-picker.d.ts +571 -569
  330. package/lib/toggletip/toggletip.d.ts +0 -2
  331. package/lib/tooltip/tooltip.d.ts +0 -1
  332. package/lib/tree-item/tree-item.d.ts +0 -2
  333. package/lib/tree-view/tree-view.d.ts +0 -1
  334. package/lib/video-player/video-player.d.ts +0 -1
  335. package/locales/de-DE.cjs +13 -1
  336. package/locales/de-DE.js +13 -1
  337. package/locales/en-GB.cjs +13 -1
  338. package/locales/en-GB.js +13 -1
  339. package/locales/en-US.cjs +13 -1
  340. package/locales/en-US.js +13 -1
  341. package/locales/ja-JP.cjs +13 -1
  342. package/locales/ja-JP.js +13 -1
  343. package/locales/zh-CN.cjs +13 -1
  344. package/locales/zh-CN.js +13 -1
  345. package/{shared/definition31.cjs → menu/definition.cjs} +46 -42
  346. package/{shared/definition31.js → menu/definition.js} +16 -14
  347. package/menu/index.cjs +1 -5
  348. package/menu/index.js +2 -3
  349. package/menu-item/definition.cjs +14 -0
  350. package/menu-item/definition.js +3 -0
  351. package/menu-item/index.cjs +1 -5
  352. package/menu-item/index.js +2 -3
  353. package/{shared/definition34.cjs → nav/definition.cjs} +7 -4
  354. package/{shared/definition34.js → nav/definition.js} +4 -3
  355. package/nav/index.cjs +5 -5
  356. package/nav/index.js +13 -3
  357. package/nav-disclosure/definition.cjs +122 -0
  358. package/nav-disclosure/definition.js +116 -0
  359. package/nav-disclosure/index.cjs +16 -5
  360. package/nav-disclosure/index.js +96 -3
  361. package/{shared/definition33.cjs → nav-item/definition.cjs} +19 -16
  362. package/{shared/definition33.js → nav-item/definition.js} +9 -8
  363. package/nav-item/index.cjs +2 -5
  364. package/nav-item/index.js +59 -3
  365. package/{shared/definition35.cjs → note/definition.cjs} +15 -13
  366. package/{shared/definition35.js → note/definition.js} +6 -6
  367. package/note/index.cjs +9 -5
  368. package/note/index.js +44 -3
  369. package/{shared/definition36.cjs → number-field/definition.cjs} +66 -60
  370. package/{shared/definition36.js → number-field/definition.js} +31 -27
  371. package/number-field/index.cjs +60 -5
  372. package/number-field/index.js +370 -3
  373. package/option/definition.cjs +84 -0
  374. package/option/definition.js +78 -0
  375. package/option/index.cjs +1 -5
  376. package/option/index.js +2 -3
  377. package/package.json +15 -4
  378. package/{shared/definition38.cjs → pagination/definition.cjs} +31 -33
  379. package/{shared/definition38.js → pagination/definition.js} +7 -11
  380. package/pagination/index.cjs +43 -5
  381. package/pagination/index.js +194 -3
  382. package/popup/definition.cjs +13 -0
  383. package/popup/definition.js +4 -0
  384. package/popup/index.cjs +1 -5
  385. package/popup/index.js +2 -3
  386. package/{shared/definition40.cjs → progress/definition.cjs} +17 -15
  387. package/{shared/definition40.js → progress/definition.js} +6 -6
  388. package/progress/index.cjs +17 -5
  389. package/progress/index.js +69 -3
  390. package/{shared/definition39.cjs → progress-ring/definition.cjs} +17 -15
  391. package/{shared/definition39.js → progress-ring/definition.js} +7 -7
  392. package/progress-ring/index.cjs +1 -5
  393. package/progress-ring/index.js +2 -3
  394. package/{shared/definition42.cjs → radio/definition.cjs} +20 -19
  395. package/{shared/definition42.js → radio/definition.js} +8 -9
  396. package/radio/index.cjs +1 -5
  397. package/radio/index.js +2 -3
  398. package/{shared/definition41.cjs → radio-group/definition.cjs} +31 -30
  399. package/{shared/definition41.js → radio-group/definition.js} +8 -9
  400. package/radio-group/index.cjs +23 -5
  401. package/radio-group/index.js +255 -3
  402. package/{shared/definition43.cjs → range-slider/definition.cjs} +62 -61
  403. package/{shared/definition43.js → range-slider/definition.js} +13 -14
  404. package/range-slider/index.cjs +68 -5
  405. package/range-slider/index.js +456 -3
  406. package/rich-text-editor/definition.cjs +1206 -0
  407. package/rich-text-editor/definition.js +1200 -0
  408. package/rich-text-editor/index.cjs +133 -4
  409. package/rich-text-editor/index.js +10386 -2
  410. package/{shared/definition45.cjs → searchable-select/definition.cjs} +142 -130
  411. package/{shared/definition45.js → searchable-select/definition.js} +51 -41
  412. package/searchable-select/index.cjs +167 -5
  413. package/searchable-select/index.js +1034 -3
  414. package/{shared/definition46.cjs → select/definition.cjs} +92 -87
  415. package/{shared/definition46.js → select/definition.js} +32 -29
  416. package/select/index.cjs +1 -5
  417. package/select/index.js +2 -3
  418. package/{shared/definition47.cjs → selectable-box/definition.cjs} +26 -24
  419. package/{shared/definition47.js → selectable-box/definition.js} +9 -9
  420. package/selectable-box/index.cjs +28 -5
  421. package/selectable-box/index.js +136 -3
  422. package/shared/aria/aria-mixin.d.ts +0 -1
  423. package/shared/aria/delegates-aria.d.ts +0 -1
  424. package/shared/aria/host-semantics.d.ts +0 -1
  425. package/shared/color-picker/index.d.ts +2 -0
  426. package/shared/color-picker/types.d.ts +4 -0
  427. package/shared/color-picker/utils.d.ts +3 -0
  428. package/shared/feedback/feedback-message.d.ts +0 -1
  429. package/shared/feedback/mixins.d.ts +0 -2
  430. package/shared/foundation/button/button.d.ts +0 -2
  431. package/shared/foundation/form-associated/form-associated.d.ts +0 -2
  432. package/shared/foundation/vivid-element/vivid-element.d.ts +0 -1
  433. package/shared/localization/Locale.d.ts +2 -0
  434. package/shared/patterns/affix.d.ts +0 -2
  435. package/shared/patterns/anchored.d.ts +0 -2
  436. package/shared/patterns/char-count/char-count.d.ts +0 -1
  437. package/shared/patterns/form-elements/form-element.d.ts +0 -2
  438. package/shared/patterns/form-elements/index.d.ts +1 -0
  439. package/shared/patterns/form-elements/with-contextual-help.d.ts +1239 -0
  440. package/shared/patterns/form-elements/with-error-text.d.ts +0 -3
  441. package/shared/patterns/form-elements/with-success-text.d.ts +0 -1
  442. package/shared/patterns/linkable.d.ts +0 -1
  443. package/shared/patterns/localized.d.ts +0 -1
  444. package/shared/patterns/trapped-focus.d.ts +0 -1
  445. package/shared/picker-field/mixins/calendar-picker.d.ts +452 -451
  446. package/shared/picker-field/mixins/calendar-picker.template.d.ts +452 -451
  447. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +0 -1
  448. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +594 -592
  449. package/shared/picker-field/mixins/single-date-picker.d.ts +734 -731
  450. package/shared/picker-field/mixins/single-value-picker.d.ts +449 -448
  451. package/shared/picker-field/mixins/time-selection-picker.d.ts +571 -569
  452. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +571 -569
  453. package/shared/picker-field/picker-field.d.ts +483 -72
  454. package/{shared/definition48.cjs → side-drawer/definition.cjs} +16 -14
  455. package/{shared/definition48.js → side-drawer/definition.js} +5 -5
  456. package/side-drawer/index.cjs +17 -3
  457. package/side-drawer/index.js +100 -2
  458. package/simple-color-picker/definition.cjs +398 -0
  459. package/simple-color-picker/definition.js +392 -0
  460. package/simple-color-picker/index.cjs +31 -0
  461. package/simple-color-picker/index.js +250 -0
  462. package/{shared/definition49.cjs → slider/definition.cjs} +46 -53
  463. package/{shared/definition49.js → slider/definition.js} +11 -20
  464. package/slider/index.cjs +1 -5
  465. package/slider/index.js +2 -3
  466. package/split-button/definition.cjs +176 -0
  467. package/split-button/definition.js +170 -0
  468. package/split-button/index.cjs +26 -5
  469. package/split-button/index.js +149 -3
  470. package/styles/core/all.css +1 -1
  471. package/styles/core/theme.css +1 -1
  472. package/styles/core/typography.css +1 -1
  473. package/styles/tokens/theme-dark.css +4 -4
  474. package/styles/tokens/theme-light.css +4 -4
  475. package/styles/tokens/vivid-2-compat.css +1 -1
  476. package/{shared/definition51.cjs → switch/definition.cjs} +20 -19
  477. package/{shared/definition51.js → switch/definition.js} +8 -9
  478. package/switch/index.cjs +16 -5
  479. package/switch/index.js +102 -3
  480. package/tab/definition.cjs +127 -0
  481. package/tab/definition.js +121 -0
  482. package/tab/index.cjs +1 -5
  483. package/tab/index.js +2 -3
  484. package/{shared/definition52.cjs → tab-panel/definition.cjs} +7 -4
  485. package/{shared/definition52.js → tab-panel/definition.js} +4 -3
  486. package/tab-panel/index.cjs +1 -5
  487. package/tab-panel/index.js +2 -3
  488. package/{shared/definition54.cjs → tabs/definition.cjs} +46 -39
  489. package/{shared/definition54.js → tabs/definition.js} +18 -13
  490. package/tabs/index.cjs +31 -5
  491. package/tabs/index.js +321 -3
  492. package/tag/definition.cjs +156 -0
  493. package/tag/definition.js +150 -0
  494. package/tag/index.cjs +19 -5
  495. package/tag/index.js +118 -3
  496. package/{shared/definition55.cjs → tag-group/definition.cjs} +9 -6
  497. package/{shared/definition55.js → tag-group/definition.js} +5 -4
  498. package/tag-group/index.cjs +8 -5
  499. package/tag-group/index.js +26 -3
  500. package/{shared/definition57.cjs → text-area/definition.cjs} +62 -42
  501. package/{shared/definition57.js → text-area/definition.js} +38 -20
  502. package/text-area/index.cjs +41 -5
  503. package/text-area/index.js +293 -3
  504. package/{shared/definition58.cjs → text-field/definition.cjs} +70 -52
  505. package/{shared/definition58.js → text-field/definition.js} +40 -24
  506. package/text-field/index.cjs +1 -5
  507. package/text-field/index.js +2 -3
  508. package/time-picker/definition.cjs +43 -0
  509. package/{shared/definition59.js → time-picker/definition.js} +9 -8
  510. package/time-picker/index.cjs +1 -5
  511. package/time-picker/index.js +29 -3
  512. package/{shared/definition60.cjs → toggletip/definition.cjs} +20 -18
  513. package/{shared/definition60.js → toggletip/definition.js} +8 -8
  514. package/toggletip/index.cjs +1 -5
  515. package/toggletip/index.js +2 -3
  516. package/{shared/definition61.cjs → tooltip/definition.cjs} +16 -13
  517. package/{shared/definition61.js → tooltip/definition.js} +7 -6
  518. package/tooltip/index.cjs +1 -5
  519. package/tooltip/index.js +2 -3
  520. package/tree-item/definition.cjs +13 -0
  521. package/tree-item/definition.js +3 -0
  522. package/tree-item/index.cjs +1 -5
  523. package/tree-item/index.js +2 -3
  524. package/{shared/definition63.cjs → tree-view/definition.cjs} +41 -42
  525. package/{shared/definition63.js → tree-view/definition.js} +6 -9
  526. package/tree-view/index.cjs +13 -5
  527. package/tree-view/index.js +171 -3
  528. package/{shared → unbundled}/affix.cjs +10 -11
  529. package/{shared → unbundled}/affix.js +2 -3
  530. package/{shared → unbundled}/anchored.cjs +7 -8
  531. package/{shared → unbundled}/anchored.js +1 -2
  532. package/{shared → unbundled}/attribute-binding-behaviour.cjs +3 -3
  533. package/{shared → unbundled}/attribute-binding-behaviour.js +1 -1
  534. package/{shared → unbundled}/base-progress.cjs +6 -5
  535. package/{shared → unbundled}/base-progress.js +2 -1
  536. package/{shared → unbundled}/breadcrumb-item.cjs +3 -2
  537. package/{shared → unbundled}/breadcrumb-item.js +2 -1
  538. package/{shared → unbundled}/button.cjs +10 -9
  539. package/{shared → unbundled}/button.js +2 -1
  540. package/{shared → unbundled}/calendar-event.cjs +8 -7
  541. package/{shared → unbundled}/calendar-event.js +2 -1
  542. package/unbundled/calendar-picker.template.cjs +917 -0
  543. package/unbundled/calendar-picker.template.js +906 -0
  544. package/{shared → unbundled}/char-count.cjs +6 -7
  545. package/{shared → unbundled}/char-count.js +2 -3
  546. package/unbundled/definition.cjs +225 -0
  547. package/unbundled/definition.js +220 -0
  548. package/{shared/definition30.cjs → unbundled/definition2.cjs} +41 -42
  549. package/{shared/definition30.js → unbundled/definition2.js} +6 -7
  550. package/unbundled/definition3.cjs +207 -0
  551. package/{shared/definition62.js → unbundled/definition3.js} +5 -9
  552. package/unbundled/definition4.cjs +298 -0
  553. package/unbundled/definition4.js +293 -0
  554. package/{shared/definition65.cjs → unbundled/definition5.cjs} +7 -6
  555. package/{shared/definition65.js → unbundled/definition5.js} +3 -2
  556. package/{shared → unbundled}/delegates-aria.cjs +4 -3
  557. package/{shared → unbundled}/delegates-aria.js +2 -1
  558. package/{shared → unbundled}/divider.cjs +5 -4
  559. package/{shared → unbundled}/divider.js +3 -2
  560. package/{shared → unbundled}/form-associated.cjs +13 -13
  561. package/{shared → unbundled}/form-associated.js +2 -2
  562. package/{shared → unbundled}/form-element.cjs +3 -3
  563. package/{shared → unbundled}/form-element.js +1 -1
  564. package/{shared → unbundled}/host-semantics.cjs +2 -1
  565. package/{shared → unbundled}/host-semantics.js +2 -1
  566. package/unbundled/key-codes.cjs +10 -0
  567. package/unbundled/key-codes.js +7 -0
  568. package/{shared → unbundled}/linkable.cjs +11 -12
  569. package/{shared → unbundled}/linkable.js +1 -2
  570. package/{shared → unbundled}/listbox.cjs +21 -37
  571. package/{shared → unbundled}/listbox.js +3 -19
  572. package/{shared → unbundled}/localized.cjs +2 -2
  573. package/{shared → unbundled}/localized.js +1 -1
  574. package/{shared → unbundled}/mixins.cjs +27 -83
  575. package/{shared → unbundled}/mixins.js +6 -62
  576. package/{shared → unbundled}/option.cjs +29 -17
  577. package/{shared → unbundled}/option.js +14 -2
  578. package/{shared → unbundled}/picker-field.template.cjs +32 -24
  579. package/{shared → unbundled}/picker-field.template.js +18 -10
  580. package/{shared → unbundled}/slider.template.cjs +15 -19
  581. package/{shared → unbundled}/slider.template.js +3 -7
  582. package/unbundled/text-field.cjs +5 -0
  583. package/unbundled/text-field.js +3 -0
  584. package/{shared → unbundled}/time-selection-picker.template.cjs +28 -30
  585. package/{shared → unbundled}/time-selection-picker.template.js +4 -6
  586. package/unbundled/vivid-element.cjs +283 -0
  587. package/unbundled/vivid-element.js +274 -0
  588. package/unbundled/with-contextual-help.cjs +40 -0
  589. package/unbundled/with-contextual-help.js +38 -0
  590. package/{shared → unbundled}/with-error-text.cjs +2 -2
  591. package/{shared → unbundled}/with-error-text.js +1 -1
  592. package/{shared → unbundled}/with-success-text.cjs +2 -2
  593. package/{shared → unbundled}/with-success-text.js +1 -1
  594. package/video-player/definition.cjs +536 -0
  595. package/video-player/definition.js +530 -0
  596. package/video-player/index.cjs +536 -3
  597. package/video-player/index.js +35912 -2
  598. package/{shared/definition66.cjs → visually-hidden/definition.cjs} +6 -3
  599. package/{shared/definition66.js → visually-hidden/definition.js} +3 -2
  600. package/visually-hidden/index.cjs +1 -5
  601. package/visually-hidden/index.js +2 -3
  602. package/vivid.api.json +722 -799
  603. package/shared/_has.cjs +0 -58
  604. package/shared/_has.js +0 -54
  605. package/shared/aria.cjs +0 -11
  606. package/shared/aria.js +0 -9
  607. package/shared/calendar-picker.template.cjs +0 -6377
  608. package/shared/calendar-picker.template.js +0 -6366
  609. package/shared/children.cjs +0 -61
  610. package/shared/children.js +0 -59
  611. package/shared/class-names.cjs +0 -17
  612. package/shared/class-names.js +0 -15
  613. package/shared/definition.cjs +0 -145
  614. package/shared/definition.js +0 -141
  615. package/shared/definition11.cjs +0 -220
  616. package/shared/definition11.js +0 -215
  617. package/shared/definition14.cjs +0 -185
  618. package/shared/definition24.cjs +0 -80
  619. package/shared/definition24.js +0 -76
  620. package/shared/definition25.cjs +0 -90
  621. package/shared/definition25.js +0 -86
  622. package/shared/definition26.cjs +0 -2549
  623. package/shared/definition26.js +0 -2545
  624. package/shared/definition32.cjs +0 -120
  625. package/shared/definition32.js +0 -116
  626. package/shared/definition37.cjs +0 -71
  627. package/shared/definition37.js +0 -68
  628. package/shared/definition44.cjs +0 -14666
  629. package/shared/definition44.js +0 -14662
  630. package/shared/definition50.cjs +0 -148
  631. package/shared/definition50.js +0 -144
  632. package/shared/definition53.cjs +0 -124
  633. package/shared/definition53.js +0 -120
  634. package/shared/definition56.cjs +0 -154
  635. package/shared/definition56.js +0 -150
  636. package/shared/definition59.cjs +0 -39
  637. package/shared/definition62.cjs +0 -211
  638. package/shared/definition64.cjs +0 -69579
  639. package/shared/definition64.js +0 -69575
  640. package/shared/definition67.cjs +0 -2227
  641. package/shared/definition67.js +0 -2222
  642. package/shared/dom.cjs +0 -10
  643. package/shared/dom.js +0 -8
  644. package/shared/key-codes.cjs +0 -32
  645. package/shared/key-codes.js +0 -18
  646. package/shared/numbers.cjs +0 -38
  647. package/shared/numbers.js +0 -34
  648. package/shared/ref.cjs +0 -43
  649. package/shared/ref.js +0 -41
  650. package/shared/repeat.cjs +0 -767
  651. package/shared/repeat.js +0 -764
  652. package/shared/slotted.cjs +0 -123
  653. package/shared/slotted.js +0 -119
  654. package/shared/strings.cjs +0 -11
  655. package/shared/strings.js +0 -9
  656. package/shared/text-field.cjs +0 -5
  657. package/shared/text-field.js +0 -3
  658. package/shared/vivid-element.cjs +0 -2822
  659. package/shared/vivid-element.js +0 -2799
  660. package/shared/when.cjs +0 -31
  661. package/shared/when.js +0 -29
  662. /package/{shared → unbundled}/enums.cjs +0 -0
  663. /package/{shared → unbundled}/enums.js +0 -0
  664. /package/{shared → unbundled}/index.cjs +0 -0
  665. /package/{shared → unbundled}/index.js +0 -0
  666. /package/{shared → unbundled}/playbackRates.cjs +0 -0
  667. /package/{shared → unbundled}/playbackRates.js +0 -0
  668. /package/{shared → unbundled}/scrollIntoView.cjs +0 -0
  669. /package/{shared → unbundled}/scrollIntoView.js +0 -0
  670. /package/{shared → unbundled}/single-date-picker.cjs +0 -0
  671. /package/{shared → unbundled}/single-date-picker.js +0 -0
  672. /package/{shared → unbundled}/single-value-picker.cjs +0 -0
  673. /package/{shared → unbundled}/single-value-picker.js +0 -0
@@ -0,0 +1,1206 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const vividElement = require('../unbundled/vivid-element.cjs');
6
+ const button_definition = require('../unbundled/definition.cjs');
7
+ const divider_definition = require('../divider/definition.cjs');
8
+ const option_definition = require('../option/definition.cjs');
9
+ const tooltip_definition = require('../tooltip/definition.cjs');
10
+ const menu_definition = require('../menu/definition.cjs');
11
+ const menuItem_definition = require('../unbundled/definition2.cjs');
12
+ const select_definition = require('../select/definition.cjs');
13
+ const fastElement = require('@microsoft/fast-element');
14
+ const fastWebUtilities = require('@microsoft/fast-web-utilities');
15
+ const divider = require('../unbundled/divider.cjs');
16
+ const option = require('../unbundled/option.cjs');
17
+ const localized = require('../unbundled/localized.cjs');
18
+ const prosemirrorState = require('prosemirror-state');
19
+ const prosemirrorModel = require('prosemirror-model');
20
+ const prosemirrorView = require('prosemirror-view');
21
+ const prosemirrorKeymap = require('prosemirror-keymap');
22
+ const prosemirrorCommands = require('prosemirror-commands');
23
+ const prosemirrorSchemaBasic = require('prosemirror-schema-basic');
24
+ const icon_definition = require('../icon/definition.cjs');
25
+
26
+ const styles$2 = "@charset \"UTF-8\";.ProseMirror li{position:relative}.ProseMirror-hideselection *::selection{background:transparent}.ProseMirror-hideselection *::-moz-selection{background:transparent}.ProseMirror-hideselection{caret-color:transparent}.ProseMirror [draggable][contenteditable=false]{user-select:text}.ProseMirror-selectednode{outline:2px solid #8cf}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:\"\";position:absolute;inset:-2px -2px -2px -32px;border:2px solid #8cf;pointer-events:none}img.ProseMirror-separator{display:inline!important;border:none!important;margin:0!important}.ProseMirror-textblock-dropdown{min-width:3em}.ProseMirror-menu{margin:0 -4px;line-height:1}.ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProseMirror-menuitem{margin-right:3px;display:inline-block}.ProseMirror-menuseparator{border-right:1px solid #ddd;margin-right:3px}.ProseMirror-menu-dropdown,.ProseMirror-menu-dropdown-menu{font-size:90%;white-space:nowrap}.ProseMirror-menu-dropdown{vertical-align:1px;cursor:pointer;position:relative;padding-right:15px}.ProseMirror-menu-dropdown-wrap{padding:1px 0 1px 4px;display:inline-block;position:relative}.ProseMirror-menu-dropdown:after{content:\"\";border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 2px)}.ProseMirror-menu-dropdown-menu,.ProseMirror-menu-submenu{position:absolute;background:#fff;color:#666;border:1px solid #aaa;padding:2px}.ProseMirror-menu-dropdown-menu{z-index:15;min-width:6em}.ProseMirror-menu-dropdown-item{cursor:pointer;padding:2px 8px 2px 4px}@media (hover: hover){.ProseMirror-menu-dropdown-item:hover{background:#f2f2f2}}.ProseMirror-menu-submenu-wrap{position:relative;margin-right:-4px}.ProseMirror-menu-submenu-label:after{content:\"\";border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 4px)}.ProseMirror-menu-submenu{display:none;min-width:4em;left:100%;top:-3px}.ProseMirror-menu-active{background:#eee;border-radius:4px}.ProseMirror-menu-disabled{opacity:.3}.ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu,.ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu{display:block}.ProseMirror-menubar{border-top-left-radius:inherit;border-top-right-radius:inherit;position:relative;min-height:1em;color:#666;padding:1px 6px;top:0;left:0;right:0;border-bottom:1px solid silver;background:#fff;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible}.ProseMirror-icon{display:inline-block;line-height:.8;vertical-align:-2px;padding:2px 8px;cursor:pointer}.ProseMirror-menu-disabled.ProseMirror-icon{cursor:default}.ProseMirror-icon svg{fill:currentColor;height:1em}.ProseMirror-icon span{vertical-align:text-top}.ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProseMirror-gapcursor:after{content:\"\";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid black;animation:ProseMirror-cursor-blink 1.1s steps(2,start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.ProseMirror-focused .ProseMirror-gapcursor{display:block}.ProseMirror-example-setup-style hr{padding:2px 10px;border:none;margin:1em 0}.ProseMirror-example-setup-style hr:after{content:\"\";display:block;height:1px;background-color:silver;line-height:2px}.ProseMirror ul,.ProseMirror ol{padding-left:30px}.ProseMirror blockquote{padding-left:1em;border-left:3px solid #eee;margin-left:0;margin-right:0}.ProseMirror-example-setup-style img{cursor:default}.ProseMirror-prompt{background:#fff;padding:5px 10px 5px 15px;border:1px solid silver;position:fixed;border-radius:3px;z-index:11;box-shadow:-.5px 2px 5px #0003}.ProseMirror-prompt h5{margin:0;font-weight:400;font-size:100%;color:#444}.ProseMirror-prompt input[type=text],.ProseMirror-prompt textarea{background:#eee;border:none;outline:none}.ProseMirror-prompt input[type=text]{padding:0 4px}.ProseMirror-prompt-close{position:absolute;left:2px;top:1px;color:#666;border:none;background:transparent;padding:0}.ProseMirror-prompt-close:after{content:\"✕\";font-size:12px}.ProseMirror-invalid{background:#ffc;border:1px solid #cc7;border-radius:4px;padding:5px 10px;position:absolute;min-width:10em}.ProseMirror-prompt-buttons{margin-top:5px;display:none}.placeholder:before{position:absolute;color:var(--vvd-color-neutral-600);content:attr(data-placeholder);font:var(--vvd-typography-base);pointer-events:none}.editor{box-sizing:border-box;background:var(--vvd-color-canvas);background-clip:padding-box;color:var(--vvd-color-canvas-text)}.ProseMirror{position:relative;box-sizing:border-box;padding:10px 16px;block-size:120px;font:var(--vvd-typography-base);font-feature-settings:\"liga\" 0;font-variant-ligatures:none;line-height:1.2;outline:none;overflow-y:auto;white-space:break-spaces;word-wrap:break-word}.ProseMirror pre{white-space:pre-wrap}.ProseMirror p{margin-bottom:1em}.ProseMirror p:first-child,.ProseMirror h1:first-child,.ProseMirror h2:first-child,.ProseMirror h3:first-child,.ProseMirror h4:first-child,.ProseMirror h5:first-child,.ProseMirror h6:first-child{margin-top:10px}h2{font:var(--vvd-typography-heading-4)}h3{font:var(--vvd-typography-base-extended)}p{font:var(--vvd-typography-base)}:host{display:block}#editor{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}#editor{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}#editor ::-webkit-scrollbar{width:4px}#editor ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}#editor ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}#editor{position:relative;display:flex;flex-direction:column;block-size:100%;overflow-y:auto}[contenteditable=true]{overflow:unset;block-size:unset}#attachments-wrapper{order:1}#attachments-wrapper .divider{padding:0 12px}.hidden{display:none}.drag-overlay{position:absolute;z-index:10;display:none;align-items:center;justify-content:center;border:1px dashed var(--vvd-color-cta-400);border-radius:8px;background:var(--vvd-color-cta-100);font:var(--vvd-typography-base);inset:0;opacity:.8;pointer-events:none;transition:opacity .2s}.drag-over .drag-overlay{display:flex}";
27
+
28
+ function notifyMenubarChange(menubar, eventName, payload) {
29
+ menubar.$emit(eventName, payload, { bubbles: false, composed: false });
30
+ return true;
31
+ }
32
+ const TEXT_DECORATION_ITEMS = [
33
+ {
34
+ text: "Bold",
35
+ icon: "bold-line",
36
+ value: "bold"
37
+ },
38
+ {
39
+ text: "Italic",
40
+ icon: "italic-line",
41
+ value: "italics"
42
+ },
43
+ {
44
+ text: "Underline",
45
+ icon: "underline-line",
46
+ value: "underline"
47
+ },
48
+ {
49
+ text: "Strikethrough",
50
+ icon: "strikethrough-line",
51
+ value: "strikethrough"
52
+ },
53
+ {
54
+ text: "Monospace",
55
+ icon: "monospace-line",
56
+ value: "monospace"
57
+ }
58
+ ];
59
+ const TEXT_SIZES = [
60
+ {
61
+ text: "Extra Large",
62
+ value: "extra-large"
63
+ },
64
+ {
65
+ text: "Large",
66
+ value: "large"
67
+ },
68
+ {
69
+ text: "Normal",
70
+ value: "normal"
71
+ },
72
+ {
73
+ text: "Small",
74
+ value: "small"
75
+ }
76
+ ];
77
+ const textBlockEventHandler = (event) => {
78
+ const customEvent = event;
79
+ if (!customEvent || !customEvent.detail || customEvent.detail.textBlockType === void 0) {
80
+ return;
81
+ }
82
+ const menu = customEvent.target;
83
+ menu.shadowRoot.querySelector("#text-block").setAttribute("current-value", customEvent.detail.textBlockType);
84
+ };
85
+ const textDecorationEventHandler = (event) => {
86
+ const customEvent = event;
87
+ if (!customEvent || !customEvent.detail) {
88
+ return;
89
+ }
90
+ const menu = customEvent.target;
91
+ const selectionButtons = menu.shadowRoot.querySelectorAll(
92
+ "#text-decoration .selection-button"
93
+ );
94
+ selectionButtons.forEach((button) => button.removeAttribute("active"));
95
+ customEvent.detail.textDecoration !== void 0 && TEXT_DECORATION_ITEMS.forEach((menuItemConfig, index) => {
96
+ if (customEvent.detail.textDecoration.indexOf(menuItemConfig.value) >= 0) {
97
+ selectionButtons[index].toggleAttribute("active", true);
98
+ }
99
+ });
100
+ };
101
+ const textSizeEventHandler = (event) => {
102
+ const customEvent = event;
103
+ if (!customEvent || !customEvent.detail) {
104
+ return;
105
+ }
106
+ const menu = customEvent.target;
107
+ const selectionTextSize = customEvent.detail.textSize ?? "normal";
108
+ const textSizeElements = menu.shadowRoot.querySelectorAll(
109
+ ".menubar-selector-menuitem"
110
+ );
111
+ textSizeElements.forEach((textSizeElement) => {
112
+ textSizeElement.toggleAttribute(
113
+ "checked",
114
+ textSizeElement.getAttribute("value") === selectionTextSize
115
+ );
116
+ });
117
+ };
118
+ const MENU_BAR_ITEMS = {
119
+ textBlock: {
120
+ registerStateProperty: function(menubar) {
121
+ menubar.addEventListener("text-styles-changed", textBlockEventHandler);
122
+ },
123
+ render: function(context) {
124
+ const selectTag = context.tagFor(select_definition.VwcSelectElement);
125
+ const optionTag = context.tagFor(option.ListboxOption);
126
+ const tooltipTag = context.tagFor(tooltip_definition.VwcTooltipElement);
127
+ return fastElement.html`
128
+ <${tooltipTag} text="${(_, { parent }) => parent.locale.richTextEditor.textBlockType}" placement="top">
129
+ <${selectTag}
130
+ scale="condensed"
131
+ shape="rounded"
132
+ appearance="ghost"
133
+ slot="anchor"
134
+ trigger="auto"
135
+ id="text-block"
136
+ aria-label="Text Block"
137
+ placement="bottom-end"
138
+ value="${(_, { parent }) => parent.textBlockType}"
139
+ @change="${(_, { parent, event }) => notifyMenubarChange(
140
+ parent,
141
+ "text-block-selected",
142
+ event.target.value
143
+ )}"
144
+ >
145
+ <${optionTag}
146
+ text="Title"
147
+ value="title"
148
+ internal-part
149
+ class="title"
150
+ connotation="cta"
151
+ ></${optionTag}>
152
+ <${optionTag}
153
+ text="Subtitle"
154
+ value="subtitle"
155
+ internal-part
156
+ class="subtitle"
157
+ connotation="cta"
158
+ ></${optionTag}>
159
+ <${optionTag}
160
+ text="Body"
161
+ value="body"
162
+ internal-part
163
+ class="body"
164
+ connotation="cta"
165
+ ></${optionTag}>
166
+ </${selectTag}>
167
+ </${tooltipTag}>
168
+ `;
169
+ }
170
+ },
171
+ textDecoration: {
172
+ registerStateProperty: function(menubar) {
173
+ menubar.addEventListener(
174
+ "text-styles-changed",
175
+ textDecorationEventHandler
176
+ );
177
+ },
178
+ render: function(context) {
179
+ const buttonTag = context.tagFor(button_definition.Button);
180
+ const tooltipTag = context.tagFor(tooltip_definition.VwcTooltipElement);
181
+ return fastElement.html`
182
+ <span id="text-decoration">
183
+ ${fastElement.repeat(
184
+ (_) => TEXT_DECORATION_ITEMS,
185
+ fastElement.html`
186
+ <${tooltipTag} text="${(x, { parentContext: { parent } }) => parent.locale.richTextEditor[x.value]}" placement="top">
187
+ <${buttonTag}
188
+ class="selection-button"
189
+ slot="anchor"
190
+ aria-label="${(x, { parentContext: { parent } }) => parent.locale.richTextEditor[x.value]}"
191
+ size="super-condensed"
192
+ appearance="ghost-light"
193
+ shape="rounded"
194
+ icon="${(x) => x.icon}"
195
+ @click="${(x, c) => notifyMenubarChange(
196
+ c.parentContext.parent,
197
+ "text-decoration-selected",
198
+ x.value
199
+ )}"')}"
200
+ ></${buttonTag}>
201
+ </${tooltipTag}>
202
+ `
203
+ )}
204
+ </span>
205
+ `;
206
+ }
207
+ },
208
+ textSize: {
209
+ registerStateProperty: function(menubar) {
210
+ menubar.addEventListener("text-styles-changed", textSizeEventHandler);
211
+ },
212
+ render: function(context) {
213
+ const menuTag = context.tagFor(menu_definition.VwcMenuElement);
214
+ const buttonTag = context.tagFor(button_definition.Button);
215
+ const tooltipTag = context.tagFor(tooltip_definition.VwcTooltipElement);
216
+ const menuItemTag = context.tagFor(menuItem_definition.MenuItem);
217
+ return fastElement.html`
218
+ <${menuTag}
219
+ auto-dismiss
220
+ trigger="auto"
221
+ id="text-size"
222
+ aria-label="Text Size"
223
+ placement="bottom-end"
224
+ >
225
+ <${tooltipTag} slot="anchor" text="${(_, { parent }) => parent.locale.richTextEditor.textSize}" placement="top">
226
+ <${buttonTag}
227
+ slot="anchor"
228
+ aria-label="Open text size menu"
229
+ size="super-condensed"
230
+ appearance="ghost-light"
231
+ shape="pill"
232
+ icon="text-size-line"
233
+ ></${buttonTag}>
234
+ </${tooltipTag}>
235
+ ${fastElement.repeat(
236
+ (_) => TEXT_SIZES,
237
+ fastElement.html`
238
+ <${menuItemTag}
239
+ check-appearance="tick-only"
240
+ control-type="checkbox"
241
+ text="${(x) => x.text}"
242
+ value="${(x) => x.value}"
243
+ internal-part
244
+ class="menubar-selector-menuitem"
245
+ connotation="cta"
246
+ @click="${(x, c) => notifyMenubarChange(
247
+ c.parentContext.parent,
248
+ "text-size-selected",
249
+ x.value
250
+ )}"
251
+ ></${menuItemTag}>
252
+ `
253
+ )}
254
+ </${menuTag}>
255
+ `;
256
+ }
257
+ },
258
+ divider: {
259
+ render: function(context) {
260
+ const dividerTag = context.tagFor(divider.Divider);
261
+ return fastElement.html`
262
+ <${dividerTag} class="divider" orientation="vertical"></${dividerTag}>
263
+ `;
264
+ }
265
+ }
266
+ };
267
+
268
+ var __defProp$2 = Object.defineProperty;
269
+ var __decorateClass$2 = (decorators, target, key, kind) => {
270
+ var result = void 0 ;
271
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
272
+ if (decorator = decorators[i])
273
+ result = (decorator(target, key, result) ) || result;
274
+ if (result) __defProp$2(target, key, result);
275
+ return result;
276
+ };
277
+ class Menubar extends localized.Localized(vividElement.VividElement) {
278
+ get #textEditorElement() {
279
+ return this.parentElement;
280
+ }
281
+ #updateTextStyleState = () => {
282
+ this.dispatchEvent(
283
+ new CustomEvent("text-styles-changed", {
284
+ detail: this.#textEditorElement?.selectionStyles
285
+ })
286
+ );
287
+ };
288
+ connectedCallback() {
289
+ super.connectedCallback();
290
+ this.#textEditorElement.addEventListener(
291
+ "selection-changed",
292
+ this.#updateTextStyleState
293
+ );
294
+ this.#textEditorElement.addEventListener(
295
+ "change",
296
+ this.#updateTextStyleState
297
+ );
298
+ }
299
+ disconnectedCallback() {
300
+ super.disconnectedCallback();
301
+ this.#textEditorElement?.removeEventListener(
302
+ "selection-changed",
303
+ this.#updateTextStyleState
304
+ );
305
+ this.#textEditorElement?.removeEventListener(
306
+ "change",
307
+ this.#updateTextStyleState
308
+ );
309
+ }
310
+ }
311
+ __decorateClass$2([
312
+ fastElement.attr({ attribute: "menu-items" })
313
+ ], Menubar.prototype, "menuItems");
314
+
315
+ const getClasses$2 = (menubar) => fastWebUtilities.classNames("control", [
316
+ "hide-menubar",
317
+ getValidMenuItems(menubar).length === 0
318
+ ]);
319
+ const validItems = ["textBlock", "textDecoration", "textSize", "divider"];
320
+ function getPropertyStateRgistrationFunction(item) {
321
+ return MENU_BAR_ITEMS[item].registerStateProperty;
322
+ }
323
+ function createMenuItem(item) {
324
+ return MENU_BAR_ITEMS[item].render;
325
+ }
326
+ function getValidMenuItems({ menuItems }) {
327
+ return menuItems ? menuItems.split(" ").filter((item) => validItems.includes(item)) : [];
328
+ }
329
+ function renderMenuItems(context) {
330
+ return () => fastElement.html`${fastElement.repeat(
331
+ getValidMenuItems,
332
+ fastElement.html`${(menuItemName, { parent }) => {
333
+ getPropertyStateRgistrationFunction(menuItemName)?.(parent);
334
+ return createMenuItem(menuItemName)(context);
335
+ }}`
336
+ )}`;
337
+ }
338
+ const MenubarTemplate = (context) => {
339
+ return fastElement.html`<template class="${getClasses$2}">
340
+ ${renderMenuItems(context)}
341
+ </template>`;
342
+ };
343
+
344
+ const styles$1 = ":host{display:flex;align-items:center;background-color:var(--vvd-color-neutral-50);gap:4px}:host .hide-menubar{display:none}.title{--_text-primary-custom-size: var(--vvd-typography-heading-4)}.subtitle{--_text-primary-custom-size: var(--vvd-typography-base-extended)}.body{--_text-primary-custom-size: var(--vvd-typography-base)}.divider{height:28px}#text-block{width:104px}";
345
+
346
+ const menubarDefinition = vividElement.defineVividComponent(
347
+ "menubar",
348
+ Menubar,
349
+ MenubarTemplate,
350
+ [
351
+ button_definition.buttonDefinition,
352
+ select_definition.selectDefinition,
353
+ option_definition.listboxOptionDefinition,
354
+ divider_definition.dividerDefinition,
355
+ tooltip_definition.tooltipDefinition,
356
+ menu_definition.menuDefinition,
357
+ menuItem_definition.menuItemDefinition
358
+ ],
359
+ {
360
+ styles: styles$1,
361
+ shadowOptions: {
362
+ delegatesFocus: true
363
+ }
364
+ }
365
+ );
366
+
367
+ const TEXT_SIZES_CSS_VARIABLES = {
368
+ "extra-large": "var(--vvd-typography-heading-4)",
369
+ large: "var(--vvd-typography-base-extended)",
370
+ normal: "var(--vvd-typography-base)",
371
+ small: "var(--vvd-typography-base-condensed)"
372
+ };
373
+ const CSS_VARIABLES_TO_SIZES = Object.fromEntries(
374
+ Object.entries(TEXT_SIZES_CSS_VARIABLES).map(([key, value]) => [value, key])
375
+ );
376
+ const customMarks = {
377
+ u: {
378
+ parseDOM: [{ tag: "u" }],
379
+ toDOM() {
380
+ return ["u", 0];
381
+ }
382
+ },
383
+ s: {
384
+ parseDOM: [{ tag: "s" }, { tag: "del" }],
385
+ toDOM() {
386
+ return ["s", 0];
387
+ }
388
+ },
389
+ tt: {
390
+ parseDOM: [{ tag: "tt" }, { tag: "code" }],
391
+ toDOM() {
392
+ return ["tt", 0];
393
+ }
394
+ },
395
+ textSize: {
396
+ attrs: { size: { default: "normal" } },
397
+ parseDOM: [
398
+ {
399
+ tag: "span[style*='font']",
400
+ getAttrs: (node) => {
401
+ const style = node.getAttribute("style");
402
+ const fontSize = style.match(/font:\s*([^;]+)/)?.[1]?.trim();
403
+ const size = CSS_VARIABLES_TO_SIZES[fontSize];
404
+ if (size) return { size };
405
+ return false;
406
+ }
407
+ }
408
+ ],
409
+ toDOM(mark) {
410
+ const size = mark.attrs.size;
411
+ const fontSize = TEXT_SIZES_CSS_VARIABLES[size] || TEXT_SIZES_CSS_VARIABLES.normal;
412
+ return ["span", { style: `font: ${fontSize};` }, 0];
413
+ }
414
+ }
415
+ };
416
+ const dynamicSchema = (prefix = "vwc") => new prosemirrorModel.Schema({
417
+ nodes: {
418
+ ...prosemirrorSchemaBasic.schema.spec.nodes.toObject(),
419
+ imageError: {
420
+ inline: true,
421
+ group: "inline",
422
+ atom: true,
423
+ attrs: {
424
+ alt: { default: "" },
425
+ icon: { default: "" },
426
+ errorMessage: { default: "Failed to attach" },
427
+ fileName: { default: "" }
428
+ },
429
+ toDOM(node) {
430
+ return [
431
+ `${prefix}-text-editor-image-placeholder`,
432
+ {
433
+ alt: node.attrs.alt,
434
+ icon: node.attrs.icon,
435
+ "error-message": node.attrs.errorMessage,
436
+ "file-name": node.attrs.fileName
437
+ }
438
+ ];
439
+ },
440
+ parseDOM: [
441
+ {
442
+ tag: `${prefix}-text-editor-image-placeholder`,
443
+ getAttrs(dom) {
444
+ return {
445
+ alt: dom.getAttribute("alt"),
446
+ icon: dom.getAttribute("icon"),
447
+ errorMessage: dom.getAttribute("error-message"),
448
+ fileName: dom.getAttribute("file-name")
449
+ };
450
+ }
451
+ }
452
+ ]
453
+ }
454
+ },
455
+ marks: {
456
+ ...prosemirrorSchemaBasic.schema.spec.marks.toObject(),
457
+ ...customMarks
458
+ }
459
+ });
460
+ dynamicSchema();
461
+
462
+ const NEGATIVE_SELECTION = {
463
+ start: -1,
464
+ end: -1
465
+ };
466
+ class TagToSchemaMap {
467
+ static get h2() {
468
+ return {
469
+ type: "heading",
470
+ attrs: { level: 2 }
471
+ };
472
+ }
473
+ static get h3() {
474
+ return {
475
+ type: "heading",
476
+ attrs: { level: 3 }
477
+ };
478
+ }
479
+ static get p() {
480
+ return {
481
+ type: "paragraph",
482
+ attrs: {}
483
+ };
484
+ }
485
+ }
486
+ function setTextBlockType(styles, type) {
487
+ if (styles.textBlockType && styles.textBlockType !== type || styles.textBlockType === "") {
488
+ styles.textBlockType = "";
489
+ } else {
490
+ styles.textBlockType = type;
491
+ }
492
+ }
493
+ function createEnterKeymapPlugin() {
494
+ return prosemirrorKeymap.keymap({
495
+ ["Shift-Enter"]: (state, dispatch) => {
496
+ const { schema } = state;
497
+ const br = schema.nodes.hard_break;
498
+ const { $from, $to } = state.selection;
499
+ if ($from.sameParent($to)) {
500
+ dispatch && dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView());
501
+ } else {
502
+ if (dispatch) {
503
+ const tr = state.tr;
504
+ const lastSelectionBlock = state.doc.resolve($to.end());
505
+ tr.delete(lastSelectionBlock.start(), $to.pos);
506
+ tr.delete($from.pos, lastSelectionBlock.start() - 1);
507
+ tr.insert($from.pos, br.create());
508
+ const newSelection = prosemirrorState.TextSelection.create(tr.doc, $from.pos + 1);
509
+ tr.setSelection(newSelection);
510
+ dispatch(tr.scrollIntoView());
511
+ }
512
+ }
513
+ return true;
514
+ },
515
+ Enter: (state, dispatch) => {
516
+ const { schema } = state;
517
+ const paragraph = schema.nodes.paragraph;
518
+ const { $from, empty } = state.selection;
519
+ if (!empty || $from.parent.type !== paragraph) {
520
+ return false;
521
+ }
522
+ const tr = state.tr;
523
+ const marks = $from.marks();
524
+ tr.split($from.pos);
525
+ if (marks.length > 0) {
526
+ const newParaStart = $from.pos + 1;
527
+ const zeroWidthSpace = "​";
528
+ const content = schema.text(zeroWidthSpace, marks);
529
+ tr.insert(newParaStart, content);
530
+ tr.setSelection(prosemirrorState.TextSelection.create(tr.doc, newParaStart + 1));
531
+ }
532
+ dispatch && dispatch(tr.scrollIntoView());
533
+ return true;
534
+ }
535
+ });
536
+ }
537
+ function createSelectionChangePlugin(onSelectionChange) {
538
+ return new prosemirrorState.Plugin({
539
+ view: () => ({
540
+ update: (view, prevState) => {
541
+ const { from, to } = view.state.selection;
542
+ const { from: prevFrom, to: prevTo } = prevState.selection;
543
+ if (from !== prevFrom || to !== prevTo) {
544
+ onSelectionChange({ start: from, end: to });
545
+ }
546
+ }
547
+ })
548
+ });
549
+ }
550
+ function convertSelectionToVividFormat({
551
+ to,
552
+ from
553
+ }) {
554
+ return {
555
+ start: from,
556
+ end: to
557
+ };
558
+ }
559
+ function getImageErrorNode(schema, file, errorMessage = "Image loading failed") {
560
+ const nodeType = schema.nodes.imageError;
561
+ const imageErrorNode = nodeType.create({
562
+ alt: `inline image from file ${file.name}`,
563
+ fileName: file.name,
564
+ icon: file.type.split("/")[1],
565
+ errorMessage
566
+ });
567
+ return imageErrorNode;
568
+ }
569
+ const isEmptyParagraph = (node) => {
570
+ return node.type.name === "paragraph" && node.nodeSize === 2;
571
+ };
572
+ const DEFAULT_TEXT_EDITOR_PLACEHOLDER = "Start typing...";
573
+ const placeholderPluginKey = new prosemirrorState.PluginKey("placeholderPlugin");
574
+ const createPlaceholderPlugin = (placeholder = DEFAULT_TEXT_EDITOR_PLACEHOLDER) => {
575
+ return new prosemirrorState.Plugin({
576
+ key: placeholderPluginKey,
577
+ props: {
578
+ decorations(state) {
579
+ const { $from } = state.selection;
580
+ const decorations = [];
581
+ if (state.doc.childCount === 1 && isEmptyParagraph($from.parent)) {
582
+ const decoration = prosemirrorView.Decoration.node($from.before(), $from.after(), {
583
+ "data-placeholder": placeholder,
584
+ class: "placeholder"
585
+ });
586
+ decorations.push(decoration);
587
+ }
588
+ return prosemirrorView.DecorationSet.create(state.doc, decorations);
589
+ }
590
+ }
591
+ });
592
+ };
593
+ class ProseMirrorFacade {
594
+ #userContentChange = false;
595
+ #view;
596
+ #verifyViewInitiation() {
597
+ if (!this.#view) {
598
+ throw new Error(
599
+ "ProseMirror was not initiated. Please use the `init` method first."
600
+ );
601
+ }
602
+ }
603
+ #onSelectionChange = () => {
604
+ this.#dispatchEvent("selection-changed");
605
+ };
606
+ #handleInputEvent = (e) => {
607
+ e.stopPropagation();
608
+ this.#userContentChange = true;
609
+ this.#dispatchEvent("input");
610
+ };
611
+ #handleChangeEvent = () => {
612
+ if (!this.#userContentChange) {
613
+ this.#userContentChange = false;
614
+ return;
615
+ }
616
+ this.#dispatchEvent("change");
617
+ };
618
+ #vwcPrefix = "vwc";
619
+ init(element, vwcPrefix = "vwc") {
620
+ this.#vwcPrefix = vwcPrefix;
621
+ if (!(element instanceof HTMLElement)) {
622
+ throw new Error(
623
+ "ProseMirror Facade init accepts a valid HTMLElement as its first parameter"
624
+ );
625
+ }
626
+ const plugins = [
627
+ createPlaceholderPlugin(),
628
+ createSelectionChangePlugin(this.#onSelectionChange),
629
+ createEnterKeymapPlugin(),
630
+ prosemirrorKeymap.keymap(prosemirrorCommands.baseKeymap)
631
+ ];
632
+ const state = prosemirrorState.EditorState.create({
633
+ schema: dynamicSchema(this.#vwcPrefix),
634
+ plugins
635
+ });
636
+ this.#view = new prosemirrorView.EditorView(element, { state });
637
+ this.#view.dom.addEventListener("input", this.#handleInputEvent);
638
+ this.#view.dom.addEventListener("blur", this.#handleChangeEvent);
639
+ }
640
+ updatePlaceholder(placeholderText) {
641
+ this.#verifyViewInitiation();
642
+ const { state } = this.#view;
643
+ const plugins = state.plugins.filter(
644
+ (plugin) => plugin !== placeholderPluginKey.get(state)
645
+ );
646
+ const newPlaceholderPlugin = createPlaceholderPlugin(placeholderText);
647
+ const newState = state.reconfigure({
648
+ plugins: [...plugins, newPlaceholderPlugin]
649
+ });
650
+ this.#view.updateState(newState);
651
+ }
652
+ replaceContent(content) {
653
+ this.#verifyViewInitiation();
654
+ const parser = prosemirrorModel.DOMParser.fromSchema(this.#view.state.schema);
655
+ const doc = parser.parse(
656
+ new window.DOMParser().parseFromString(content, "text/html").body
657
+ );
658
+ const transaction = this.#view.state.tr.replaceWith(
659
+ 0,
660
+ this.#view.state.doc.content.size,
661
+ doc.content
662
+ );
663
+ this.#view.dispatch(transaction);
664
+ }
665
+ selection(position) {
666
+ if (this.#view && position) {
667
+ const transaction = this.#view.state.tr.setSelection(
668
+ prosemirrorState.TextSelection.create(this.#view.state.doc, position.start, position.end)
669
+ );
670
+ this.#view.dispatch(transaction);
671
+ }
672
+ return !this.#view ? NEGATIVE_SELECTION : convertSelectionToVividFormat(this.#view.state.selection);
673
+ }
674
+ #eventHandler = document.createElement("div");
675
+ addEventListener(eventName, callback) {
676
+ this.#eventHandler.addEventListener(eventName, callback);
677
+ }
678
+ #dispatchEvent = (eventName, detail) => {
679
+ this.#eventHandler.dispatchEvent(new CustomEvent(eventName, { detail }));
680
+ };
681
+ setSelectionTag(tag) {
682
+ this.#verifyViewInitiation();
683
+ const nodeDefinitions = TagToSchemaMap[tag] ?? {
684
+ type: tag
685
+ };
686
+ const { state, dispatch } = this.#view;
687
+ const { from, to } = state.selection;
688
+ const tr = state.tr;
689
+ state.doc.nodesBetween(from, to, (node) => {
690
+ const nodeType = state.schema.nodes[nodeDefinitions.type];
691
+ if (!nodeType) {
692
+ throw new Error("Node type tag does not exist in the schema");
693
+ }
694
+ if (node.type === nodeType) {
695
+ return;
696
+ }
697
+ tr.setBlockType(from, to, nodeType, nodeDefinitions.attrs);
698
+ });
699
+ dispatch(tr);
700
+ }
701
+ setSelectionDecoration(decoration) {
702
+ this.#verifyViewInitiation();
703
+ const SUPPORTED_DECORATIONS = {
704
+ bold: "strong",
705
+ italics: "em",
706
+ underline: "u",
707
+ strikethrough: "s",
708
+ monospace: "tt"
709
+ };
710
+ const { state, dispatch } = this.#view;
711
+ const decorationKey = decoration;
712
+ const markType = state.schema.marks[SUPPORTED_DECORATIONS[decorationKey]];
713
+ if (!markType) {
714
+ throw new Error(`${decoration} is not a supported decoration`);
715
+ }
716
+ prosemirrorCommands.toggleMark(markType)(state, dispatch);
717
+ this.#userContentChange = true;
718
+ this.#handleChangeEvent();
719
+ }
720
+ #getSelectionBlockType() {
721
+ const { state } = this.#view;
722
+ const { from, to } = state.selection;
723
+ const styles = {};
724
+ state.doc.nodesBetween(from, to, (node) => {
725
+ if (node.type.name === "heading" && node.attrs.level === 2) {
726
+ setTextBlockType(styles, "title");
727
+ } else if (node.type.name === "heading" && node.attrs.level === 3) {
728
+ setTextBlockType(styles, "subtitle");
729
+ } else if (node.type.name === "paragraph") {
730
+ setTextBlockType(styles, "body");
731
+ }
732
+ });
733
+ return styles.textBlockType;
734
+ }
735
+ #getSelectionTextDecoration() {
736
+ const { state } = this.#view;
737
+ const { from, to, empty } = state.selection;
738
+ const decorations = [];
739
+ if (empty) {
740
+ const marks = state.doc.resolve(from).marks();
741
+ if (state.schema.marks.strong && marks.some((mark) => mark.type === state.schema.marks.strong)) {
742
+ decorations.push("bold");
743
+ }
744
+ if (state.schema.marks.em && marks.some((mark) => mark.type === state.schema.marks.em)) {
745
+ decorations.push("italics");
746
+ }
747
+ if (state.schema.marks.u && marks.some((mark) => mark.type === state.schema.marks.u)) {
748
+ decorations.push("underline");
749
+ }
750
+ if (state.schema.marks.s && marks.some((mark) => mark.type === state.schema.marks.s)) {
751
+ decorations.push("strikethrough");
752
+ }
753
+ if (state.schema.marks.tt && marks.some((mark) => mark.type === state.schema.marks.tt)) {
754
+ decorations.push("monospace");
755
+ }
756
+ } else {
757
+ if (state.schema.marks.strong && state.doc.rangeHasMark(from, to, state.schema.marks.strong)) {
758
+ decorations.push("bold");
759
+ }
760
+ if (state.schema.marks.em && state.doc.rangeHasMark(from, to, state.schema.marks.em)) {
761
+ decorations.push("italics");
762
+ }
763
+ if (state.schema.marks.u && state.doc.rangeHasMark(from, to, state.schema.marks.u)) {
764
+ decorations.push("underline");
765
+ }
766
+ if (state.schema.marks.s && state.doc.rangeHasMark(from, to, state.schema.marks.s)) {
767
+ decorations.push("strikethrough");
768
+ }
769
+ if (state.schema.marks.tt && state.doc.rangeHasMark(from, to, state.schema.marks.tt)) {
770
+ decorations.push("monospace");
771
+ }
772
+ }
773
+ return decorations.length ? decorations : void 0;
774
+ }
775
+ #getSelectionTextSize() {
776
+ const { state } = this.#view;
777
+ const { from, to, empty } = state.selection;
778
+ const defaultSize = "normal";
779
+ if (empty) {
780
+ const marks = state.doc.resolve(from).marks();
781
+ const textSizeMark = marks.find(
782
+ (mark) => mark.type === state.schema.marks.textSize
783
+ );
784
+ return textSizeMark ? textSizeMark.attrs.size : defaultSize;
785
+ } else {
786
+ let textSize = null;
787
+ let foundMixedSizes = false;
788
+ state.doc.nodesBetween(from, to, (node) => {
789
+ if (node.isText) {
790
+ const mark = node.marks.find(
791
+ (mark2) => mark2.type === state.schema.marks.textSize
792
+ );
793
+ if (mark) {
794
+ if (textSize === null) {
795
+ textSize = mark.attrs.size;
796
+ } else if (textSize !== mark.attrs.size) {
797
+ foundMixedSizes = true;
798
+ return false;
799
+ }
800
+ } else if (textSize !== null) {
801
+ foundMixedSizes = true;
802
+ return false;
803
+ }
804
+ }
805
+ return true;
806
+ });
807
+ if (foundMixedSizes) {
808
+ return "";
809
+ }
810
+ return textSize !== null ? textSize : defaultSize;
811
+ }
812
+ }
813
+ getSelectionStyles() {
814
+ this.#verifyViewInitiation();
815
+ const styles = {};
816
+ styles.textBlockType = this.#getSelectionBlockType();
817
+ styles.textDecoration = this.#getSelectionTextDecoration();
818
+ styles.textSize = this.#getSelectionTextSize();
819
+ return styles;
820
+ }
821
+ setTextSize(size = "normal") {
822
+ this.#verifyViewInitiation();
823
+ const { state, dispatch } = this.#view;
824
+ const { schema, selection, tr } = state;
825
+ const { from, to } = selection;
826
+ const textSizeMark = schema.marks.textSize;
827
+ tr.removeMark(from, to, textSizeMark);
828
+ tr.addMark(from, to, textSizeMark.create({ size }));
829
+ dispatch(tr.scrollIntoView());
830
+ this.#userContentChange = true;
831
+ this.#handleChangeEvent();
832
+ }
833
+ getValue() {
834
+ return this.#view.dom.innerHTML;
835
+ }
836
+ async addInlineImage({
837
+ file,
838
+ position,
839
+ alt,
840
+ error
841
+ }) {
842
+ this.#verifyViewInitiation();
843
+ const reader = new FileReader();
844
+ const src = await new Promise((resolve, reject) => {
845
+ reader.onload = () => resolve(reader.result);
846
+ reader.onerror = reject;
847
+ reader.readAsDataURL(file);
848
+ });
849
+ const { state, dispatch } = this.#view;
850
+ const { schema } = state;
851
+ const imageAlt = alt ?? `inline image from file ${file.name}`;
852
+ const imageNode = error ? getImageErrorNode(schema, file, error) : schema.nodes.image.create({ src, alt: imageAlt });
853
+ let insertPos = position;
854
+ if (typeof insertPos !== "number") {
855
+ insertPos = state.selection.from;
856
+ }
857
+ const tr = state.tr.insert(insertPos, imageNode);
858
+ dispatch(tr.scrollIntoView());
859
+ }
860
+ }
861
+
862
+ var __defProp$1 = Object.defineProperty;
863
+ var __decorateClass$1 = (decorators, target, key, kind) => {
864
+ var result = void 0 ;
865
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
866
+ if (decorator = decorators[i])
867
+ result = (decorator(target, key, result) ) || result;
868
+ if (result) __defProp$1(target, key, result);
869
+ return result;
870
+ };
871
+ const RichTextEditorTextBlocks = {
872
+ title: "h2",
873
+ subtitle: "h3",
874
+ body: "p"
875
+ };
876
+ class RichTextEditor extends localized.Localized(vividElement.VividElement) {
877
+ constructor() {
878
+ super();
879
+ this.selectionStart = null;
880
+ this.#updateEditorSelection = () => {
881
+ try {
882
+ this.#editor?.selection({
883
+ start: this.selectionStart,
884
+ end: this.selectionEnd ? this.selectionEnd : this.selectionStart
885
+ });
886
+ } catch (e) {
887
+ console.warn(e.message);
888
+ }
889
+ };
890
+ this.selectionEnd = null;
891
+ this.#handleSelectionChange = () => {
892
+ if (!this.#editor.selection()) {
893
+ return;
894
+ }
895
+ const { start, end } = this.#editor.selection();
896
+ this.selectionStart = start;
897
+ this.selectionEnd = end;
898
+ this.$emit("selection-changed");
899
+ };
900
+ this.#handleChange = () => {
901
+ this.$emit("change");
902
+ };
903
+ this.#handleInput = () => {
904
+ this.$emit("input");
905
+ };
906
+ }
907
+ /**
908
+ * Indicates the rich text editor's value.
909
+ *
910
+ * @public
911
+ * @remarks
912
+ * HTML Attribute: value
913
+ */
914
+ get value() {
915
+ return this.#editor?.getValue();
916
+ }
917
+ set value(content) {
918
+ if (this.#editor) {
919
+ this.#editor.replaceContent(content);
920
+ }
921
+ }
922
+ #editor;
923
+ get #editorWrapperElement() {
924
+ return this.shadowRoot.querySelector("#editor");
925
+ }
926
+ selectionStartChanged() {
927
+ if (!this.selectionStart || this.selectionEnd && this.selectionStart > this.selectionEnd) {
928
+ return;
929
+ }
930
+ this.#updateEditorSelection();
931
+ }
932
+ #updateEditorSelection;
933
+ selectionEndChanged() {
934
+ if (this.selectionEnd && !this.selectionStart) {
935
+ this.selectionStart = 1;
936
+ }
937
+ this.#updateEditorSelection();
938
+ }
939
+ placeholderChanged() {
940
+ this.#editor?.updatePlaceholder(this.placeholder);
941
+ }
942
+ #handleSelectionChange;
943
+ #handleChange;
944
+ #handleInput;
945
+ connectedCallback() {
946
+ super.connectedCallback();
947
+ if (!this.#editor) {
948
+ this.#editor = new ProseMirrorFacade();
949
+ this.#editor.init(this.#editorWrapperElement);
950
+ this.#editor.addEventListener(
951
+ "selection-changed",
952
+ this.#handleSelectionChange
953
+ );
954
+ this.#editor.addEventListener("change", this.#handleChange);
955
+ this.#editor.addEventListener("input", this.#handleInput);
956
+ }
957
+ this.placeholderChanged();
958
+ }
959
+ setTextBlock(blockType) {
960
+ try {
961
+ this.#editor?.setSelectionTag(RichTextEditorTextBlocks[blockType]);
962
+ } catch (e) {
963
+ console.warn(`Invalid text block: ${blockType}`);
964
+ }
965
+ }
966
+ setSelectionDecoration(decoration) {
967
+ try {
968
+ this.#editor?.setSelectionDecoration(decoration);
969
+ } catch (e) {
970
+ console.warn(`Invalid decoration: ${decoration}`);
971
+ }
972
+ }
973
+ setSelectionTextSize(textSize) {
974
+ this.#editor?.setTextSize(textSize);
975
+ }
976
+ get selectionStyles() {
977
+ if (!this.#editor) {
978
+ return {};
979
+ }
980
+ return this.#editor.getSelectionStyles();
981
+ }
982
+ focus() {
983
+ super.focus();
984
+ setTimeout(() => {
985
+ this.#editableAreaElement.focus();
986
+ }, 0);
987
+ }
988
+ get #editableAreaElement() {
989
+ return this.#editorWrapperElement.querySelector(
990
+ '[contenteditable="true"]'
991
+ );
992
+ }
993
+ scrollToAttachments(additionalPixels = 0) {
994
+ fastElement.DOM.queueUpdate(() => {
995
+ this.#editorWrapperElement.scrollTop = this.#editableAreaElement.getBoundingClientRect().height - this.#editorWrapperElement.getBoundingClientRect().height + additionalPixels;
996
+ });
997
+ }
998
+ async addInlineImage(imageProps) {
999
+ try {
1000
+ await this.#editor.addInlineImage(imageProps);
1001
+ } catch (e) {
1002
+ console.warn(e.message);
1003
+ }
1004
+ }
1005
+ }
1006
+ __decorateClass$1([
1007
+ fastElement.attr({ converter: fastElement.nullableNumberConverter, attribute: "selection-start" })
1008
+ ], RichTextEditor.prototype, "selectionStart");
1009
+ __decorateClass$1([
1010
+ fastElement.attr({ converter: fastElement.nullableNumberConverter, attribute: "selection-end" })
1011
+ ], RichTextEditor.prototype, "selectionEnd");
1012
+ __decorateClass$1([
1013
+ fastElement.attr
1014
+ ], RichTextEditor.prototype, "placeholder");
1015
+
1016
+ const getClasses$1 = (_) => fastWebUtilities.classNames("control");
1017
+ const VALID_MENU_ELEMEMENT_SUFFIX = "menubar";
1018
+ const menuParent = (target) => target.parentElement;
1019
+ function textBlockSelectedHandler(event) {
1020
+ menuParent(event.target).setTextBlock(
1021
+ event.detail
1022
+ );
1023
+ menuParent(event.target).focus();
1024
+ }
1025
+ function selectionDecorationSelectedHandler(event) {
1026
+ menuParent(event.target).setSelectionDecoration(
1027
+ event.detail
1028
+ );
1029
+ menuParent(event.target).focus();
1030
+ }
1031
+ function textSizeSelectedHandler(event) {
1032
+ menuParent(event.target).setSelectionTextSize(
1033
+ event.detail
1034
+ );
1035
+ menuParent(event.target).focus();
1036
+ }
1037
+ function handleAttachmentsSlotChange(_, { event }) {
1038
+ const slotElement = event.target;
1039
+ slotElement.parentElement?.classList.toggle(
1040
+ "hidden",
1041
+ slotElement.assignedElements().length < 1
1042
+ );
1043
+ }
1044
+ function handleMenubarSlotChange(_, { event }) {
1045
+ const slot = event.target;
1046
+ const assignedElements = slot.assignedElements({ flatten: true });
1047
+ const menubar = assignedElements.find(
1048
+ (element) => element.tagName.toLowerCase().endsWith(VALID_MENU_ELEMEMENT_SUFFIX)
1049
+ );
1050
+ assignedElements.forEach((element) => {
1051
+ if (element === menubar) {
1052
+ element.style.removeProperty("display");
1053
+ } else {
1054
+ element.style.display = "none";
1055
+ }
1056
+ });
1057
+ if (menubar) {
1058
+ menubar.addEventListener(
1059
+ "text-block-selected",
1060
+ textBlockSelectedHandler
1061
+ );
1062
+ menubar.addEventListener(
1063
+ "text-decoration-selected",
1064
+ selectionDecorationSelectedHandler
1065
+ );
1066
+ menubar.addEventListener(
1067
+ "text-size-selected",
1068
+ textSizeSelectedHandler
1069
+ );
1070
+ }
1071
+ }
1072
+ function handleFileDrop(x, { event }) {
1073
+ x.dispatchEvent(
1074
+ new CustomEvent("file-drop", { detail: event.dataTransfer.files })
1075
+ );
1076
+ handleDragLeave(x, { event });
1077
+ }
1078
+ function handleDragEnter(_, { event }) {
1079
+ const editorWrapperElement = event.currentTarget;
1080
+ editorWrapperElement.classList.toggle("drag-over", true);
1081
+ }
1082
+ function handleDragLeave(_, { event }) {
1083
+ const editorWrapperElement = event.currentTarget;
1084
+ if (!editorWrapperElement.contains(event.relatedTarget)) {
1085
+ editorWrapperElement.classList.remove("drag-over");
1086
+ }
1087
+ }
1088
+ const RichTextEditorTemplate = (context) => {
1089
+ const dividerTag = context.tagFor(divider.Divider);
1090
+ return fastElement.html`<template class="${getClasses$1}">
1091
+ <div id="editor"
1092
+ class="editor"
1093
+ @drop="${handleFileDrop}"
1094
+ @dragenter="${handleDragEnter}"
1095
+ @dragleave="${handleDragLeave}"
1096
+ >
1097
+ <div class="drag-overlay">
1098
+ ${(x) => x.locale.richTextEditor.dragAndDropFilesHere}
1099
+ </div>
1100
+ <div id="attachments-wrapper" class="hidden">
1101
+ <${dividerTag} class="divider"></${dividerTag}>
1102
+ <slot name="attachments"
1103
+ @slotchange="${handleAttachmentsSlotChange}">
1104
+ </slot>
1105
+ </div>
1106
+ </div>
1107
+ <slot name="menu-bar"
1108
+ @slotchange="${handleMenubarSlotChange}"></slot>
1109
+ </template>`;
1110
+ };
1111
+
1112
+ const styles = ":host{white-space:normal}.image-placeholder{display:flex;width:250px;height:64px;box-sizing:border-box;align-items:center;padding:16px;border:1px solid var(--vvd-color-neutral-200);border-radius:12px;background-color:var(--vvd-color-canvas);gap:16px}.icon{display:flex;width:40px;height:40px;box-sizing:border-box;flex-shrink:0;align-items:center;justify-content:center;border-radius:8px;background-color:color-mix(in srgb,var(--vvd-color-neutral-950),transparent 90%);color:var(--vvd-color-neutral-600)}.info{display:flex;flex-direction:column;min-inline-size:0}.filename{display:flex;overflow:hidden;width:100%;max-width:220px;color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base-condensed-bold);white-space:nowrap}.name{overflow:hidden;flex:1 1 auto;text-overflow:ellipsis}.suffix{flex:0 0 auto;margin-left:4px}.error{display:flex;align-items:center;color:var(--vvd-color-alert-600);font:var(--vvd-typography-base-condensed);gap:6px}";
1113
+
1114
+ var __defProp = Object.defineProperty;
1115
+ var __decorateClass = (decorators, target, key, kind) => {
1116
+ var result = void 0 ;
1117
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
1118
+ if (decorator = decorators[i])
1119
+ result = (decorator(target, key, result) ) || result;
1120
+ if (result) __defProp(target, key, result);
1121
+ return result;
1122
+ };
1123
+ class ImagePlaceholder extends vividElement.VividElement {
1124
+ }
1125
+ __decorateClass([
1126
+ fastElement.attr({ attribute: "file-name" })
1127
+ ], ImagePlaceholder.prototype, "fileName");
1128
+ __decorateClass([
1129
+ fastElement.attr({ attribute: "size" })
1130
+ ], ImagePlaceholder.prototype, "size");
1131
+ __decorateClass([
1132
+ fastElement.attr({ attribute: "error-message" })
1133
+ ], ImagePlaceholder.prototype, "errorMessage");
1134
+ __decorateClass([
1135
+ fastElement.attr({ attribute: "icon" })
1136
+ ], ImagePlaceholder.prototype, "icon");
1137
+
1138
+ const getClasses = (_) => fastWebUtilities.classNames("base");
1139
+ const getIconName = ({ icon }) => {
1140
+ if (!icon) {
1141
+ return "clear-file-solid";
1142
+ }
1143
+ return `file-${icon}-solid`;
1144
+ };
1145
+ const getFileSuffix = (x) => {
1146
+ return x.fileName?.split(".").pop() || "";
1147
+ };
1148
+ const getFileName = (x) => {
1149
+ return x.fileName?.replace(/\.[^/.]+$/, "") || "";
1150
+ };
1151
+ const ImagePlaceholderTemplate = (context) => {
1152
+ const iconTag = context.tagFor(icon_definition.VwcIconElement);
1153
+ return fastElement.html`<template class="${getClasses}">
1154
+ <div class="image-placeholder">
1155
+ <div class="icon">
1156
+ <${iconTag} name="${getIconName}" size="-5"></${iconTag}>
1157
+ </div>
1158
+ <div class="info">
1159
+ <div class="filename" title="${(x) => x.fileName}">
1160
+ <div class="name">${getFileName}</div>
1161
+ <div class="suffix">${getFileSuffix}</div>
1162
+ </div>
1163
+ ${fastElement.when(
1164
+ (x) => x.errorMessage,
1165
+ fastElement.html`<div class="error">
1166
+ <span class="error-icon"><${iconTag} name="error-solid" size="-6"></${iconTag}></span>
1167
+ <span class="error-text">${(x) => x.errorMessage}</span>
1168
+ </div>`
1169
+ )}
1170
+ </div>
1171
+ </div>
1172
+ </template>`;
1173
+ };
1174
+
1175
+ const imagePlaceholderDefinition = vividElement.defineVividComponent(
1176
+ "text-editor-image-placeholder",
1177
+ ImagePlaceholder,
1178
+ ImagePlaceholderTemplate,
1179
+ [icon_definition.iconDefinition],
1180
+ {
1181
+ styles,
1182
+ shadowOptions: {
1183
+ delegatesFocus: true
1184
+ }
1185
+ }
1186
+ );
1187
+
1188
+ const richTextEditorDefinition = vividElement.defineVividComponent(
1189
+ "rich-text-editor",
1190
+ RichTextEditor,
1191
+ RichTextEditorTemplate,
1192
+ [menubarDefinition, divider_definition.dividerDefinition, imagePlaceholderDefinition],
1193
+ {
1194
+ styles: styles$2,
1195
+ shadowOptions: {
1196
+ delegatesFocus: true
1197
+ }
1198
+ }
1199
+ );
1200
+ const registerRichTextEditor = vividElement.createRegisterFunction(
1201
+ richTextEditorDefinition
1202
+ );
1203
+
1204
+ exports.VwcRichTextEditorElement = RichTextEditor;
1205
+ exports.registerRichTextEditor = registerRichTextEditor;
1206
+ exports.richTextEditorDefinition = richTextEditorDefinition;