@luzmo/analytics-components-kit 1.0.1-alpha.90 → 1.0.1-alpha.94

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 (253) hide show
  1. package/README.md +195 -0
  2. package/angular/README.md +1 -0
  3. package/angular/components/widget-menu.component.ts +25 -0
  4. package/angular/esm/components/widget-menu.component.d.ts +13 -0
  5. package/angular/esm/components/widget-menu.component.js +49 -0
  6. package/angular/esm/index.d.ts +3 -1
  7. package/angular/esm/index.js +4 -1
  8. package/angular/esm/types.d.ts +4 -0
  9. package/angular/index.ts +4 -1
  10. package/angular/types.ts +6 -0
  11. package/components/ai-chat-message-assistant/index.cjs +1 -1
  12. package/components/ai-chat-message-assistant/index.js +1 -0
  13. package/components/ai-chat-messages-container/index.cjs +1 -1
  14. package/components/ai-chat-messages-container/index.js +2 -2
  15. package/components/ai-interaction-textarea/index.cjs +1 -1
  16. package/components/ai-interaction-textarea/index.js +2 -1
  17. package/components/area-chart-options.config-C7sMAHco.cjs +20 -0
  18. package/components/{area-chart-options.config-u8itidsi.js → area-chart-options.config-_J0sG4NF.js} +26 -14
  19. package/components/{bar-chart-options.config-DIirbAJ0.js → bar-chart-options.config-D1mb5TDl.js} +35 -21
  20. package/components/bar-chart-options.config-DcxEkOT5.cjs +20 -0
  21. package/components/box-plot-options.config-SrrbDEYW.cjs +20 -0
  22. package/components/{box-plot-options.config-BWROiguA.js → box-plot-options.config-xu_i6ms7.js} +88 -52
  23. package/components/{bubble-chart-options.config-4QD8VPhU.js → bubble-chart-options.config-BacgXkJ_.js} +18 -9
  24. package/components/bubble-chart-options.config-Ihn6eVQI.cjs +20 -0
  25. package/components/{bullet-chart-options.config-3bH7uekx.js → bullet-chart-options.config-CDPpX1yc.js} +1 -1
  26. package/components/{bullet-chart-options.config-tWb6Fio-.cjs → bullet-chart-options.config-DfS4Bwds.cjs} +1 -1
  27. package/components/calculate-data-item-icon-CEa82-5u.cjs +20 -0
  28. package/components/calculate-data-item-icon-DjlZwMdO.js +147 -0
  29. package/components/{choropleth-map-options.config-CMxx3ORp.js → choropleth-map-options.config-B_W9-rhe.js} +84 -63
  30. package/components/choropleth-map-options.config-ZW8yoZH2.cjs +20 -0
  31. package/components/{circular-gauge-options.config-DhIKn44k.js → circular-gauge-options.config-DAIjz4Rl.js} +36 -23
  32. package/components/circular-gauge-options.config-msZ4mfpN.cjs +20 -0
  33. package/components/color-B6LaL8qz.cjs +20 -0
  34. package/components/{color-B7m0j8lX.js → color-DuJ4-73S.js} +950 -941
  35. package/components/{color-range-utils-BSfqtB3A.js → color-range-utils-Bvo9sm5A.js} +32 -31
  36. package/components/color-range-utils-C5yXW7ZC.cjs +20 -0
  37. package/components/{column-chart-options.config-D5-yR7iq.js → column-chart-options.config-B5SjBVdy.js} +37 -27
  38. package/components/column-chart-options.config-BjDvA7i9.cjs +20 -0
  39. package/components/{conditional-number-options.config-DPYsdML5.js → conditional-number-options.config-BCEpSK9J.js} +40 -24
  40. package/components/conditional-number-options.config-DgzUo0xi.cjs +20 -0
  41. package/components/dataset-icon/index.cjs +1 -1
  42. package/components/dataset-icon/index.js +2 -1
  43. package/components/dataset-selector-list/index.cjs +1 -1
  44. package/components/dataset-selector-list/index.js +35 -32
  45. package/components/dataset-selector-row/index.cjs +9 -9
  46. package/components/dataset-selector-row/index.js +53 -51
  47. package/components/{date-comparison-filter-options.config-QaoWaFUn.cjs → date-comparison-filter-options.config-DAVncmi0.cjs} +1 -1
  48. package/components/{date-comparison-filter-options.config-CSwGyuBg.js → date-comparison-filter-options.config-JA_yYpJa.js} +6 -3
  49. package/components/{date-filter-options.config-n-zhWaYa.cjs → date-filter-options.config-CWPMtA18.cjs} +1 -1
  50. package/components/{date-filter-options.config-BTVyHRkp.js → date-filter-options.config-DBRxlTWy.js} +6 -3
  51. package/components/display-settings/index.cjs +1 -1
  52. package/components/display-settings/index.js +1 -1
  53. package/components/display-settings-binning/index.cjs +5 -5
  54. package/components/display-settings-binning/index.js +30 -29
  55. package/components/display-settings-datetime/index.cjs +29 -29
  56. package/components/display-settings-datetime/index.js +120 -112
  57. package/components/display-settings-grand-totals/index.cjs +4 -4
  58. package/components/display-settings-grand-totals/index.js +24 -23
  59. package/components/display-settings-numeric/index.cjs +48 -48
  60. package/components/display-settings-numeric/index.js +211 -194
  61. package/components/display-settings-period-over-period/index.cjs +16 -16
  62. package/components/display-settings-period-over-period/index.js +97 -91
  63. package/components/{donut-chart-options.config-3ZqX8Cbb.js → donut-chart-options.config-BulUEiaH.js} +37 -21
  64. package/components/donut-chart-options.config-tNpqBZfR.cjs +20 -0
  65. package/components/draggable-data-item/index.cjs +5 -5
  66. package/components/draggable-data-item/index.js +46 -45
  67. package/components/draggable-data-item-level/index.cjs +11 -11
  68. package/components/draggable-data-item-level/index.js +73 -70
  69. package/components/{dropdown-filter-options.config-CGJTtgAX.js → dropdown-filter-options.config-D9dvPypF.js} +10 -7
  70. package/components/{dropdown-filter-options.config-DJvfCTk7.cjs → dropdown-filter-options.config-DS-MORmq.cjs} +1 -1
  71. package/components/droppable-slot/index.cjs +16 -16
  72. package/components/droppable-slot/index.js +223 -208
  73. package/components/edit-item/index.cjs +9 -9
  74. package/components/edit-item/index.js +119 -116
  75. package/components/edit-option/index.cjs +1 -1
  76. package/components/edit-option/index.js +1 -1
  77. package/components/edit-option-action-button-group/index.cjs +8 -8
  78. package/components/edit-option-action-button-group/index.js +53 -52
  79. package/components/{edit-option-base-Bh29-Cak.js → edit-option-base-DIc7iC-b.js} +1 -1
  80. package/components/{edit-option-base-tFr8Qg2B.cjs → edit-option-base-VhTih9T1.cjs} +1 -1
  81. package/components/edit-option-color-palette-picker/index.cjs +1 -1
  82. package/components/edit-option-color-palette-picker/index.js +1 -1
  83. package/components/edit-option-color-picker/index.cjs +1 -1
  84. package/components/edit-option-color-picker/index.js +1 -1
  85. package/components/edit-option-color-range/index.cjs +19 -19
  86. package/components/edit-option-color-range/index.js +117 -106
  87. package/components/edit-option-multi-language-field/index.cjs +3 -3
  88. package/components/edit-option-multi-language-field/index.js +27 -26
  89. package/components/edit-option-number-field/index.cjs +1 -1
  90. package/components/edit-option-number-field/index.js +1 -1
  91. package/components/edit-option-picker/index.cjs +5 -5
  92. package/components/edit-option-picker/index.js +7 -7
  93. package/components/edit-option-position-picker/index.cjs +4 -4
  94. package/components/edit-option-position-picker/index.js +25 -21
  95. package/components/edit-option-positions-number-field/index.cjs +9 -9
  96. package/components/edit-option-positions-number-field/index.js +81 -76
  97. package/components/edit-option-radio-button-group/index.cjs +6 -6
  98. package/components/edit-option-radio-button-group/index.js +22 -21
  99. package/components/edit-option-slider/index.cjs +1 -1
  100. package/components/edit-option-slider/index.js +1 -1
  101. package/components/edit-option-switch/index.cjs +1 -1
  102. package/components/edit-option-switch/index.js +1 -1
  103. package/components/edit-option-text-field/index.cjs +2 -2
  104. package/components/edit-option-text-field/index.js +23 -22
  105. package/components/en-BKBhKBXY.cjs +20 -0
  106. package/components/en-BOTjhwEc.js +1488 -0
  107. package/components/{en-GB-ialeqj_z.js → en-GB-CEHEs8F2.js} +1 -1
  108. package/components/{en-GB-TqvgIw9B.cjs → en-GB-DG6uS3sM.cjs} +1 -1
  109. package/components/{evolution-number-options.config-Bc9eKYnn.cjs → evolution-number-options.config-BgIZY4gQ.cjs} +1 -1
  110. package/components/{evolution-number-options.config-BIPO_4n3.js → evolution-number-options.config-DzkfeoIN.js} +14 -11
  111. package/components/{extrapolate-color-C0n1UDs-.cjs → extrapolate-color-0j_AeYkz.cjs} +1 -1
  112. package/components/{extrapolate-color-v1PimdQr.js → extrapolate-color-CC9CURf6.js} +1 -1
  113. package/components/filter-data-item-picker/index.cjs +7 -7
  114. package/components/filter-data-item-picker/index.js +86 -85
  115. package/components/filter-expression-picker/index.cjs +1 -1
  116. package/components/filter-expression-picker/index.js +1 -1
  117. package/components/filter-item/index.cjs +6 -6
  118. package/components/filter-item/index.js +119 -109
  119. package/components/filter-value-picker/index.cjs +2 -2
  120. package/components/filter-value-picker/index.js +36 -34
  121. package/components/filter-value-picker-datetime/index.cjs +8 -8
  122. package/components/filter-value-picker-datetime/index.js +71 -56
  123. package/components/filter-value-picker-hierarchy/index.cjs +12 -12
  124. package/components/filter-value-picker-hierarchy/index.js +124 -113
  125. package/components/filter-value-picker-numeric/index.cjs +8 -8
  126. package/components/filter-value-picker-numeric/index.js +110 -101
  127. package/components/focusable-B3E_hQmm.cjs +20 -0
  128. package/components/{focusable-BS2pbY7w.js → focusable-DCIFkpiW.js} +26 -24
  129. package/components/{funnel-chart-options.config-CrJy2U7_.js → funnel-chart-options.config-C_VjTOvD.js} +20 -5
  130. package/components/funnel-chart-options.config-D7H7gFcx.cjs +20 -0
  131. package/components/get-css-variable-BEYG097C.js +1446 -0
  132. package/components/get-css-variable-BZxY4IOa.cjs +35 -0
  133. package/components/get-css-variable-DLiZYZEi.cjs +24 -0
  134. package/components/{get-css-variable-CdwF98oh.js → get-css-variable-YlLiVgo8.js} +35 -35
  135. package/components/grid/index.cjs +49 -43
  136. package/components/grid/index.js +1878 -2610
  137. package/components/{heat-map-options.config-CmL87j1j.js → heat-map-options.config-BnLWe8jS.js} +41 -35
  138. package/components/heat-map-options.config-DVH-Bb5-.cjs +20 -0
  139. package/components/heat-table-options.config-B12JEYnp.cjs +20 -0
  140. package/components/{heat-table-options.config-BrCYAgYD.js → heat-table-options.config-CUsDdgUr.js} +88 -60
  141. package/components/helpers-DXQwEH1P.cjs +20 -0
  142. package/components/helpers-v1bPALRP.js +91 -0
  143. package/components/hexbin-map-options.config-DZERRhM8.cjs +20 -0
  144. package/components/{hexbin-map-options.config-BguV1w8q.js → hexbin-map-options.config-F-7uCqxb.js} +38 -20
  145. package/components/{index-BNAmjOkm.cjs → index-BPNsFiyq.cjs} +4 -4
  146. package/components/index-CDi4fe3N.js +1716 -0
  147. package/components/index-CQ9ck-BO.cjs +249 -0
  148. package/components/index-CXn67vdn.cjs +121 -0
  149. package/components/{index-haa7WNrl.js → index-CdIUfo-L.js} +481 -453
  150. package/components/index-Cz9vSXy6.cjs +20 -0
  151. package/components/{index-DdyZ2g5L.js → index-D0GBF6tg.js} +104 -94
  152. package/components/index-Dn0j_pcR.cjs +20 -0
  153. package/components/{index-CqKpf0B8.js → index-Do7O9azB.js} +123 -112
  154. package/components/index-E239Dotg.js +1735 -0
  155. package/components/index.cjs +1 -1
  156. package/components/index.js +20 -18
  157. package/components/item-options-configs.cjs +1 -1
  158. package/components/item-options-configs.js +37 -37
  159. package/components/{line-chart-options.config-BhirTGqD.js → line-chart-options.config-DB3IsXXr.js} +28 -13
  160. package/components/line-chart-options.config-DSugoe0t.cjs +20 -0
  161. package/components/{localize-CcDpq940.js → localize-BX7q0S0M.js} +10 -10
  162. package/components/{localize-C4zNlrwK.cjs → localize-r7ALOUy_.cjs} +1 -1
  163. package/components/{marker-map-options.config-Bx17jmiq.js → marker-map-options.config-DPJ955tt.js} +1 -1
  164. package/components/{marker-map-options.config-CvhCylSC.cjs → marker-map-options.config-_FYZzRwA.cjs} +1 -1
  165. package/components/pivot-table-options.config-BiJXKSFR.cjs +20 -0
  166. package/components/{pivot-table-options.config-CFc7y0IT.js → pivot-table-options.config-DNK_AIG7.js} +24 -15
  167. package/components/pyramid-chart-options.config-C4zbFS26.cjs +20 -0
  168. package/components/{pyramid-chart-options.config-2Waxb11l.js → pyramid-chart-options.config-CcVMatYx.js} +43 -29
  169. package/components/{radar-chart-options.config-CPN5fOl8.js → radar-chart-options.config-CUZn_3Fd.js} +23 -11
  170. package/components/radar-chart-options.config-EqQu6PTh.cjs +20 -0
  171. package/components/{regular-table-options.config-CFKCJQK1.js → regular-table-options.config-BoLZsBry.js} +23 -17
  172. package/components/{regular-table-options.config-YRuoijIk.cjs → regular-table-options.config-DTx3RTnS.cjs} +1 -1
  173. package/components/{route-map-options.config-CyolTJfK.js → route-map-options.config-CN86T7c0.js} +109 -87
  174. package/components/route-map-options.config-D7NJePTu.cjs +20 -0
  175. package/components/{sankey-diagram-options.config-D7OSvSqm.cjs → sankey-diagram-options.config-RFB83YLZ.cjs} +1 -1
  176. package/components/{sankey-diagram-options.config-Ldjk84ro.js → sankey-diagram-options.config-tVLKy_Zn.js} +10 -7
  177. package/components/scatter-plot-options.config-CFfGJXsV.cjs +20 -0
  178. package/components/{scatter-plot-options.config-CfxEfkQ1.js → scatter-plot-options.config-Corlzno1.js} +86 -56
  179. package/components/{search-filter-options.config-Oqco9BKj.cjs → search-filter-options.config-BCaDlYqZ.cjs} +1 -1
  180. package/components/{search-filter-options.config-C0syQmP4.js → search-filter-options.config-BE3JhR-F.js} +6 -3
  181. package/components/{set-locale-hKTMz37h.js → set-locale-Dp3N_gXN.js} +8 -1
  182. package/components/{slicer-filter-options.config-DmOe3440.js → slicer-filter-options.config-3JZZcw5C.js} +18 -9
  183. package/components/slicer-filter-options.config-DNI-XevE.cjs +20 -0
  184. package/components/{slider-filter-options.config-B1M8RcDs.js → slider-filter-options.config-DH4SS8wH.js} +1 -1
  185. package/components/{slider-filter-options.config-k45I-t6G.cjs → slider-filter-options.config-_8Z2zKmU.cjs} +1 -1
  186. package/components/slot-contents-picker/index.cjs +33 -33
  187. package/components/slot-contents-picker/index.js +205 -194
  188. package/components/slot-menu/index.cjs +12 -12
  189. package/components/slot-menu/index.js +184 -171
  190. package/components/slot-menu-list/index.cjs +3 -3
  191. package/components/slot-menu-list/index.js +103 -97
  192. package/components/speedometer-chart-options.config-BX9LTQBH.cjs +20 -0
  193. package/components/{speedometer-chart-options.config-CzOmuEF8.js → speedometer-chart-options.config-SL581yOa.js} +53 -31
  194. package/components/{spike-map-options.config-Cbt1YUw6.js → spike-map-options.config-C5KewecZ.js} +122 -91
  195. package/components/spike-map-options.config-DoBFXPmN.cjs +20 -0
  196. package/components/{sunburst-chart-options.config-Yrxc2i57.cjs → sunburst-chart-options.config-AbNjWS6t.cjs} +1 -1
  197. package/components/{sunburst-chart-options.config-_dyLQxPJ.js → sunburst-chart-options.config-CNauGQJv.js} +20 -9
  198. package/components/{symbol-map-options.config-BORL1NSU.js → symbol-map-options.config-DdDA4aa7.js} +20 -11
  199. package/components/symbol-map-options.config-m-lwLTtu.cjs +20 -0
  200. package/components/treemap-chart-options.config-C0Q9aQ1Z.cjs +20 -0
  201. package/components/{treemap-chart-options.config-B9i9qIm_.js → treemap-chart-options.config-D5AJaF_u.js} +37 -20
  202. package/components/utils.cjs +1 -1
  203. package/components/utils.js +97 -94
  204. package/components/{video-options.config-B0asgYt8.cjs → video-options.config-CGsDTwHc.cjs} +1 -1
  205. package/components/{video-options.config-UX-9MDfS.js → video-options.config-Dk36zJ1B.js} +10 -7
  206. package/components/widget-menu/index.cjs +51 -0
  207. package/components/widget-menu/index.d.ts +8 -0
  208. package/components/widget-menu/index.js +211 -0
  209. package/components/widget-menu/widget-menu.d.ts +77 -0
  210. package/components/{wordcloud-chart-options.config-BKtJT8Va.cjs → wordcloud-chart-options.config-vGfCW8kE.cjs} +1 -1
  211. package/components/{wordcloud-chart-options.config-BoB_KuhA.js → wordcloud-chart-options.config-w2NUIWVA.js} +7 -4
  212. package/custom-elements.json +133 -20
  213. package/index.d.ts +1 -0
  214. package/package.json +6 -1
  215. package/types.d.ts +4 -0
  216. package/components/area-chart-options.config-Bl8bhhOo.cjs +0 -20
  217. package/components/bar-chart-options.config-CePAqM83.cjs +0 -20
  218. package/components/box-plot-options.config-BVNrV2eD.cjs +0 -20
  219. package/components/bubble-chart-options.config-BDgOe3GQ.cjs +0 -20
  220. package/components/calculate-data-item-icon-DMDhKq_m.js +0 -147
  221. package/components/calculate-data-item-icon-DtVGbet3.cjs +0 -20
  222. package/components/choropleth-map-options.config-CWJACFd0.cjs +0 -20
  223. package/components/circular-gauge-options.config-BMxgq3zH.cjs +0 -20
  224. package/components/color-Czp4Im5q.cjs +0 -20
  225. package/components/color-range-utils-DYYR-iwx.cjs +0 -20
  226. package/components/column-chart-options.config-BV9R3ssH.cjs +0 -20
  227. package/components/conditional-number-options.config-Co099Qfm.cjs +0 -20
  228. package/components/donut-chart-options.config-BQyPgnC9.cjs +0 -20
  229. package/components/en-D3ihEGXg.js +0 -1483
  230. package/components/en-DZcn_iz_.cjs +0 -20
  231. package/components/focusable-QLh-LlNt.cjs +0 -20
  232. package/components/funnel-chart-options.config-DrP4AFgk.cjs +0 -20
  233. package/components/get-css-variable-COd1d84B.cjs +0 -24
  234. package/components/heat-map-options.config-CIHnPdYE.cjs +0 -20
  235. package/components/heat-table-options.config-DTlZRc_i.cjs +0 -20
  236. package/components/helpers-9I0oLoUB.cjs +0 -20
  237. package/components/helpers-bR8Ibjqh.js +0 -79
  238. package/components/hexbin-map-options.config-CKnn3VAB.cjs +0 -20
  239. package/components/index-BekTY3Em.cjs +0 -121
  240. package/components/index-CFL6gmIu.cjs +0 -20
  241. package/components/index-DNPULp4A.js +0 -1755
  242. package/components/index-DvkzMbLt.cjs +0 -249
  243. package/components/line-chart-options.config-Cqwou5u6.cjs +0 -20
  244. package/components/pivot-table-options.config-uZDAertf.cjs +0 -20
  245. package/components/pyramid-chart-options.config-DoGfEvzU.cjs +0 -20
  246. package/components/radar-chart-options.config-CtNUMN1l.cjs +0 -20
  247. package/components/route-map-options.config-CVTk5RVL.cjs +0 -20
  248. package/components/scatter-plot-options.config-5gN7pMTm.cjs +0 -20
  249. package/components/slicer-filter-options.config-CrusP6a0.cjs +0 -20
  250. package/components/speedometer-chart-options.config-B4ceg_qI.cjs +0 -20
  251. package/components/spike-map-options.config-BkkDqb4g.cjs +0 -20
  252. package/components/symbol-map-options.config-NpBKm64d.cjs +0 -20
  253. package/components/treemap-chart-options.config-x4J54WSw.cjs +0 -20
