@vonage/vivid 5.16.0 → 5.17.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 (317) 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/action-group/index.cjs +3 -3
  6. package/action-group/index.js +5 -5
  7. package/alert/index.cjs +3 -3
  8. package/alert/index.js +17 -17
  9. package/audio-player/index.cjs +16 -16
  10. package/audio-player/index.js +27 -27
  11. package/avatar/index.cjs +2 -2
  12. package/avatar/index.js +6 -6
  13. package/badge/index.cjs +2 -2
  14. package/badge/index.js +6 -6
  15. package/banner/index.cjs +3 -3
  16. package/banner/index.js +15 -15
  17. package/bundled/base-color-picker.cjs +2 -2
  18. package/bundled/base-color-picker.js +5 -5
  19. package/bundled/button.cjs +1 -1
  20. package/bundled/button.js +2 -2
  21. package/bundled/calendar-picker.template.cjs +2 -2
  22. package/bundled/calendar-picker.template.js +498 -498
  23. package/bundled/definition10.cjs +18 -30
  24. package/bundled/definition10.js +53 -155
  25. package/bundled/definition11.cjs +10 -19
  26. package/bundled/definition11.js +25 -74
  27. package/bundled/definition12.cjs +72 -18
  28. package/bundled/definition12.js +171 -107
  29. package/bundled/definition13.cjs +18 -17
  30. package/bundled/definition13.js +45 -65
  31. package/bundled/definition14.cjs +5 -10
  32. package/bundled/definition14.js +9 -27
  33. package/bundled/definition15.cjs +17 -71
  34. package/bundled/definition15.js +64 -181
  35. package/bundled/definition16.cjs +12 -4
  36. package/bundled/definition16.js +79 -14
  37. package/bundled/definition17.cjs +19 -13
  38. package/bundled/definition17.js +119 -70
  39. package/bundled/definition18.cjs +87 -12
  40. package/bundled/definition18.js +409 -52
  41. package/bundled/definition19.cjs +5 -87
  42. package/bundled/definition19.js +14 -422
  43. package/bundled/definition2.cjs +3 -3
  44. package/bundled/definition2.js +27 -27
  45. package/bundled/definition20.cjs +30 -5
  46. package/bundled/definition20.js +159 -9
  47. package/bundled/definition21.cjs +28 -19
  48. package/bundled/definition21.js +164 -47
  49. package/bundled/definition22.cjs +38 -23
  50. package/bundled/definition22.js +64 -82
  51. package/bundled/definition3.cjs +1 -1
  52. package/bundled/definition3.js +15 -15
  53. package/bundled/definition4.cjs +23 -38
  54. package/bundled/definition4.js +82 -64
  55. package/bundled/definition5.cjs +2 -2
  56. package/bundled/definition5.js +5 -5
  57. package/bundled/definition6.cjs +2 -2
  58. package/bundled/definition6.js +24 -24
  59. package/bundled/definition9.cjs +12 -30
  60. package/bundled/definition9.js +55 -148
  61. package/bundled/divider.cjs +1 -1
  62. package/bundled/divider.js +5 -5
  63. package/bundled/listbox.cjs +1 -1
  64. package/bundled/listbox.js +1 -1
  65. package/bundled/mixins.cjs +4 -4
  66. package/bundled/mixins.js +43 -43
  67. package/bundled/picker-field.template.cjs +7 -7
  68. package/bundled/picker-field.template.js +14 -14
  69. package/bundled/slider.template.cjs +7 -7
  70. package/bundled/slider.template.js +12 -12
  71. package/bundled/slottable-request.cjs +1 -1
  72. package/bundled/slottable-request.js +8 -38
  73. package/bundled/time-selection-picker.template.cjs +4 -4
  74. package/bundled/time-selection-picker.template.js +35 -35
  75. package/bundled/vivid-element.cjs +1 -1
  76. package/bundled/vivid-element.js +1 -1
  77. package/calendar/index.cjs +11 -11
  78. package/calendar/index.js +30 -237
  79. package/calendar-event/index.cjs +3 -3
  80. package/calendar-event/index.js +4 -4
  81. package/card/index.cjs +14 -11
  82. package/card/index.js +16 -13
  83. package/checkbox/index.cjs +1 -1
  84. package/checkbox/index.js +1 -1
  85. package/color-picker/definition.cjs +1 -1
  86. package/color-picker/definition.js +1 -1
  87. package/color-picker/index.cjs +6 -6
  88. package/color-picker/index.js +24 -24
  89. package/combobox/definition.cjs +1 -1
  90. package/combobox/definition.js +1 -1
  91. package/combobox/index.cjs +9 -8
  92. package/combobox/index.js +32 -28
  93. package/contextual-help/definition.cjs +1 -1
  94. package/contextual-help/definition.js +1 -1
  95. package/contextual-help/index.cjs +1 -1
  96. package/contextual-help/index.js +1 -1
  97. package/custom-elements.json +1027 -615
  98. package/data-grid/definition.js +1 -1
  99. package/data-grid/index.cjs +17 -17
  100. package/data-grid/index.js +261 -264
  101. package/date-picker/index.cjs +1 -1
  102. package/date-picker/index.js +12 -12
  103. package/date-range-picker/index.cjs +1 -1
  104. package/date-range-picker/index.js +7 -7
  105. package/date-time-picker/index.cjs +4 -4
  106. package/date-time-picker/index.js +24 -24
  107. package/dial-pad/index.cjs +3 -2
  108. package/dial-pad/index.js +6 -5
  109. package/dialog/index.cjs +4 -4
  110. package/dialog/index.js +5 -5
  111. package/divider/index.cjs +1 -1
  112. package/divider/index.js +1 -1
  113. package/fab/index.cjs +3 -3
  114. package/fab/index.js +8 -8
  115. package/file-picker/index.cjs +16 -13
  116. package/file-picker/index.js +31 -28
  117. package/header/index.cjs +4 -4
  118. package/header/index.js +5 -5
  119. package/index.cjs +24 -21
  120. package/index.js +11 -11
  121. package/lib/combobox/combobox.d.ts +0 -3
  122. package/lib/date-time-picker/date-time-picker.d.ts +0 -4
  123. package/lib/dial-pad/dial-pad.d.ts +6 -2
  124. package/lib/dialog/dialog.d.ts +0 -1
  125. package/lib/menu/menu.d.ts +0 -1
  126. package/lib/option/option.d.ts +0 -1
  127. package/lib/rich-text-editor/rte/exports.d.ts +1 -0
  128. package/lib/rich-text-editor/rte/features/alignment.d.ts +1 -1
  129. package/lib/rich-text-editor/rte/features/character-count.d.ts +21 -0
  130. package/lib/rich-text-editor/rte/features/font-size-picker.d.ts +1 -1
  131. package/lib/rich-text-editor/rte/features/internal/basic-text-blocks.d.ts +1 -1
  132. package/lib/rich-text-editor/rte/features/keyboard-shortcuts.d.ts +1 -1
  133. package/lib/rich-text-editor/rte/features/text-color-picker.d.ts +1 -1
  134. package/lib/rich-text-editor/rte/public-interface.d.ts +6 -0
  135. package/lib/searchable-select/option-tag.d.ts +0 -1
  136. package/lib/table/definition.d.ts +2 -1
  137. package/lib/table/table-header-cell.d.ts +3 -0
  138. package/lib/table/table-sorting-button.d.ts +415 -0
  139. package/lib/table/table-sorting-button.template.d.ts +3 -0
  140. package/locales/de-DE.cjs +4 -178
  141. package/locales/de-DE.js +2 -179
  142. package/locales/en-GB.cjs +4 -9
  143. package/locales/en-GB.js +2 -10
  144. package/locales/en-US.cjs +268 -2
  145. package/locales/en-US.js +265 -1
  146. package/locales/ja-JP.cjs +4 -171
  147. package/locales/ja-JP.js +2 -172
  148. package/locales/zh-CN.cjs +4 -172
  149. package/locales/zh-CN.js +2 -173
  150. package/menu/index.cjs +1 -1
  151. package/menu/index.js +1 -1
  152. package/menu-item/index.cjs +1 -1
  153. package/menu-item/index.js +1 -1
  154. package/nav-disclosure/index.cjs +3 -3
  155. package/nav-disclosure/index.js +8 -8
  156. package/nav-item/index.cjs +1 -1
  157. package/nav-item/index.js +7 -7
  158. package/note/index.cjs +2 -2
  159. package/note/index.js +6 -6
  160. package/number-field/index.cjs +4 -4
  161. package/number-field/index.js +31 -31
  162. package/option/definition.cjs +1 -1
  163. package/option/definition.js +1 -1
  164. package/option/index.cjs +1 -1
  165. package/option/index.js +1 -1
  166. package/package.json +7 -8
  167. package/pagination/index.cjs +3 -3
  168. package/pagination/index.js +15 -15
  169. package/popover/index.cjs +4 -4
  170. package/popover/index.js +5 -5
  171. package/progress/index.cjs +2 -2
  172. package/progress/index.js +5 -5
  173. package/radio/index.cjs +1 -1
  174. package/radio/index.js +1 -1
  175. package/radio-group/index.cjs +4 -4
  176. package/radio-group/index.js +10 -10
  177. package/range-slider/index.cjs +4 -4
  178. package/range-slider/index.js +17 -17
  179. package/rich-text-editor/definition.cjs +1 -0
  180. package/rich-text-editor/definition.js +2 -2
  181. package/rich-text-editor/index.cjs +13 -13
  182. package/rich-text-editor/index.js +1886 -1829
  183. package/rich-text-view/index.cjs +1 -1
  184. package/rich-text-view/index.js +8 -8
  185. package/searchable-select/index.cjs +12 -12
  186. package/searchable-select/index.js +25 -25
  187. package/select/index.cjs +1 -1
  188. package/select/index.js +1 -1
  189. package/selectable-box/index.cjs +7 -7
  190. package/selectable-box/index.js +11 -11
  191. package/shared/foundation/test-utilities/fixture.d.ts +1 -1
  192. package/shared/patterns/linkable.d.ts +1 -1
  193. package/simple-color-picker/index.cjs +3 -3
  194. package/simple-color-picker/index.js +10 -10
  195. package/split-button/index.cjs +5 -5
  196. package/split-button/index.js +10 -10
  197. package/status/index.cjs +2 -2
  198. package/status/index.js +12 -12
  199. package/switch/index.cjs +3 -3
  200. package/switch/index.js +5 -5
  201. package/tab/index.cjs +1 -1
  202. package/tab/index.js +1 -1
  203. package/tab-panel/index.cjs +1 -1
  204. package/tab-panel/index.js +1 -1
  205. package/table/definition.cjs +17 -14
  206. package/table/definition.js +3 -2
  207. package/table/index.cjs +19 -10
  208. package/table/index.js +69 -21
  209. package/tabs/index.cjs +2 -2
  210. package/tabs/index.js +4 -4
  211. package/tag/index.cjs +7 -7
  212. package/tag/index.js +9 -9
  213. package/tag-group/index.cjs +3 -3
  214. package/tag-group/index.js +5 -5
  215. package/text-area/index.cjs +2 -2
  216. package/text-area/index.js +12 -12
  217. package/text-field/definition.cjs +1 -1
  218. package/text-field/definition.js +1 -1
  219. package/text-field/index.cjs +1 -1
  220. package/text-field/index.js +1 -1
  221. package/time-picker/index.cjs +1 -1
  222. package/time-picker/index.js +1 -1
  223. package/toggletip/definition.cjs +1 -1
  224. package/toggletip/definition.js +1 -1
  225. package/toggletip/index.cjs +1 -1
  226. package/toggletip/index.js +1 -1
  227. package/tooltip/definition.cjs +1 -1
  228. package/tooltip/definition.js +1 -1
  229. package/tooltip/index.cjs +1 -1
  230. package/tooltip/index.js +1 -1
  231. package/tree-item/index.cjs +1 -1
  232. package/tree-item/index.js +1 -1
  233. package/tree-view/index.cjs +3 -3
  234. package/tree-view/index.js +17 -17
  235. package/unbundled/button.cjs +2 -2
  236. package/unbundled/button.js +2 -2
  237. package/unbundled/calendar-picker.template.cjs +4347 -9
  238. package/unbundled/calendar-picker.template.js +4345 -7
  239. package/unbundled/chunk.cjs +0 -22
  240. package/unbundled/definition13.cjs +1 -8
  241. package/unbundled/definition13.js +1 -8
  242. package/unbundled/definition14.cjs +2 -2
  243. package/unbundled/definition14.js +2 -2
  244. package/unbundled/definition2.cjs +1 -1
  245. package/unbundled/definition2.js +1 -1
  246. package/unbundled/definition21.cjs +1 -2
  247. package/unbundled/definition21.js +1 -2
  248. package/unbundled/definition22.cjs +7 -2
  249. package/unbundled/definition22.js +7 -2
  250. package/unbundled/definition24.cjs +98 -979
  251. package/unbundled/definition24.js +93 -974
  252. package/unbundled/definition25.cjs +37 -322
  253. package/unbundled/definition25.js +33 -318
  254. package/unbundled/definition26.cjs +317 -91
  255. package/unbundled/definition26.js +313 -87
  256. package/unbundled/definition27.cjs +94 -192
  257. package/unbundled/definition27.js +91 -183
  258. package/unbundled/definition28.cjs +387 -395
  259. package/unbundled/definition28.js +387 -395
  260. package/unbundled/definition29.cjs +189 -110
  261. package/unbundled/definition29.js +180 -107
  262. package/unbundled/definition30.cjs +520 -36
  263. package/unbundled/definition30.js +519 -35
  264. package/unbundled/definition32.cjs +477 -477
  265. package/unbundled/definition32.js +475 -475
  266. package/unbundled/definition33.cjs +87 -2
  267. package/unbundled/definition33.js +77 -4
  268. package/unbundled/definition35.cjs +2 -2
  269. package/unbundled/definition35.js +2 -2
  270. package/unbundled/definition36.cjs +1 -1
  271. package/unbundled/definition36.js +1 -1
  272. package/unbundled/definition37.cjs +6 -2
  273. package/unbundled/definition37.js +6 -2
  274. package/unbundled/definition38.cjs +7 -5
  275. package/unbundled/definition38.js +7 -5
  276. package/unbundled/definition39.cjs +1 -0
  277. package/unbundled/definition39.js +1 -0
  278. package/unbundled/definition42.cjs +22 -11
  279. package/unbundled/definition42.js +22 -11
  280. package/unbundled/definition49.cjs +3 -3
  281. package/unbundled/definition49.js +3 -3
  282. package/unbundled/definition56.cjs +437 -9506
  283. package/unbundled/definition56.js +340 -9415
  284. package/unbundled/definition57.cjs +5 -5
  285. package/unbundled/definition57.js +5 -5
  286. package/unbundled/definition58.cjs +4 -3
  287. package/unbundled/definition58.js +2 -1
  288. package/unbundled/definition59.cjs +4 -3
  289. package/unbundled/definition59.js +4 -3
  290. package/unbundled/definition62.cjs +2 -2
  291. package/unbundled/definition62.js +2 -2
  292. package/unbundled/definition64.cjs +1 -1
  293. package/unbundled/definition64.js +1 -1
  294. package/unbundled/definition71.cjs +2 -2
  295. package/unbundled/definition71.js +2 -2
  296. package/unbundled/definition72.cjs +1 -2
  297. package/unbundled/definition72.js +1 -2
  298. package/unbundled/definition75.cjs +3 -51711
  299. package/unbundled/definition75.js +1 -51711
  300. package/unbundled/listbox.cjs +1 -1
  301. package/unbundled/listbox.js +1 -1
  302. package/unbundled/localized.cjs +2 -2
  303. package/unbundled/localized.js +1 -1
  304. package/unbundled/picker-field.template.cjs +1 -1
  305. package/unbundled/picker-field.template.js +1 -1
  306. package/unbundled/slottable-request.cjs +2 -3168
  307. package/unbundled/slottable-request.js +3 -3097
  308. package/unbundled/time-selection-picker.template.cjs +1 -1
  309. package/unbundled/time-selection-picker.template.js +1 -1
  310. package/unbundled/vivid-element.cjs +1 -1
  311. package/unbundled/vivid-element.js +1 -1
  312. package/video-player/index.cjs +3 -3
  313. package/video-player/index.js +9 -9
  314. package/vivid.api.json +220 -282
  315. package/unbundled/chunk.js +0 -33
  316. package/unbundled/en-US.cjs +0 -447
  317. package/unbundled/en-US.js +0 -443
