@vonage/vivid 5.23.1 → 5.24.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 (406) hide show
  1. package/accordion/index.cjs +1 -1
  2. package/accordion/index.js +1 -1
  3. package/accordion-item/index.cjs +1 -1
  4. package/accordion-item/index.js +1 -1
  5. package/audio-player/index.cjs +2 -2
  6. package/audio-player/index.js +3 -3
  7. package/badge/index.cjs +1 -1
  8. package/badge/index.js +1 -1
  9. package/bundled/definition15.cjs +8 -7
  10. package/bundled/definition15.js +26 -24
  11. package/bundled/definition17.cjs +2 -2
  12. package/bundled/definition17.js +2 -2
  13. package/bundled/definition18.cjs +12 -83
  14. package/bundled/definition18.js +35 -419
  15. package/bundled/definition19.cjs +87 -7
  16. package/bundled/definition19.js +432 -16
  17. package/bundled/definition20.cjs +7 -37
  18. package/bundled/definition20.js +17 -172
  19. package/bundled/definition21.cjs +35 -27
  20. package/bundled/definition21.js +154 -154
  21. package/bundled/definition22.cjs +29 -6
  22. package/bundled/definition22.js +172 -20
  23. package/bundled/definition23.cjs +6 -12
  24. package/bundled/definition23.js +17 -32
  25. package/bundled/definition24.cjs +12 -39
  26. package/bundled/definition24.js +32 -67
  27. package/bundled/definition25.cjs +44 -0
  28. package/bundled/definition25.js +77 -0
  29. package/bundled/extractOptions.cjs +1 -0
  30. package/bundled/extractOptions.js +11 -0
  31. package/bundled/listbox.cjs +1 -1
  32. package/bundled/listbox.js +24 -11
  33. package/bundled/render-in-light-dom.cjs +1 -1
  34. package/bundled/render-in-light-dom.js +16 -19
  35. package/bundled/vivid-element.cjs +1 -1
  36. package/bundled/vivid-element.js +9 -1
  37. package/combobox/definition.cjs +1 -1
  38. package/combobox/definition.js +1 -1
  39. package/combobox/index.cjs +7 -7
  40. package/combobox/index.js +29 -21
  41. package/country/definition.cjs +1 -1
  42. package/country/definition.js +1 -1
  43. package/country/index.cjs +1 -1
  44. package/country/index.js +1 -1
  45. package/country-group/definition.cjs +1 -1
  46. package/country-group/definition.js +1 -1
  47. package/country-group/index.cjs +1 -1
  48. package/country-group/index.js +2 -2
  49. package/custom-elements.json +3102 -2842
  50. package/data-grid/definition.cjs +1 -1
  51. package/data-grid/definition.js +1 -1
  52. package/data-grid/index.cjs +4 -4
  53. package/data-grid/index.js +5 -5
  54. package/date-picker/definition.cjs +1 -1
  55. package/date-picker/definition.js +1 -1
  56. package/date-picker/index.cjs +1 -1
  57. package/date-picker/index.js +1 -1
  58. package/date-range-picker/definition.cjs +1 -1
  59. package/date-range-picker/definition.js +1 -1
  60. package/date-range-picker/index.cjs +1 -1
  61. package/date-range-picker/index.js +1 -1
  62. package/date-time-picker/definition.cjs +1 -1
  63. package/date-time-picker/definition.js +1 -1
  64. package/date-time-picker/index.cjs +1 -1
  65. package/date-time-picker/index.js +1 -1
  66. package/dial-pad/definition.cjs +1 -1
  67. package/dial-pad/definition.js +1 -1
  68. package/dial-pad/index.cjs +24 -24
  69. package/dial-pad/index.js +120 -51
  70. package/dialog/definition.cjs +1 -1
  71. package/dialog/definition.js +1 -1
  72. package/divider/definition.cjs +1 -1
  73. package/divider/definition.js +1 -1
  74. package/divider/index.cjs +1 -1
  75. package/divider/index.js +1 -1
  76. package/empty-state/definition.cjs +1 -1
  77. package/empty-state/definition.js +1 -1
  78. package/fab/definition.cjs +1 -1
  79. package/fab/definition.js +1 -1
  80. package/file-picker/definition.cjs +1 -1
  81. package/file-picker/definition.js +1 -1
  82. package/flag/definition.cjs +1 -1
  83. package/flag/definition.js +1 -1
  84. package/header/definition.cjs +1 -1
  85. package/header/definition.js +1 -1
  86. package/header/index.cjs +3 -3
  87. package/header/index.js +3 -3
  88. package/index.cjs +200 -196
  89. package/index.js +53 -52
  90. package/kbd-key/definition.cjs +1 -1
  91. package/kbd-key/definition.js +1 -1
  92. package/kbd-shortcut/definition.cjs +1 -1
  93. package/kbd-shortcut/definition.js +1 -1
  94. package/layout/definition.cjs +1 -1
  95. package/layout/definition.js +1 -1
  96. package/lib/accordion-item/accordion-item.d.ts +2 -1
  97. package/lib/action-group/action-group.d.ts +1 -1
  98. package/lib/alert/alert.d.ts +2 -2
  99. package/lib/audio-player/audio-player.d.ts +1 -1
  100. package/lib/avatar/avatar.d.ts +1 -1
  101. package/lib/badge/badge.d.ts +1 -1
  102. package/lib/banner/banner.d.ts +3 -3
  103. package/lib/breadcrumb/breadcrumb.d.ts +1 -1
  104. package/lib/breadcrumb-item/breadcrumb-item.d.ts +1 -1
  105. package/lib/button/button.d.ts +3 -3
  106. package/lib/calendar-event/calendar-event.d.ts +1 -1
  107. package/lib/card/card.d.ts +1 -1
  108. package/lib/checkbox/checkbox.d.ts +6 -6
  109. package/lib/color-picker/color-picker.d.ts +7 -7
  110. package/lib/combobox/combobox.d.ts +7 -7
  111. package/lib/components.d.ts +1 -0
  112. package/lib/country-group/country-group.d.ts +2 -2
  113. package/lib/data-grid/data-grid-cell.d.ts +4 -3
  114. package/lib/data-grid/data-grid-row.d.ts +3 -2
  115. package/lib/data-grid/data-grid.options.d.ts +5 -0
  116. package/lib/date-picker/date-picker.d.ts +8 -8
  117. package/lib/date-range-picker/date-range-picker.d.ts +4 -4
  118. package/lib/date-time-picker/date-time-picker.d.ts +8 -8
  119. package/lib/dial-pad/dial-pad.d.ts +2 -1
  120. package/lib/dialog/dialog.d.ts +2 -2
  121. package/lib/divider/divider.d.ts +1 -1
  122. package/lib/fab/fab.d.ts +1 -1
  123. package/lib/file-picker/file-picker.d.ts +7 -7
  124. package/lib/header/header.d.ts +1 -1
  125. package/lib/menu/menu.d.ts +2 -2
  126. package/lib/menu-item/menu-item.d.ts +3 -3
  127. package/lib/nav/nav.d.ts +1 -1
  128. package/lib/nav-disclosure/nav-disclosure.d.ts +2 -2
  129. package/lib/nav-item/nav-item.d.ts +2 -2
  130. package/lib/note/note.d.ts +1 -1
  131. package/lib/number-field/number-field.d.ts +9 -9
  132. package/lib/optgroup/definition.d.ts +3 -0
  133. package/lib/optgroup/index.d.ts +1 -0
  134. package/lib/optgroup/optgroup.d.ts +430 -0
  135. package/lib/optgroup/optgroup.template.d.ts +2 -0
  136. package/lib/optgroup/variations.browser-spec.d.ts +1 -0
  137. package/lib/option/option.d.ts +2 -2
  138. package/lib/pagination/pagination.d.ts +1 -1
  139. package/lib/popover/popover.d.ts +2 -2
  140. package/lib/progress/progress.d.ts +1 -1
  141. package/lib/progress-ring/progress-ring.d.ts +1 -1
  142. package/lib/radio/radio.d.ts +3 -3
  143. package/lib/radio-group/radio-group.d.ts +1 -1
  144. package/lib/range-slider/range-slider.d.ts +3 -3
  145. package/lib/rich-text-editor/rich-text-editor.d.ts +1 -1
  146. package/lib/searchable-select/option-tag.d.ts +1 -1
  147. package/lib/searchable-select/searchable-select.d.ts +47 -47
  148. package/lib/select/select.d.ts +9 -9
  149. package/lib/selectable-box/selectable-box.d.ts +1 -1
  150. package/lib/simple-color-picker/simple-color-picker.d.ts +2 -2
  151. package/lib/slider/slider.d.ts +3 -3
  152. package/lib/split-button/split-button.d.ts +3 -3
  153. package/lib/status/status.d.ts +1 -1
  154. package/lib/switch/switch.d.ts +2 -2
  155. package/lib/tab/tab.d.ts +3 -3
  156. package/lib/tab-panel/tab-panel.d.ts +1 -1
  157. package/lib/table/table-cell.d.ts +1 -1
  158. package/lib/table/table-header-cell.d.ts +1 -1
  159. package/lib/table/table-row.d.ts +1 -1
  160. package/lib/table/table-sorting-button.d.ts +1 -1
  161. package/lib/tag/tag.d.ts +3 -3
  162. package/lib/tag-group/tag-group.d.ts +1 -1
  163. package/lib/tag-name-map.d.ts +2 -1
  164. package/lib/text-area/text-area.d.ts +8 -8
  165. package/lib/text-field/text-field.d.ts +9 -9
  166. package/lib/time-picker/time-picker.d.ts +4 -4
  167. package/lib/toggletip/toggletip.d.ts +2 -2
  168. package/lib/tooltip/tooltip.d.ts +2 -2
  169. package/lib/tree-item/tree-item.d.ts +2 -2
  170. package/lib/tree-view/tree-view.d.ts +1 -1
  171. package/lib/video-player/video-player.d.ts +1 -1
  172. package/menu/index.cjs +1 -1
  173. package/menu/index.js +1 -1
  174. package/menu-item/index.cjs +1 -1
  175. package/menu-item/index.js +1 -1
  176. package/nav/definition.cjs +1 -1
  177. package/nav/definition.js +1 -1
  178. package/nav-disclosure/definition.cjs +1 -1
  179. package/nav-disclosure/definition.js +1 -1
  180. package/nav-item/definition.cjs +1 -1
  181. package/nav-item/definition.js +1 -1
  182. package/note/definition.cjs +1 -1
  183. package/note/definition.js +1 -1
  184. package/number-field/definition.cjs +1 -1
  185. package/number-field/definition.js +1 -1
  186. package/number-field/index.cjs +1 -1
  187. package/number-field/index.js +1 -1
  188. package/optgroup/definition.cjs +5 -0
  189. package/optgroup/definition.js +2 -0
  190. package/optgroup/index.cjs +1 -0
  191. package/optgroup/index.js +4 -0
  192. package/package.json +6 -6
  193. package/pagination/definition.cjs +1 -1
  194. package/pagination/definition.js +1 -1
  195. package/platform-switch/definition.cjs +1 -1
  196. package/platform-switch/definition.js +1 -1
  197. package/popover/definition.cjs +1 -1
  198. package/popover/definition.js +1 -1
  199. package/progress/definition.cjs +1 -1
  200. package/progress/definition.js +1 -1
  201. package/radio/definition.cjs +1 -1
  202. package/radio/definition.js +1 -1
  203. package/radio-group/definition.cjs +1 -1
  204. package/radio-group/definition.js +1 -1
  205. package/range-slider/definition.cjs +1 -1
  206. package/range-slider/definition.js +1 -1
  207. package/rich-text-editor/definition.cjs +1 -1
  208. package/rich-text-editor/definition.js +1 -1
  209. package/rich-text-editor/index.cjs +1 -1
  210. package/rich-text-editor/index.js +4 -4
  211. package/rich-text-view/definition.cjs +1 -1
  212. package/rich-text-view/definition.js +1 -1
  213. package/searchable-select/definition.cjs +1 -1
  214. package/searchable-select/definition.js +1 -1
  215. package/searchable-select/index.cjs +19 -19
  216. package/searchable-select/index.js +60 -45
  217. package/select/definition.cjs +1 -1
  218. package/select/definition.js +1 -1
  219. package/select/index.cjs +1 -1
  220. package/select/index.js +1 -1
  221. package/selectable-box/definition.cjs +1 -1
  222. package/selectable-box/definition.js +1 -1
  223. package/shared/aria/delegates-aria.d.ts +1 -1
  224. package/shared/aria/host-semantics.d.ts +1 -1
  225. package/shared/color-picker/base-color-picker.d.ts +1 -1
  226. package/shared/feedback/feedback-message.d.ts +1 -1
  227. package/shared/feedback/mixins.d.ts +2 -2
  228. package/shared/foundation/button/button.d.ts +2 -2
  229. package/shared/foundation/form-associated/form-associated.d.ts +2 -2
  230. package/shared/foundation/listbox/extractOptions.d.ts +2 -0
  231. package/shared/foundation/listbox/listbox.d.ts +2 -0
  232. package/shared/patterns/affix.d.ts +2 -2
  233. package/shared/patterns/anchored.d.ts +2 -2
  234. package/shared/patterns/char-count/char-count.d.ts +1 -1
  235. package/shared/patterns/form-elements/form-element.d.ts +1 -1
  236. package/shared/patterns/form-elements/with-contextual-help.d.ts +1 -1
  237. package/shared/patterns/form-elements/with-error-text.d.ts +1 -1
  238. package/shared/patterns/form-elements/with-success-text.d.ts +1 -1
  239. package/shared/patterns/kbd-shortcut.d.ts +1 -1
  240. package/shared/patterns/linkable.d.ts +1 -1
  241. package/shared/patterns/localized.d.ts +2 -2
  242. package/shared/patterns/trapped-focus.d.ts +1 -1
  243. package/shared/picker-field/mixins/calendar-picker.d.ts +2 -2
  244. package/shared/picker-field/mixins/calendar-picker.template.d.ts +2 -2
  245. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +1 -1
  246. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +2 -2
  247. package/shared/picker-field/mixins/single-date-picker.d.ts +2 -2
  248. package/shared/picker-field/mixins/single-value-picker.d.ts +2 -2
  249. package/shared/picker-field/mixins/time-selection-picker.d.ts +2 -2
  250. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +4 -4
  251. package/shared/picker-field/picker-field.d.ts +7 -7
  252. package/side-drawer/definition.cjs +1 -1
  253. package/side-drawer/definition.js +1 -1
  254. package/simple-color-picker/definition.cjs +1 -1
  255. package/simple-color-picker/definition.js +1 -1
  256. package/split-button/definition.cjs +1 -1
  257. package/split-button/definition.js +1 -1
  258. package/split-button/index.cjs +1 -0
  259. package/split-button/index.js +1 -0
  260. package/status/definition.cjs +1 -1
  261. package/status/definition.js +1 -1
  262. package/switch/definition.cjs +1 -1
  263. package/switch/definition.js +1 -1
  264. package/switch/index.cjs +6 -5
  265. package/switch/index.js +16 -14
  266. package/tab/definition.cjs +1 -1
  267. package/tab/definition.js +1 -1
  268. package/tab-panel/definition.cjs +1 -1
  269. package/tab-panel/definition.js +1 -1
  270. package/table/definition.cjs +1 -1
  271. package/table/definition.js +1 -1
  272. package/tabs/definition.cjs +1 -1
  273. package/tabs/definition.js +1 -1
  274. package/tag/definition.cjs +1 -1
  275. package/tag/definition.js +1 -1
  276. package/tag-group/definition.cjs +1 -1
  277. package/tag-group/definition.js +1 -1
  278. package/text-area/definition.cjs +1 -1
  279. package/text-area/definition.js +1 -1
  280. package/time-picker/definition.cjs +1 -1
  281. package/time-picker/definition.js +1 -1
  282. package/tree-item/definition.cjs +1 -1
  283. package/tree-item/definition.js +1 -1
  284. package/tree-view/definition.cjs +1 -1
  285. package/tree-view/definition.js +1 -1
  286. package/unbundled/definition13.cjs +1 -1
  287. package/unbundled/definition13.js +1 -1
  288. package/unbundled/definition2.cjs +9 -3
  289. package/unbundled/definition2.js +9 -3
  290. package/unbundled/definition23.cjs +1 -0
  291. package/unbundled/definition23.js +2 -1
  292. package/unbundled/definition29.cjs +2 -2
  293. package/unbundled/definition29.js +2 -2
  294. package/unbundled/definition30.cjs +65 -484
  295. package/unbundled/definition30.js +57 -482
  296. package/unbundled/definition31.cjs +501 -39
  297. package/unbundled/definition31.js +499 -37
  298. package/unbundled/definition32.cjs +38 -239
  299. package/unbundled/definition32.js +35 -236
  300. package/unbundled/definition33.cjs +236 -74
  301. package/unbundled/definition33.js +233 -71
  302. package/unbundled/definition34.cjs +74 -1968
  303. package/unbundled/definition34.js +70 -1940
  304. package/unbundled/definition35.cjs +1992 -26
  305. package/unbundled/definition35.js +1964 -27
  306. package/unbundled/definition36.cjs +26 -111
  307. package/unbundled/definition36.js +23 -103
  308. package/unbundled/definition37.cjs +53 -294
  309. package/unbundled/definition37.js +50 -291
  310. package/unbundled/definition38.cjs +282 -132
  311. package/unbundled/definition38.js +279 -129
  312. package/unbundled/definition39.cjs +165 -339
  313. package/unbundled/definition39.js +163 -337
  314. package/unbundled/definition40.cjs +394 -228
  315. package/unbundled/definition40.js +391 -225
  316. package/unbundled/definition41.cjs +263 -46
  317. package/unbundled/definition41.js +258 -41
  318. package/unbundled/definition42.cjs +47 -67
  319. package/unbundled/definition42.js +45 -65
  320. package/unbundled/definition43.cjs +56 -383
  321. package/unbundled/definition43.js +55 -382
  322. package/unbundled/definition44.cjs +386 -44
  323. package/unbundled/definition44.js +382 -40
  324. package/unbundled/definition45.cjs +53 -45
  325. package/unbundled/definition45.js +49 -41
  326. package/unbundled/definition46.cjs +40 -164
  327. package/unbundled/definition46.js +36 -160
  328. package/unbundled/definition47.cjs +171 -31
  329. package/unbundled/definition47.js +168 -22
  330. package/unbundled/definition48.cjs +30 -89
  331. package/unbundled/definition48.js +22 -87
  332. package/unbundled/definition49.cjs +70 -33
  333. package/unbundled/definition49.js +67 -30
  334. package/unbundled/definition50.cjs +54 -23
  335. package/unbundled/definition50.js +52 -18
  336. package/unbundled/definition51.cjs +23 -39
  337. package/unbundled/definition51.js +17 -36
  338. package/unbundled/definition52.cjs +29 -314
  339. package/unbundled/definition52.js +27 -312
  340. package/unbundled/definition53.cjs +301 -195
  341. package/unbundled/definition53.js +297 -191
  342. package/unbundled/definition54.cjs +210 -40
  343. package/unbundled/definition54.js +206 -36
  344. package/unbundled/definition55.cjs +42 -266
  345. package/unbundled/definition55.js +38 -262
  346. package/unbundled/definition56.cjs +266 -50
  347. package/unbundled/definition56.js +263 -46
  348. package/unbundled/definition57.cjs +48 -146
  349. package/unbundled/definition57.js +47 -143
  350. package/unbundled/definition58.cjs +127 -225
  351. package/unbundled/definition58.js +122 -223
  352. package/unbundled/definition59.cjs +199 -418
  353. package/unbundled/definition59.js +196 -415
  354. package/unbundled/definition60.cjs +441 -3738
  355. package/unbundled/definition60.js +431 -3565
  356. package/unbundled/definition61.cjs +3712 -728
  357. package/unbundled/definition61.js +3538 -717
  358. package/unbundled/definition62.cjs +769 -97
  359. package/unbundled/definition62.js +766 -94
  360. package/unbundled/definition63.cjs +100 -981
  361. package/unbundled/definition63.js +98 -976
  362. package/unbundled/definition64.cjs +988 -93
  363. package/unbundled/definition64.js +982 -90
  364. package/unbundled/definition65.cjs +109 -73
  365. package/unbundled/definition65.js +105 -63
  366. package/unbundled/definition66.cjs +69 -155
  367. package/unbundled/definition66.js +60 -152
  368. package/unbundled/definition67.cjs +154 -118
  369. package/unbundled/definition67.js +151 -115
  370. package/unbundled/definition68.cjs +124 -49
  371. package/unbundled/definition68.js +120 -45
  372. package/unbundled/definition69.cjs +51 -84
  373. package/unbundled/definition69.js +50 -80
  374. package/unbundled/definition70.cjs +91 -19
  375. package/unbundled/definition70.js +86 -14
  376. package/unbundled/definition71.cjs +20 -87
  377. package/unbundled/definition71.js +14 -84
  378. package/unbundled/definition72.cjs +76 -294
  379. package/unbundled/definition72.js +71 -217
  380. package/unbundled/definition73.cjs +288 -311
  381. package/unbundled/definition73.js +218 -306
  382. package/unbundled/definition74.cjs +326 -26
  383. package/unbundled/definition74.js +317 -23
  384. package/unbundled/definition75.cjs +27 -122
  385. package/unbundled/definition75.js +22 -118
  386. package/unbundled/definition76.cjs +103 -232
  387. package/unbundled/definition76.js +99 -228
  388. package/unbundled/definition77.cjs +259 -26
  389. package/unbundled/definition77.js +249 -23
  390. package/unbundled/definition78.cjs +29 -148
  391. package/unbundled/definition78.js +27 -133
  392. package/unbundled/definition79.cjs +117 -173
  393. package/unbundled/definition79.js +108 -169
  394. package/unbundled/definition80.cjs +181 -477
  395. package/unbundled/definition80.js +176 -471
  396. package/unbundled/definition81.cjs +517 -0
  397. package/unbundled/definition81.js +497 -0
  398. package/unbundled/extractOptions.cjs +21 -0
  399. package/unbundled/extractOptions.js +16 -0
  400. package/unbundled/listbox.cjs +23 -6
  401. package/unbundled/listbox.js +23 -6
  402. package/unbundled/vivid-element.cjs +10 -1
  403. package/unbundled/vivid-element.js +10 -1
  404. package/video-player/definition.cjs +1 -1
  405. package/video-player/definition.js +1 -1
  406. package/vivid.api.json +194 -0