package/README.md ADDED
@@ -0,0 +1,195 @@
1
+ # Luzmo Analytics Components Kit
2
+
3
+ ## Installation
4
+
5
+ ```bash
6
+ npm install @luzmo/analytics-components-kit
7
+ ```
8
+
9
+ ```ts
10
+ import '@luzmo/analytics-components-kit/draggable-data-item';
11
+ import '@luzmo/analytics-components-kit/droppable-slot';
12
+ import '@luzmo/analytics-components-kit/edit-item';
13
+ ```
14
+
15
+ ```html
16
+ <luzmo-draggable-data-item></luzmo-draggable-data-item>
17
+ <luzmo-droppable-slot></luzmo-droppable-slot>
18
+ <luzmo-edit-item></luzmo-edit-item>
19
+ ```
20
+
21
+ This repository is in alpha state. Do not use the web components in production.
22
+ Expect breaking changes.
23
+
24
+ ## Dashboard Contents Version
25
+
26
+ Needs to be used with dashboard contents version: 0.1.89
27
+
28
+ ## Browser Support
29
+
30
+ Currently only supports evergreen browsers (Chrome, Firefox, Safari, Edge).
31
+
32
+ ## Working locally (standalone)
33
+ The best way of working locally with this repo in a standalone mode (not integrating with any other project) is using Storybook.
34
+ To do that be sure you ran `npm install` and then run the project in watch mode via `npm run dev` to finally run, in another terminal tab or instance, `npm run storybook`.
35
+
36
+ ## Usage: Drag & Drop Data Flow
37
+
38
+ This library provides a complete drag-and-drop system for building Luzmo chart configurations. The flow consists of loading dataset columns/formulas as draggable items and dropping them into chart slots (like axes, dimensions, measures, etc.).
39
+
40
+ ### Concept
41
+
42
+ 1. **Load datasets**: Use `loadDraggableItemsForDatasets()` to fetch datasets with their columns and formulas from the Luzmo API
43
+ 2. **Display draggable data items**: Render each column/formula as a `<luzmo-draggable-data-item>` component
44
+ 3. **Define droppable slots**: Create `<luzmo-droppable-slot>` components representing data slots of a Luzmo chart (e.g., 'Y-axis', 'Measure' and 'Legend' for a bar chart)
45
+ 4. **Handle drops on the slots**: On each `<luzmo-droppable-slot>`, listen to the `slot-contents-changed` event to capture data dropped into each slot
46
+ 5. **Use slot contents**: The slot contents are in the format expected by Luzmo charts and can be passed directly to the `slots` array of Luzmo Flex SDK visualization components.
47
+
48
+ ### Example Implementation
49
+
50
+ #### TypeScript
51
+
52
+ ```ts
53
+ import { loadDraggableItemsForDatasets } from '@luzmo/analytics-components-kit/utils';
54
+ import type { DroppableSlotConfiguration } from '@luzmo/analytics-components-kit/droppable-slot';
55
+ import type { GenericSlotContent } from '@luzmo/analytics-components-kit';
56
+ import type { LuzmoDroppableSlot } from '@luzmo/analytics-components-kit/droppable-slot';
57
+ import barChartSlotsConfig from '@luzmo/analytics-components-kit/item-definitions/bar-chart/bar-chart-slots.config';
58
+ import '@luzmo/analytics-components-kit/draggable-data-item';
59
+ import '@luzmo/analytics-components-kit/droppable-slot';
60
+
61
+ // 1. Load specified datasets with their columns and formulas
62
+ const datasets = await loadDraggableItemsForDatasets(
63
+ ['your-dataset-id'],
64
+ {
65
+ dataBrokerConfig: {
66
+ apiUrl: 'https://api.luzmo.com',
67
+ authKey: 'your-auth-key',
68
+ authToken: 'your-auth-token'
69
+ }
70
+ }
71
+ );
72
+
73
+ // 2. Load slot configurations dynamically from bar chart config
74
+ const slotConfigs: DroppableSlotConfiguration[] = barChartSlotsConfig;
75
+ console.log('Available slots:', slotConfigs.map(s => s.name));
76
+ // Output: ['measure', 'y-axis', 'legend']
77
+
78
+ // 3. Handle slot content changes
79
+ const slotContents = new Map<string, GenericSlotContent[]>();
80
+
81
+ function handleSlotContentsChanged(event: CustomEvent<{ slotContents: GenericSlotContent[], linkedDatasetsIds: string[] }>) {
82
+ const slotName = (event.target as LuzmoDroppableSlot).slotName;
83
+
84
+ // Store contents for this slot
85
+ if (slotName) {
86
+ slotContents.set(slotName, event.detail.slotContents);
87
+ }
88
+
89
+ console.log(`Slot '${slotName}' updated:`, event.detail.slotContents);
90
+
91
+ // slotContents can now be used to configure your chart
92
+ // It's in the format expected by Luzmo visualization components
93
+ console.log('All slot contents:', Object.fromEntries(slotContents));
94
+ }
95
+
96
+ // 4. Render the components (see HTML example below)
97
+ ```
98
+
99
+ #### HTML
100
+
101
+ ```html
102
+ <div class="chart-builder">
103
+ <!-- Left panel: Draggable data items -->
104
+ <div class="data-items-panel">
105
+ <h3>Available Data</h3>
106
+ <div id="draggable-items-container">
107
+ <!-- Dynamically populated with draggable items -->
108
+ </div>
109
+ </div>
110
+
111
+ <!-- Right panel: Droppable slots -->
112
+ <div class="chart-config-panel">
113
+ <h3>Bar Chart Configuration</h3>
114
+ <div id="droppable-slots-container">
115
+ <!-- Dynamically populated with droppable slots -->
116
+ </div>
117
+ </div>
118
+ </div>
119
+
120
+ <script type="module">
121
+ import { loadDraggableItemsForDatasets } from '@luzmo/analytics-components-kit/utils';
122
+ import barChartSlotsConfig from '@luzmo/analytics-components-kit/item-definitions/bar-chart/bar-chart-slots.config';
123
+
124
+ // Load and render draggable items
125
+ const datasets = await loadDraggableItemsForDatasets(
126
+ ['your-dataset-id'],
127
+ {
128
+ dataBrokerConfig: {
129
+ apiUrl: 'https://api.luzmo.com',
130
+ authKey: 'your-auth-key',
131
+ authToken: 'your-auth-token'
132
+ }
133
+ }
134
+ );
135
+
136
+ const itemsContainer = document.getElementById('draggable-items-container');
137
+
138
+ datasets.forEach(dataset => {
139
+ // Add dataset label
140
+ const datasetLabel = document.createElement('h4');
141
+ datasetLabel.textContent = dataset.name.en || 'Dataset';
142
+ itemsContainer.appendChild(datasetLabel);
143
+
144
+ // Add draggable items for each column/formula
145
+ dataset.dataItems.forEach(dataItem => {
146
+ const draggableItem = document.createElement('luzmo-draggable-data-item');
147
+ draggableItem.data = dataItem;
148
+ draggableItem.size = 'm';
149
+ draggableItem.language = 'en';
150
+ itemsContainer.appendChild(draggableItem);
151
+ });
152
+ });
153
+
154
+ // Dynamically create droppable slots from bar chart config
155
+ const slotsContainer = document.getElementById('droppable-slots-container');
156
+ const slotContents = new Map();
157
+
158
+ barChartSlotsConfig.forEach(slotConfig => {
159
+ const slotWrapper = document.createElement('div');
160
+ slotWrapper.className = 'slot-wrapper';
161
+
162
+ const slot = document.createElement('luzmo-droppable-slot');
163
+ slot.setAttribute('item-type', 'bar-chart');
164
+ slot.setAttribute('slot-name', slotConfig.name);
165
+ slot.setAttribute('label', slotConfig.label);
166
+ slot.setAttribute('size', 'm');
167
+ slot.setAttribute('language', 'en');
168
+
169
+ // Pass the full configuration object
170
+ slot.slotConfiguration = slotConfig;
171
+
172
+ // Handle slot content changes
173
+ slot.addEventListener('slot-contents-changed', (event) => {
174
+ slotContents.set(slotConfig.name, event.detail.slotContents);
175
+ console.log(`Slot '${slotConfig.name}' updated:`, event.detail);
176
+ console.log('All slot contents:', Object.fromEntries(slotContents));
177
+ });
178
+
179
+ slotWrapper.appendChild(slot);
180
+ slotsContainer.appendChild(slotWrapper);
181
+ });
182
+ </script>
183
+ ```
184
+
185
+ ### Key Points
186
+
187
+ - **`loadDraggableItemsForDatasets()`** handles authentication, fetches datasets, and transforms them into the correct format for draggable items
188
+ - **Chart slot configs** can be imported from `item-definitions/{chart-type}/{chart-type}-slots.config` to dynamically create appropriate drop zones
189
+ - **`<luzmo-draggable-data-item>`** automatically handles drag behavior and displays columns/formulas with appropriate icons and hierarchy levels
190
+ - **`<luzmo-droppable-slot>`** validates drops based on configuration (e.g., only numeric types for measures) and emits `slot-contents-changed` events
191
+ - **Slot configurations** define validation rules like `canAcceptMultipleDataItems`, `canAcceptFormula`, and `acceptableDataItemTypes`
192
+ - **Slot contents** returned from the event are already in the format expected by Luzmo chart components
193
+ - The transformation from `DraggableDataItem` to `GenericSlotContent` happens automatically when dropping
194
+
195
+
package/angular/README.md CHANGED
@@ -56,3 +56,4 @@ bootstrapApplication(AiChatMessageAssistantComponent);
56
56
  - `SlotContentsPickerComponent` → <luzmo-slot-contents-picker>