@@ -1,1038 +1,157 @@
1
1
  require("./chunk.cjs");
2
2
  const require_vivid_element = require("./vivid-element.cjs");
3
- const require_definition = require("./definition2.cjs");
4
3
  const require_decorate = require("./decorate.cjs");
5
- const require_delegates_aria = require("./delegates-aria.cjs");
6
- const require_with_success_text = require("./with-success-text.cjs");
7
- const require_with_error_text = require("./with-error-text.cjs");
8
- const require_with_contextual_help = require("./with-contextual-help.cjs");
9
- const require_trapped_focus = require("./trapped-focus.cjs");
10
- const require_definition$1 = require("./definition7.cjs");
4
+ const require_localized = require("./localized.cjs");
11
5
  const require_dialog = require("./dialog.cjs");
12
- const require_definition$2 = require("./definition10.cjs");
13
- const require_mixins = require("./mixins.cjs");
14
- const require_base_color_picker = require("./base-color-picker.cjs");
15
- const require_definition$3 = require("./definition25.cjs");
16
- const require_definition$4 = require("./definition26.cjs");
6
+ const require_definition = require("./definition10.cjs");
7
+ const require_anchored = require("./anchored.cjs");
17
8
  let _microsoft_fast_element = require("@microsoft/fast-element");