@@ -1,65 +1,407 @@
1
1
  import { d as createRegisterFunction, t as VividElement, u as defineVividComponent } from "./vivid-element.js";
2
+ import { r as Icon, t as iconDefinition } from "./definition.js";
2
3
  import { t as __decorate } from "./decorate.js";
3
4
  import { n as delegateAria, t as DelegatesAria } from "./delegates-aria.js";
4
- import { r as Elevation, t as elevationDefinition } from "./definition7.js";
5
- import { attr, html } from "@microsoft/fast-element";
5
+ import { n as FormAssociated } from "./form-associated.js";
6
+ import { t as Localized } from "./localized.js";
7
+ import { i as Button, t as buttonDefinition } from "./definition6.js";
8
+ import { r as feedbackMessageDefinition, t as WithFeedback } from "./mixins.js";
9
+ import { t as FormElement } from "./form-element.js";
10
+ import { t as WithErrorText } from "./with-error-text.js";
11
+ import { t as WithContextualHelp } from "./with-contextual-help.js";
12
+ import { ExecutionContext, Observable, attr, html, nullableNumberConverter, observable, ref, repeat, slotted, volatile, when } from "@microsoft/fast-element";
6
13
  import { classNames } from "@microsoft/fast-web-utilities";
7
- //#region src/lib/header/header.scss?inline
8
- var header_default = ".base{z-index:1;block-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) + calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16)));font:var(--vvd-typography-heading-4);inline-size:100%}.base .header-content{align-items:center;column-gap:4px;display:inline-flex}.container{box-sizing:border-box;background-color:var(--header-bg-color,var(--vvd-color-canvas));block-size:inherit;color:var(--vvd-color-canvas-text);justify-content:space-between;column-gap:12px;padding-block:8px;padding-inline:16px;display:flex}.container[part~=vvd-theme-alternate]{color-scheme:var(--vvd-color-scheme)}.app-content{--vvd-header-block-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) + calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16)))}";
14
+ //#region src/lib/file-picker/file-picker.scss?inline
15
+ var file_picker_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}:host{max-inline-size:400px;display:block}:host([disabled]){cursor:not-allowed}.base{block-size:inherit;max-block-size:inherit;--_low-ink-color:var(--vvd-color-neutral-600);flex-direction:column;display:flex}.control-wrapper{block-size:inherit;max-block-size:inherit;flex-direction:column;gap:4px;display:flex}.control{box-sizing:border-box;border:1px dashed var(--vvd-color-neutral-400);background-color:var(--vvd-color-cta-50);color:var(--vvd-color-neutral-600);cursor:pointer;font:var(--vvd-typography-base);border-radius:8px;outline:none;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;min-block-size:52px;inline-size:100%;padding:16px;display:flex;position:relative}@media (prefers-reduced-motion:no-preference){.control{transition:all .3s}}.control .upload-text{color:var(--vvd-color-neutral-600);isolation:isolate;pointer-events:none;text-align:center;justify-content:center;align-items:center;display:flex}@media (prefers-reduced-motion:no-preference){.control .upload-text{transition:all .3s}}.control.disabled{border-color:var(--vvd-color-neutral-300);background-color:var(--vvd-color-neutral-100);box-shadow:none;color:var(--vvd-color-neutral-300);pointer-events:none;transform:none}.control.disabled .upload-text{color:var(--vvd-color-neutral-300)}@media (hover:hover){.control:hover .upload-text{color:var(--vvd-color-neutral-800)}}.control.drag-hover .upload-text{color:var(--vvd-color-neutral-800)}.control:not(.size-expanded){min-block-size:52px}.control.size-expanded{min-block-size:120px}.control: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))}.control:active,.control:focus-visible{border-color:var(--vvd-color-cta-400);background-color:var(--vvd-color-cta-100);transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}@media (hover:hover){.control:hover{border-color:var(--vvd-color-cta-400);background-color:var(--vvd-color-cta-100);transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}}.control:active{transform:translateY(0);box-shadow:0 1px 4px #0000001a}.control.drag-hover{border-color:var(--vvd-color-cta-200);background-color:var(--vvd-color-cta-200);outline:2px dashed var(--vvd-color-cta-500);transform:scale(1.02)}.upload-icon{color:var(--vvd-color-cta-600);pointer-events:none}@media (prefers-reduced-motion:no-preference){.upload-icon{transition:all .3s;animation:2s ease-in-out infinite subtle-pulse}}@media (hover:hover){.control:hover .upload-icon{color:var(--vvd-color-cta-700);animation:none;transform:scale(1.1)}}.control:active .upload-icon{transform:scale(1.05)}.control.drag-hover .upload-icon{color:var(--vvd-color-neutral-800);animation:none;transform:scale(1.15)}.control.disabled .upload-icon{color:var(--vvd-color-neutral-300);animation:none}@keyframes subtle-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}.main{pointer-events:none}.preview{box-sizing:border-box;border:1px solid var(--vvd-color-neutral-300);background-color:var(--file-picker-list-item-background-color,var(--vvd-color-canvas));border-radius:8px;grid-template-rows:auto auto;grid-template-columns:1fr auto;inline-size:100%;padding:8px;display:grid}.preview .details{min-width:0;flex-direction:column;max-inline-size:100%;display:flex}.preview .details .filename{color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.preview .details .size{color:var(--vvd-color-neutral-600);font:var(--vvd-typography-base-condensed)}.preview .error-message{color:var(--vvd-color-alert-600);font:var(--vvd-typography-base-condensed-bold);align-items:center;gap:4px;margin-block-start:4px;display:flex}.preview:not(.has-error) .error-message{display:none}.preview.has-error{border:1px solid var(--vvd-color-alert-500);background-color:var(--vvd-color-alert-50)}.preview.has-error .size{display:none}.preview .remove-btn{grid-area:1/2/-1/-1;align-self:center;display:inline}.preview-list{--scrollbar-track-color:transparent;--scrollbar-thumb-color:color-mix(in sRGB, var(--vvd-color-neutral-950), transparent 70%);scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.preview-list ::-webkit-scrollbar{width:4px}.preview-list ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.preview-list ::-webkit-scrollbar-thumb{background-color:var(--scrollbar-fallback-track-color,var(--scrollbar-thumb-color));border:0;border-radius:4px}.preview-list{flex-direction:column;gap:12px;margin-block-start:12px;display:flex;overflow-y:auto}.preview-list:not(:has(.preview)){display:none}.hidden-input{visibility:hidden;width:0;height:0;position:absolute;top:0;left:0}";
9
16
  //#endregion
10
- //#region src/lib/header/header.ts
17
+ //#region src/lib/file-picker/data-transfer.ts
18
+ /** Extracts files from a DataTransfer, including files from directories. */
19
+ async function filesFromDataTransfer(dataTransfer) {
20
+ return dataTransfer.items?.[0]?.webkitGetAsEntry != null ? await filesFromDataTransferItems(dataTransfer.items) : Array.from(dataTransfer.files);
21
+ }
22
+ async function filesFromDataTransferItems(items) {
23
+ const result = [];
24
+ for (const item of items) {
25
+ const file = item.getAsFile();
26
+ if (file) result.push(Promise.resolve([file]));
27
+ else {
28
+ const entry = item.webkitGetAsEntry();
29
+ if (entry) result.push(filesFromEntry(entry, false));
30
+ }
31
+ }
32
+ return (await Promise.all(result)).flat();
33
+ }
34
+ var filesFromEntry = (entry, ignoreHiddenFiles) => {
35
+ const handleFileEntry = (file) => new Promise((resolve, reject) => {
36
+ file.file((f) => {
37
+ if (ignoreHiddenFiles && f.name.substring(0, 1) === ".") resolve([]);
38
+ else resolve([f]);
39
+ }, reject);
40
+ });
41
+ const promise = entry.isFile ? handleFileEntry(entry) : entry.isDirectory ? filesFromDirectory(entry) : Promise.resolve([]);
42
+ promise.catch(() => null);
43
+ return promise;
44
+ };
45
+ var filesFromDirectory = async (directory) => new Promise((resolve, reject) => {
46
+ const result = [];
47
+ const dirReader = directory.createReader();
48
+ const readEntries = () => {
49
+ dirReader.readEntries((entries) => {
50
+ for (const entry of entries) result.push(filesFromEntry(entry, true));
51
+ if (entries.length) readEntries();
52
+ else resolve(Promise.all(result).then((r) => r.flat()));
53
+ }, reject);
54
+ };
55
+ readEntries();
56
+ });
57
+ //#endregion
58
+ //#region src/lib/file-picker/accept.ts
59
+ /** Match a file against an accept string, like native file input */
60
+ function isAcceptedFileType(file, accept) {
61
+ if (!accept) return true;
62
+ const validTypes = accept.split(",");
63
+ const isBasePattern = (type) => /\/\*$/.test(type);
64
+ const baseType = (type) => type.replace(/\/.*$/, "");
65
+ for (let validType of validTypes) {
66
+ validType = validType.trim();
67
+ if (validType.charAt(0) === ".") {
68
+ if (file.name.toLowerCase().endsWith(validType.toLowerCase())) return true;
69
+ } else if (isBasePattern(validType)) {
70
+ if (baseType(file.type) === baseType(validType)) return true;
71
+ } else if (file.type === validType) return true;
72
+ }
73
+ return false;
74
+ }
75
+ //#endregion
76
+ //#region src/lib/file-picker/file-picker.ts
11
77
  /**
12
78
  * @public
13
- * @component header
14
- * @slot - Default slot.
15
- * @slot action-items - Nodes assigned to action-items slot will be set at the end of the header.
16
- * @slot app-content - Content vertically aligned with header.
79
+ * @component file-picker
80
+ * @slot helper-text - Describes how to use the file-picker. Alternative to the `helper-text` attribute.
81
+ * @event {CustomEvent<undefined>} change - Emitted when files are added or removed.
17
82
  */
18
- var Header = class extends DelegatesAria(VividElement) {
83
+ var FilePicker = class extends WithContextualHelp(WithFeedback(WithErrorText(FormElement(DelegatesAria(Localized(FormAssociated(VividElement))))))) {
19
84
  constructor(..._args) {
20
85
  super(..._args);
21
- this.elevationShadow = false;
22
- this.alternate = false;
86
+ this.singleFile = false;
87
+ this.maxFiles = null;
88
+ this.maxFileSize = 256;
89
+ this.valueChanged = (previous, next) => {
90
+ super.valueChanged(previous, next);
91
+ if (next === "" && this.files.length) this.removeAllFiles();
92
+ };
93
+ this.proxy = document.createElement("input");
94
+ this.setFormValue = (value, state) => {
95
+ if (typeof value === "string") return;
96
+ super.setFormValue(value, state);
97
+ };
98
+ this._customValidationError = null;
99
+ this.#customValidationChangeHandler = { handleChange: () => {
100
+ this._customValidationError = this.#customValidationChangeObserver.observe(this, ExecutionContext.default);
101
+ } };
102
+ this._dragHover = false;
103
+ this._allFiles = [];
104
+ }
105
+ /** @internal */
106
+ nameChanged(previous, next) {
107
+ super.nameChanged(previous, next);
108
+ this.#updateFormValue();
109
+ }
110
+ #updateFormValue() {
111
+ const files = this.files;
112
+ if (!this.name) this.setFormValue(null);
113
+ else {
114
+ const formData = new FormData();
115
+ for (const file of files) formData.append(this.name, file);
116
+ this.setFormValue(formData);
117
+ }
118
+ this.#setValueToAFakePathLikeNativeInput();
119
+ }
120
+ #setValueToAFakePathLikeNativeInput() {
121
+ this.value = this.files.length > 0 ? `C:\\fakepath\\${this.files[0].name}` : "";
122
+ }
123
+ /** @internal */
124
+ validate() {
125
+ super.validate(this.control);
126
+ }
127
+ /** @internal */
128
+ formResetCallback() {
129
+ this.removeAllFiles();
130
+ super.formResetCallback();
131
+ }
132
+ #getCustomValidationError() {
133
+ if (this.rejectedFiles.length > 0) return this.locale.filePicker.invalidFilesError;
134
+ return null;
135
+ }
136
+ /** @internal */
137
+ _customValidationErrorChanged() {
138
+ /* v8 ignore if -- @preserve */
139
+ if (this.proxy) this.proxy.setCustomValidity(this._customValidationError ?? "");
140
+ this.validate();
141
+ }
142
+ #customValidationChangeHandler;
143
+ #customValidationChangeObserver;
144
+ #startObservingCustomValidation() {
145
+ this.#customValidationChangeObserver = Observable.binding(() => this.#getCustomValidationError(), this.#customValidationChangeHandler, true);
146
+ this.#customValidationChangeHandler.handleChange();
147
+ }
148
+ #stopObservingCustomValidation() {
149
+ this.#customValidationChangeObserver.dispose();
150
+ }
151
+ connectedCallback() {
152
+ super.connectedCallback();
153
+ this.#startObservingCustomValidation();
154
+ }
155
+ disconnectedCallback() {
156
+ super.disconnectedCallback();
157
+ this.#stopObservingCustomValidation();
158
+ }
159
+ /** @internal */
160
+ _onDragEnter() {
161
+ if (this.disabled) return true;
162
+ this._dragHover = true;
163
+ return true;
164
+ }
165
+ /** @internal */
166
+ _onDragOver(e) {
167
+ if (this.disabled) return true;
168
+ if (!e.dataTransfer) return true;
169
+ const effect = e.dataTransfer.effectAllowed;
170
+ e.dataTransfer.dropEffect = "move" === effect || "linkMove" === effect ? "move" : "copy";
171
+ return false;
172
+ }
173
+ /** @internal */
174
+ _onDragLeave(e) {
175
+ if (this.disabled) return true;
176
+ /* v8 ignore else -- @preserve */
177
+ if (e.currentTarget === e.target) this._dragHover = false;
178
+ return true;
179
+ }
180
+ /** @internal */
181
+ _onDrop(e) {
182
+ if (this.disabled) return true;
183
+ this._dragHover = false;
184
+ if (!e.dataTransfer) return true;
185
+ filesFromDataTransfer(e.dataTransfer).then((files) => this.#addFiles(files)).catch((err) => {
186
+ console.error(err);
187
+ });
188
+ return false;
189
+ }
190
+ /** @internal */
191
+ _onDragEnd() {
192
+ if (this.disabled) return true;
193
+ this._dragHover = false;
194
+ return true;
195
+ }
196
+ /** @internal */
197
+ _onControlClick() {
198
+ /* v8 ignore if -- @preserve */
199
+ if (this.disabled) return;
200
+ this._hiddenInput.click();
201
+ }
202
+ /** @internal */
203
+ _onRemoveFileClick(file) {
204
+ if (this.disabled) return;
205
+ this._allFiles = this._allFiles.filter((f) => f !== file);
206
+ this.$emit("change");
207
+ }
208
+ /** @internal */
209
+ _allFilesChanged() {
210
+ this.#updateFormValue();
211
+ }
212
+ #addFiles(files) {
213
+ const newFiles = Array.from(files).filter((file) => !this._allFiles.some((existingFile) => existingFile.name === file.name && existingFile.size === file.size));
214
+ if (this.singleFile && newFiles.length > 0) this._allFiles = [newFiles[newFiles.length - 1]];
215
+ else this._allFiles = [...this._allFiles, ...newFiles];
216
+ this.$emit("change");
217
+ }
218
+ /** Removes all files from the File Picker. */
219
+ removeAllFiles() {
220
+ this._allFiles = [];
221
+ }
222
+ /**
223
+ * All files with their current validation status.
224
+ * @internal
225
+ */
226
+ get _validatedFiles() {
227
+ const validationError = (file, validFileIndex) => {
228
+ if (this.maxFileSize && file.size > this.maxFileSize * 1024 * 1024) return (this.fileTooBigError || this.locale.filePicker.fileTooBigError).replace("{{filesize}}", this._formatNumber(Math.round(file.size / 1024 / 10.24) / 100)).replace("{{maxFilesize}}", this._formatNumber(this.maxFileSize));
229
+ else if (!isAcceptedFileType(file, this.accept)) return this.invalidFileTypeError || this.locale.filePicker.invalidFileTypeError;
230
+ else if (typeof this.maxFiles === "number" && validFileIndex >= this.maxFiles) return (this.maxFilesExceededError || this.locale.filePicker.maxFilesExceededError).replace("{{maxFiles}}", String(this.maxFiles));
231
+ else return null;
232
+ };
233
+ const result = [];
234
+ let validFileIndex = 0;
235
+ for (const file of this._allFiles) {
236
+ const validatedFile = {
237
+ file,
238
+ validationError: validationError(file, validFileIndex)
239
+ };
240
+ result.push(validatedFile);
241
+ if (!validatedFile.validationError) validFileIndex++;
242
+ }
243
+ return result;
244
+ }
245
+ /** List of files that have been added to the file picker and passed validation */
246
+ get files() {
247
+ return this._validatedFiles.filter((f) => !f.validationError).map((f) => f.file);
248
+ }
249
+ /** List of files that have been added to the file picker but failed validation */
250
+ get rejectedFiles() {
251
+ return this._validatedFiles.filter((f) => !!f.validationError).map((f) => f.file);
252
+ }
253
+ /** @internal */
254
+ _onHiddenInputChange(e) {
255
+ this.#addFiles(this._hiddenInput.files);
256
+ this._hiddenInput.value = "";
257
+ e.stopPropagation();
258
+ }
259
+ /** @internal */
260
+ _formatNumber(value) {
261
+ const str = String(value);
262
+ if (this.locale.common.useCommaAsDecimalSeparator) return str.replace(".", ",");
263
+ return str;
23
264
  }