57
57
  - `SlotMenuComponent` → <luzmo-slot-menu>
58
58
  - `SlotMenuListComponent` → <luzmo-slot-menu-list>
59
+ - `WidgetMenuComponent` → <luzmo-widget-menu>
@@ -0,0 +1,25 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
+ import type { WidgetMenuItem } from '../types';
3
+
4
+ @Component({
5
+ selector: 'luzmo-widget-menu',
6
+ standalone: true,
7
+ changeDetection: ChangeDetectionStrategy.OnPush,
8
+ template: `<luzmo-widget-menu
9
+ [attr.viz-item-id]="vizItemId"
10
+ [attr.language]="language"
11
+ [attr.selected-item]="selectedItem"
12
+ (selected-changed)="selectedChanged.emit($event)"
13
+ (widget-menu-element-clicked)="widgetMenuElementClicked.emit($event)"
14
+ (hover-over-edit)="hoverOverEdit.emit($event)">
15
+ <ng-content></ng-content>
16
+ </luzmo-widget-menu>`
17
+ })
18
+ export class WidgetMenuComponent {
19
+ @Input() vizItemId?: string;
20
+ @Input() language?: string;
21
+ @Input() selectedItem?: WidgetMenuItem | null;
22
+ @Output() selectedChanged = new EventEmitter<CustomEvent>();
23
+ @Output() widgetMenuElementClicked = new EventEmitter<CustomEvent>();
24
+ @Output() hoverOverEdit = new EventEmitter<CustomEvent>();
25
+ }
@@ -0,0 +1,13 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import type { WidgetMenuItem } from '../types';
3
+ import * as i0 from "@angular/core";
4
+ export declare class WidgetMenuComponent {
5
+ vizItemId?: string;
6
+ language?: string;
7
+ selectedItem?: WidgetMenuItem | null;
8
+ selectedChanged: EventEmitter<CustomEvent<any>>;
9
+ widgetMenuElementClicked: EventEmitter<CustomEvent<any>>;
10
+ hoverOverEdit: EventEmitter<CustomEvent<any>>;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<WidgetMenuComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<WidgetMenuComponent, "luzmo-widget-menu", never, { "vizItemId": { "alias": "vizItemId"; "required": false; }; "language": { "alias": "language"; "required": false; }; "selectedItem": { "alias": "selectedItem"; "required": false; }; }, { "selectedChanged": "selectedChanged"; "widgetMenuElementClicked": "widgetMenuElementClicked"; "hoverOverEdit": "hoverOverEdit"; }, never, ["*"], true, never>;
13
+ }
@@ -0,0 +1,49 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class WidgetMenuComponent {
4
+ vizItemId;
5
+ language;
6
+ selectedItem;
7
+ selectedChanged = new EventEmitter();
8
+ widgetMenuElementClicked = new EventEmitter();
9
+ hoverOverEdit = new EventEmitter();
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WidgetMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: WidgetMenuComponent, isStandalone: true, selector: "luzmo-widget-menu", inputs: { vizItemId: "vizItemId", language: "language", selectedItem: "selectedItem" }, outputs: { selectedChanged: "selectedChanged", widgetMenuElementClicked: "widgetMenuElementClicked", hoverOverEdit: "hoverOverEdit" }, ngImport: i0, template: `<luzmo-widget-menu
12
+ [attr.viz-item-id]="vizItemId"
13
+ [attr.language]="language"
14
+ [attr.selected-item]="selectedItem"
15
+ (selected-changed)="selectedChanged.emit($event)"
16
+ (widget-menu-element-clicked)="widgetMenuElementClicked.emit($event)"
17
+ (hover-over-edit)="hoverOverEdit.emit($event)">
18
+ <ng-content></ng-content>
19
+ </luzmo-widget-menu>`, isInline: true, dependencies: [{ kind: "component", type: WidgetMenuComponent, selector: "luzmo-widget-menu", inputs: ["vizItemId", "language", "selectedItem"], outputs: ["selectedChanged", "widgetMenuElementClicked", "hoverOverEdit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: WidgetMenuComponent, decorators: [{
22
+ type: Component,
23
+ args: [{
24
+ selector: 'luzmo-widget-menu',
25
+ standalone: true,
26
+ changeDetection: ChangeDetectionStrategy.OnPush,
27
+ template: `<luzmo-widget-menu
28
+ [attr.viz-item-id]="vizItemId"
29
+ [attr.language]="language"
30
+ [attr.selected-item]="selectedItem"
31
+ (selected-changed)="selectedChanged.emit($event)"
32
+ (widget-menu-element-clicked)="widgetMenuElementClicked.emit($event)"
33
+ (hover-over-edit)="hoverOverEdit.emit($event)">
34
+ <ng-content></ng-content>
35
+ </luzmo-widget-menu>`
36
+ }]
37
+ }], propDecorators: { vizItemId: [{
38
+ type: Input
39
+ }], language: [{
40
+ type: Input
41
+ }], selectedItem: [{
42
+ type: Input
43
+ }], selectedChanged: [{
44
+ type: Output
45
+ }], widgetMenuElementClicked: [{
46
+ type: Output
47
+ }], hoverOverEdit: [{
48
+ type: Output
49
+ }] } });
@@ -32,6 +32,7 @@ import { GridItemActionsMenuComponent } from './components/grid-item-actions-men
32
32
  import { SlotContentsPickerComponent } from './components/slot-contents-picker.component';
33
33
  import { SlotMenuComponent } from './components/slot-menu.component';
34
34
  import { SlotMenuListComponent } from './components/slot-menu-list.component';
35
+ import { WidgetMenuComponent } from './components/widget-menu.component';
35
36
  export { AiChatMessageAssistantComponent } from './components/ai-chat-message-assistant.component';
36
37
  export { AiChatMessageUserComponent } from './components/ai-chat-message-user.component';
37
38
  export { AiChatMessagesContainerComponent } from './components/ai-chat-messages-container.component';
@@ -66,4 +67,5 @@ export { GridItemActionsMenuComponent } from './components/grid-item-actions-men
66
67
  export { SlotContentsPickerComponent } from './components/slot-contents-picker.component';
67
68
  export { SlotMenuComponent } from './components/slot-menu.component';
68
69
  export { SlotMenuListComponent } from './components/slot-menu-list.component';
69
- export declare const LUZMO_COMPONENTS: readonly [typeof AiChatMessageAssistantComponent, typeof AiChatMessageUserComponent, typeof AiChatMessagesContainerComponent, typeof AiInteractionTextareaComponent, typeof DatasetIconComponent, typeof DatasetSelectorListComponent, typeof DatasetSelectorRowComponent, typeof DisplaySettingsComponent, typeof DisplaySettingsBinningComponent, typeof DisplaySettingsDatetimeComponent, typeof DisplaySettingsGrandTotalsComponent, typeof DisplaySettingsNumericComponent, typeof DisplaySettingsPeriodOverPeriodComponent, typeof DraggableDataItemComponent, typeof DraggableDataItemLevelComponent, typeof DroppableSlotComponent, typeof EditItemComponent, typeof EditOptionComponent, typeof EditOptionColorPickerComponent, typeof EditOptionColorRangeComponent, typeof FilterDataItemPickerComponent, typeof FilterExpressionPickerComponent, typeof FilterGroupComponent, typeof FilterItemComponent, typeof FilterParameterPickerComponent, typeof FilterValuePickerComponent, typeof FilterValuePickerDatetimeComponent, typeof FilterValuePickerHierarchyComponent, typeof FilterValuePickerNumericComponent, typeof GridComponent, typeof GridItemActionsMenuComponent, typeof SlotContentsPickerComponent, typeof SlotMenuComponent, typeof SlotMenuListComponent];
70
+ export { WidgetMenuComponent } from './components/widget-menu.component';
71
+ export declare const LUZMO_COMPONENTS: readonly [typeof AiChatMessageAssistantComponent, typeof AiChatMessageUserComponent, typeof AiChatMessagesContainerComponent, typeof AiInteractionTextareaComponent, typeof DatasetIconComponent, typeof DatasetSelectorListComponent, typeof DatasetSelectorRowComponent, typeof DisplaySettingsComponent, typeof DisplaySettingsBinningComponent, typeof DisplaySettingsDatetimeComponent, typeof DisplaySettingsGrandTotalsComponent, typeof DisplaySettingsNumericComponent, typeof DisplaySettingsPeriodOverPeriodComponent, typeof DraggableDataItemComponent, typeof DraggableDataItemLevelComponent, typeof DroppableSlotComponent, typeof EditItemComponent, typeof EditOptionComponent, typeof EditOptionColorPickerComponent, typeof EditOptionColorRangeComponent, typeof FilterDataItemPickerComponent, typeof FilterExpressionPickerComponent, typeof FilterGroupComponent, typeof FilterItemComponent, typeof FilterParameterPickerComponent, typeof FilterValuePickerComponent, typeof FilterValuePickerDatetimeComponent, typeof FilterValuePickerHierarchyComponent, typeof FilterValuePickerNumericComponent, typeof GridComponent, typeof GridItemActionsMenuComponent, typeof SlotContentsPickerComponent, typeof SlotMenuComponent, typeof SlotMenuListComponent, typeof WidgetMenuComponent];
@@ -32,6 +32,7 @@ import { GridItemActionsMenuComponent } from './components/grid-item-actions-men
32
32
  import { SlotContentsPickerComponent } from './components/slot-contents-picker.component';
33
33
  import { SlotMenuComponent } from './components/slot-menu.component';
34
34
  import { SlotMenuListComponent } from './components/slot-menu-list.component';
35
+ import { WidgetMenuComponent } from './components/widget-menu.component';
35
36
  export { AiChatMessageAssistantComponent } from './components/ai-chat-message-assistant.component';
36
37
  export { AiChatMessageUserComponent } from './components/ai-chat-message-user.component';
37
38
  export { AiChatMessagesContainerComponent } from './components/ai-chat-messages-container.component';
@@ -66,6 +67,7 @@ export { GridItemActionsMenuComponent } from './components/grid-item-actions-men
66
67
  export { SlotContentsPickerComponent } from './components/slot-contents-picker.component';
67
68
  export { SlotMenuComponent } from './components/slot-menu.component';
68
69
  export { SlotMenuListComponent } from './components/slot-menu-list.component';
70
+ export { WidgetMenuComponent } from './components/widget-menu.component';
69
71
  export const LUZMO_COMPONENTS = [
70
72
  AiChatMessageAssistantComponent,
71
73
  AiChatMessageUserComponent,
@@ -100,5 +102,6 @@ export const LUZMO_COMPONENTS = [
100
102
  GridItemActionsMenuComponent,
101
103
  SlotContentsPickerComponent,
102
104
  SlotMenuComponent,
103
- SlotMenuListComponent
105
+ SlotMenuListComponent,
106
+ WidgetMenuComponent
104
107
  ];
@@ -109,3 +109,7 @@ export interface Dataset {
109
109
  };
110
110
  };
111
111
  }
112
+ /**
113
+ * Widget menu item types that can be selected
114
+ */
115
+ export type WidgetMenuItem = 'clone' | 'remove' | 'edit';
package/angular/index.ts CHANGED
@@ -32,6 +32,7 @@ import { GridItemActionsMenuComponent } from './components/grid-item-actions-men
32
32
  import { SlotContentsPickerComponent } from './components/slot-contents-picker.component';