18
9
  let _microsoft_fast_web_utilities = require("@microsoft/fast-web-utilities");
19
- //#region src/lib/color-picker/color-picker.scss?inline
20
- var color_picker_default$1 = ".palette{grid-template-columns:repeat(var(--swatches-per-row,7), var(--_color-swatch-size,24px));display:grid}.swatch{background-color:var(--swatch-color);block-size:var(--_color-swatch-size,24px);color:var(--vvd-color-canvas);cursor:pointer;inline-size:var(--_color-swatch-size,24px);border-radius:4px;padding:0;position:relative}.swatch:not(.contrast){border:none}.swatch.contrast{border:1px solid var(--vvd-color-neutral-400);color:var(--vvd-color-canvas-text)}.swatch:focus-visible{box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:none;outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px));--focus-stroke-gap-color:transparent;--focus-inset:-3px}:host{--_low-ink-color:var(--vvd-color-neutral-600);display:inline-block}.base{min-inline-size:var(--_color-picker-min-inline-size,280px);display:inline-block}.control{inline-size:100%}.button{box-sizing:border-box;background-color:var(--button-color,var(--vvd-color-canvas-text));block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8));color:var(--vvd-color-canvas);inline-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8));padding-inline:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8)) / 4);vertical-align:middle;border:0;border-radius:4px;align-items:center;margin:0;text-decoration:none;display:inline-flex}.button.contrast{color:var(--vvd-color-canvas-text)}.button:not(.disabled){cursor:pointer}.button.disabled{background-color:var(--vvd-color-neutral-300);color:var(--vvd-color-neutral-500);cursor:not-allowed}.button:focus-visible{--focus-stroke-gap-color:transparent;box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px))}.button [data-vvd-component=icon]{font-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8)) / 2);line-height:1}.dialog{min-inline-size:var(--_color-picker-popup-min-inline-size,264px);flex-direction:column;display:flex}.dialog .header{justify-content:space-between;align-items:center;padding-block:8px;padding-inline:16px;display:inline-flex}.dialog .header-title{font:var(--vvd-typography-base-extended-bold);margin-block:0}.dialog .body{flex-direction:column;gap:16px;margin-block-end:16px;padding-inline:16px;display:flex}.dialog .hex-input-wrapper{align-items:stretch;gap:8px;display:flex}.dialog .hex-input-wrapper [data-vvd-component=button]{flex:none}.dialog .footer{border-top:1px solid var(--vvd-color-neutral-200);padding:16px}.dialog .footer-header{margin-block-end:8px}.dialog .swatches-count{color:var(--_low-ink-color);font:var(--vvd-typography-base)}.dialog .palette{gap:var(--_color-swatches-gap,8px)}vvd-hex-input{flex:auto;min-width:0}vvd-hex-input::part(input),vvd-hex-input>input{box-sizing:border-box;background-color:var(--vvd-color-canvas);width:100%;height:100%;box-shadow:inset 0 0 0 1px var(--vvd-color-neutral-500);font:var(--vvd-typography-base);padding-inline:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2.5);border:0;border-radius:8px;outline:#0000}vvd-hex-input::part(input):focus-visible,vvd-hex-input>input:focus-visible{box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px));--focus-stroke-gap-color:transparent}vvd-hex-picker{width:auto;height:auto;gap:16px;inline-size:100%}vvd-hex-picker::part(saturation){border-radius:8px;block-size:120px}vvd-hex-picker::part(hue){border-radius:8px;flex:0 0 8px}vvd-hex-picker::part(hue-pointer){width:10px;height:10px}vvd-hex-picker::part(saturation-pointer){width:18px;height:18px}::part(popup-base){inline-size:max-content;min-block-size:var(--_color-picker-popup-min-inline-size,264px);min-inline-size:var(--_color-picker-popup-min-inline-size,264px)}.visually-hidden{clip:rect(0 0 0 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}";
10
+ //#region src/lib/toggletip/toggletip.scss?inline
11
+ var toggletip_default = ":host :host{display:var(--_popup-display,inline)}:host :host([slotted-anchor]){--_popup-display:contents}.content-wrapper{width:var(--toggletip-inline-size,auto);max-inline-size:var(--toggletip-max-inline-size,30ch);padding:16px}.headline{font:var(--vvd-typography-base-bold);margin:0}.action-items{justify-content:flex-end;gap:10px;display:flex}::slotted([slot=action-items]){margin-block-start:16px}";
21
12
  //#endregion