24
265
  };
25
266
  __decorate([attr({
26
- attribute: "elevation-shadow",
267
+ attribute: "single-file",
27
268
  mode: "boolean"
28
- })], Header.prototype, "elevationShadow", void 0);
29
- __decorate([attr({ mode: "boolean" })], Header.prototype, "alternate", void 0);
269
+ })], FilePicker.prototype, "singleFile", void 0);
270
+ __decorate([attr({
271
+ attribute: "max-files",
272
+ converter: nullableNumberConverter,
273
+ mode: "fromView"
274
+ })], FilePicker.prototype, "maxFiles", void 0);
275
+ __decorate([attr({
276
+ mode: "fromView",
277
+ attribute: "max-file-size"
278
+ })], FilePicker.prototype, "maxFileSize", void 0);
279
+ __decorate([attr], FilePicker.prototype, "accept", void 0);
280
+ __decorate([attr], FilePicker.prototype, "size", void 0);
281
+ __decorate([attr({ attribute: "invalid-file-type-error" })], FilePicker.prototype, "invalidFileTypeError", void 0);
282
+ __decorate([attr({ attribute: "max-files-exceeded-error" })], FilePicker.prototype, "maxFilesExceededError", void 0);
283
+ __decorate([attr({ attribute: "file-too-big-error" })], FilePicker.prototype, "fileTooBigError", void 0);
284
+ __decorate([observable], FilePicker.prototype, "_customValidationError", void 0);
285
+ __decorate([observable], FilePicker.prototype, "_dragHover", void 0);
286
+ __decorate([observable], FilePicker.prototype, "_allFiles", void 0);
287
+ __decorate([volatile], FilePicker.prototype, "_validatedFiles", null);
30
288
  //#endregion