33
33
  import { SlotMenuComponent } from './components/slot-menu.component';
34
34
  import { SlotMenuListComponent } from './components/slot-menu-list.component';
35
+ import { WidgetMenuComponent } from './components/widget-menu.component';
35
36
 
36
37
  export { AiChatMessageAssistantComponent } from './components/ai-chat-message-assistant.component';
37
38
  export { AiChatMessageUserComponent } from './components/ai-chat-message-user.component';
@@ -67,6 +68,7 @@ export { GridItemActionsMenuComponent } from './components/grid-item-actions-men
67
68
  export { SlotContentsPickerComponent } from './components/slot-contents-picker.component';
68
69
  export { SlotMenuComponent } from './components/slot-menu.component';
69
70
  export { SlotMenuListComponent } from './components/slot-menu-list.component';
71
+ export { WidgetMenuComponent } from './components/widget-menu.component';
70
72
 
71
73
  export const LUZMO_COMPONENTS = [
72
74
  AiChatMessageAssistantComponent,
@@ -102,5 +104,6 @@ export const LUZMO_COMPONENTS = [
102
104
  GridItemActionsMenuComponent,
103
105
  SlotContentsPickerComponent,
104
106
  SlotMenuComponent,
105
- SlotMenuListComponent
107
+ SlotMenuListComponent,
108
+ WidgetMenuComponent
106
109
  ] as const;
package/angular/types.ts CHANGED
@@ -144,3 +144,9 @@ export interface Dataset {
144
144
  };
145
145
  };
146
146
  }
147
+
148
+
149
+ /**
150
+ * Widget menu item types that can be selected
151
+ */
152
+ export type WidgetMenuItem = 'clone' | 'remove' | 'edit';
@@ -17,7 +17,7 @@
17
17
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18
18
  * SOFTWARE.
19
19
  * */