22
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/utils/math.js
23
- var clamp = (number, min = 0, max = 1) => {
24
- return number > max ? max : number < min ? min : number;
25
- };
26
- var round = (number, digits = 0, base = Math.pow(10, digits)) => {
27
- return Math.round(base * number) / base;
28
- };
29
- 360 / (Math.PI * 2);
30
- var hexToHsva = (hex) => rgbaToHsva(hexToRgba(hex));
31
- var hexToRgba = (hex) => {
32
- if (hex[0] === "#") hex = hex.substring(1);
33
- if (hex.length < 6) return {
34
- r: parseInt(hex[0] + hex[0], 16),
35
- g: parseInt(hex[1] + hex[1], 16),
36
- b: parseInt(hex[2] + hex[2], 16),
37
- a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1
38
- };
39
- return {
40
- r: parseInt(hex.substring(0, 2), 16),
41
- g: parseInt(hex.substring(2, 4), 16),
42
- b: parseInt(hex.substring(4, 6), 16),
43
- a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1
44
- };
45
- };
46
- var hsvaToHex = (hsva) => rgbaToHex(hsvaToRgba(hsva));
47
- var hsvaToHsla = ({ h, s, v, a }) => {
48
- const hh = (200 - s) * v / 100;
49
- return {
50
- h: round(h),
51
- s: round(hh > 0 && hh < 200 ? s * v / 100 / (hh <= 100 ? hh : 200 - hh) * 100 : 0),
52
- l: round(hh / 2),
53
- a: round(a, 2)
54
- };
55
- };
56
- var hsvaToHslString = (hsva) => {
57
- const { h, s, l } = hsvaToHsla(hsva);
58
- return `hsl(${h}, ${s}%, ${l}%)`;
59
- };
60
- var hsvaToRgba = ({ h, s, v, a }) => {
61
- h = h / 360 * 6;
62
- s = s / 100;
63
- v = v / 100;
64
- const hh = Math.floor(h), b = v * (1 - s), c = v * (1 - (h - hh) * s), d = v * (1 - (1 - h + hh) * s), module = hh % 6;
65
- return {
66
- r: round([
67
- v,
68
- c,
69
- b,
70
- b,
71
- d,
72
- v
73
- ][module] * 255),
74
- g: round([
75
- d,
76
- v,
77
- v,
78
- c,
79
- b,
80
- b
81
- ][module] * 255),
82
- b: round([
83
- b,
84
- b,
85
- d,
86
- v,
87
- v,
88
- c
89
- ][module] * 255),
90
- a: round(a, 2)
91
- };
92
- };
93
- var format = (number) => {
94
- const hex = number.toString(16);
95
- return hex.length < 2 ? "0" + hex : hex;
96
- };
97
- var rgbaToHex = ({ r, g, b, a }) => {
98
- const alphaHex = a < 1 ? format(round(a * 255)) : "";
99
- return "#" + format(r) + format(g) + format(b) + alphaHex;
100
- };
101
- var rgbaToHsva = ({ r, g, b, a }) => {
102
- const max = Math.max(r, g, b);
103
- const delta = max - Math.min(r, g, b);
104
- const hh = delta ? max === r ? (g - b) / delta : max === g ? 2 + (b - r) / delta : 4 + (r - g) / delta : 0;
105
- return {
106
- h: round(60 * (hh < 0 ? hh + 6 : hh)),
107
- s: round(max ? delta / max * 100 : 0),
108
- v: round(max / 255 * 100),
109
- a
110
- };
111
- };
112
- //#endregion
113
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/utils/compare.js
114
- var equalColorObjects = (first, second) => {
115
- if (first === second) return true;
116
- for (const prop in first) if (first[prop] !== second[prop]) return false;
117
- return true;
118
- };
119
- var equalHex = (first, second) => {
120
- if (first.toLowerCase() === second.toLowerCase()) return true;
121
- return equalColorObjects(hexToRgba(first), hexToRgba(second));
122
- };
123
- //#endregion
124
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/utils/dom.js
125
- var cache = {};
126
- var tpl = (html) => {
127
- let template = cache[html];
128
- if (!template) {
129
- template = document.createElement("template");
130
- template.innerHTML = html;
131
- cache[html] = template;
132
- }
133
- return template;
134
- };
135
- var fire = (target, type, detail) => {
136
- target.dispatchEvent(new CustomEvent(type, {
137
- bubbles: true,
138
- detail
139
- }));
140
- };
141
- //#endregion
142
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/components/slider.js
143
- var hasTouched = false;
144
- var isTouch = (e) => "touches" in e;
145
- var isValid = (event) => {
146
- if (hasTouched && !isTouch(event)) return false;
147
- if (!hasTouched) hasTouched = isTouch(event);
148
- return true;
149
- };
150
- var pointerMove = (target, event) => {
151
- const pointer = isTouch(event) ? event.touches[0] : event;
152
- const rect = target.el.getBoundingClientRect();
153
- fire(target.el, "move", target.getMove({
154
- x: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),
155
- y: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height)
156
- }));
157
- };
158
- var keyMove = (target, event) => {
159
- const keyCode = event.keyCode;
160
- if (keyCode > 40 || target.xy && keyCode < 37 || keyCode < 33) return;
161
- event.preventDefault();
162
- fire(target.el, "move", target.getMove({
163
- x: keyCode === 39 ? .01 : keyCode === 37 ? -.01 : keyCode === 34 ? .05 : keyCode === 33 ? -.05 : keyCode === 35 ? 1 : keyCode === 36 ? -1 : 0,
164
- y: keyCode === 40 ? .01 : keyCode === 38 ? -.01 : 0
165
- }, true));
166
- };
167
- var Slider = class {
168
- constructor(root, part, aria, xy) {
169
- const template = tpl(`<div role="slider" tabindex="0" part="${part}" ${aria}><div part="${part}-pointer"></div></div>`);
170
- root.appendChild(template.content.cloneNode(true));
171
- const el = root.querySelector(`[part=${part}]`);
172
- el.addEventListener("mousedown", this);
173
- el.addEventListener("touchstart", this);
174
- el.addEventListener("keydown", this);
175
- this.el = el;
176
- this.xy = xy;
177
- this.nodes = [el.firstChild, el];
178
- }
179
- set dragging(state) {
180
- const toggleEvent = state ? document.addEventListener : document.removeEventListener;
181
- toggleEvent(hasTouched ? "touchmove" : "mousemove", this);
182
- toggleEvent(hasTouched ? "touchend" : "mouseup", this);
183
- }
184
- handleEvent(event) {
185
- switch (event.type) {
186
- case "mousedown":
187
- case "touchstart":
188
- event.preventDefault();
189
- if (!isValid(event) || !hasTouched && event.button != 0) return;
190
- this.el.focus();
191
- pointerMove(this, event);
192
- this.dragging = true;
193
- break;
194
- case "mousemove":
195
- case "touchmove":
196
- event.preventDefault();
197
- pointerMove(this, event);
198
- break;
199
- case "mouseup":
200
- case "touchend":
201
- this.dragging = false;
202
- break;
203
- case "keydown":
204
- keyMove(this, event);
205
- break;
206
- }
207
- }
208
- style(styles) {
209
- styles.forEach((style, i) => {
210
- for (const p in style) this.nodes[i].style.setProperty(p, style[p]);
211
- });
212
- }
213
- };
214
- //#endregion
215
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/components/hue.js
216
- var Hue = class extends Slider {
217
- constructor(root) {
218
- super(root, "hue", "aria-label=\"Hue\" aria-valuemin=\"0\" aria-valuemax=\"360\"", false);
219
- }
220
- update({ h }) {
221
- this.h = h;
222
- this.style([{
223
- left: `${h / 360 * 100}%`,
224
- color: hsvaToHslString({
225
- h,
226
- s: 100,
227
- v: 100,
228
- a: 1
229
- })
230
- }]);
231
- this.el.setAttribute("aria-valuenow", `${round(h)}`);
232
- }
233
- getMove(offset, key) {
234
- return { h: key ? clamp(this.h + offset.x * 360, 0, 360) : 360 * offset.x };
235
- }
236
- };
237
- //#endregion
238
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/components/saturation.js
239
- var Saturation = class extends Slider {
240
- constructor(root) {
241
- super(root, "saturation", "aria-label=\"Color\"", true);
242
- }
243
- update(hsva) {
244
- this.hsva = hsva;
245
- this.style([{
246
- top: `${100 - hsva.v}%`,
247
- left: `${hsva.s}%`,
248
- color: hsvaToHslString(hsva)
249
- }, { "background-color": hsvaToHslString({
250
- h: hsva.h,
251
- s: 100,
252
- v: 100,
253
- a: 1
254
- }) }]);
255
- this.el.setAttribute("aria-valuetext", `Saturation ${round(hsva.s)}%, Brightness ${round(hsva.v)}%`);
256
- }
257
- getMove(offset, key) {
258
- return {
259
- s: key ? clamp(this.hsva.s + offset.x * 100, 0, 100) : offset.x * 100,
260
- v: key ? clamp(this.hsva.v - offset.y * 100, 0, 100) : Math.round(100 - offset.y * 100)
261
- };
262
- }
263
- };
264
- //#endregion
265
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/styles/color-picker.js
266
- var color_picker_default = `:host{display:flex;flex-direction:column;position:relative;width:200px;height:200px;user-select:none;-webkit-user-select:none;cursor:default}:host([hidden]){display:none!important}[role=slider]{position:relative;touch-action:none;user-select:none;-webkit-user-select:none;outline:0}[role=slider]:last-child{border-radius:0 0 8px 8px}[part$=pointer]{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;display:flex;place-content:center center;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}[part$=pointer]::after{content:"";width:100%;height:100%;border-radius:inherit;background-color:currentColor}[role=slider]:focus [part$=pointer]{transform:translate(-50%,-50%) scale(1.1)}`;
267
- //#endregion
268
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/styles/hue.js
269
- var hue_default = `[part=hue]{flex:0 0 24px;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}[part=hue-pointer]{top:50%;z-index:2}`;
270
- //#endregion
271
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/styles/saturation.js
272
- var saturation_default = `[part=saturation]{flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,rgba(255,255,255,0));box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part=saturation-pointer]{z-index:3}`;
273
- //#endregion
274
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/components/color-picker.js
275
- var $isSame = Symbol("same");
276
- var $color$1 = Symbol("color");
277
- var $hsva = Symbol("hsva");
278
- var $update$1 = Symbol("update");
279
- var $parts = Symbol("parts");
280
- var $css = Symbol("css");
281
- var $sliders = Symbol("sliders");
282
- var ColorPicker$1 = class extends HTMLElement {
283
- static get observedAttributes() {
284
- return ["color"];
285
- }
286
- get [$css]() {
287
- return [
288
- color_picker_default,
289
- hue_default,
290
- saturation_default
291
- ];
292
- }
293
- get [$sliders]() {
294
- return [Saturation, Hue];
295
- }
296
- get color() {
297
- return this[$color$1];
298
- }
299
- set color(newColor) {
300
- if (!this[$isSame](newColor)) {
301
- const newHsva = this.colorModel.toHsva(newColor);
302
- this[$update$1](newHsva);
303
- this[$color$1] = newColor;
304
- }
305
- }
306
- constructor() {
307
- super();
308
- const template = tpl(`<style>${this[$css].join("")}</style>`);
309
- const root = this.attachShadow({ mode: "open" });
310
- root.appendChild(template.content.cloneNode(true));
311
- root.addEventListener("move", this);
312
- this[$parts] = this[$sliders].map((slider) => new slider(root));
313
- }
314
- connectedCallback() {
315
- if (this.hasOwnProperty("color")) {
316
- const value = this.color;
317
- delete this["color"];
318
- this.color = value;
319
- } else if (!this.color) this.color = this.colorModel.defaultColor;
320
- }
321
- attributeChangedCallback(_attr, _oldVal, newVal) {
322
- const color = this.colorModel.fromAttr(newVal);
323
- if (!this[$isSame](color)) this.color = color;
324
- }
325
- handleEvent(event) {
326
- const oldHsva = this[$hsva];
327
- const newHsva = {
328
- ...oldHsva,
329
- ...event.detail
330
- };
331
- this[$update$1](newHsva);
332
- let newColor;
333
- if (!equalColorObjects(newHsva, oldHsva) && !this[$isSame](newColor = this.colorModel.fromHsva(newHsva))) {
334
- this[$color$1] = newColor;
335
- fire(this, "color-changed", { value: newColor });
336
- }
337
- }
338
- [$isSame](color) {
339
- return this.color && this.colorModel.equal(color, this.color);
340
- }
341
- [$update$1](hsva) {
342
- this[$hsva] = hsva;
343
- this[$parts].forEach((part) => part.update(hsva));
344
- }
345
- };
346
- //#endregion
347
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/entrypoints/hex.js
348
- var colorModel = {
349
- defaultColor: "#000",
350
- toHsva: hexToHsva,
351
- fromHsva: ({ h, s, v }) => hsvaToHex({
352
- h,
353
- s,
354
- v,
355
- a: 1
356
- }),
357
- equal: equalHex,
358
- fromAttr: (color) => color
359
- };
360
- var HexBase = class extends ColorPicker$1 {
361
- get colorModel() {
362
- return colorModel;
363
- }
364
- };
365
- //#endregion
366
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/hex-color-picker.js
367
- /**
368
- * A color picker custom element that uses HEX format.
369
- *
370
- * @element hex-color-picker
371
- *
372
- * @prop {string} color - Selected color in HEX format.
373
- * @attr {string} color - Selected color in HEX format.
374
- *
375
- * @fires color-changed - Event fired when color property changes.
376
- *
377
- * @csspart hue - A hue selector container.
378
- * @csspart saturation - A saturation selector container
379
- * @csspart hue-pointer - A hue pointer element.
380
- * @csspart saturation-pointer - A saturation pointer element.
381
- */
382
- var HexColorPicker = class extends HexBase {};
383
- customElements.define("hex-color-picker", HexColorPicker);
384
- //#endregion
385
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/utils/validate.js
386
- var matcher = /^#?([0-9A-F]{3,8})$/i;
387
- var validHex = (value, alpha) => {
388
- const match = matcher.exec(value);
389
- const length = match ? match[1].length : 0;
390
- return length === 3 || length === 6 || !!alpha && length === 4 || !!alpha && length === 8;
391
- };
392
- //#endregion
393
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/lib/entrypoints/hex-input.js
394
- var template = tpl("<slot><input part=\"input\" spellcheck=\"false\"></slot>");
395
- var escape = (hex, alpha) => hex.replace(/([^0-9A-F]+)/gi, "").substring(0, alpha ? 8 : 6);
396
- var $alpha = Symbol("alpha");
397
- var $color = Symbol("color");
398
- var $saved = Symbol("saved");
399
- var $input = Symbol("input");
400
- var $init = Symbol("init");
401
- var $prefix = Symbol("prefix");
402
- var $update = Symbol("update");
403
- var HexInputBase = class extends HTMLElement {
404
- static get observedAttributes() {
405
- return [
406
- "alpha",
407
- "color",
408
- "prefixed"
409
- ];
410
- }
411
- get color() {
412
- return this[$color];
413
- }
414
- set color(hex) {
415
- this[$color] = hex;
416
- this[$update](hex);
417
- }
418
- get alpha() {
419
- return this[$alpha];
420
- }
421
- set alpha(alpha) {
422
- this[$alpha] = alpha;
423
- this.toggleAttribute("alpha", alpha);
424
- const color = this.color;
425
- if (color && !validHex(color, alpha)) this.color = color.startsWith("#") ? color.substring(0, color.length === 5 ? 4 : 7) : color.substring(0, color.length === 4 ? 3 : 6);
426
- }
427
- get prefixed() {
428
- return this[$prefix];
429
- }
430
- set prefixed(prefixed) {
431
- this[$prefix] = prefixed;
432
- this.toggleAttribute("prefixed", prefixed);
433
- this[$update](this.color);
434
- }
435
- constructor() {
436
- super();
437
- const root = this.attachShadow({ mode: "open" });
438
- root.appendChild(template.content.cloneNode(true));
439
- root.firstElementChild.addEventListener("slotchange", () => this[$init](root));
440
- }
441
- connectedCallback() {
442
- this[$init](this.shadowRoot);
443
- if (this.hasOwnProperty("alpha")) {
444
- const value = this.alpha;
445
- delete this["alpha"];
446
- this.alpha = value;
447
- } else this.alpha = this.hasAttribute("alpha");
448
- if (this.hasOwnProperty("prefixed")) {
449
- const value = this.prefixed;
450
- delete this["prefixed"];
451
- this.prefixed = value;
452
- } else this.prefixed = this.hasAttribute("prefixed");
453
- if (this.hasOwnProperty("color")) {
454
- const value = this.color;
455
- delete this["color"];
456
- this.color = value;
457
- } else if (this.color == null) this.color = this.getAttribute("color") || "";
458
- else if (this[$color]) this[$update](this[$color]);
459
- }
460
- handleEvent(event) {
461
- const { value } = event.target;
462
- switch (event.type) {
463
- case "input":
464
- const hex = escape(value, this.alpha);
465
- this[$saved] = this.color;
466
- if (validHex(hex, this.alpha) || value === "") {
467
- this.color = hex;
468
- this.dispatchEvent(new CustomEvent("color-changed", {
469
- bubbles: true,
470
- detail: { value: hex ? "#" + hex : "" }
471
- }));
472
- }
473
- break;
474
- case "blur": if (value && !validHex(value, this.alpha)) this.color = this[$saved];
475
- }
476
- }
477
- attributeChangedCallback(attr, _oldVal, newVal) {
478
- if (attr === "color" && this.color !== newVal) this.color = newVal;
479
- const hasBooleanAttr = newVal != null;
480
- if (attr === "alpha") {
481
- if (this.alpha !== hasBooleanAttr) this.alpha = hasBooleanAttr;
482
- }
483
- if (attr === "prefixed") {
484
- if (this.prefixed !== hasBooleanAttr) this.prefixed = hasBooleanAttr;
485
- }
486
- }
487
- [$init](root) {
488
- let input = this.querySelector("input");
489
- if (!input) {
490
- let c;
491
- while (c = this.firstChild) c.remove();
492
- input = root.querySelector("input");
493
- }
494
- input.addEventListener("input", this);
495
- input.addEventListener("blur", this);
496
- this[$input] = input;
497
- this[$update](this.color);
498
- }
499
- [$update](hex) {
500
- if (this[$input]) this[$input].value = hex == null || hex == "" ? "" : (this.prefixed ? "#" : "") + escape(hex, this.alpha);
501
- }
502
- };
503
- //#endregion
504
- //#region ../../node_modules/.pnpm/vanilla-colorful@0.7.2/node_modules/vanilla-colorful/hex-input.js
505
- /**
506
- * A custom element for entering color in HEX format.
507
- *
508
- * @element hex-input
509
- *
510
- * @prop {string} color - Color in HEX format.
511
- * @attr {string} color - Selected color in HEX format.
512
- * @prop {boolean} alpha - When true, `#rgba` and `#rrggbbaa` color formats are allowed.
513
- * @attr {boolean} alpha - Allows `#rgba` and `#rrggbbaa` color formats.
514
- * @prop {boolean} prefixed - When true, `#` prefix is displayed in the input.
515
- * @attr {boolean} prefixed - Enables `#` prefix displaying.
516
- *
517
- * @fires color-changed - Event fired when color is changed.
518
- *
519
- * @csspart input - A native input element.
520
- */
521
- var HexInput = class extends HexInputBase {};
522
- customElements.define("hex-input", HexInput);
523
- //#endregion
524
- //#region src/lib/color-picker/color-picker.ts
525
- var VC_HEX_PICKER_TAG = "vvd-hex-picker";
526
- var VC_HEX_INPUT_TAG = "vvd-hex-input";
527
- var VvdHexPicker = class extends HexColorPicker {
528
- static {
529
- this.displayName = "VvdHexPicker";
530
- }
531
- };
532
- var VvdHexInput = class extends HexInput {
533
- static {
534
- this.displayName = "VvdHexInput";
535
- }
536
- };
537
- /* v8 ignore if -- @preserve */
538
- if (!customElements.get(VC_HEX_PICKER_TAG)) customElements.define(VC_HEX_PICKER_TAG, VvdHexPicker);
539
- /* v8 ignore if -- @preserve */
540
- if (!customElements.get(VC_HEX_INPUT_TAG)) customElements.define(VC_HEX_INPUT_TAG, VvdHexInput);
541
- var vcPickerTag = VC_HEX_PICKER_TAG;
542
- var vcInputTag = VC_HEX_INPUT_TAG;
13
+ //#region src/lib/toggletip/toggletip.ts
543
14
  /**
544
15
  * @public
545
- * @component color-picker
546
- * @slot helper-text - Describes how to use the text-field. Alternative to the `helper-text` attribute.
547
- * @slot popup-text - Overrides the default "Color Picker" title of the Popup window.
548
- * @slot swatches-text - Overrides the default "Saved colors:" text above color swatches.
549
- * @event {CustomEvent<undefined>} change - Fires when the value changes
550
- * @vueModel modelValue value input `event.currentTarget.value`
16
+ * @component toggletip
17
+ * @slot - The content to display in the toggletip.
18
+ * @slot anchor - Used to set the anchor element for the toggletip.
19
+ * @slot action-items - The content to display in the toggletip action items.
20
+ * @testSelector byHeadline byHeadline
21
+ * @testQuery open open true
22
+ * @testQuery closed open false
551
23
  */