31
- //#region src/lib/header/header.template.ts
32
- var headerTemplate = (context) => {
33
- const elevationTag = context.tagFor(Elevation);
289
+ //#region src/lib/file-picker/file-picker.template.ts
290
+ var filesizeBase = 1e3;
291
+ var dictFileSizeUnits = {
292
+ tb: "TB",
293
+ gb: "GB",
294
+ mb: "MB",
295
+ kb: "KB",
296
+ b: "b"
297
+ };
298
+ var renderFileSize = (x, size) => {
299
+ let selectedSize = 0;
300
+ let selectedUnit = "b";
301
+ /* v8 ignore else -- @preserve */
302
+ if (size > 0) {
303
+ const units = [
304
+ "tb",
305
+ "gb",
306
+ "mb",
307
+ "kb",
308
+ "b"
309
+ ];
310
+ for (let i = 0; i < units.length; i++) {
311
+ const unit = units[i];
312
+ if (size >= Math.pow(filesizeBase, 4 - i) / 10) {
313
+ selectedSize = size / Math.pow(filesizeBase, 4 - i);
314
+ selectedUnit = unit;
315
+ break;
316
+ }
317
+ }
318
+ selectedSize = Math.round(10 * selectedSize) / 10;
319
+ }
320
+ return html`<strong>${x._formatNumber(selectedSize)}</strong>
321
+ ${dictFileSizeUnits[selectedUnit]}`;
322
+ };
323
+ var FilePickerTemplate = (context) => {
324
+ const iconTag = context.tagFor(Icon);
325
+ const buttonTag = context.tagFor(Button);
34
326
  return html`
35
- <${elevationTag} dp="4" ?no-shadow=${(x) => !x.elevationShadow}>
36
- <header class="base" part="base" ${delegateAria()}>
37
- <!-- a container is needed to distinguish the surface background color of the
38
- element from its shadow when applying elevation with alternate -->
39
- <div class="container" part="${(x) => classNames(["vvd-theme-alternate", x.alternate])}">
40
- <section class="header-content">
41
- <slot></slot>
42
- </section>
43
- <section class="header-content">
44
- <slot name="action-items"></slot>
45
- </section>
46
- </div>
47
- </header>
48
- </${elevationTag}>
49
- <div class="app-content">
50
- <slot name="app-content"></slot>
51
- </div>
327
+ <div class="base">
328
+ <div class="label-wrapper" ?hidden=${(x) => !x.label && !x._hasContextualHelp}>
329
+ ${when((x) => x.label, html`<label class="label">${(x) => x.label}</label>`)}
330
+ <slot name="contextual-help" ${slotted("_contextualHelpSlottedContent")}></slot>
331
+ </div>
332
+ <div class="control-wrapper">
333
+ <button
334
+ type="button"
335
+ ${ref("control")}
336
+ class="${(x) => classNames("control", [`size-${x.size}`, Boolean(x.size)], ["drag-hover", x._dragHover], ["disabled", x.disabled])}"
337
+ ?disabled="${(x) => x.disabled}"
338
+ @click="${(x) => x._onControlClick()}"
339
+ @keydown="${() => false}"
340
+ @dragenter="${(x) => x._onDragEnter()}"
341
+ @dragover="${(x, c) => x._onDragOver(c.event)}"
342
+ @dragleave="${(x, c) => x._onDragLeave(c.event)}"
343
+ @drop="${(x, c) => x._onDrop(c.event)}"
344
+ @dragend="${(x) => x._onDragEnd()}"
345
+ ${delegateAria({ ariaDescribedBy: (x) => x._feedbackDescribedBy })}
346
+ >
347
+ <${iconTag}
348
+ class="upload-icon"
349
+ name="cloud-upload-line"
350
+ size="-4"
351
+ label="${(x) => x.locale.filePicker.uploadFilesLabel}"
352
+ ></${iconTag}>
353
+ <span class="upload-text"><slot></slot></span>
354
+ </button>
355
+ ${(x) => x._getFeedbackTemplate(context)}
356
+ </div>
357
+ <div class="preview-list">
358
+ ${repeat((x) => x._validatedFiles, html`
359
+ <div class="${(x) => classNames("preview", ["has-error", !!x.validationError])}">
360
+ <div class="details">
361
+ <div class="filename">${(x) => x.file.name}</div>
362
+ <div class="size">${(x, c) => renderFileSize(c.parent, x.file.size)}</div>
363
+ </div>
364
+ <div class="error-message">
365
+ <${iconTag} name="info-line" size="-6"></${iconTag}>
366
+ ${(x) => x.validationError}
367
+ </div>
368
+ <${buttonTag}
369
+ class="remove-btn" icon="delete-line" appearance="ghost-light" size="condensed"
370
+ ?disabled="${(_, c) => c.parent.disabled}"
371
+ aria-label="${(_, c) => c.parent.locale.filePicker.removeFileLabel}"
372
+ @click="${(x, c) => c.parent._onRemoveFileClick(x.file)}"></${buttonTag}>
373
+ </div>`)}
374
+ </div>
375
+ </div>
376
+ <input
377
+ ${ref("_hiddenInput")}
378
+ class="hidden-input"
379
+ aria-hidden="true"
380
+ type="file"
381
+ ?disabled="${(x) => x.disabled}"
382
+ ?multiple="${(x) => !x.singleFile && (x.maxFiles == null || x.maxFiles > 1)}"
383
+ accept="${(x) => x.accept || null}"
384
+ tabindex="-1"
385
+ @change="${(x, c) => x._onHiddenInputChange(c.event)}"
386
+ />
52
387
  `;
53
388
  };
54
389
  //#endregion
55
- //#region src/lib/header/definition.ts
390
+ //#region src/lib/file-picker/definition.ts
56
391
  /** @internal */
57
- var headerDefinition = defineVividComponent("header", Header, headerTemplate, [elevationDefinition], { styles: header_default });
392
+ var filePickerDefinition = defineVividComponent("file-picker", FilePicker, FilePickerTemplate, [
393
+ iconDefinition,
394
+ buttonDefinition,
395
+ feedbackMessageDefinition
396
+ ], {
397
+ styles: file_picker_default,
398
+ shadowOptions: { delegatesFocus: true }
399
+ });
58
400
  /**
59
- * Registers the header elements with the design system.
401
+ * Registers the file-picker element with the design system.
60
402
  *
61
403
  * @param prefix - the prefix to use for the component name
62
404
  */
63
- var registerHeader = createRegisterFunction(headerDefinition);
405
+ var registerFilePicker = createRegisterFunction(filePickerDefinition);
64
406
  //#endregion
65
- export { registerHeader as n, Header as r, headerDefinition as t };
407
+ export { registerFilePicker as n, FilePicker as r, filePickerDefinition as t };
@@ -1,75 +1,83 @@
1
1
  require("./chunk.cjs");
2
2
  const require_vivid_element = require("./vivid-element.cjs");
3
+ const require_decorate = require("./decorate.cjs");
4
+ const require_delegates_aria = require("./delegates-aria.cjs");
5
+ const require_definition = require("./definition7.cjs");
3
6
  let _microsoft_fast_element = require("@microsoft/fast-element");
4
- //#region src/lib/kbd-shortcut/kbd-shortcut.scss?inline
5
- var kbd_shortcut_default = ":host{display:inline-block}.base{white-space:nowrap;align-items:center;gap:.3em;display:inline-flex}";
7
+ let _microsoft_fast_web_utilities = require("@microsoft/fast-web-utilities");
8
+ //#region src/lib/header/header.scss?inline
9
+ var header_default = ".base{z-index:1;block-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) + calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16)));font:var(--vvd-typography-heading-4);inline-size:100%}.base .header-content{align-items:center;column-gap:4px;display:inline-flex}.container{box-sizing:border-box;background-color:var(--header-bg-color,var(--vvd-color-canvas));block-size:inherit;color:var(--vvd-color-canvas-text);justify-content:space-between;column-gap:12px;padding-block:8px;padding-inline:16px;display:flex}.container[part~=vvd-theme-alternate]{color-scheme:var(--vvd-color-scheme)}.app-content{--vvd-header-block-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) + calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16)))}";
6
10
  //#endregion
7
- //#region src/lib/kbd-shortcut/kbd-shortcut.ts
8
- /** Modifier key names in aria-keyshortcuts. */
9
- var MODIFIER_NAMES = new Set([
10
- "Control",
11
- "Alt",
12
- "Shift",
13
- "Meta"
14
- ]);
11
+ //#region src/lib/header/header.ts
15
12
  /**
16
13
  * @public
17
- * @component kbd-shortcut
18
- * @slot - Default slot for Kbd elements.
14
+ * @component header
15
+ * @slot - Default slot.
16
+ * @slot action-items - Nodes assigned to action-items slot will be set at the end of the header.
17
+ * @slot app-content - Content vertically aligned with header.
19
18
  */
20
- var KbdShortcut = class extends require_vivid_element.VividElement {
21
- /**
22
- * Returns a valid aria-keyshortcuts value based on the slotted kbd-key elements.
23
- * Modifiers are sorted to be first as required by the spec.
24
- * Returns null if no keys are available.
25
- */
26
- getKeyshortcutsValue() {
27
- const keys = Array.from(this.children).filter((el) => typeof el._getKeyshortcutsKey === "function");
28
- if (keys.length === 0) return null;
29
- const names = [];
30
- for (const key of keys) {
31
- const name = key._getKeyshortcutsKey();
32
- if (name !== null) names.push(name);
33
- }
34
- if (names.length === 0) return null;
35
- const modifiers = names.filter((n) => MODIFIER_NAMES.has(n));
36
- const nonModifiers = names.filter((n) => !MODIFIER_NAMES.has(n));
37
- return [...modifiers, ...nonModifiers].join("+");
19
+ var Header = class extends require_delegates_aria.DelegatesAria(require_vivid_element.VividElement) {
20
+ constructor(..._args) {
21
+ super(..._args);
22
+ this.elevationShadow = false;
23
+ this.alternate = false;
38
24
  }
39
25
  };
26
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
27
+ attribute: "elevation-shadow",
28
+ mode: "boolean"
29
+ })], Header.prototype, "elevationShadow", void 0);
30
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], Header.prototype, "alternate", void 0);
40
31
  //#endregion