20
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("@luzmo/lucero/overlay");require("@luzmo/lucero/popover");const ht=require("@luzmo/icons"),Y=require("lit"),Fe=require("lit/decorators.js");const{entries:yt,setPrototypeOf:gt,isFrozen:Kt,getPrototypeOf:Zt,getOwnPropertyDescriptor:Jt}=Object;let{freeze:S,seal:R,create:ze}=Object,{apply:ke,construct:Ue}=typeof Reflect<"u"&&Reflect;S||(S=function(a){return a});R||(R=function(a){return a});ke||(ke=function(a,i){for(var s=arguments.length,c=new Array(s>2?s-2:0),p=2;p<s;p++)c[p-2]=arguments[p];return a.apply(i,c)});Ue||(Ue=function(a){for(var i=arguments.length,s=new Array(i>1?i-1:0),c=1;c<i;c++)s[c-1]=arguments[c];return new a(...s)});const me=y(Array.prototype.forEach),Qt=y(Array.prototype.lastIndexOf),dt=y(Array.prototype.pop),Z=y(Array.prototype.push),ea=y(Array.prototype.splice),pe=y(String.prototype.toLowerCase),De=y(String.prototype.toString),Ce=y(String.prototype.match),J=y(String.prototype.replace),ta=y(String.prototype.indexOf),aa=y(String.prototype.trim),x=y(Object.prototype.hasOwnProperty),b=y(RegExp.prototype.test),Q=na(TypeError);function y(r){return function(a){a instanceof RegExp&&(a.lastIndex=0);for(var i=arguments.length,s=new Array(i>1?i-1:0),c=1;c<i;c++)s[c-1]=arguments[c];return ke(r,a,s)}}function na(r){return function(){for(var a=arguments.length,i=new Array(a),s=0;s<a;s++)i[s]=arguments[s];return Ue(r,i)}}function l(r,a){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:pe;gt&&gt(r,null);let s=a.length;for(;s--;){let c=a[s];if(typeof c=="string"){const p=i(c);p!==c&&(Kt(a)||(a[s]=p),c=p)}r[c]=!0}return r}function oa(r){for(let a=0;a<r.length;a++)x(r,a)||(r[a]=null);return r}function N(r){const a=ze(null);for(const[i,s]of yt(r))x(r,i)&&(Array.isArray(s)?a[i]=oa(s):s&&typeof s=="object"&&s.constructor===Object?a[i]=N(s):a[i]=s);return a}function ee(r,a){for(;r!==null;){const s=Jt(r,a);if(s){if(s.get)return y(s.get);if(typeof s.value=="function")return y(s.value)}r=Zt(r)}function i(){return null}return i}const Tt=S(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Ne=S(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Ie=S(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),sa=S(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Me=S(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),ia=S(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Et=S(["#text"]),_t=S(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),Pe=S(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),At=S(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),fe=S(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),ra=R(/\{\{[\w\W]*|[\w\W]*\}\}/gm),la=R(/<%[\w\W]*|[\w\W]*%>/gm),ca=R(/\$\{[\w\W]*/gm),ua=R(/^data-[\-\w.\u00B7-\uFFFF]+$/),ma=R(/^aria-[\-\w]+$/),vt=R(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),fa=R(/^(?:\w+script|data):/i),pa=R(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Rt=R(/^html$/i),ha=R(/^[a-z][.\w]*(-[.\w]+)+$/i);var bt=Object.freeze({__proto__:null,ARIA_ATTR:ma,ATTR_WHITESPACE:pa,CUSTOM_ELEMENT:ha,DATA_ATTR:ua,DOCTYPE_NAME:Rt,ERB_EXPR:la,IS_ALLOWED_URI:vt,IS_SCRIPT_OR_DATA:fa,MUSTACHE_EXPR:ra,TMPLIT_EXPR:ca});const te={element:1,text:3,progressingInstruction:7,comment:8,document:9},ga=function(){return typeof window>"u"?null:window},da=function(a,i){if(typeof a!="object"||typeof a.createPolicy!="function")return null;let s=null;const c="data-tt-policy-suffix";i&&i.hasAttribute(c)&&(s=i.getAttribute(c));const p="dompurify"+(s?"#"+s:"");try{return a.createPolicy(p,{createHTML(O){return O},createScriptURL(O){return O}})}catch{return console.warn("TrustedTypes policy "+p+" could not be created."),null}},St=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function xt(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ga();const a=o=>xt(o);if(a.version="3.3.0",a.removed=[],!r||!r.document||r.document.nodeType!==te.document||!r.Element)return a.isSupported=!1,a;let{document:i}=r;const s=i,c=s.currentScript,{DocumentFragment:p,HTMLTemplateElement:O,Node:he,Element:We,NodeFilter:j,NamedNodeMap:Ot=r.NamedNodeMap||r.MozNamedAttrMap,HTMLFormElement:Lt,DOMParser:wt,trustedTypes:ae}=r,X=We.prototype,Dt=ee(X,"cloneNode"),Ct=ee(X,"remove"),Nt=ee(X,"nextSibling"),It=ee(X,"childNodes"),ne=ee(X,"parentNode");if(typeof O=="function"){const o=i.createElement("template");o.content&&o.content.ownerDocument&&(i=o.content.ownerDocument)}let _,$="";const{implementation:ge,createNodeIterator:Mt,createDocumentFragment:Pt,getElementsByTagName:zt}=i,{importNode:kt}=s;let A=St();a.isSupported=typeof yt=="function"&&typeof ne=="function"&&ge&&ge.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:de,ERB_EXPR:Te,TMPLIT_EXPR:Ee,DATA_ATTR:Ut,ARIA_ATTR:Ft,IS_SCRIPT_OR_DATA:Ht,ATTR_WHITESPACE:Be,CUSTOM_ELEMENT:Gt}=bt;let{IS_ALLOWED_URI:Ye}=bt,h=null;const je=l({},[...Tt,...Ne,...Ie,...Me,...Et]);let d=null;const Xe=l({},[..._t,...Pe,...At,...fe]);let m=Object.seal(ze(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),V=null,_e=null;const z=Object.seal(ze(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let $e=!0,Ae=!0,Ve=!1,qe=!0,k=!1,oe=!0,I=!1,be=!1,Se=!1,U=!1,se=!1,ie=!1,Ke=!0,Ze=!1;const Wt="user-content-";let ye=!0,q=!1,F={},H=null;const Je=l({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Qe=null;const et=l({},["audio","video","img","source","image","track"]);let ve=null;const tt=l({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),re="http://www.w3.org/1998/Math/MathML",le="http://www.w3.org/2000/svg",w="http://www.w3.org/1999/xhtml";let G=w,Re=!1,xe=null;const Bt=l({},[re,le,w],De);let ce=l({},["mi","mo","mn","ms","mtext"]),ue=l({},["annotation-xml"]);const Yt=l({},["title","style","font","a","script"]);let K=null;const jt=["application/xhtml+xml","text/html"],Xt="text/html";let g=null,W=null;const $t=i.createElement("form"),at=function(e){return e instanceof RegExp||e instanceof Function},Oe=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(W&&W===e)){if((!e||typeof e!="object")&&(e={}),e=N(e),K=jt.indexOf(e.PARSER_MEDIA_TYPE)===-1?Xt:e.PARSER_MEDIA_TYPE,g=K==="application/xhtml+xml"?De:pe,h=x(e,"ALLOWED_TAGS")?l({},e.ALLOWED_TAGS,g):je,d=x(e,"ALLOWED_ATTR")?l({},e.ALLOWED_ATTR,g):Xe,xe=x(e,"ALLOWED_NAMESPACES")?l({},e.ALLOWED_NAMESPACES,De):Bt,ve=x(e,"ADD_URI_SAFE_ATTR")?l(N(tt),e.ADD_URI_SAFE_ATTR,g):tt,Qe=x(e,"ADD_DATA_URI_TAGS")?l(N(et),e.ADD_DATA_URI_TAGS,g):et,H=x(e,"FORBID_CONTENTS")?l({},e.FORBID_CONTENTS,g):Je,V=x(e,"FORBID_TAGS")?l({},e.FORBID_TAGS,g):N({}),_e=x(e,"FORBID_ATTR")?l({},e.FORBID_ATTR,g):N({}),F=x(e,"USE_PROFILES")?e.USE_PROFILES:!1,$e=e.ALLOW_ARIA_ATTR!==!1,Ae=e.ALLOW_DATA_ATTR!==!1,Ve=e.ALLOW_UNKNOWN_PROTOCOLS||!1,qe=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,k=e.SAFE_FOR_TEMPLATES||!1,oe=e.SAFE_FOR_XML!==!1,I=e.WHOLE_DOCUMENT||!1,U=e.RETURN_DOM||!1,se=e.RETURN_DOM_FRAGMENT||!1,ie=e.RETURN_TRUSTED_TYPE||!1,Se=e.FORCE_BODY||!1,Ke=e.SANITIZE_DOM!==!1,Ze=e.SANITIZE_NAMED_PROPS||!1,ye=e.KEEP_CONTENT!==!1,q=e.IN_PLACE||!1,Ye=e.ALLOWED_URI_REGEXP||vt,G=e.NAMESPACE||w,ce=e.MATHML_TEXT_INTEGRATION_POINTS||ce,ue=e.HTML_INTEGRATION_POINTS||ue,m=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&at(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(m.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&at(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(m.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(m.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),k&&(Ae=!1),se&&(U=!0),F&&(h=l({},Et),d=[],F.html===!0&&(l(h,Tt),l(d,_t)),F.svg===!0&&(l(h,Ne),l(d,Pe),l(d,fe)),F.svgFilters===!0&&(l(h,Ie),l(d,Pe),l(d,fe)),F.mathMl===!0&&(l(h,Me),l(d,At),l(d,fe))),e.ADD_TAGS&&(typeof e.ADD_TAGS=="function"?z.tagCheck=e.ADD_TAGS:(h===je&&(h=N(h)),l(h,e.ADD_TAGS,g))),e.ADD_ATTR&&(typeof e.ADD_ATTR=="function"?z.attributeCheck=e.ADD_ATTR:(d===Xe&&(d=N(d)),l(d,e.ADD_ATTR,g))),e.ADD_URI_SAFE_ATTR&&l(ve,e.ADD_URI_SAFE_ATTR,g),e.FORBID_CONTENTS&&(H===Je&&(H=N(H)),l(H,e.FORBID_CONTENTS,g)),ye&&(h["#text"]=!0),I&&l(h,["html","head","body"]),h.table&&(l(h,["tbody"]),delete V.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw Q('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Q('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');_=e.TRUSTED_TYPES_POLICY,$=_.createHTML("")}else _===void 0&&(_=da(ae,c)),_!==null&&typeof $=="string"&&($=_.createHTML(""));S&&S(e),W=e}},nt=l({},[...Ne,...Ie,...sa]),ot=l({},[...Me,...ia]),Vt=function(e){let t=ne(e);(!t||!t.tagName)&&(t={namespaceURI:G,tagName:"template"});const n=pe(e.tagName),u=pe(t.tagName);return xe[e.namespaceURI]?e.namespaceURI===le?t.namespaceURI===w?n==="svg":t.namespaceURI===re?n==="svg"&&(u==="annotation-xml"||ce[u]):!!nt[n]:e.namespaceURI===re?t.namespaceURI===w?n==="math":t.namespaceURI===le?n==="math"&&ue[u]:!!ot[n]:e.namespaceURI===w?t.namespaceURI===le&&!ue[u]||t.namespaceURI===re&&!ce[u]?!1:!ot[n]&&(Yt[n]||!nt[n]):!!(K==="application/xhtml+xml"&&xe[e.namespaceURI]):!1},L=function(e){Z(a.removed,{element:e});try{ne(e).removeChild(e)}catch{Ct(e)}},M=function(e,t){try{Z(a.removed,{attribute:t.getAttributeNode(e),from:t})}catch{Z(a.removed,{attribute:null,from:t})}if(t.removeAttribute(e),e==="is")if(U||se)try{L(t)}catch{}else try{t.setAttribute(e,"")}catch{}},st=function(e){let t=null,n=null;if(Se)e="<remove></remove>"+e;else{const f=Ce(e,/^[\r\n\t ]+/);n=f&&f[0]}K==="application/xhtml+xml"&&G===w&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");const u=_?_.createHTML(e):e;if(G===w)try{t=new wt().parseFromString(u,K)}catch{}if(!t||!t.documentElement){t=ge.createDocument(G,"template",null);try{t.documentElement.innerHTML=Re?$:u}catch{}}const E=t.body||t.documentElement;return e&&n&&E.insertBefore(i.createTextNode(n),E.childNodes[0]||null),G===w?zt.call(t,I?"html":"body")[0]:I?t.documentElement:E},it=function(e){return Mt.call(e.ownerDocument||e,e,j.SHOW_ELEMENT|j.SHOW_COMMENT|j.SHOW_TEXT|j.SHOW_PROCESSING_INSTRUCTION|j.SHOW_CDATA_SECTION,null)},Le=function(e){return e instanceof Lt&&(typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||!(e.attributes instanceof Ot)||typeof e.removeAttribute!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function")},rt=function(e){return typeof he=="function"&&e instanceof he};function D(o,e,t){me(o,n=>{n.call(a,e,t,W)})}const lt=function(e){let t=null;if(D(A.beforeSanitizeElements,e,null),Le(e))return L(e),!0;const n=g(e.nodeName);if(D(A.uponSanitizeElement,e,{tagName:n,allowedTags:h}),oe&&e.hasChildNodes()&&!rt(e.firstElementChild)&&b(/<[/\w!]/g,e.innerHTML)&&b(/<[/\w!]/g,e.textContent)||e.nodeType===te.progressingInstruction||oe&&e.nodeType===te.comment&&b(/<[/\w]/g,e.data))return L(e),!0;if(!(z.tagCheck instanceof Function&&z.tagCheck(n))&&(!h[n]||V[n])){if(!V[n]&&ut(n)&&(m.tagNameCheck instanceof RegExp&&b(m.tagNameCheck,n)||m.tagNameCheck instanceof Function&&m.tagNameCheck(n)))return!1;if(ye&&!H[n]){const u=ne(e)||e.parentNode,E=It(e)||e.childNodes;if(E&&u){const f=E.length;for(let v=f-1;v>=0;--v){const C=Dt(E[v],!0);C.__removalCount=(e.__removalCount||0)+1,u.insertBefore(C,Nt(e))}}}return L(e),!0}return e instanceof We&&!Vt(e)||(n==="noscript"||n==="noembed"||n==="noframes")&&b(/<\/no(script|embed|frames)/i,e.innerHTML)?(L(e),!0):(k&&e.nodeType===te.text&&(t=e.textContent,me([de,Te,Ee],u=>{t=J(t,u," ")}),e.textContent!==t&&(Z(a.removed,{element:e.cloneNode()}),e.textContent=t)),D(A.afterSanitizeElements,e,null),!1)},ct=function(e,t,n){if(Ke&&(t==="id"||t==="name")&&(n in i||n in $t))return!1;if(!(Ae&&!_e[t]&&b(Ut,t))){if(!($e&&b(Ft,t))){if(!(z.attributeCheck instanceof Function&&z.attributeCheck(t,e))){if(!d[t]||_e[t]){if(!(ut(e)&&(m.tagNameCheck instanceof RegExp&&b(m.tagNameCheck,e)||m.tagNameCheck instanceof Function&&m.tagNameCheck(e))&&(m.attributeNameCheck instanceof RegExp&&b(m.attributeNameCheck,t)||m.attributeNameCheck instanceof Function&&m.attributeNameCheck(t,e))||t==="is"&&m.allowCustomizedBuiltInElements&&(m.tagNameCheck instanceof RegExp&&b(m.tagNameCheck,n)||m.tagNameCheck instanceof Function&&m.tagNameCheck(n))))return!1}else if(!ve[t]){if(!b(Ye,J(n,Be,""))){if(!((t==="src"||t==="xlink:href"||t==="href")&&e!=="script"&&ta(n,"data:")===0&&Qe[e])){if(!(Ve&&!b(Ht,J(n,Be,"")))){if(n)return!1}}}}}}}return!0},ut=function(e){return e!=="annotation-xml"&&Ce(e,Gt)},mt=function(e){D(A.beforeSanitizeAttributes,e,null);const{attributes:t}=e;if(!t||Le(e))return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:d,forceKeepAttr:void 0};let u=t.length;for(;u--;){const E=t[u],{name:f,namespaceURI:v,value:C}=E,B=g(f),we=C;let T=f==="value"?we:aa(we);if(n.attrName=B,n.attrValue=T,n.keepAttr=!0,n.forceKeepAttr=void 0,D(A.uponSanitizeAttribute,e,n),T=n.attrValue,Ze&&(B==="id"||B==="name")&&(M(f,e),T=Wt+T),oe&&b(/((--!?|])>)|<\/(style|title|textarea)/i,T)){M(f,e);continue}if(B==="attributename"&&Ce(T,"href")){M(f,e);continue}if(n.forceKeepAttr)continue;if(!n.keepAttr){M(f,e);continue}if(!qe&&b(/\/>/i,T)){M(f,e);continue}k&&me([de,Te,Ee],pt=>{T=J(T,pt," ")});const ft=g(e.nodeName);if(!ct(ft,B,T)){M(f,e);continue}if(_&&typeof ae=="object"&&typeof ae.getAttributeType=="function"&&!v)switch(ae.getAttributeType(ft,B)){case"TrustedHTML":{T=_.createHTML(T);break}case"TrustedScriptURL":{T=_.createScriptURL(T);break}}if(T!==we)try{v?e.setAttributeNS(v,f,T):e.setAttribute(f,T),Le(e)?L(e):dt(a.removed)}catch{M(f,e)}}D(A.afterSanitizeAttributes,e,null)},qt=function o(e){let t=null;const n=it(e);for(D(A.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)D(A.uponSanitizeShadowNode,t,null),lt(t),mt(t),t.content instanceof p&&o(t.content);D(A.afterSanitizeShadowDOM,e,null)};return a.sanitize=function(o){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=null,n=null,u=null,E=null;if(Re=!o,Re&&(o="<!-->"),typeof o!="string"&&!rt(o))if(typeof o.toString=="function"){if(o=o.toString(),typeof o!="string")throw Q("dirty is not a string, aborting")}else throw Q("toString is not a function");if(!a.isSupported)return o;if(be||Oe(e),a.removed=[],typeof o=="string"&&(q=!1),q){if(o.nodeName){const C=g(o.nodeName);if(!h[C]||V[C])throw Q("root node is forbidden and cannot be sanitized in-place")}}else if(o instanceof he)t=st("<!---->"),n=t.ownerDocument.importNode(o,!0),n.nodeType===te.element&&n.nodeName==="BODY"||n.nodeName==="HTML"?t=n:t.appendChild(n);else{if(!U&&!k&&!I&&o.indexOf("<")===-1)return _&&ie?_.createHTML(o):o;if(t=st(o),!t)return U?null:ie?$:""}t&&Se&&L(t.firstChild);const f=it(q?o:t);for(;u=f.nextNode();)lt(u),mt(u),u.content instanceof p&&qt(u.content);if(q)return o;if(U){if(se)for(E=Pt.call(t.ownerDocument);t.firstChild;)E.appendChild(t.firstChild);else E=t;return(d.shadowroot||d.shadowrootmode)&&(E=kt.call(s,E,!0)),E}let v=I?t.outerHTML:t.innerHTML;return I&&h["!doctype"]&&t.ownerDocument&&t.ownerDocument.doctype&&t.ownerDocument.doctype.name&&b(Rt,t.ownerDocument.doctype.name)&&(v="<!DOCTYPE "+t.ownerDocument.doctype.name+`>
20
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("@luzmo/lucero/overlay");require("@luzmo/lucero/popover");const ht=require("@luzmo/icons"),Y=require("lit"),Fe=require("lit/decorators.js");/*! @license DOMPurify 3.3.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.0/LICENSE */const{entries:yt,setPrototypeOf:gt,isFrozen:Kt,getPrototypeOf:Zt,getOwnPropertyDescriptor:Jt}=Object;let{freeze:S,seal:R,create:ze}=Object,{apply:ke,construct:Ue}=typeof Reflect<"u"&&Reflect;S||(S=function(a){return a});R||(R=function(a){return a});ke||(ke=function(a,i){for(var s=arguments.length,c=new Array(s>2?s-2:0),p=2;p<s;p++)c[p-2]=arguments[p];return a.apply(i,c)});Ue||(Ue=function(a){for(var i=arguments.length,s=new Array(i>1?i-1:0),c=1;c<i;c++)s[c-1]=arguments[c];return new a(...s)});const me=y(Array.prototype.forEach),Qt=y(Array.prototype.lastIndexOf),dt=y(Array.prototype.pop),Z=y(Array.prototype.push),ea=y(Array.prototype.splice),pe=y(String.prototype.toLowerCase),De=y(String.prototype.toString),Ce=y(String.prototype.match),J=y(String.prototype.replace),ta=y(String.prototype.indexOf),aa=y(String.prototype.trim),x=y(Object.prototype.hasOwnProperty),b=y(RegExp.prototype.test),Q=na(TypeError);function y(r){return function(a){a instanceof RegExp&&(a.lastIndex=0);for(var i=arguments.length,s=new Array(i>1?i-1:0),c=1;c<i;c++)s[c-1]=arguments[c];return ke(r,a,s)}}function na(r){return function(){for(var a=arguments.length,i=new Array(a),s=0;s<a;s++)i[s]=arguments[s];return Ue(r,i)}}function l(r,a){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:pe;gt&&gt(r,null);let s=a.length;for(;s--;){let c=a[s];if(typeof c=="string"){const p=i(c);p!==c&&(Kt(a)||(a[s]=p),c=p)}r[c]=!0}return r}function oa(r){for(let a=0;a<r.length;a++)x(r,a)||(r[a]=null);return r}function N(r){const a=ze(null);for(const[i,s]of yt(r))x(r,i)&&(Array.isArray(s)?a[i]=oa(s):s&&typeof s=="object"&&s.constructor===Object?a[i]=N(s):a[i]=s);return a}function ee(r,a){for(;r!==null;){const s=Jt(r,a);if(s){if(s.get)return y(s.get);if(typeof s.value=="function")return y(s.value)}r=Zt(r)}function i(){return null}return i}const Tt=S(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Ne=S(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Ie=S(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),sa=S(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Me=S(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),ia=S(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Et=S(["#text"]),_t=S(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),Pe=S(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),At=S(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),fe=S(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),ra=R(/\{\{[\w\W]*|[\w\W]*\}\}/gm),la=R(/<%[\w\W]*|[\w\W]*%>/gm),ca=R(/\$\{[\w\W]*/gm),ua=R(/^data-[\-\w.\u00B7-\uFFFF]+$/),ma=R(/^aria-[\-\w]+$/),vt=R(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),fa=R(/^(?:\w+script|data):/i),pa=R(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Rt=R(/^html$/i),ha=R(/^[a-z][.\w]*(-[.\w]+)+$/i);var bt=Object.freeze({__proto__:null,ARIA_ATTR:ma,ATTR_WHITESPACE:pa,CUSTOM_ELEMENT:ha,DATA_ATTR:ua,DOCTYPE_NAME:Rt,ERB_EXPR:la,IS_ALLOWED_URI:vt,IS_SCRIPT_OR_DATA:fa,MUSTACHE_EXPR:ra,TMPLIT_EXPR:ca});const te={element:1,text:3,progressingInstruction:7,comment:8,document:9},ga=function(){return typeof window>"u"?null:window},da=function(a,i){if(typeof a!="object"||typeof a.createPolicy!="function")return null;let s=null;const c="data-tt-policy-suffix";i&&i.hasAttribute(c)&&(s=i.getAttribute(c));const p="dompurify"+(s?"#"+s:"");try{return a.createPolicy(p,{createHTML(O){return O},createScriptURL(O){return O}})}catch{return console.warn("TrustedTypes policy "+p+" could not be created."),null}},St=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function xt(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ga();const a=o=>xt(o);if(a.version="3.3.0",a.removed=[],!r||!r.document||r.document.nodeType!==te.document||!r.Element)return a.isSupported=!1,a;let{document:i}=r;const s=i,c=s.currentScript,{DocumentFragment:p,HTMLTemplateElement:O,Node:he,Element:We,NodeFilter:j,NamedNodeMap:Ot=r.NamedNodeMap||r.MozNamedAttrMap,HTMLFormElement:Lt,DOMParser:wt,trustedTypes:ae}=r,X=We.prototype,Dt=ee(X,"cloneNode"),Ct=ee(X,"remove"),Nt=ee(X,"nextSibling"),It=ee(X,"childNodes"),ne=ee(X,"parentNode");if(typeof O=="function"){const o=i.createElement("template");o.content&&o.content.ownerDocument&&(i=o.content.ownerDocument)}let _,$="";const{implementation:ge,createNodeIterator:Mt,createDocumentFragment:Pt,getElementsByTagName:zt}=i,{importNode:kt}=s;let A=St();a.isSupported=typeof yt=="function"&&typeof ne=="function"&&ge&&ge.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:de,ERB_EXPR:Te,TMPLIT_EXPR:Ee,DATA_ATTR:Ut,ARIA_ATTR:Ft,IS_SCRIPT_OR_DATA:Ht,ATTR_WHITESPACE:Be,CUSTOM_ELEMENT:Gt}=bt;let{IS_ALLOWED_URI:Ye}=bt,h=null;const je=l({},[...Tt,...Ne,...Ie,...Me,...Et]);let d=null;const Xe=l({},[..._t,...Pe,...At,...fe]);let m=Object.seal(ze(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),V=null,_e=null;const z=Object.seal(ze(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let $e=!0,Ae=!0,Ve=!1,qe=!0,k=!1,oe=!0,I=!1,be=!1,Se=!1,U=!1,se=!1,ie=!1,Ke=!0,Ze=!1;const Wt="user-content-";let ye=!0,q=!1,F={},H=null;const Je=l({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Qe=null;const et=l({},["audio","video","img","source","image","track"]);let ve=null;const tt=l({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),re="http://www.w3.org/1998/Math/MathML",le="http://www.w3.org/2000/svg",w="http://www.w3.org/1999/xhtml";let G=w,Re=!1,xe=null;const Bt=l({},[re,le,w],De);let ce=l({},["mi","mo","mn","ms","mtext"]),ue=l({},["annotation-xml"]);const Yt=l({},["title","style","font","a","script"]);let K=null;const jt=["application/xhtml+xml","text/html"],Xt="text/html";let g=null,W=null;const $t=i.createElement("form"),at=function(e){return e instanceof RegExp||e instanceof Function},Oe=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(W&&W===e)){if((!e||typeof e!="object")&&(e={}),e=N(e),K=jt.indexOf(e.PARSER_MEDIA_TYPE)===-1?Xt:e.PARSER_MEDIA_TYPE,g=K==="application/xhtml+xml"?De:pe,h=x(e,"ALLOWED_TAGS")?l({},e.ALLOWED_TAGS,g):je,d=x(e,"ALLOWED_ATTR")?l({},e.ALLOWED_ATTR,g):Xe,xe=x(e,"ALLOWED_NAMESPACES")?l({},e.ALLOWED_NAMESPACES,De):Bt,ve=x(e,"ADD_URI_SAFE_ATTR")?l(N(tt),e.ADD_URI_SAFE_ATTR,g):tt,Qe=x(e,"ADD_DATA_URI_TAGS")?l(N(et),e.ADD_DATA_URI_TAGS,g):et,H=x(e,"FORBID_CONTENTS")?l({},e.FORBID_CONTENTS,g):Je,V=x(e,"FORBID_TAGS")?l({},e.FORBID_TAGS,g):N({}),_e=x(e,"FORBID_ATTR")?l({},e.FORBID_ATTR,g):N({}),F=x(e,"USE_PROFILES")?e.USE_PROFILES:!1,$e=e.ALLOW_ARIA_ATTR!==!1,Ae=e.ALLOW_DATA_ATTR!==!1,Ve=e.ALLOW_UNKNOWN_PROTOCOLS||!1,qe=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,k=e.SAFE_FOR_TEMPLATES||!1,oe=e.SAFE_FOR_XML!==!1,I=e.WHOLE_DOCUMENT||!1,U=e.RETURN_DOM||!1,se=e.RETURN_DOM_FRAGMENT||!1,ie=e.RETURN_TRUSTED_TYPE||!1,Se=e.FORCE_BODY||!1,Ke=e.SANITIZE_DOM!==!1,Ze=e.SANITIZE_NAMED_PROPS||!1,ye=e.KEEP_CONTENT!==!1,q=e.IN_PLACE||!1,Ye=e.ALLOWED_URI_REGEXP||vt,G=e.NAMESPACE||w,ce=e.MATHML_TEXT_INTEGRATION_POINTS||ce,ue=e.HTML_INTEGRATION_POINTS||ue,m=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&at(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(m.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&at(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(m.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(m.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),k&&(Ae=!1),se&&(U=!0),F&&(h=l({},Et),d=[],F.html===!0&&(l(h,Tt),l(d,_t)),F.svg===!0&&(l(h,Ne),l(d,Pe),l(d,fe)),F.svgFilters===!0&&(l(h,Ie),l(d,Pe),l(d,fe)),F.mathMl===!0&&(l(h,Me),l(d,At),l(d,fe))),e.ADD_TAGS&&(typeof e.ADD_TAGS=="function"?z.tagCheck=e.ADD_TAGS:(h===je&&(h=N(h)),l(h,e.ADD_TAGS,g))),e.ADD_ATTR&&(typeof e.ADD_ATTR=="function"?z.attributeCheck=e.ADD_ATTR:(d===Xe&&(d=N(d)),l(d,e.ADD_ATTR,g))),e.ADD_URI_SAFE_ATTR&&l(ve,e.ADD_URI_SAFE_ATTR,g),e.FORBID_CONTENTS&&(H===Je&&(H=N(H)),l(H,e.FORBID_CONTENTS,g)),ye&&(h["#text"]=!0),I&&l(h,["html","head","body"]),h.table&&(l(h,["tbody"]),delete V.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw Q('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Q('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');_=e.TRUSTED_TYPES_POLICY,$=_.createHTML("")}else _===void 0&&(_=da(ae,c)),_!==null&&typeof $=="string"&&($=_.createHTML(""));S&&S(e),W=e}},nt=l({},[...Ne,...Ie,...sa]),ot=l({},[...Me,...ia]),Vt=function(e){let t=ne(e);(!t||!t.tagName)&&(t={namespaceURI:G,tagName:"template"});const n=pe(e.tagName),u=pe(t.tagName);return xe[e.namespaceURI]?e.namespaceURI===le?t.namespaceURI===w?n==="svg":t.namespaceURI===re?n==="svg"&&(u==="annotation-xml"||ce[u]):!!nt[n]:e.namespaceURI===re?t.namespaceURI===w?n==="math":t.namespaceURI===le?n==="math"&&ue[u]:!!ot[n]:e.namespaceURI===w?t.namespaceURI===le&&!ue[u]||t.namespaceURI===re&&!ce[u]?!1:!ot[n]&&(Yt[n]||!nt[n]):!!(K==="application/xhtml+xml"&&xe[e.namespaceURI]):!1},L=function(e){Z(a.removed,{element:e});try{ne(e).removeChild(e)}catch{Ct(e)}},M=function(e,t){try{Z(a.removed,{attribute:t.getAttributeNode(e),from:t})}catch{Z(a.removed,{attribute:null,from:t})}if(t.removeAttribute(e),e==="is")if(U||se)try{L(t)}catch{}else try{t.setAttribute(e,"")}catch{}},st=function(e){let t=null,n=null;if(Se)e="<remove></remove>"+e;else{const f=Ce(e,/^[\r\n\t ]+/);n=f&&f[0]}K==="application/xhtml+xml"&&G===w&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");const u=_?_.createHTML(e):e;if(G===w)try{t=new wt().parseFromString(u,K)}catch{}if(!t||!t.documentElement){t=ge.createDocument(G,"template",null);try{t.documentElement.innerHTML=Re?$:u}catch{}}const E=t.body||t.documentElement;return e&&n&&E.insertBefore(i.createTextNode(n),E.childNodes[0]||null),G===w?zt.call(t,I?"html":"body")[0]:I?t.documentElement:E},it=function(e){return Mt.call(e.ownerDocument||e,e,j.SHOW_ELEMENT|j.SHOW_COMMENT|j.SHOW_TEXT|j.SHOW_PROCESSING_INSTRUCTION|j.SHOW_CDATA_SECTION,null)},Le=function(e){return e instanceof Lt&&(typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||!(e.attributes instanceof Ot)||typeof e.removeAttribute!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function")},rt=function(e){return typeof he=="function"&&e instanceof he};function D(o,e,t){me(o,n=>{n.call(a,e,t,W)})}const lt=function(e){let t=null;if(D(A.beforeSanitizeElements,e,null),Le(e))return L(e),!0;const n=g(e.nodeName);if(D(A.uponSanitizeElement,e,{tagName:n,allowedTags:h}),oe&&e.hasChildNodes()&&!rt(e.firstElementChild)&&b(/<[/\w!]/g,e.innerHTML)&&b(/<[/\w!]/g,e.textContent)||e.nodeType===te.progressingInstruction||oe&&e.nodeType===te.comment&&b(/<[/\w]/g,e.data))return L(e),!0;if(!(z.tagCheck instanceof Function&&z.tagCheck(n))&&(!h[n]||V[n])){if(!V[n]&&ut(n)&&(m.tagNameCheck instanceof RegExp&&b(m.tagNameCheck,n)||m.tagNameCheck instanceof Function&&m.tagNameCheck(n)))return!1;if(ye&&!H[n]){const u=ne(e)||e.parentNode,E=It(e)||e.childNodes;if(E&&u){const f=E.length;for(let v=f-1;v>=0;--v){const C=Dt(E[v],!0);C.__removalCount=(e.__removalCount||0)+1,u.insertBefore(C,Nt(e))}}}return L(e),!0}return e instanceof We&&!Vt(e)||(n==="noscript"||n==="noembed"||n==="noframes")&&b(/<\/no(script|embed|frames)/i,e.innerHTML)?(L(e),!0):(k&&e.nodeType===te.text&&(t=e.textContent,me([de,Te,Ee],u=>{t=J(t,u," ")}),e.textContent!==t&&(Z(a.removed,{element:e.cloneNode()}),e.textContent=t)),D(A.afterSanitizeElements,e,null),!1)},ct=function(e,t,n){if(Ke&&(t==="id"||t==="name")&&(n in i||n in $t))return!1;if(!(Ae&&!_e[t]&&b(Ut,t))){if(!($e&&b(Ft,t))){if(!(z.attributeCheck instanceof Function&&z.attributeCheck(t,e))){if(!d[t]||_e[t]){if(!(ut(e)&&(m.tagNameCheck instanceof RegExp&&b(m.tagNameCheck,e)||m.tagNameCheck instanceof Function&&m.tagNameCheck(e))&&(m.attributeNameCheck instanceof RegExp&&b(m.attributeNameCheck,t)||m.attributeNameCheck instanceof Function&&m.attributeNameCheck(t,e))||t==="is"&&m.allowCustomizedBuiltInElements&&(m.tagNameCheck instanceof RegExp&&b(m.tagNameCheck,n)||m.tagNameCheck instanceof Function&&m.tagNameCheck(n))))return!1}else if(!ve[t]){if(!b(Ye,J(n,Be,""))){if(!((t==="src"||t==="xlink:href"||t==="href")&&e!=="script"&&ta(n,"data:")===0&&Qe[e])){if(!(Ve&&!b(Ht,J(n,Be,"")))){if(n)return!1}}}}}}}return!0},ut=function(e){return e!=="annotation-xml"&&Ce(e,Gt)},mt=function(e){D(A.beforeSanitizeAttributes,e,null);const{attributes:t}=e;if(!t||Le(e))return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:d,forceKeepAttr:void 0};let u=t.length;for(;u--;){const E=t[u],{name:f,namespaceURI:v,value:C}=E,B=g(f),we=C;let T=f==="value"?we:aa(we);if(n.attrName=B,n.attrValue=T,n.keepAttr=!0,n.forceKeepAttr=void 0,D(A.uponSanitizeAttribute,e,n),T=n.attrValue,Ze&&(B==="id"||B==="name")&&(M(f,e),T=Wt+T),oe&&b(/((--!?|])>)|<\/(style|title|textarea)/i,T)){M(f,e);continue}if(B==="attributename"&&Ce(T,"href")){M(f,e);continue}if(n.forceKeepAttr)continue;if(!n.keepAttr){M(f,e);continue}if(!qe&&b(/\/>/i,T)){M(f,e);continue}k&&me([de,Te,Ee],pt=>{T=J(T,pt," ")});const ft=g(e.nodeName);if(!ct(ft,B,T)){M(f,e);continue}if(_&&typeof ae=="object"&&typeof ae.getAttributeType=="function"&&!v)switch(ae.getAttributeType(ft,B)){case"TrustedHTML":{T=_.createHTML(T);break}case"TrustedScriptURL":{T=_.createScriptURL(T);break}}if(T!==we)try{v?e.setAttributeNS(v,f,T):e.setAttribute(f,T),Le(e)?L(e):dt(a.removed)}catch{M(f,e)}}D(A.afterSanitizeAttributes,e,null)},qt=function o(e){let t=null;const n=it(e);for(D(A.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)D(A.uponSanitizeShadowNode,t,null),lt(t),mt(t),t.content instanceof p&&o(t.content);D(A.afterSanitizeShadowDOM,e,null)};return a.sanitize=function(o){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=null,n=null,u=null,E=null;if(Re=!o,Re&&(o="<!-->"),typeof o!="string"&&!rt(o))if(typeof o.toString=="function"){if(o=o.toString(),typeof o!="string")throw Q("dirty is not a string, aborting")}else throw Q("toString is not a function");if(!a.isSupported)return o;if(be||Oe(e),a.removed=[],typeof o=="string"&&(q=!1),q){if(o.nodeName){const C=g(o.nodeName);if(!h[C]||V[C])throw Q("root node is forbidden and cannot be sanitized in-place")}}else if(o instanceof he)t=st("<!---->"),n=t.ownerDocument.importNode(o,!0),n.nodeType===te.element&&n.nodeName==="BODY"||n.nodeName==="HTML"?t=n:t.appendChild(n);else{if(!U&&!k&&!I&&o.indexOf("<")===-1)return _&&ie?_.createHTML(o):o;if(t=st(o),!t)return U?null:ie?$:""}t&&Se&&L(t.firstChild);const f=it(q?o:t);for(;u=f.nextNode();)lt(u),mt(u),u.content instanceof p&&qt(u.content);if(q)return o;if(U){if(se)for(E=Pt.call(t.ownerDocument);t.firstChild;)E.appendChild(t.firstChild);else E=t;return(d.shadowroot||d.shadowrootmode)&&(E=kt.call(s,E,!0)),E}let v=I?t.outerHTML:t.innerHTML;return I&&h["!doctype"]&&t.ownerDocument&&t.ownerDocument.doctype&&t.ownerDocument.doctype.name&&b(Rt,t.ownerDocument.doctype.name)&&(v="<!DOCTYPE "+t.ownerDocument.doctype.name+`>
21
21
  `+v),k&&me([de,Te,Ee],C=>{v=J(v,C," ")}),_&&ie?_.createHTML(v):v},a.setConfig=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Oe(o),be=!0},a.clearConfig=function(){W=null,be=!1},a.isValidAttribute=function(o,e,t){W||Oe({});const n=g(o),u=g(e);return ct(n,u,t)},a.addHook=function(o,e){typeof e=="function"&&Z(A[o],e)},a.removeHook=function(o,e){if(e!==void 0){const t=Qt(A[o],e);return t===-1?void 0:ea(A[o],t,1)[0]}return dt(A[o])},a.removeHooks=function(o){A[o]=[]},a.removeAllHooks=function(){A=St()},a}var Ta=xt();const Ea=":host{box-sizing:border-box;display:block;width:100%;margin-bottom:var(--luzmo-ai-chat-message-assistant-margin-bottom, var(--ai-chat-message-assistant-margin-bottom))}:host .message-container{display:flex;flex-direction:column;align-items:flex-start;width:100%;max-width:100%}:host .message-text{background:var(--luzmo-ai-chat-message-assistant-background, var(--ai-chat-message-assistant-background));color:var(--luzmo-ai-chat-message-assistant-color, var(--ai-chat-message-assistant-color));padding:var(--luzmo-ai-chat-message-assistant-padding, var(--ai-chat-message-assistant-padding));border-radius:var(--luzmo-ai-chat-message-assistant-border-radius, var(--ai-chat-message-assistant-border-radius));font-family:var(--luzmo-ai-chat-message-assistant-font-family, var(--ai-chat-message-assistant-font-family));font-weight:var(--luzmo-ai-chat-message-assistant-font-weight, var(--ai-chat-message-assistant-font-weight));font-size:var(--luzmo-ai-chat-message-assistant-font-size, var(--ai-chat-message-assistant-font-size));line-height:var(--luzmo-ai-chat-message-assistant-line-height, var(--ai-chat-message-assistant-line-height));text-align:left;word-wrap:break-word;width:fit-content;max-width:100%;box-shadow:var(--luzmo-ai-chat-message-assistant-box-shadow, var(--ai-chat-message-assistant-box-shadow))}:host .context-menu-button{background:var(--luzmo-background-color);border:var(--luzmo-ai-chat-message-assistant-context-menu-border, var(--ai-chat-message-assistant-context-menu-border));border-radius:var(--luzmo-ai-chat-message-assistant-context-menu-border-radius, var(--ai-chat-message-assistant-context-menu-border-radius));width:var(--luzmo-ai-chat-message-assistant-context-menu-width, var(--ai-chat-message-assistant-context-menu-width));height:var(--luzmo-ai-chat-message-assistant-context-menu-height, var(--ai-chat-message-assistant-context-menu-height));cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:var(--luzmo-ai-chat-message-assistant-context-menu-transition, var(--ai-chat-message-assistant-context-menu-transition));flex-shrink:0;color:var(--luzmo-ai-chat-message-assistant-context-menu-icon-color, var(--ai-chat-message-assistant-context-menu-icon-color))}:host .context-menu-button:hover{background:var(--luzmo-ai-chat-message-assistant-context-menu-hover-background, var(--ai-chat-message-assistant-context-menu-hover-background));border-color:var(--luzmo-ai-chat-message-assistant-context-menu-hover-border, var(--ai-chat-message-assistant-context-menu-hover-border))}:host .message-with-menu{display:flex;align-items:flex-start;gap:var(--luzmo-ai-chat-message-assistant-gap, var(--ai-chat-message-assistant-gap));width:100%}:host .message-container-inner{flex:1;display:flex}:host{--ai-chat-message-assistant-margin-bottom: var(--luzmo-spacing-5);--ai-chat-message-assistant-background: transparent;--ai-chat-message-assistant-color: var(--luzmo-font-color);--ai-chat-message-assistant-padding: 0;--ai-chat-message-assistant-border-radius: 0;--ai-chat-message-assistant-font-family: var(--luzmo-font-family);--ai-chat-message-assistant-font-weight: var(--luzmo-font-weight);--ai-chat-message-assistant-font-size: var(--luzmo-font-size-s);--ai-chat-message-assistant-line-height: 1.75em;--ai-chat-message-assistant-box-shadow: none;--ai-chat-message-assistant-gap: var(--luzmo-spacing-5);--ai-chat-message-assistant-context-menu-width: var(--luzmo-component-height);--ai-chat-message-assistant-context-menu-height: var(--luzmo-component-height);--ai-chat-message-assistant-context-menu-border: var(--luzmo-border-width) solid var(--luzmo-border-color);--ai-chat-message-assistant-context-menu-border-radius: var(--luzmo-border-radius);--ai-chat-message-assistant-context-menu-hover-background: var(--luzmo-background-color-hover);--ai-chat-message-assistant-context-menu-hover-border: var(--luzmo-border-color-hover);--ai-chat-message-assistant-context-menu-focus-outline: 2px solid var(--luzmo-primary);--ai-chat-message-assistant-context-menu-icon-size: var(--luzmo-font-size-s);--ai-chat-message-assistant-context-menu-icon-color: var(--luzmo-font-color-extra-dimmed);--ai-chat-message-assistant-context-menu-transition: all var(--luzmo-animation-duration) ease}";var _a=Object.defineProperty,Aa=Object.getOwnPropertyDescriptor,He=(r,a,i,s)=>{for(var c=s>1?void 0:s?Aa(a,i):a,p=r.length-1,O;p>=0;p--)(O=r[p])&&(c=(s?O(a,i,c):O(c))||c);return s&&c&&_a(a,i,c),c};const Ge=class Ge extends Y.LitElement{constructor(){super(...arguments),this._message="",this.showContextMenu=!1,this.overlayPlacement="bottom-start"}get message(){return this._message}set message(a){const i=this._message;this._message=Ta.sanitize(a||"",{USE_PROFILES:{html:!0}}),this.requestUpdate("message",i)}render(){return Y.html`
22
22
  <div class="message-container">
23
23
  ${this.showContextMenu?Y.html`
@@ -28,6 +28,7 @@ import { property as Fe } from "lit/decorators.js";
28
28
  o.setAttribute("data-luzmo-vars", ""), o.textContent = 'html{--luzmo-animation-duration: 0.15s;--luzmo-border-color: rgba(var(--luzmo-border-color-rgb), 0.1);--luzmo-border-color-hover: rgba(var(--luzmo-border-color-rgb), 0.15);--luzmo-border-color-down: rgba(var(--luzmo-border-color-rgb), 0.3);--luzmo-border-color-focus: rgba(var(--luzmo-border-color-rgb), 0.15);--luzmo-border-color-rgb: 0, 0, 0;--luzmo-border-color-full: rgb(180, 180, 180);--luzmo-border-color-full-hover: rgb(140, 140, 140);--luzmo-border-color-full-down: rgb(110, 110, 110);--luzmo-border-color-full-focus: rgb(140, 140, 140);--luzmo-border-color-disabled: #dddddd;--luzmo-border-radius: 6px;--luzmo-border-radius-s: 4px;--luzmo-border-radius-l: 8px;--luzmo-border-radius-xl: 12px;--luzmo-border-radius-full: 999rem;--luzmo-background-color: #ffffff;--luzmo-background-color-rgb: 255, 255, 255;--luzmo-background-color-disabled: #eeeeee;--luzmo-background-color-hover: #f0f0fc;--luzmo-background-color-down: #f1f1ff;--luzmo-background-color-focus: #f0f0fc;--luzmo-background-color-highlight: rgb(240, 240, 240);--luzmo-background-color-highlight-disabled: rgb(245, 245, 245);--luzmo-background-color-highlight-hover: rgb(225, 225, 225);--luzmo-background-color-highlight-down: rgb(215, 215, 215);--luzmo-background-color-highlight-focus: rgb(225, 225, 225);--luzmo-background-color-alt-1: rgb(250, 250, 250);--luzmo-background-color-alt-2: rgb(239, 239, 239);--luzmo-border-width: 1px;--luzmo-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, sans-serif;--luzmo-font-size-xs: 10px;--luzmo-font-size-s: 12px;--luzmo-font-size-m: 14px;--luzmo-font-size: 14px;--luzmo-font-size-l: 16px;--luzmo-font-size-xl: 18px;--luzmo-font-size-xxl: 20px;--luzmo-font-style: normal;--luzmo-line-height: normal;--luzmo-font-weight: 400;--luzmo-font-weight-semibold: 500;--luzmo-font-weight-bold: 600;--luzmo-font-color: #333;--luzmo-font-color-hard: #000;--luzmo-font-color-disabled: var(--luzmo-color-disabled);--luzmo-font-color-extra-dimmed: #888;--luzmo-font-color-hover: #333;--luzmo-font-color-down: #111;--luzmo-font-color-focus: #333;--luzmo-primary: #4434ff;--luzmo-primary-hover: #4234e4;--luzmo-primary-down: #392cc7;--luzmo-primary-focus: #4234e4;--luzmo-primary-inverse-color: #ffffff;--luzmo-primary-rgb: 68, 52, 255;--luzmo-secondary: #ff00ff;--luzmo-secondary-hover: #e309e3;--luzmo-secondary-down: #c711c7;--luzmo-secondary-focus: #e309e3;--luzmo-secondary-inverse-color: #ffffff;--luzmo-secondary-rgb: 255, 0, 255;--luzmo-secondary-outline: rgba(255, 0, 255, 0.2);--luzmo-negative-color: #ca221c;--luzmo-negative-color-hover: #b3241f;--luzmo-negative-color-down: #9f231f;--luzmo-negative-color-focus: #b3241f;--luzmo-negative-color-rgb: 202, 34, 28;--luzmo-positive-color: rgb(20, 150, 101);--luzmo-positive-color-hover: rgb(17, 128, 86);--luzmo-positive-color-down: rgb(16, 105, 71);--luzmo-positive-color-focus: rgb(17, 128, 86);--luzmo-positive-color-rgb: 20, 150, 101;--luzmo-selected-color: rgb(110, 110, 110);--luzmo-selected-color-hover: rgb(70, 70, 70);--luzmo-selected-color-down: rgb(40, 40, 40);--luzmo-selected-color-focus: rgb(70, 70, 70);--luzmo-selected-color-hard: #1e1e1e;--luzmo-selected-color-hard-hover: rgb(0, 0, 0);--luzmo-selected-color-hard-down: rgb(0, 0, 0);--luzmo-selected-color-hard-focus: rgb(0, 0, 0);--luzmo-color-informative: #1a77e9;--luzmo-color-informative-rgb: 26, 119, 233;--luzmo-color-disabled: #aaaaaa;--luzmo-spacing-1: 2px;--luzmo-spacing-2: 4px;--luzmo-spacing-3: 8px;--luzmo-spacing-4: 12px;--luzmo-spacing-5: 16px;--luzmo-indicator-gap: 2px;--luzmo-indicator-width: 1px;--luzmo-indicator-color: var(--luzmo-primary);--luzmo-component-height-xxs: 20px;--luzmo-component-height-xs: 24px;--luzmo-component-height-s: 28px;--luzmo-component-height: 32px;--luzmo-component-height-l: 40px;--luzmo-component-height-xl: 48px;--luzmo-component-height-xxl: 64px;--luzmo-icon-size-xxs: 12px;--luzmo-icon-size-xs: 14px;--luzmo-icon-size-s: 16px;--luzmo-icon-size-m: 18px;--luzmo-icon-size-l: 20px;--luzmo-icon-size-xl: 22px;--luzmo-icon-size-xxl: 32px}', document.head.appendChild(o);
29
29
  }
30
30
  })();
31
+ /*! @license DOMPurify 3.3.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.0/LICENSE */
31
32
  const {
32
33
  entries: zt,
33
34
  setPrototypeOf: dt,
@@ -17,7 +17,7 @@
17
17
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18
18
  * SOFTWARE.
19
19
  * */
20
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("lit"),e=require("../focusable-QLh-LlNt.cjs");require("lit/decorators.js");const o=":host{box-sizing:border-box;display:block;width:100%;height:100%;background:var(--luzmo-ai-chat-messages-container-background, var(--ai-chat-messages-container-background));border-radius:var(--luzmo-ai-chat-messages-container-border-radius, var(--ai-chat-messages-container-border-radius));overflow:hidden}:host .messages-container{display:flex;flex-direction:column;height:100%;overflow-y:auto;padding:var(--luzmo-ai-chat-messages-container-padding, var(--ai-chat-messages-container-padding));gap:var(--luzmo-ai-chat-messages-container-gap, var(--ai-chat-messages-container-gap))}:host .messages-container::-webkit-scrollbar{width:var(--luzmo-ai-chat-messages-container-scrollbar-width, var(--ai-chat-messages-container-scrollbar-width))}:host .messages-container::-webkit-scrollbar-track{background:var(--luzmo-ai-chat-messages-container-scrollbar-track-background, var(--ai-chat-messages-container-scrollbar-track-background));border-radius:var(--luzmo-ai-chat-messages-container-scrollbar-track-border-radius, var(--ai-chat-messages-container-scrollbar-track-border-radius))}:host .messages-container::-webkit-scrollbar-thumb{background:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-background, var(--ai-chat-messages-container-scrollbar-thumb-background));border-radius:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-border-radius, var(--ai-chat-messages-container-scrollbar-thumb-border-radius))}:host .messages-container::-webkit-scrollbar-thumb:hover{background:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-hover-background, var(--ai-chat-messages-container-scrollbar-thumb-hover-background))}:host .messages-container{scrollbar-width:thin;scrollbar-color:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-background, var(--ai-chat-messages-container-scrollbar-track-background))}:host .messages-container{scroll-behavior:smooth}:host .messages-container:focus{outline:var(--luzmo-ai-chat-messages-container-focus-outline, var(--ai-chat-messages-container-focus-outline));outline-offset:-2px}:host{--ai-chat-messages-container-background: var(--luzmo-background-color);--ai-chat-messages-container-border-radius: var(--luzmo-border-radius-l);--ai-chat-messages-container-padding: var(--luzmo-spacing-5);--ai-chat-messages-container-gap: var(--luzmo-spacing-2);--ai-chat-messages-container-scrollbar-width: 6px;--ai-chat-messages-container-scrollbar-track-background: var(--luzmo-background-color-highlight);--ai-chat-messages-container-scrollbar-track-border-radius: var(--luzmo-border-radius-s);--ai-chat-messages-container-scrollbar-thumb-background: var(--luzmo-border-color-full);--ai-chat-messages-container-scrollbar-thumb-border-radius: var(--luzmo-border-radius-s);--ai-chat-messages-container-scrollbar-thumb-hover-background: var(--luzmo-border-color-full-hover);--ai-chat-messages-container-focus-outline: 2px solid var(--luzmo-primary)}",r=class r extends e.LuzmoElement{render(){return s.html`
20
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("lit"),e=require("../focusable-B3E_hQmm.cjs");require("lit/decorators.js");const o=":host{box-sizing:border-box;display:block;width:100%;height:100%;background:var(--luzmo-ai-chat-messages-container-background, var(--ai-chat-messages-container-background));border-radius:var(--luzmo-ai-chat-messages-container-border-radius, var(--ai-chat-messages-container-border-radius));overflow:hidden}:host .messages-container{display:flex;flex-direction:column;height:100%;overflow-y:auto;padding:var(--luzmo-ai-chat-messages-container-padding, var(--ai-chat-messages-container-padding));gap:var(--luzmo-ai-chat-messages-container-gap, var(--ai-chat-messages-container-gap));scrollbar-width:thin;scrollbar-color:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-background, var(--ai-chat-messages-container-scrollbar-track-background))}:host .messages-container::-webkit-scrollbar{width:var(--luzmo-ai-chat-messages-container-scrollbar-width, var(--ai-chat-messages-container-scrollbar-width))}:host .messages-container::-webkit-scrollbar-track{background:var(--luzmo-ai-chat-messages-container-scrollbar-track-background, var(--ai-chat-messages-container-scrollbar-track-background));border-radius:var(--luzmo-ai-chat-messages-container-scrollbar-track-border-radius, var(--ai-chat-messages-container-scrollbar-track-border-radius))}:host .messages-container::-webkit-scrollbar-thumb{background:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-background, var(--ai-chat-messages-container-scrollbar-thumb-background));border-radius:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-border-radius, var(--ai-chat-messages-container-scrollbar-thumb-border-radius))}:host .messages-container::-webkit-scrollbar-thumb:hover{background:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-hover-background, var(--ai-chat-messages-container-scrollbar-thumb-hover-background))}:host .messages-container{scroll-behavior:smooth}:host .messages-container:focus{outline:var(--luzmo-ai-chat-messages-container-focus-outline, var(--ai-chat-messages-container-focus-outline));outline-offset:-2px}:host{--ai-chat-messages-container-background: var(--luzmo-background-color);--ai-chat-messages-container-border-radius: var(--luzmo-border-radius-l);--ai-chat-messages-container-padding: var(--luzmo-spacing-5);--ai-chat-messages-container-gap: var(--luzmo-spacing-2);--ai-chat-messages-container-scrollbar-width: 6px;--ai-chat-messages-container-scrollbar-track-background: var(--luzmo-background-color-highlight);--ai-chat-messages-container-scrollbar-track-border-radius: var(--luzmo-border-radius-s);--ai-chat-messages-container-scrollbar-thumb-background: var(--luzmo-border-color-full);--ai-chat-messages-container-scrollbar-thumb-border-radius: var(--luzmo-border-radius-s);--ai-chat-messages-container-scrollbar-thumb-hover-background: var(--luzmo-border-color-full-hover);--ai-chat-messages-container-focus-outline: 2px solid var(--luzmo-primary)}",r=class r extends e.LuzmoElement{render(){return s.html`
21
21
  <div class="messages-container">
22
22
  <slot></slot>
23
23
  </div>
@@ -18,7 +18,7 @@
18
18
  * SOFTWARE.
19
19
  * */
20
20
  import { unsafeCSS as e, html as l } from "lit";
21
- import { L as s } from "../focusable-BS2pbY7w.js";
21
+ import { L as s } from "../focusable-DCIFkpiW.js";
22
22
  import "lit/decorators.js";
23
23
  (function() {
24
24
  if (typeof document < "u" && !document.querySelector("style[data-luzmo-vars]")) {
@@ -26,7 +26,7 @@ import "lit/decorators.js";
26
26
  o.setAttribute("data-luzmo-vars", ""), o.textContent = 'html{--luzmo-animation-duration: 0.15s;--luzmo-border-color: rgba(var(--luzmo-border-color-rgb), 0.1);--luzmo-border-color-hover: rgba(var(--luzmo-border-color-rgb), 0.15);--luzmo-border-color-down: rgba(var(--luzmo-border-color-rgb), 0.3);--luzmo-border-color-focus: rgba(var(--luzmo-border-color-rgb), 0.15);--luzmo-border-color-rgb: 0, 0, 0;--luzmo-border-color-full: rgb(180, 180, 180);--luzmo-border-color-full-hover: rgb(140, 140, 140);--luzmo-border-color-full-down: rgb(110, 110, 110);--luzmo-border-color-full-focus: rgb(140, 140, 140);--luzmo-border-color-disabled: #dddddd;--luzmo-border-radius: 6px;--luzmo-border-radius-s: 4px;--luzmo-border-radius-l: 8px;--luzmo-border-radius-xl: 12px;--luzmo-border-radius-full: 999rem;--luzmo-background-color: #ffffff;--luzmo-background-color-rgb: 255, 255, 255;--luzmo-background-color-disabled: #eeeeee;--luzmo-background-color-hover: #f0f0fc;--luzmo-background-color-down: #f1f1ff;--luzmo-background-color-focus: #f0f0fc;--luzmo-background-color-highlight: rgb(240, 240, 240);--luzmo-background-color-highlight-disabled: rgb(245, 245, 245);--luzmo-background-color-highlight-hover: rgb(225, 225, 225);--luzmo-background-color-highlight-down: rgb(215, 215, 215);--luzmo-background-color-highlight-focus: rgb(225, 225, 225);--luzmo-background-color-alt-1: rgb(250, 250, 250);--luzmo-background-color-alt-2: rgb(239, 239, 239);--luzmo-border-width: 1px;--luzmo-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, sans-serif;--luzmo-font-size-xs: 10px;--luzmo-font-size-s: 12px;--luzmo-font-size-m: 14px;--luzmo-font-size: 14px;--luzmo-font-size-l: 16px;--luzmo-font-size-xl: 18px;--luzmo-font-size-xxl: 20px;--luzmo-font-style: normal;--luzmo-line-height: normal;--luzmo-font-weight: 400;--luzmo-font-weight-semibold: 500;--luzmo-font-weight-bold: 600;--luzmo-font-color: #333;--luzmo-font-color-hard: #000;--luzmo-font-color-disabled: var(--luzmo-color-disabled);--luzmo-font-color-extra-dimmed: #888;--luzmo-font-color-hover: #333;--luzmo-font-color-down: #111;--luzmo-font-color-focus: #333;--luzmo-primary: #4434ff;--luzmo-primary-hover: #4234e4;--luzmo-primary-down: #392cc7;--luzmo-primary-focus: #4234e4;--luzmo-primary-inverse-color: #ffffff;--luzmo-primary-rgb: 68, 52, 255;--luzmo-secondary: #ff00ff;--luzmo-secondary-hover: #e309e3;--luzmo-secondary-down: #c711c7;--luzmo-secondary-focus: #e309e3;--luzmo-secondary-inverse-color: #ffffff;--luzmo-secondary-rgb: 255, 0, 255;--luzmo-secondary-outline: rgba(255, 0, 255, 0.2);--luzmo-negative-color: #ca221c;--luzmo-negative-color-hover: #b3241f;--luzmo-negative-color-down: #9f231f;--luzmo-negative-color-focus: #b3241f;--luzmo-negative-color-rgb: 202, 34, 28;--luzmo-positive-color: rgb(20, 150, 101);--luzmo-positive-color-hover: rgb(17, 128, 86);--luzmo-positive-color-down: rgb(16, 105, 71);--luzmo-positive-color-focus: rgb(17, 128, 86);--luzmo-positive-color-rgb: 20, 150, 101;--luzmo-selected-color: rgb(110, 110, 110);--luzmo-selected-color-hover: rgb(70, 70, 70);--luzmo-selected-color-down: rgb(40, 40, 40);--luzmo-selected-color-focus: rgb(70, 70, 70);--luzmo-selected-color-hard: #1e1e1e;--luzmo-selected-color-hard-hover: rgb(0, 0, 0);--luzmo-selected-color-hard-down: rgb(0, 0, 0);--luzmo-selected-color-hard-focus: rgb(0, 0, 0);--luzmo-color-informative: #1a77e9;--luzmo-color-informative-rgb: 26, 119, 233;--luzmo-color-disabled: #aaaaaa;--luzmo-spacing-1: 2px;--luzmo-spacing-2: 4px;--luzmo-spacing-3: 8px;--luzmo-spacing-4: 12px;--luzmo-spacing-5: 16px;--luzmo-indicator-gap: 2px;--luzmo-indicator-width: 1px;--luzmo-indicator-color: var(--luzmo-primary);--luzmo-component-height-xxs: 20px;--luzmo-component-height-xs: 24px;--luzmo-component-height-s: 28px;--luzmo-component-height: 32px;--luzmo-component-height-l: 40px;--luzmo-component-height-xl: 48px;--luzmo-component-height-xxl: 64px;--luzmo-icon-size-xxs: 12px;--luzmo-icon-size-xs: 14px;--luzmo-icon-size-s: 16px;--luzmo-icon-size-m: 18px;--luzmo-icon-size-l: 20px;--luzmo-icon-size-xl: 22px;--luzmo-icon-size-xxl: 32px}', document.head.appendChild(o);
27
27
  }
28
28
  })();
29
- const c = ":host{box-sizing:border-box;display:block;width:100%;height:100%;background:var(--luzmo-ai-chat-messages-container-background, var(--ai-chat-messages-container-background));border-radius:var(--luzmo-ai-chat-messages-container-border-radius, var(--ai-chat-messages-container-border-radius));overflow:hidden}:host .messages-container{display:flex;flex-direction:column;height:100%;overflow-y:auto;padding:var(--luzmo-ai-chat-messages-container-padding, var(--ai-chat-messages-container-padding));gap:var(--luzmo-ai-chat-messages-container-gap, var(--ai-chat-messages-container-gap))}:host .messages-container::-webkit-scrollbar{width:var(--luzmo-ai-chat-messages-container-scrollbar-width, var(--ai-chat-messages-container-scrollbar-width))}:host .messages-container::-webkit-scrollbar-track{background:var(--luzmo-ai-chat-messages-container-scrollbar-track-background, var(--ai-chat-messages-container-scrollbar-track-background));border-radius:var(--luzmo-ai-chat-messages-container-scrollbar-track-border-radius, var(--ai-chat-messages-container-scrollbar-track-border-radius))}:host .messages-container::-webkit-scrollbar-thumb{background:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-background, var(--ai-chat-messages-container-scrollbar-thumb-background));border-radius:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-border-radius, var(--ai-chat-messages-container-scrollbar-thumb-border-radius))}:host .messages-container::-webkit-scrollbar-thumb:hover{background:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-hover-background, var(--ai-chat-messages-container-scrollbar-thumb-hover-background))}:host .messages-container{scrollbar-width:thin;scrollbar-color:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-background, var(--ai-chat-messages-container-scrollbar-track-background))}:host .messages-container{scroll-behavior:smooth}:host .messages-container:focus{outline:var(--luzmo-ai-chat-messages-container-focus-outline, var(--ai-chat-messages-container-focus-outline));outline-offset:-2px}:host{--ai-chat-messages-container-background: var(--luzmo-background-color);--ai-chat-messages-container-border-radius: var(--luzmo-border-radius-l);--ai-chat-messages-container-padding: var(--luzmo-spacing-5);--ai-chat-messages-container-gap: var(--luzmo-spacing-2);--ai-chat-messages-container-scrollbar-width: 6px;--ai-chat-messages-container-scrollbar-track-background: var(--luzmo-background-color-highlight);--ai-chat-messages-container-scrollbar-track-border-radius: var(--luzmo-border-radius-s);--ai-chat-messages-container-scrollbar-thumb-background: var(--luzmo-border-color-full);--ai-chat-messages-container-scrollbar-thumb-border-radius: var(--luzmo-border-radius-s);--ai-chat-messages-container-scrollbar-thumb-hover-background: var(--luzmo-border-color-full-hover);--ai-chat-messages-container-focus-outline: 2px solid var(--luzmo-primary)}", a = class a extends s {
29
+ const c = ":host{box-sizing:border-box;display:block;width:100%;height:100%;background:var(--luzmo-ai-chat-messages-container-background, var(--ai-chat-messages-container-background));border-radius:var(--luzmo-ai-chat-messages-container-border-radius, var(--ai-chat-messages-container-border-radius));overflow:hidden}:host .messages-container{display:flex;flex-direction:column;height:100%;overflow-y:auto;padding:var(--luzmo-ai-chat-messages-container-padding, var(--ai-chat-messages-container-padding));gap:var(--luzmo-ai-chat-messages-container-gap, var(--ai-chat-messages-container-gap));scrollbar-width:thin;scrollbar-color:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-background, var(--ai-chat-messages-container-scrollbar-track-background))}:host .messages-container::-webkit-scrollbar{width:var(--luzmo-ai-chat-messages-container-scrollbar-width, var(--ai-chat-messages-container-scrollbar-width))}:host .messages-container::-webkit-scrollbar-track{background:var(--luzmo-ai-chat-messages-container-scrollbar-track-background, var(--ai-chat-messages-container-scrollbar-track-background));border-radius:var(--luzmo-ai-chat-messages-container-scrollbar-track-border-radius, var(--ai-chat-messages-container-scrollbar-track-border-radius))}:host .messages-container::-webkit-scrollbar-thumb{background:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-background, var(--ai-chat-messages-container-scrollbar-thumb-background));border-radius:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-border-radius, var(--ai-chat-messages-container-scrollbar-thumb-border-radius))}:host .messages-container::-webkit-scrollbar-thumb:hover{background:var(--luzmo-ai-chat-messages-container-scrollbar-thumb-hover-background, var(--ai-chat-messages-container-scrollbar-thumb-hover-background))}:host .messages-container{scroll-behavior:smooth}:host .messages-container:focus{outline:var(--luzmo-ai-chat-messages-container-focus-outline, var(--ai-chat-messages-container-focus-outline));outline-offset:-2px}:host{--ai-chat-messages-container-background: var(--luzmo-background-color);--ai-chat-messages-container-border-radius: var(--luzmo-border-radius-l);--ai-chat-messages-container-padding: var(--luzmo-spacing-5);--ai-chat-messages-container-gap: var(--luzmo-spacing-2);--ai-chat-messages-container-scrollbar-width: 6px;--ai-chat-messages-container-scrollbar-track-background: var(--luzmo-background-color-highlight);--ai-chat-messages-container-scrollbar-track-border-radius: var(--luzmo-border-radius-s);--ai-chat-messages-container-scrollbar-thumb-background: var(--luzmo-border-color-full);--ai-chat-messages-container-scrollbar-thumb-border-radius: var(--luzmo-border-radius-s);--ai-chat-messages-container-scrollbar-thumb-hover-background: var(--luzmo-border-color-full-hover);--ai-chat-messages-container-focus-outline: 2px solid var(--luzmo-primary)}", a = class a extends s {
30
30
  render() {
31
31
  return l`
32
32
  <div class="messages-container">