552
- var ColorPicker = class extends require_with_contextual_help.WithContextualHelp(require_mixins.WithFeedback(require_with_error_text.WithErrorText(require_with_success_text.WithSuccessText(require_delegates_aria.DelegatesAria(require_trapped_focus.TrappedFocus(require_base_color_picker.BaseColorPicker(require_vivid_element.VividElement))))))) {
24
+ var Toggletip = class extends require_localized.Localized(require_anchored.Anchored(require_vivid_element.VividElement)) {
553
25
  constructor(..._args) {
554
26
  super(..._args);
555
- this.disableSavedColors = false;
556
- this.savedColors = [];
557
- this.maxSwatches = 6;
558
- this.copyIconName = "copy-2-line";
559
- this._copyValueToClipboard = async (value) => {
560
- try {
561
- await navigator.clipboard.writeText(value);
562
- this._setTemporaryCopyIcon("check-circle-line");
563
- this._ariaLiveDescription = this.locale.colorPicker.copySuccessMessage(value);
564
- } catch {
565
- alert(this.locale.colorPicker.copyErrorText);
566
- this._setTemporaryCopyIcon("error-line");
567
- this._ariaLiveDescription = this.locale.colorPicker.copyErrorText;
568
- }
569
- };
570
- this._ariaLiveDescription = "";
571
- }
572
- static {
573
- this.HEX_COLOR_PATTERN = /^#(([0-9a-fA-F]{2}){3}|([0-9a-fA-F]){3})$/;
574
- }
575
- /**
576
- * @internal
577
- */
578
- placeholderChanged() {
579
- /* v8 ignore if -- @preserve */
580
- if (this.proxy instanceof HTMLInputElement) this.proxy.placeholder = this.placeholder;
581
- }
582
- /**
583
- * Change event handler for inner control.
584
- * @remarks
585
- * @internal
586
- */
587
- handleChange() {
588
- this.$emit("change");
589
- }
590
- /**
591
- * @internal
592
- */
593
- openChanged(_oldValue, newValue) {
594
- if (newValue && this.isConnected) requestAnimationFrame(() => {
595
- this._refreshCanvasColor();
596
- });
597
- }
598
- /**
599
- * @internal
600
- */
601
- savedColorsKeyChanged() {
602
- this.savedColors = this._loadSavedColors();
603
- }
604
- /**
605
- * @internal
606
- */
607
- get _savedColorsStorageKey() {
608
- if (this.savedColorsKey) return this.savedColorsKey;
609
- return `vvd-saved-colors:${this.tagName.toLowerCase()}`;
610
- }
611
- /**
612
- * @internal
613
- */
614
- _handleColorSaving() {
615
- this._saveCurrentColor();
616
- }
617
- /**
618
- * @internal
619
- */
620
- _saveCurrentColor() {
621
- const value = this.value;
622
- if (typeof value !== "string" || !require_base_color_picker.isValidHexColor(value)) return;
623
- const swatches = Array.isArray(this.savedColors) ? [...this.savedColors] : [];
624
- const idx = swatches.findIndex((s) => s?.value === value);
625
- if (idx !== -1) swatches.splice(idx, 1);
626
- swatches.unshift({ value });
627
- this.savedColors = swatches.slice(0, this._maxSwatchesNormalized);
628
- this._setSavedColors(this.savedColors);
629
- }
630
- /**
631
- * @internal
632
- */
633
- _loadSavedColors() {
634
- try {
635
- const savedColors = localStorage.getItem(this._savedColorsStorageKey);
636
- if (!savedColors) return [];
637
- const parsed = JSON.parse(savedColors);
638
- if (!Array.isArray(parsed)) return [];
639
- return parsed.filter((x) => x && typeof x.value === "string" && require_base_color_picker.isValidHexColor(x.value)).map((x) => ({
640
- value: x.value,
641
- label: typeof x.label === "string" ? x.label : void 0
642
- }));
643
- } catch {
644
- return [];
645
- }
646
- }
647
- /**
648
- * @internal
649
- */
650
- _setSavedColors(swatches) {
651
- try {
652
- localStorage.setItem(this._savedColorsStorageKey, JSON.stringify(swatches));
653
- } catch {}
654
- }
655
- /**
656
- * Get all color swatches combined, both from swatches property and saved colors
657
- * @internal
658
- */
659
- get allSwatches() {
660
- const predefinedColors = Array.isArray(this.swatches) ? this.swatches : [];
661
- const savedColors = Array.isArray(this.savedColors) ? this.savedColors : [];
662
- const seen = /* @__PURE__ */ new Set();
663
- const merged = [];
664
- const appendIfUniqueAndValid = (swatch) => {
665
- if (!swatch || typeof swatch.value !== "string") return;
666
- if (!require_base_color_picker.isValidHexColor(swatch.value) || seen.has(swatch.value)) return;
667
- seen.add(swatch.value);
668
- merged.push(swatch);
669
- };
670
- if (!this.disableSavedColors) savedColors.forEach(appendIfUniqueAndValid);
671
- predefinedColors.forEach(appendIfUniqueAndValid);
672
- return merged.slice(0, this._maxSwatchesNormalized);
673
- }
674
- /**
675
- * @internal
676
- */
677
- get _maxSwatchesNormalized() {
678
- return Number.isFinite(this.maxSwatches) ? Math.max(0, Math.floor(this.maxSwatches)) : 0;
679
- }
680
- /**
681
- * @internal
682
- */
683
- maxSwatchesChanged() {
684
- const maxCount = this._maxSwatchesNormalized;
685
- if (this.savedColors?.length > maxCount) {
686
- this.savedColors = this.savedColors.slice(0, maxCount);
687
- this._setSavedColors(this.savedColors);
688
- }
689
- }
690
- /**
691
- * @internal
692
- */
693
- _onPickerColorChanged(e) {
694
- if (typeof e.detail?.value === "string") this.value = e.detail?.value;
695
- }
696
- /**
697
- * @internal
698
- */
699
- valueChanged(_oldVal, newVal) {
700
- if (this._vcHexPickerEl && typeof newVal === "string") this._vcHexPickerEl.color = newVal;
701
- if (this._vcHexInputEl && typeof newVal === "string") this._vcHexInputEl.color = newVal;
702
- }
703
- /**
704
- * @internal
705
- */
706
- _onTextFieldInput(event) {
707
- this.value = event.currentTarget.value;
708
- }
709
- /**
710
- * @internal
711
- */
712
- get _buttonColor() {
713
- /* v8 ignore else -- @preserve */
714
- if (!this._canvasColor) this._refreshCanvasColor();
715
- if (this.value && require_base_color_picker.isValidHexColor(this.value)) return this.value;
716
- return "var(--vvd-color-canvas-text)";
717
- }
718
- /**
719
- * @internal
720
- */
721
- _onButtonClick() {
722
- this.open = !this.open;
723
- }
724
- /**
725
- * @internal
726
- */
727
- _handleCloseRequest() {
27
+ this.alternate = false;
28
+ this.placement = "right";
728
29
  this.open = false;
729
30
  }
31
+ #originalAriaLabel = null;
730
32
  /**
731
33
  * @internal
732
34
  */
733
- _isInPath(e, el) {
734
- if (!el) return false;
735
- const path = e.composedPath?.();
736
- return !!(path && path.includes(el));
35
+ openChanged(oldValue, newValue) {
36
+ if (oldValue === void 0) return;
37
+ if (newValue) this.setAttribute("role", "status");
38
+ else this.removeAttribute("role");
39
+ this.#updateListeners();
40
+ if (this._anchorEl) this.#updateAnchor(this._anchorEl);
737
41
  }
738
- /**
739
- * @internal
740
- */
741
- #closeOnPointerOutside = (e) => {
742
- if (this._isInPath(e, this._buttonEl) || this._isInPath(e, this._popupEl)) return;
743
- this.open = false;
744
- };
745
42
  connectedCallback() {
746
43
  super.connectedCallback();
747
- this.savedColors = this._loadSavedColors();
748
- document.addEventListener("mousedown", this.#closeOnPointerOutside, true);
44
+ this.#updateListeners();
749
45
  }
750
46
  disconnectedCallback() {
751
47
  super.disconnectedCallback();
752
- document.removeEventListener("mousedown", this.#closeOnPointerOutside, true);
48
+ this.#updateListeners();
753
49
  }
754
- #iconResetTimer = null;
755
50
  /**
756
51
  * @internal
757
52
  */
758
- _setTemporaryCopyIcon(name, ms = 2e3) {
759
- this.copyIconName = name;
760
- if (this.#iconResetTimer) clearTimeout(this.#iconResetTimer);
761
- this.#iconResetTimer = setTimeout(() => {
762
- this.copyIconName = "copy-2-line";
763
- this.#iconResetTimer = null;
764
- }, ms);
53
+ _anchorElChanged(oldValue, newValue) {
54
+ if (oldValue) this.#cleanupAnchor(oldValue);
55
+ if (newValue) this.#setupAnchor(newValue);
765
56
  }
766
- /**
767
- * @internal
768
- */
769
- _onBaseKeydown(event) {
770
- if (this.open && require_dialog.handleEscapeKeyAndStopPropogation(event)) {
771
- this.open = false;
772
- return false;
773
- }
774
- if (this._trappedFocus(event, () => this._focusableElsWithinDialog())) return false;
775
- return true;
57
+ #setupAnchor(a) {
58
+ a.addEventListener("click", this.#openIfClosed, true);
59
+ this.#originalAriaLabel = a.ariaLabel;
60
+ a.ariaLabel = `${this.locale.toggletip.anchorLabel(a.ariaLabel || "")}`;
61
+ this.#updateAnchor(a);
776
62
  }
777
- /**
778
- * @internal
779
- */
780
- _focusableElsWithinDialog() {
781
- return this._popupEl.querySelectorAll("button:not([role=\"gridcell\"]), [data-vvd-component=\"button\"], vwc-button:not([role=\"gridcell\"])");
63
+ #updateAnchor(a) {
64
+ a.setAttribute("aria-expanded", this.open.toString());
65
+ a.setAttribute("data-expanded", this.open.toString());
782
66
  }
783
- /**
784
- * @internal
785
- */
786
- _handleCellKeydown(event, value, index, isSaveCell) {
787
- if (event.key === "Tab") {
788
- event.preventDefault();
789
- const focusableEls = this._focusableElsWithinDialog();
790
- const idx = Array.prototype.indexOf.call(focusableEls, event.currentTarget);
791
- focusableEls[event.shiftKey ? (idx - 1 + focusableEls.length) % focusableEls.length : (idx + 1) % focusableEls.length]?.focus();
792
- return false;
67
+ #cleanupAnchor(a) {
68
+ a.removeEventListener("click", this.#openIfClosed, true);
69
+ a.removeAttribute("aria-expanded");
70
+ a.removeAttribute("data-expanded");
71
+ /* v8 ignore else -- @preserve */
72
+ if (a.ariaLabel) a.ariaLabel = this.#originalAriaLabel;
73
+ }
74
+ #openIfClosed = () => {
75
+ if (!this.open) _microsoft_fast_element.Updates.enqueue(() => this.open = true);
76
+ };
77
+ #updateListeners() {
78
+ document.removeEventListener("click", this.#closeOnClickOutside);
79
+ document.removeEventListener("keydown", this.#closeOnEscape);
80
+ if (this.open && this.isConnected) {
81
+ document.addEventListener("click", this.#closeOnClickOutside);
82
+ document.addEventListener("keydown", this.#closeOnEscape);
793
83
  }
794
- return super._handleCellKeydown(event, value, index, isSaveCell);
795
84
  }
796
- /**
797
- * @internal
798
- */
799
- _handleSwatchSelection(value) {
85
+ #closeOnClickOutside = (e) => {
86
+ const clickedOutside = !this.contains(e.target);
87
+ const clickedOnAnchor = this._anchorEl?.contains(e.target);
88
+ if (clickedOutside || clickedOnAnchor) this.open = false;
89
+ };
90
+ #closeOnEscape = (e) => {
800
91
  /* v8 ignore else -- @preserve */
801
- if (this.value !== value) this._ariaLiveDescription = this.locale.colorPicker.selectionSuccessMessage(value);
802
- super._handleSwatchSelection(value);
803
- }
92
+ if (e.key === "Escape") this.open = false;
93
+ };
804
94
  };
805
- require_decorate.__decorate([_microsoft_fast_element.attr], ColorPicker.prototype, "placeholder", void 0);
806
- require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ attribute: "saved-colors-key" })], ColorPicker.prototype, "savedColorsKey", void 0);
807
- require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
808
- mode: "boolean",
809
- attribute: "disable-saved-colors"
810
- })], ColorPicker.prototype, "disableSavedColors", void 0);
811
- require_decorate.__decorate([_microsoft_fast_element.observable], ColorPicker.prototype, "savedColors", void 0);
812
- require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
813
- attribute: "max-swatches",
814
- mode: "fromView",
815
- converter: _microsoft_fast_element.nullableNumberConverter
816
- })], ColorPicker.prototype, "maxSwatches", void 0);
817
- require_decorate.__decorate([_microsoft_fast_element.observable], ColorPicker.prototype, "copyIconName", void 0);
818
- require_decorate.__decorate([_microsoft_fast_element.observable], ColorPicker.prototype, "_ariaLiveDescription", void 0);
95
+ require_decorate.__decorate([_microsoft_fast_element.attr], Toggletip.prototype, "headline", void 0);
96
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], Toggletip.prototype, "alternate", void 0);
97
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "fromView" })], Toggletip.prototype, "placement", void 0);
98
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], Toggletip.prototype, "open", void 0);
819
99
  //#endregion