41
- //#region src/lib/kbd-shortcut/kbd-shortcut.template.ts
42
- var KbdShortcutTemplate = () => {
43
- return _microsoft_fast_element.html`<span class="base" role="group"
44
- ><slot></slot
45
- ></span>`;
32
+ //#region src/lib/header/header.template.ts
33
+ var headerTemplate = (context) => {
34
+ const elevationTag = context.tagFor(require_definition.Elevation);
35
+ return _microsoft_fast_element.html`
36
+ <${elevationTag} dp="4" ?no-shadow=${(x) => !x.elevationShadow}>
37
+ <header class="base" part="base" ${require_delegates_aria.delegateAria()}>
38
+ <!-- a container is needed to distinguish the surface background color of the
39
+ element from its shadow when applying elevation with alternate -->
40
+ <div class="container" part="${(x) => (0, _microsoft_fast_web_utilities.classNames)("container", ["vvd-theme-alternate", x.alternate])}">
41
+ <section class="header-content" part="main">
42
+ <slot></slot>
43
+ </section>
44
+ <section class="header-content" part="action-items">
45
+ <slot name="action-items"></slot>
46
+ </section>
47
+ </div>
48
+ </header>
49
+ </${elevationTag}>
50
+ <div class="app-content">
51
+ <slot name="app-content"></slot>
52
+ </div>
53
+ `;
46
54
  };
47
55
  //#endregion
48
- //#region src/lib/kbd-shortcut/definition.ts
56
+ //#region src/lib/header/definition.ts
49
57
  /** @internal */
50
- var kbdShortcutDefinition = require_vivid_element.defineVividComponent("kbd-shortcut", KbdShortcut, KbdShortcutTemplate, [], { styles: kbd_shortcut_default });
58
+ var headerDefinition = require_vivid_element.defineVividComponent("header", Header, headerTemplate, [require_definition.elevationDefinition], { styles: header_default });
51
59
  /**
52
- * Registers the kbd-shortcut element with the design system.
60
+ * Registers the header elements with the design system.
53
61
  *
54
62
  * @param prefix - the prefix to use for the component name
55
63
  */
56
- var registerKbdShortcut = require_vivid_element.createRegisterFunction(kbdShortcutDefinition);
64
+ var registerHeader = require_vivid_element.createRegisterFunction(headerDefinition);
57
65
  //#endregion
58
- Object.defineProperty(exports, "KbdShortcut", {
66
+ Object.defineProperty(exports, "Header", {
59
67
  enumerable: true,
60
68
  get: function() {
61
- return KbdShortcut;
69
+ return Header;
62
70
  }
63
71
  });
64
- Object.defineProperty(exports, "kbdShortcutDefinition", {
72
+ Object.defineProperty(exports, "headerDefinition", {
65
73
  enumerable: true,
66
74
  get: function() {
67
- return kbdShortcutDefinition;
75
+ return headerDefinition;
68
76
  }
69
77
  });
70
- Object.defineProperty(exports, "registerKbdShortcut", {
78
+ Object.defineProperty(exports, "registerHeader", {
71
79
  enumerable: true,
72
80
  get: function() {
73
- return registerKbdShortcut;
81
+ return registerHeader;
74
82
  }
75
83
  });