820
- //#region src/lib/color-picker/color-picker.template.ts
821
- function renderTextField(textFieldTag, iconTag) {
822
- const getClasses = (_) => (0, _microsoft_fast_web_utilities.classNames)("control");
100
+ //#region src/lib/toggletip/toggletip.template.ts
101
+ var getClasses = (_) => (0, _microsoft_fast_web_utilities.classNames)("control");
102
+ var ToggletipTemplate = (context) => {
103
+ const popup = context.tagFor(require_definition.Popup);
823
104
  return _microsoft_fast_element.html`
824
- <${textFieldTag}
825
- id="text-field"
826
- class="${getClasses}"
827
- pattern="${ColorPicker.HEX_COLOR_PATTERN.source}"
828
- maxlength="7"
829
- label="${(x) => x.label}"
830
- :value="${(x) => x.value}"
831
- placeholder="${(x) => x.placeholder}"
832
- helper-text="${(x) => x.helperText}"
833
- error-text="${(x) => x.errorValidationMessage}"
834
- success-text="${(x) => x.successText}"
835
- ?disabled="${(x) => x.disabled}"
836
- ?required="${(x) => x.required}"
837
- @input='${(x, c) => x._onTextFieldInput(c.event)}'
838
- @change="${(x) => x.handleChange()}"
839
- @blur="${(x) => {
840
- x.$emit("blur", void 0, { bubbles: false });
841
- }}"
842
- @focus="${(x) => {
843
- x.$emit("focus", void 0, { bubbles: false });
105
+ ${require_anchored.anchorSlotTemplateFactory()}
106
+ <${popup}
107
+ @keydown="${(x, { event }) => {
108
+ if (x.open && require_dialog.handleEscapeKeyAndStopPropogation(event)) return false;
109
+ return true;
844
110
  }}"
845
- ${require_delegates_aria.delegateAria()}
846
- ${(0, _microsoft_fast_element.ref)("_textFieldEl")}
111
+ class="${getClasses}"
112
+ arrow
113
+ :anchor="${(x) => x._anchorEl}"
114
+ :open="${(x) => x.open}"
115
+ ?alternate="${(x) => !x.alternate}"
116
+ placement="${(x) => x.placement}"
117
+ exportparts="vvd-theme-alternate"
847
118
  >
848
- <button
849
- aria-label="${(x) => x.locale.colorPicker.pickerButtonLabel}"
850
- aria-expanded="${(x) => x.open}"
851
- aria-haspopup="dialog"
852
- class="button ${(x) => (0, _microsoft_fast_web_utilities.classNames)(x._applyContrastClass(x._buttonColor) ? "contrast" : "", x.disabled ? "disabled" : "")}"
853
- style="--button-color: ${(x) => x._buttonColor};"
854
- ?disabled="${(x) => x.disabled}"
855
- @click="${(x) => x._onButtonClick()}"
856
- slot="action-items"
857
- ${(0, _microsoft_fast_element.ref)("_buttonEl")}>
858
- <${iconTag} name="edit-line"></${iconTag}>
859
- </button>
860
- <slot
861
- slot="${(x) => x._helperTextSlottedContent?.length ? "helper-text" : void 0}"
862
- name="helper-text"
863
- ${(0, _microsoft_fast_element.slotted)("_helperTextSlottedContent")}
864
- ></slot>
865
- <slot
866
- slot='${(x) => x._contextualHelpSlottedContent?.length ? "contextual-help" : void 0}'
867
- name='contextual-help'
868
- ${(0, _microsoft_fast_element.slotted)("_contextualHelpSlottedContent")}
869
- ></slot>
870
- </${textFieldTag}>
871
- `;
872
- }
873
- function renderPopupHeader(buttonTag, iconTag) {
874
- return _microsoft_fast_element.html`
875
- <div class="header">
876
- <h2 class="header-title" id="color-picker-title">
877
- <slot name="popup-text">${(x) => x.locale.colorPicker.popupLabel}</slot>
878
- </h2>
879
- <${buttonTag} size="condensed"
880
- aria-label="${(x) => x.locale.colorPicker.closeButtonLabel}"
881
- @click="${(x) => x._handleCloseRequest()}">
882
- <${iconTag} slot="icon" name="close-line"></${iconTag}>
883
- </${buttonTag}>
884
- </div>
885
- `;
886
- }
887
- function renderPopupBody(buttonTag, iconTag, tooltipTag) {
888
- return _microsoft_fast_element.html`
889
- <div class="body">
890
- <${_microsoft_fast_element.html.partial(vcPickerTag)}
891
- part="hex-picker"
892
- color="${(x) => x.value}"
893
- @color-changed="${(x, c) => x._onPickerColorChanged(c.event)}"
894
- ${(0, _microsoft_fast_element.ref)("_vcHexPickerEl")}
895
- ></${_microsoft_fast_element.html.partial(vcPickerTag)}>
896
- <div class="hex-input-wrapper">
897
- <${_microsoft_fast_element.html.partial(vcInputTag)}
898
- part="hex-input"
899
- prefixed
900
- color="${(x) => x.value}"
901
- @color-changed="${(x, c) => x._onPickerColorChanged(c.event)}"
902
- ${(0, _microsoft_fast_element.ref)("_vcHexInputEl")}
903
- >
904
- <input name="hex-code-input" aria-label="${(x) => x.locale.colorPicker.hexInputLabel}"
905
- placeholder="${(x) => x.placeholder}"
906
- @blur="${(x, c) => c.event.stopImmediatePropagation()}"
907
- part="input">
908
- </${_microsoft_fast_element.html.partial(vcInputTag)}>
909
- <${tooltipTag} placement="top"
910
- text="${(x) => x.locale.colorPicker.copyButtonLabel}"
911
- exportparts="vvd-theme-alternate">
912
- <${buttonTag}
913
- slot="anchor" size="normal"
914
- aria-label="${(x) => x.locale.colorPicker.copyButtonLabel}"
915
- @click="${(x) => x._copyValueToClipboard(x.value)}">
916
- <${iconTag} slot="icon" name="${(x) => x.copyIconName}"></${iconTag}>
917
- </${buttonTag}>
918
- </${tooltipTag}>
919
- </div>
920
- </div>
921
- `;
922
- }
923
- function renderPopupFooter(buttonTag, iconTag, tooltipTag) {
924
- return _microsoft_fast_element.html`
925
- <div class="footer">
926
- <div class="footer-header">
927
- <span class="footer-title" id="color-picker-footer-title"
928
- ><slot name="swatches-text"
929
- >${(x) => x.locale.colorPicker.swatchesLabel}</slot
930
- ></span
931
- >
932
- ${(0, _microsoft_fast_element.when)((x) => !x.disableSavedColors, renderSwatchesCount())}
933
- </div>
934
- <div
935
- class="palette"
936
- role="grid"
937
- aria-rowcount="${(x) => Math.ceil(x.allSwatches.length / x._getRowLength())}"
938
- aria-colcount="${(x) => x._getRowLength()}"
939
- style="--swatches-per-row: ${(x) => x._getRowLength()};"
940
- aria-labelledby="color-picker-footer-title"
941
- >
942
- ${(0, _microsoft_fast_element.repeat)((x) => x.allSwatches, (x) => x._renderColorSwatch(iconTag, tooltipTag), { positioning: true })}
943
- ${(0, _microsoft_fast_element.when)((x) => !x.disableSavedColors, _microsoft_fast_element.html`
944
- <${tooltipTag} placement="top"
945
- text="${(x) => x.locale.colorPicker.saveButtonLabel}"
946
- exportparts="vvd-theme-alternate">
947
- <${buttonTag}
948
- slot="anchor"
949
- appearance="outlined"
950
- size="super-condensed"
951
- role="gridcell"
952
- tabindex="${(x) => x.allSwatches.length ? "-1" : "0"}"
953
- aria-label="${(x) => x.locale.colorPicker.saveButtonLabel}"
954
- @click="${(x) => x._saveCurrentColor()}"
955
- @keydown="${(x, c) => x._handleCellKeydown(c.event, x.value, x.allSwatches.length, true)}">
956
- <${iconTag} slot="icon" name="plus-line"></${iconTag}>
957
- </${buttonTag}>
958
- </${tooltipTag}>
959
- `)}
119
+ <div class="content-wrapper">
120
+ ${(0, _microsoft_fast_element.when)((x) => x.headline, _microsoft_fast_element.html`<h2 class="headline">${(x) => x.headline}</h2>`)}
121
+ <slot></slot>
122
+ <div class="action-items"><slot name="action-items"></slot></div>
960
123
  </div>
961
- </div>
962
- `;
963
- }
964
- function renderSwatchesCount() {
965
- return _microsoft_fast_element.html`
966
- <span
967
- id="swatches-count"
968
- class="swatches-count"
969
- aria-label="${(x) => x.locale.colorPicker.maxSwatchesMessage(x.allSwatches.length, x.maxSwatches)}"
970
- >${(x) => `${x.allSwatches.length}/${x.maxSwatches}`}</span
971
- >
972
- `;
973
- }
974
- var ColorPickerTemplate = (context) => {
975
- const textFieldTag = context.tagFor(require_definition$3.TextField);
976
- const iconTag = context.tagFor(require_definition.Icon);
977
- const popupTag = context.tagFor(require_definition$2.Popup);
978
- const buttonTag = context.tagFor(require_definition$1.Button);
979
- const tooltipTag = context.tagFor(require_definition$4.Tooltip);
980
- return _microsoft_fast_element.html`
981
- <div class="base" @keydown="${(x, { event }) => x._onBaseKeydown(event)}">
982
- <span aria-live="assertive" aria-relevant="text" class="visually-hidden">
983
- ${(x) => x._ariaLiveDescription}
984
- </span>
985
- ${renderTextField(textFieldTag, iconTag)}
986
- <${popupTag}
987
- :open="${(x) => x.open}"
988
- :anchor="${(x) => x._buttonEl}"
989
- placement="top"
990
- offset="10"
991
- ${(0, _microsoft_fast_element.ref)("_popupEl")}>
992
- <div class="dialog"
993
- role="dialog"
994
- aria-modal="true"
995
- aria-labelledby="color-picker-title">
996
- ${renderPopupHeader(buttonTag, iconTag)}
997
- ${renderPopupBody(buttonTag, iconTag, tooltipTag)}
998
- ${(0, _microsoft_fast_element.when)((x) => !x.disableSavedColors || x.allSwatches.length > 0, renderPopupFooter(buttonTag, iconTag, tooltipTag))}
999
- </div>
1000
- </${popupTag}>
1001
- </div>
124
+ </${popup}>
1002
125
  `;
1003
126
  };
1004
127
  //#endregion
1005
- //#region src/lib/color-picker/definition.ts
1006
- var colorPickerDefinition = require_vivid_element.defineVividComponent("color-picker", ColorPicker, ColorPickerTemplate, [
1007
- require_definition$2.popupDefinition,
1008
- require_definition.iconDefinition,
1009
- require_definition$3.textFieldDefinition,
1010
- require_definition$1.buttonDefinition,
1011
- require_definition$4.tooltipDefinition,
1012
- require_mixins.feedbackMessageDefinition
1013
- ], { styles: color_picker_default$1 });
128
+ //#region src/lib/toggletip/definition.ts
129
+ /**
130
+ * @internal
131
+ */
132
+ var toggletipDefinition = require_vivid_element.defineVividComponent("toggletip", Toggletip, ToggletipTemplate, [require_definition.popupDefinition], { styles: toggletip_default });
1014
133
  /**
1015
- * Registers the color-picker element with the design system.
134
+ * Registers the toggletip element with the design system.
1016
135
  *
1017
136
  * @param prefix - the prefix to use for the component name
1018
137
  */
1019
- var registerColorPicker = require_vivid_element.createRegisterFunction(colorPickerDefinition);
138
+ var registerToggletip = require_vivid_element.createRegisterFunction(toggletipDefinition);
1020
139
  //#endregion
1021
- Object.defineProperty(exports, "ColorPicker", {
140
+ Object.defineProperty(exports, "Toggletip", {
1022
141
  enumerable: true,
1023
142
  get: function() {
1024
- return ColorPicker;
143
+ return Toggletip;
1025
144
  }
1026
145
  });
1027
- Object.defineProperty(exports, "colorPickerDefinition", {
146
+ Object.defineProperty(exports, "registerToggletip", {
1028
147
  enumerable: true,
1029
148
  get: function() {
1030
- return colorPickerDefinition;
149
+ return registerToggletip;
1031
150
  }
1032
151
  });
1033
- Object.defineProperty(exports, "registerColorPicker", {
152
+ Object.defineProperty(exports, "toggletipDefinition", {
1034
153
  enumerable: true,
1035
154
  get: function() {
1036
- return registerColorPicker;
155
+ return toggletipDefinition;
1037
156
  }
1038
157
  });