@xplor-education/core-stencil-components 3.1.2 → 3.1.4

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 (261) hide show
  1. package/components/index.js +28 -3
  2. package/components/index.js.map +1 -1
  3. package/components/{p-B49oUO_9.js → p-AzuDJugb.js} +3 -3
  4. package/components/{p-B49oUO_9.js.map → p-AzuDJugb.js.map} +1 -1
  5. package/components/{p-D4jVa8dE.js → p-BQ6aLuGP.js} +4 -4
  6. package/components/{p-D4jVa8dE.js.map → p-BQ6aLuGP.js.map} +1 -1
  7. package/components/{p-VIJbFoA4.js → p-BZQ63ULK.js} +3 -3
  8. package/components/{p-VIJbFoA4.js.map → p-BZQ63ULK.js.map} +1 -1
  9. package/components/{p-BRWe4TXp.js → p-C-gHaxf1.js} +3 -3
  10. package/components/p-C-gHaxf1.js.map +1 -0
  11. package/components/{p-Bs_ocvfe.js → p-CyGsSa4H.js} +7 -4
  12. package/components/p-CyGsSa4H.js.map +1 -0
  13. package/components/{p-B3zR7peH.js → p-oanCZPh6.js} +4 -4
  14. package/components/{p-B3zR7peH.js.map → p-oanCZPh6.js.map} +1 -1
  15. package/components/xplor-alert-message.js +2 -2
  16. package/components/xplor-avatar-and-name.js +2 -2
  17. package/components/xplor-avatar.js +1 -1
  18. package/components/xplor-badge-active.js +1 -1
  19. package/components/xplor-badge-archived.js +1 -1
  20. package/components/xplor-badge-deleted.js +1 -1
  21. package/components/xplor-badge-expired.js +1 -1
  22. package/components/xplor-badge-inactive.js +1 -1
  23. package/components/xplor-badge-recalled.js +1 -1
  24. package/components/xplor-badge-upcoming.js +1 -1
  25. package/components/xplor-badge-waitlist.js +1 -1
  26. package/components/xplor-badge.js +1 -1
  27. package/components/xplor-btn-back-to-parent.js +1 -1
  28. package/components/xplor-btn-back.js +1 -1
  29. package/components/xplor-btn-icon.js +1 -1
  30. package/components/xplor-btn-toggle-group.js +1 -1
  31. package/components/xplor-btn-toggle-secondary.js +1 -1
  32. package/components/xplor-btn-toggle.js +1 -1
  33. package/components/xplor-btn-tooltip.js +3 -3
  34. package/components/xplor-button.js +1 -1
  35. package/components/xplor-canvas-editor.d.ts +11 -0
  36. package/components/xplor-canvas-editor.js +369 -0
  37. package/components/xplor-canvas-editor.js.map +1 -0
  38. package/components/xplor-chat-widget.js +3 -3
  39. package/components/xplor-checkbox.js +1 -1
  40. package/components/xplor-combobox.js +5 -5
  41. package/components/xplor-datatable.js +2 -2
  42. package/components/xplor-date-picker.js +5 -5
  43. package/components/xplor-drag-and-drop-input.js +26 -5
  44. package/components/xplor-drag-and-drop-input.js.map +1 -1
  45. package/components/xplor-dropdown.js +1 -1
  46. package/components/xplor-expansion-panel.js +4 -4
  47. package/components/xplor-expansion-panels.js +1 -1
  48. package/components/xplor-file-upload.js +2 -2
  49. package/components/xplor-inline-checkbox.js +2 -2
  50. package/components/xplor-inline-date-picker.js +1 -1
  51. package/components/xplor-inline-switch.js +1 -1
  52. package/components/xplor-input-file.js +1 -1
  53. package/components/xplor-input-search.js +2 -2
  54. package/components/xplor-input-select.js +2 -2
  55. package/components/xplor-input-send.js +3 -3
  56. package/components/xplor-input-text-area.js +2 -2
  57. package/components/xplor-input-text-secondary.js +2 -2
  58. package/components/xplor-input-text.js +2 -2
  59. package/components/xplor-input-title.js +1 -1
  60. package/components/xplor-links.js +1 -1
  61. package/components/xplor-modal-persistent.js +2 -2
  62. package/components/xplor-modal.js +1 -1
  63. package/components/xplor-nav-tabs.js +2 -2
  64. package/components/xplor-radio-btn.js +2 -2
  65. package/components/xplor-rich-text-editor.d.ts +11 -0
  66. package/components/xplor-rich-text-editor.js +23754 -0
  67. package/components/xplor-rich-text-editor.js.map +1 -0
  68. package/components/xplor-section-card.js +2 -2
  69. package/components/xplor-section-heading.js +2 -2
  70. package/components/xplor-table.js +5 -5
  71. package/components/xplor-text-bubble.js +2 -2
  72. package/components/xplor-text-field.js +2 -2
  73. package/components/xplor-time-picker.js +6 -6
  74. package/components/xplor-tooltip.js +1 -1
  75. package/dist/cjs/{index-BjAapk2n.js → index--_m3aUsf.js} +32 -7
  76. package/dist/cjs/index--_m3aUsf.js.map +1 -0
  77. package/dist/cjs/loader.cjs.js +2 -2
  78. package/dist/cjs/xplor-alert-dialog_60.cjs.entry.js +29457 -0
  79. package/dist/cjs/xplor-alert-dialog_60.cjs.entry.js.map +1 -0
  80. package/dist/cjs/xplor-component-library.cjs.js +2 -2
  81. package/dist/collection/collection-manifest.json +2 -0
  82. package/dist/collection/components/xplor-alert-message/xplor-alert-message.js +2 -2
  83. package/dist/collection/components/xplor-avatar/xplor-avatar.js +2 -2
  84. package/dist/collection/components/xplor-avatar-and-name/xplor-avatar-and-name.js +1 -1
  85. package/dist/collection/components/xplor-badge/xplor-badge.js +1 -1
  86. package/dist/collection/components/xplor-badge-active/xplor-badge-active.js +1 -1
  87. package/dist/collection/components/xplor-badge-archived/xplor-badge-archived.js +1 -1
  88. package/dist/collection/components/xplor-badge-deleted/xplor-badge-deleted.js +1 -1
  89. package/dist/collection/components/xplor-badge-expired/xplor-badge-expired.js +1 -1
  90. package/dist/collection/components/xplor-badge-inactive/xplor-badge-inactive.js +1 -1
  91. package/dist/collection/components/xplor-badge-recalled/xplor-badge-recalled.js +1 -1
  92. package/dist/collection/components/xplor-badge-upcoming/xplor-badge-upcoming.js +1 -1
  93. package/dist/collection/components/xplor-badge-waitlist/xplor-badge-waitlist.js +1 -1
  94. package/dist/collection/components/xplor-btn-back/xplor-btn-back.js +1 -1
  95. package/dist/collection/components/xplor-btn-back-to-parent/xplor-btn-back-to-parent.js +1 -1
  96. package/dist/collection/components/xplor-btn-icon/xplor-btn-icon.js +1 -1
  97. package/dist/collection/components/xplor-btn-toggle/xplor-btn-toggle.js +1 -1
  98. package/dist/collection/components/xplor-btn-toggle-group/xplor-btn-toggle-group.js +1 -1
  99. package/dist/collection/components/xplor-btn-toggle-secondary/xplor-btn-toggle-secondary.js +1 -1
  100. package/dist/collection/components/xplor-btn-tooltip/xplor-btn-tooltip.js +1 -1
  101. package/dist/collection/components/xplor-button/xplor-button.css +8 -3
  102. package/dist/collection/components/xplor-button/xplor-button.js +23 -1
  103. package/dist/collection/components/xplor-button/xplor-button.js.map +1 -1
  104. package/dist/collection/components/xplor-canvas-editor/xplor-canvas-editor.css +1224 -0
  105. package/dist/collection/components/xplor-canvas-editor/xplor-canvas-editor.js +520 -0
  106. package/dist/collection/components/xplor-canvas-editor/xplor-canvas-editor.js.map +1 -0
  107. package/dist/collection/components/xplor-canvas-editor/xplor-canvas-editor.stories.js +280 -0
  108. package/dist/collection/components/xplor-canvas-editor/xplor-canvas-editor.stories.js.map +1 -0
  109. package/dist/collection/components/xplor-chat-widget/xplor-chat-widget.js +1 -1
  110. package/dist/collection/components/xplor-checkbox/xplor-checkbox.js +1 -1
  111. package/dist/collection/components/xplor-combobox/xplor-combobox.js +5 -5
  112. package/dist/collection/components/xplor-datatable/xplor-datatable.js +2 -2
  113. package/dist/collection/components/xplor-date-picker/xplor-date-picker.js +4 -4
  114. package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.css +62 -29
  115. package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.js +25 -4
  116. package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.js.map +1 -1
  117. package/dist/collection/components/xplor-dropdown/xplor-dropdown.js +1 -1
  118. package/dist/collection/components/xplor-expansion-panel/xplor-expansion-panel.js +4 -4
  119. package/dist/collection/components/xplor-expansion-panels/xplor-expansion-panels.js +1 -1
  120. package/dist/collection/components/xplor-file-upload/xplor-file-upload.js +2 -2
  121. package/dist/collection/components/xplor-inline-checkbox/xplor-inline-checkbox.js +2 -2
  122. package/dist/collection/components/xplor-inline-date-picker/xplor-inline-date-picker.js +1 -1
  123. package/dist/collection/components/xplor-inline-switch/xplor-inline-switch.js +1 -1
  124. package/dist/collection/components/xplor-input-file/xplor-input-file.js +1 -1
  125. package/dist/collection/components/xplor-input-search/xplor-input-search.js +2 -2
  126. package/dist/collection/components/xplor-input-select/xplor-input-select.js +2 -2
  127. package/dist/collection/components/xplor-input-send/xplor-input-send.js +2 -2
  128. package/dist/collection/components/xplor-input-text/xplor-input-text.js +2 -2
  129. package/dist/collection/components/xplor-input-text-area/xplor-input-text-area.js +2 -2
  130. package/dist/collection/components/xplor-input-text-secondary/xplor-input-text-secondary.js +2 -2
  131. package/dist/collection/components/xplor-input-title/xplor-input-title.js +1 -1
  132. package/dist/collection/components/xplor-links/xplor-links.js +1 -1
  133. package/dist/collection/components/xplor-modal/xplor-modal.css +10 -10
  134. package/dist/collection/components/xplor-modal-persistent/xplor-modal-persistent.js +1 -1
  135. package/dist/collection/components/xplor-nav-tabs/xplor-nav-tabs.js +2 -2
  136. package/dist/collection/components/xplor-radio-btn/xplor-radio-btn.js +2 -2
  137. package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.css +1445 -0
  138. package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.js +800 -0
  139. package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.js.map +1 -0
  140. package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.stories.js +260 -0
  141. package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.stories.js.map +1 -0
  142. package/dist/collection/components/xplor-section-card/xplor-section-card.js +2 -2
  143. package/dist/collection/components/xplor-section-heading/xplor-section-heading.js +2 -2
  144. package/dist/collection/components/xplor-table/xplor-table.js +5 -5
  145. package/dist/collection/components/xplor-text-bubble/xplor-text-bubble.js +2 -2
  146. package/dist/collection/components/xplor-text-field/xplor-text-field.js +2 -2
  147. package/dist/collection/components/xplor-time-picker/xplor-time-picker.js +6 -6
  148. package/dist/collection/components/xplor-tooltip/xplor-tooltip.js +2 -2
  149. package/dist/collection/utils/slate-legacy-converter.js +223 -0
  150. package/dist/collection/utils/slate-legacy-converter.js.map +1 -0
  151. package/dist/components/index.js +28 -3
  152. package/dist/components/index.js.map +1 -1
  153. package/dist/components/{p-04oMLTZR.js → p-B7FEf2_x.js} +3 -3
  154. package/dist/components/p-B7FEf2_x.js.map +1 -0
  155. package/dist/components/{p--zhT6rvJ.js → p-DGaHlr-k.js} +4 -4
  156. package/dist/components/{p--zhT6rvJ.js.map → p-DGaHlr-k.js.map} +1 -1
  157. package/dist/components/{p-B5rS_jjI.js → p-DWaTb2EJ.js} +7 -4
  158. package/dist/components/p-DWaTb2EJ.js.map +1 -0
  159. package/dist/components/{p-J41B2nOt.js → p-DroQBoSo.js} +3 -3
  160. package/dist/components/{p-J41B2nOt.js.map → p-DroQBoSo.js.map} +1 -1
  161. package/dist/components/{p-DQ8MCJFX.js → p-TfYzqGwr.js} +3 -3
  162. package/dist/components/{p-DQ8MCJFX.js.map → p-TfYzqGwr.js.map} +1 -1
  163. package/dist/components/{p-DbQ6ZNvh.js → p-vl-J3tKJ.js} +4 -4
  164. package/dist/components/{p-DbQ6ZNvh.js.map → p-vl-J3tKJ.js.map} +1 -1
  165. package/dist/components/xplor-alert-message.js +2 -2
  166. package/dist/components/xplor-avatar-and-name.js +2 -2
  167. package/dist/components/xplor-avatar.js +1 -1
  168. package/dist/components/xplor-badge-active.js +1 -1
  169. package/dist/components/xplor-badge-archived.js +1 -1
  170. package/dist/components/xplor-badge-deleted.js +1 -1
  171. package/dist/components/xplor-badge-expired.js +1 -1
  172. package/dist/components/xplor-badge-inactive.js +1 -1
  173. package/dist/components/xplor-badge-recalled.js +1 -1
  174. package/dist/components/xplor-badge-upcoming.js +1 -1
  175. package/dist/components/xplor-badge-waitlist.js +1 -1
  176. package/dist/components/xplor-badge.js +1 -1
  177. package/dist/components/xplor-btn-back-to-parent.js +1 -1
  178. package/dist/components/xplor-btn-back.js +1 -1
  179. package/dist/components/xplor-btn-icon.js +1 -1
  180. package/dist/components/xplor-btn-toggle-group.js +1 -1
  181. package/dist/components/xplor-btn-toggle-secondary.js +1 -1
  182. package/dist/components/xplor-btn-toggle.js +1 -1
  183. package/dist/components/xplor-btn-tooltip.js +3 -3
  184. package/dist/components/xplor-button.js +1 -1
  185. package/dist/components/xplor-canvas-editor.d.ts +11 -0
  186. package/dist/components/xplor-canvas-editor.js +370 -0
  187. package/dist/components/xplor-canvas-editor.js.map +1 -0
  188. package/dist/components/xplor-chat-widget.js +3 -3
  189. package/dist/components/xplor-checkbox.js +1 -1
  190. package/dist/components/xplor-combobox.js +5 -5
  191. package/dist/components/xplor-datatable.js +2 -2
  192. package/dist/components/xplor-date-picker.js +5 -5
  193. package/dist/components/xplor-drag-and-drop-input.js +26 -5
  194. package/dist/components/xplor-drag-and-drop-input.js.map +1 -1
  195. package/dist/components/xplor-dropdown.js +1 -1
  196. package/dist/components/xplor-expansion-panel.js +4 -4
  197. package/dist/components/xplor-expansion-panels.js +1 -1
  198. package/dist/components/xplor-file-upload.js +2 -2
  199. package/dist/components/xplor-inline-checkbox.js +2 -2
  200. package/dist/components/xplor-inline-date-picker.js +1 -1
  201. package/dist/components/xplor-inline-switch.js +1 -1
  202. package/dist/components/xplor-input-file.js +1 -1
  203. package/dist/components/xplor-input-search.js +2 -2
  204. package/dist/components/xplor-input-select.js +2 -2
  205. package/dist/components/xplor-input-send.js +3 -3
  206. package/dist/components/xplor-input-text-area.js +2 -2
  207. package/dist/components/xplor-input-text-secondary.js +2 -2
  208. package/dist/components/xplor-input-text.js +2 -2
  209. package/dist/components/xplor-input-title.js +1 -1
  210. package/dist/components/xplor-links.js +1 -1
  211. package/dist/components/xplor-modal-persistent.js +2 -2
  212. package/dist/components/xplor-modal.js +1 -1
  213. package/dist/components/xplor-nav-tabs.js +2 -2
  214. package/dist/components/xplor-radio-btn.js +2 -2
  215. package/dist/components/xplor-rich-text-editor.d.ts +11 -0
  216. package/dist/components/xplor-rich-text-editor.js +23755 -0
  217. package/dist/components/xplor-rich-text-editor.js.map +1 -0
  218. package/dist/components/xplor-section-card.js +2 -2
  219. package/dist/components/xplor-section-heading.js +2 -2
  220. package/dist/components/xplor-table.js +5 -5
  221. package/dist/components/xplor-text-bubble.js +2 -2
  222. package/dist/components/xplor-text-field.js +2 -2
  223. package/dist/components/xplor-time-picker.js +6 -6
  224. package/dist/components/xplor-tooltip.js +1 -1
  225. package/dist/esm/{index-KRfMjDC2.js → index-QwDfQUbw.js} +32 -7
  226. package/dist/esm/index-QwDfQUbw.js.map +1 -0
  227. package/dist/esm/loader.js +3 -3
  228. package/dist/esm/xplor-alert-dialog_60.entry.js +29396 -0
  229. package/dist/esm/xplor-alert-dialog_60.entry.js.map +1 -0
  230. package/dist/esm/xplor-component-library.js +3 -3
  231. package/dist/hydrate/index.js +24231 -96
  232. package/dist/hydrate/index.mjs +24231 -96
  233. package/dist/types/components/xplor-button/xplor-button.d.ts +2 -0
  234. package/dist/types/components/xplor-canvas-editor/xplor-canvas-editor.d.ts +63 -0
  235. package/dist/types/components/xplor-canvas-editor/xplor-canvas-editor.stories.d.ts +84 -0
  236. package/dist/types/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.d.ts +6 -0
  237. package/dist/types/components/xplor-rich-text-editor/xplor-rich-text-editor.d.ts +129 -0
  238. package/dist/types/components/xplor-rich-text-editor/xplor-rich-text-editor.stories.d.ts +105 -0
  239. package/dist/types/components.d.ts +286 -0
  240. package/dist/types/utils/slate-legacy-converter.d.ts +83 -0
  241. package/dist/xplor-component-library/p-0d477ec2.entry.js +2 -0
  242. package/dist/xplor-component-library/p-0d477ec2.entry.js.map +1 -0
  243. package/dist/xplor-component-library/p-QwDfQUbw.js +3 -0
  244. package/dist/xplor-component-library/p-QwDfQUbw.js.map +1 -0
  245. package/dist/xplor-component-library/xplor-component-library.css +1 -1
  246. package/dist/xplor-component-library/xplor-component-library.esm.js +1 -1
  247. package/package.json +7 -1
  248. package/components/p-BRWe4TXp.js.map +0 -1
  249. package/components/p-Bs_ocvfe.js.map +0 -1
  250. package/dist/cjs/index-BjAapk2n.js.map +0 -1
  251. package/dist/cjs/xplor-alert-dialog_58.cjs.entry.js +0 -5395
  252. package/dist/cjs/xplor-alert-dialog_58.cjs.entry.js.map +0 -1
  253. package/dist/components/p-04oMLTZR.js.map +0 -1
  254. package/dist/components/p-B5rS_jjI.js.map +0 -1
  255. package/dist/esm/index-KRfMjDC2.js.map +0 -1
  256. package/dist/esm/xplor-alert-dialog_58.entry.js +0 -5336
  257. package/dist/esm/xplor-alert-dialog_58.entry.js.map +0 -1
  258. package/dist/xplor-component-library/p-7ecb45dd.entry.js +0 -2
  259. package/dist/xplor-component-library/p-7ecb45dd.entry.js.map +0 -1
  260. package/dist/xplor-component-library/p-KRfMjDC2.js +0 -3
  261. package/dist/xplor-component-library/p-KRfMjDC2.js.map +0 -1
@@ -0,0 +1,223 @@
1
+ /**
2
+ * slate-legacy-converter.ts
3
+ *
4
+ * Converts old Slate 0.42.x document JSON format into an HTML string.
5
+ * This is the backwards-compatibility layer for the xplor-rich-text-editor component.
6
+ *
7
+ * Old Slate 0.42.x document shape:
8
+ * {
9
+ * document: {
10
+ * nodes: [
11
+ * {
12
+ * object: 'block',
13
+ * type: 'paragraph',
14
+ * nodes: [
15
+ * {
16
+ * object: 'text',
17
+ * text: 'Hello world',
18
+ * marks: [{ type: 'bold' }]
19
+ * }
20
+ * ]
21
+ * }
22
+ * ]
23
+ * }
24
+ * }
25
+ *
26
+ * No Slate runtime dependency required — this is a pure transformation function.
27
+ */
28
+ // ---------------------------------------------------------------------------
29
+ // Block type → HTML tag mapping
30
+ // ---------------------------------------------------------------------------
31
+ const BLOCK_TAG_MAP = {
32
+ paragraph: 'p',
33
+ 'heading-one': 'h1',
34
+ 'heading-two': 'h2',
35
+ 'heading-three': 'h3',
36
+ 'heading-four': 'h4',
37
+ 'heading-five': 'h5',
38
+ 'heading-six': 'h6',
39
+ 'bulleted-list': 'ul',
40
+ 'numbered-list': 'ol',
41
+ 'list-item': 'li',
42
+ 'block-quote': 'blockquote',
43
+ 'code-block': 'pre',
44
+ // Aliases sometimes found in the wild
45
+ quote: 'blockquote',
46
+ code: 'pre',
47
+ 'unordered-list': 'ul',
48
+ 'ordered-list': 'ol',
49
+ 'list_item': 'li',
50
+ };
51
+ const MARK_WRAPPERS = {
52
+ bold: inner => `<strong>${inner}</strong>`,
53
+ italic: inner => `<em>${inner}</em>`,
54
+ underline: inner => `<u>${inner}</u>`,
55
+ strikethrough: inner => `<s>${inner}</s>`,
56
+ 'strike-through': inner => `<s>${inner}</s>`,
57
+ strike: inner => `<s>${inner}</s>`,
58
+ code: inner => `<code>${inner}</code>`,
59
+ superscript: inner => `<sup>${inner}</sup>`,
60
+ subscript: inner => `<sub>${inner}</sub>`,
61
+ };
62
+ // ---------------------------------------------------------------------------
63
+ // Helpers
64
+ // ---------------------------------------------------------------------------
65
+ /**
66
+ * Escapes HTML special characters in plain text content to prevent XSS.
67
+ */
68
+ function escapeHtml(text) {
69
+ return text
70
+ .replace(/&/g, '&amp;')
71
+ .replace(/</g, '&lt;')
72
+ .replace(/>/g, '&gt;')
73
+ .replace(/"/g, '&quot;')
74
+ .replace(/'/g, '&#039;');
75
+ }
76
+ /**
77
+ * Wraps text content with mark tags in the order they are applied.
78
+ * Marks are applied innermost-first so nested marks render correctly.
79
+ */
80
+ function applyMarks(text, marks) {
81
+ if (!marks || marks.length === 0)
82
+ return text;
83
+ return marks.reduce((wrapped, mark) => {
84
+ const wrapper = MARK_WRAPPERS[mark.type];
85
+ return wrapper ? wrapper(wrapped) : wrapped;
86
+ }, text);
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // Node converters
90
+ // ---------------------------------------------------------------------------
91
+ /**
92
+ * Converts a text node (and its optional leaves) to an HTML string.
93
+ */
94
+ function convertTextNode(node) {
95
+ // Slate 0.35–0.40 used "leaves" inside text nodes
96
+ if (node.leaves && node.leaves.length > 0) {
97
+ return node.leaves.map(leaf => {
98
+ const escaped = escapeHtml(leaf.text || '');
99
+ return applyMarks(escaped, leaf.marks || []);
100
+ }).join('');
101
+ }
102
+ // Slate 0.40–0.47 uses text + marks directly on the text node
103
+ const escaped = escapeHtml(node.text || '');
104
+ return applyMarks(escaped, node.marks || []);
105
+ }
106
+ /**
107
+ * Converts an inline node (e.g. link) to an HTML string.
108
+ */
109
+ function convertInlineNode(node) {
110
+ var _a, _b, _c;
111
+ const innerHtml = convertChildren(node.nodes || []);
112
+ switch (node.type) {
113
+ case 'link': {
114
+ const href = ((_a = node.data) === null || _a === void 0 ? void 0 : _a.href) || ((_b = node.data) === null || _b === void 0 ? void 0 : _b.url) || '#';
115
+ const target = ((_c = node.data) === null || _c === void 0 ? void 0 : _c.target) || '';
116
+ const targetAttr = target ? ` target="${escapeHtml(target)}"` : '';
117
+ return `<a href="${escapeHtml(href)}"${targetAttr}>${innerHtml}</a>`;
118
+ }
119
+ case 'mention':
120
+ return `<span class="mention">${innerHtml}</span>`;
121
+ default:
122
+ // Unknown inline — render children through
123
+ return innerHtml;
124
+ }
125
+ }
126
+ /**
127
+ * Converts a block node to an HTML string.
128
+ */
129
+ function convertBlockNode(node) {
130
+ const innerHtml = convertChildren(node.nodes || []);
131
+ const tag = BLOCK_TAG_MAP[node.type];
132
+ // Code block: wrap inner content in a <code> tag
133
+ if (node.type === 'code-block' || node.type === 'code') {
134
+ return `<pre><code>${innerHtml}</code></pre>`;
135
+ }
136
+ if (tag) {
137
+ return `<${tag}>${innerHtml}</${tag}>`;
138
+ }
139
+ // Unknown block type — fall back to a <div> so content is not lost
140
+ return `<div>${innerHtml}</div>`;
141
+ }
142
+ /**
143
+ * Converts an array of child nodes to an HTML string.
144
+ */
145
+ function convertChildren(nodes) {
146
+ if (!nodes || nodes.length === 0)
147
+ return '';
148
+ return nodes
149
+ .map(node => {
150
+ switch (node.object) {
151
+ case 'text':
152
+ return convertTextNode(node);
153
+ case 'inline':
154
+ return convertInlineNode(node);
155
+ case 'block':
156
+ return convertBlockNode(node);
157
+ default:
158
+ // Some documents omit the `object` field — infer from presence of `type`
159
+ if (node.type) {
160
+ if (node.text !== undefined) {
161
+ return convertTextNode(node);
162
+ }
163
+ // Try inline types first, fall back to block
164
+ const inlineTypes = ['link', 'mention'];
165
+ if (inlineTypes.includes(node.type)) {
166
+ return convertInlineNode(node);
167
+ }
168
+ return convertBlockNode(node);
169
+ }
170
+ if (node.text !== undefined) {
171
+ return convertTextNode(node);
172
+ }
173
+ return '';
174
+ }
175
+ })
176
+ .join('');
177
+ }
178
+ // ---------------------------------------------------------------------------
179
+ // Public API
180
+ // ---------------------------------------------------------------------------
181
+ /**
182
+ * Converts a Slate 0.42.x document value to an HTML string.
183
+ *
184
+ * @param value - The full Slate value object `{ document: { nodes: [...] } }`
185
+ * or just the document object `{ nodes: [...] }` — both are accepted.
186
+ * @returns An HTML string, or an empty string if the input is null / invalid.
187
+ *
188
+ * @example
189
+ * const html = convertLegacySlateToHtml(JSON.parse(savedSlateJson));
190
+ * // '<p>Hello <strong>world</strong></p>'
191
+ */
192
+ export function convertLegacySlateToHtml(value) {
193
+ if (!value)
194
+ return '';
195
+ // Accept either the full value `{ document: {...} }` or just the document
196
+ const document = value.document !== undefined
197
+ ? value.document
198
+ : value;
199
+ if (!document || !document.nodes || document.nodes.length === 0) {
200
+ return '';
201
+ }
202
+ return convertChildren(document.nodes);
203
+ }
204
+ /**
205
+ * Safely parses a JSON string and converts it to HTML.
206
+ * Catches any parse errors and returns an empty string rather than throwing.
207
+ *
208
+ * @param json - A JSON string representing a Slate 0.42.x document
209
+ * @returns An HTML string, or an empty string if parsing fails.
210
+ */
211
+ export function convertLegacySlateJsonToHtml(json) {
212
+ if (!json || typeof json !== 'string')
213
+ return '';
214
+ try {
215
+ const parsed = JSON.parse(json);
216
+ return convertLegacySlateToHtml(parsed);
217
+ }
218
+ catch (_a) {
219
+ console.warn('[xplor-rich-text-editor] Failed to parse legacy Slate document JSON:', json);
220
+ return '';
221
+ }
222
+ }
223
+ //# sourceMappingURL=slate-legacy-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slate-legacy-converter.js","sourceRoot":"","sources":["../../src/utils/slate-legacy-converter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * slate-legacy-converter.ts\n *\n * Converts old Slate 0.42.x document JSON format into an HTML string.\n * This is the backwards-compatibility layer for the xplor-rich-text-editor component.\n *\n * Old Slate 0.42.x document shape:\n * {\n * document: {\n * nodes: [\n * {\n * object: 'block',\n * type: 'paragraph',\n * nodes: [\n * {\n * object: 'text',\n * text: 'Hello world',\n * marks: [{ type: 'bold' }]\n * }\n * ]\n * }\n * ]\n * }\n * }\n *\n * No Slate runtime dependency required — this is a pure transformation function.\n */\n\n// ---------------------------------------------------------------------------\n// Type Definitions\n// ---------------------------------------------------------------------------\n\nexport interface LegacySlateMark {\n type: string;\n data?: Record<string, unknown>;\n}\n\nexport interface LegacySlateTextNode {\n object: 'text';\n text: string;\n marks?: LegacySlateMark[];\n leaves?: LegacySlateLeaf[];\n}\n\n/** Older Slate versions used \"leaves\" inside text nodes */\nexport interface LegacySlateLeaf {\n object?: 'leaf';\n text: string;\n marks?: LegacySlateMark[];\n}\n\nexport interface LegacySlateInlineNode {\n object: 'inline';\n type: string;\n data?: Record<string, unknown>;\n nodes?: LegacySlateChildNode[];\n}\n\nexport interface LegacySlateBlockNode {\n object: 'block';\n type: string;\n data?: Record<string, unknown>;\n nodes?: LegacySlateChildNode[];\n}\n\nexport type LegacySlateChildNode =\n | LegacySlateBlockNode\n | LegacySlateInlineNode\n | LegacySlateTextNode;\n\nexport interface LegacySlateDocument {\n object?: 'document';\n nodes?: LegacySlateChildNode[];\n}\n\nexport interface LegacySlateValue {\n document: LegacySlateDocument;\n}\n\n// ---------------------------------------------------------------------------\n// Block type → HTML tag mapping\n// ---------------------------------------------------------------------------\n\nconst BLOCK_TAG_MAP: Record<string, string> = {\n paragraph: 'p',\n 'heading-one': 'h1',\n 'heading-two': 'h2',\n 'heading-three': 'h3',\n 'heading-four': 'h4',\n 'heading-five': 'h5',\n 'heading-six': 'h6',\n 'bulleted-list': 'ul',\n 'numbered-list': 'ol',\n 'list-item': 'li',\n 'block-quote': 'blockquote',\n 'code-block': 'pre',\n // Aliases sometimes found in the wild\n quote: 'blockquote',\n code: 'pre',\n 'unordered-list': 'ul',\n 'ordered-list': 'ol',\n 'list_item': 'li',\n};\n\n// ---------------------------------------------------------------------------\n// Mark type → wrap function mapping\n// ---------------------------------------------------------------------------\n\ntype MarkWrapper = (inner: string) => string;\n\nconst MARK_WRAPPERS: Record<string, MarkWrapper> = {\n bold: inner => `<strong>${inner}</strong>`,\n italic: inner => `<em>${inner}</em>`,\n underline: inner => `<u>${inner}</u>`,\n strikethrough: inner => `<s>${inner}</s>`,\n 'strike-through': inner => `<s>${inner}</s>`,\n strike: inner => `<s>${inner}</s>`,\n code: inner => `<code>${inner}</code>`,\n superscript: inner => `<sup>${inner}</sup>`,\n subscript: inner => `<sub>${inner}</sub>`,\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Escapes HTML special characters in plain text content to prevent XSS.\n */\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n}\n\n/**\n * Wraps text content with mark tags in the order they are applied.\n * Marks are applied innermost-first so nested marks render correctly.\n */\nfunction applyMarks(text: string, marks: LegacySlateMark[]): string {\n if (!marks || marks.length === 0) return text;\n\n return marks.reduce((wrapped, mark) => {\n const wrapper = MARK_WRAPPERS[mark.type];\n return wrapper ? wrapper(wrapped) : wrapped;\n }, text);\n}\n\n// ---------------------------------------------------------------------------\n// Node converters\n// ---------------------------------------------------------------------------\n\n/**\n * Converts a text node (and its optional leaves) to an HTML string.\n */\nfunction convertTextNode(node: LegacySlateTextNode): string {\n // Slate 0.35–0.40 used \"leaves\" inside text nodes\n if (node.leaves && node.leaves.length > 0) {\n return node.leaves.map(leaf => {\n const escaped = escapeHtml(leaf.text || '');\n return applyMarks(escaped, leaf.marks || []);\n }).join('');\n }\n\n // Slate 0.40–0.47 uses text + marks directly on the text node\n const escaped = escapeHtml(node.text || '');\n return applyMarks(escaped, node.marks || []);\n}\n\n/**\n * Converts an inline node (e.g. link) to an HTML string.\n */\nfunction convertInlineNode(node: LegacySlateInlineNode): string {\n const innerHtml = convertChildren(node.nodes || []);\n\n switch (node.type) {\n case 'link': {\n const href = (node.data?.href as string) || (node.data?.url as string) || '#';\n const target = (node.data?.target as string) || '';\n const targetAttr = target ? ` target=\"${escapeHtml(target)}\"` : '';\n return `<a href=\"${escapeHtml(href)}\"${targetAttr}>${innerHtml}</a>`;\n }\n case 'mention':\n return `<span class=\"mention\">${innerHtml}</span>`;\n default:\n // Unknown inline — render children through\n return innerHtml;\n }\n}\n\n/**\n * Converts a block node to an HTML string.\n */\nfunction convertBlockNode(node: LegacySlateBlockNode): string {\n const innerHtml = convertChildren(node.nodes || []);\n const tag = BLOCK_TAG_MAP[node.type];\n\n // Code block: wrap inner content in a <code> tag\n if (node.type === 'code-block' || node.type === 'code') {\n return `<pre><code>${innerHtml}</code></pre>`;\n }\n\n if (tag) {\n return `<${tag}>${innerHtml}</${tag}>`;\n }\n\n // Unknown block type — fall back to a <div> so content is not lost\n return `<div>${innerHtml}</div>`;\n}\n\n/**\n * Converts an array of child nodes to an HTML string.\n */\nfunction convertChildren(nodes: LegacySlateChildNode[]): string {\n if (!nodes || nodes.length === 0) return '';\n\n return nodes\n .map(node => {\n switch (node.object) {\n case 'text':\n return convertTextNode(node as LegacySlateTextNode);\n case 'inline':\n return convertInlineNode(node as LegacySlateInlineNode);\n case 'block':\n return convertBlockNode(node as LegacySlateBlockNode);\n default:\n // Some documents omit the `object` field — infer from presence of `type`\n if ((node as LegacySlateBlockNode).type) {\n if ((node as LegacySlateTextNode).text !== undefined) {\n return convertTextNode(node as LegacySlateTextNode);\n }\n // Try inline types first, fall back to block\n const inlineTypes = ['link', 'mention'];\n if (inlineTypes.includes((node as LegacySlateInlineNode).type)) {\n return convertInlineNode(node as LegacySlateInlineNode);\n }\n return convertBlockNode(node as LegacySlateBlockNode);\n }\n if ((node as LegacySlateTextNode).text !== undefined) {\n return convertTextNode(node as LegacySlateTextNode);\n }\n return '';\n }\n })\n .join('');\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Converts a Slate 0.42.x document value to an HTML string.\n *\n * @param value - The full Slate value object `{ document: { nodes: [...] } }`\n * or just the document object `{ nodes: [...] }` — both are accepted.\n * @returns An HTML string, or an empty string if the input is null / invalid.\n *\n * @example\n * const html = convertLegacySlateToHtml(JSON.parse(savedSlateJson));\n * // '<p>Hello <strong>world</strong></p>'\n */\nexport function convertLegacySlateToHtml(\n value: LegacySlateValue | LegacySlateDocument | null | undefined,\n): string {\n if (!value) return '';\n\n // Accept either the full value `{ document: {...} }` or just the document\n const document =\n (value as LegacySlateValue).document !== undefined\n ? (value as LegacySlateValue).document\n : (value as LegacySlateDocument);\n\n if (!document || !document.nodes || document.nodes.length === 0) {\n return '';\n }\n\n return convertChildren(document.nodes);\n}\n\n/**\n * Safely parses a JSON string and converts it to HTML.\n * Catches any parse errors and returns an empty string rather than throwing.\n *\n * @param json - A JSON string representing a Slate 0.42.x document\n * @returns An HTML string, or an empty string if parsing fails.\n */\nexport function convertLegacySlateJsonToHtml(json: string): string {\n if (!json || typeof json !== 'string') return '';\n\n try {\n const parsed = JSON.parse(json);\n return convertLegacySlateToHtml(parsed);\n } catch {\n console.warn('[xplor-rich-text-editor] Failed to parse legacy Slate document JSON:', json);\n return '';\n }\n}\n"]}
@@ -77,6 +77,7 @@ var HYDRATE_ID = "s-id";
77
77
  var HYDRATED_STYLE_ID = "sty-id";
78
78
  var HYDRATE_CHILD_ID = "c-id";
79
79
  var SLOT_FB_CSS = "slot-fb{display:contents}slot-fb[hidden]{display:none}";
80
+ var XLINK_NS = "http://www.w3.org/1999/xlink";
80
81
  var win = typeof window !== "undefined" ? window : {};
81
82
  var H = win.HTMLElement || class {
82
83
  };
@@ -1250,15 +1251,26 @@ var setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags, initialRen
1250
1251
  } catch (e) {
1251
1252
  }
1252
1253
  }
1254
+ let xlink = false;
1255
+ {
1256
+ if (ln !== (ln = ln.replace(/^xlink\:?/, ""))) {
1257
+ memberName = ln;
1258
+ xlink = true;
1259
+ }
1260
+ }
1253
1261
  if (newValue == null || newValue === false) {
1254
1262
  if (newValue !== false || elm.getAttribute(memberName) === "") {
1255
- {
1263
+ if (xlink) {
1264
+ elm.removeAttributeNS(XLINK_NS, memberName);
1265
+ } else {
1256
1266
  elm.removeAttribute(memberName);
1257
1267
  }
1258
1268
  }
1259
1269
  } else if ((!isProp || flags & 4 /* isHost */ || isSvg) && !isComplex && elm.nodeType === 1 /* ElementNode */) {
1260
1270
  newValue = newValue === true ? "" : newValue;
1261
- {
1271
+ if (xlink) {
1272
+ elm.setAttributeNS(XLINK_NS, memberName, newValue);
1273
+ } else {
1262
1274
  elm.setAttribute(memberName, newValue);
1263
1275
  }
1264
1276
  }
@@ -1708,6 +1720,12 @@ var renderVdom = (hostRef, renderFnResults, isInitialLoad = false) => {
1708
1720
  const isHostElement = isHost(renderFnResults);
1709
1721
  const rootVnode = isHostElement ? renderFnResults : h(null, null, renderFnResults);
1710
1722
  hostTagName = hostElm.tagName;
1723
+ if (cmpMeta.$attrsToReflect$) {
1724
+ rootVnode.$attrs$ = rootVnode.$attrs$ || {};
1725
+ cmpMeta.$attrsToReflect$.map(
1726
+ ([propName, attribute]) => rootVnode.$attrs$[attribute] = hostElm[propName]
1727
+ );
1728
+ }
1711
1729
  if (isInitialLoad && rootVnode.$attrs$) {
1712
1730
  for (const key of Object.keys(rootVnode.$attrs$)) {
1713
1731
  if (hostElm.hasAttribute(key) && !["key", "ref", "style", "class"].includes(key)) {
@@ -2076,8 +2094,12 @@ var proxyComponent = (Cstr, cmpMeta, flags) => {
2076
2094
  /* @__PURE__ */ new Set([
2077
2095
  ...Object.keys((_b = cmpMeta.$watchers$) != null ? _b : {}),
2078
2096
  ...members.filter(([_, m]) => m[0] & 15 /* HasAttribute */).map(([propName, m]) => {
2097
+ var _a2;
2079
2098
  const attrName = m[1] || propName;
2080
2099
  attrNameToPropName.set(attrName, propName);
2100
+ if (m[0] & 512 /* ReflectAttr */) {
2101
+ (_a2 = cmpMeta.$attrsToReflect$) == null ? void 0 : _a2.push([propName, attrName]);
2102
+ }
2081
2103
  return attrName;
2082
2104
  })
2083
2105
  ])
@@ -2222,6 +2244,9 @@ var proxyCustomElement = (Cstr, compactMeta) => {
2222
2244
  {
2223
2245
  cmpMeta.$watchers$ = Cstr.$watchers$;
2224
2246
  }
2247
+ {
2248
+ cmpMeta.$attrsToReflect$ = [];
2249
+ }
2225
2250
  {
2226
2251
  hydrateScopedToShadow();
2227
2252
  }
@@ -2316,7 +2341,7 @@ function render(vnode, container) {
2316
2341
  renderVdom(ref, vnode);
2317
2342
  }
2318
2343
 
2319
- const globalStyles = "*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;}::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;}*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb;}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Montserrat, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;}body{margin:0;line-height:inherit;}hr{height:0;color:inherit;border-top-width:1px;}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse;}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0;}button,select{text-transform:none}button,input:where([type='button']),input:where([type='reset']),input:where([type='submit']){-webkit-appearance:button;background-color:transparent;background-image:none;}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type='search']{-webkit-appearance:textfield;outline-offset:-2px;}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af;}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af;}button,[role=\"button\"]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=\"until-found\"])){display:none}html[data-theme='office']{--color-primary:rgb(219, 59, 3);--color-secondary:rgb(0, 119, 107);--color-buttons:#89da59;--color-typography:#ff320e}html{--color-primary:#db3b03;--color-secondary:rgb(0, 119, 107);--color-buttons:#fbbc05;--color-typography:#ea4335}:root{--color-primary:#db3b03;--color-secondary:rgb(0, 119, 107);--color-tertiary:rgb(128, 104, 186);--color-white:white;--color-emphasis:rgb(8, 8, 9);--color-supergiant:rgb(213, 66, 99);--color-orange:rgb(250, 200, 127);--color-buttons:#fbbc05;--color-typography:#ea4335;--background:20 66% 99%;--foreground:20 51% 4%;--muted:20 25% 86%;--muted-foreground:20 7% 25%;--popover:20 66% 98%;--popover-foreground:20 51% 3%;--card:20 66% 98%;--card-foreground:20 51% 3%;--border:20 15% 94%;--input:20 15% 94%;--primary:20 48% 72%;--primary-foreground:20 48% 12%;--secondary:20 12% 92%;--secondary-foreground:20 12% 32%;--accent:20 12% 92%;--accent-foreground:20 12% 32%;--destructive:11 80% 22%;--destructive-foreground:11 80% 82%;--ring:20 48% 72%;--radius:0.5rem;--chart-1:12 76% 61%;--chart-2:173 58% 39%;--chart-3:197 37% 24%;--chart-4:43 74% 66%;--chart-5:27 87% 67%}.dark{--background:253 43% 3%;--foreground:253 31% 98%;--muted:253 7% 13%;--muted-foreground:253 13% 63%;--popover:253 43% 3%;--popover-foreground:253 31% 98%;--card:253 43% 4%;--card-foreground:253 31% 99%;--border:215 27.9% 16.9%;--input:215 27.9% 16.9%;--primary:253 91% 58%;--primary-foreground:253 91% 98%;--secondary:253 7% 9%;--secondary-foreground:253 7% 69%;--accent:253 13% 14%;--accent-foreground:253 13% 74%;--destructive:339.2 90.36% 51.18%;--destructive-foreground:0 0% 100%;--ring:253 91% 58%;--chart-1:220 70% 50%;--chart-2:160 60% 45%;--chart-3:30 80% 55%;--chart-4:280 65% 60%;--chart-5:340 75% 55%}*{border-color:hsl(var(--border))}body{box-sizing:border-box;background-color:hsl(var(--background));color:hsl(var(--foreground))}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.mx-auto{margin-left:auto;margin-right:auto}.mb-4{margin-bottom:0.25rem}.mb-6{margin-bottom:1.5rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-16{width:1rem;height:1rem}.h-3{height:0.75rem}.h-4{height:0.25rem}.w-3{width:0.75rem}.w-4{width:0.25rem}.w-full{width:100%}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-xl{max-width:36rem}.grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:0.25rem}.gap-2{gap:0.5rem}.gap-20{gap:1.25rem}.gap-4{gap:0.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{-moz-column-gap:0.5rem;column-gap:0.5rem}.gap-y-12{row-gap:0.75rem}.overflow-x-auto{overflow-x:auto}.text-pretty{text-wrap:pretty}.rounded{border-radius:0.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:0.5rem}.rounded-md{border-radius:0.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-1\\.5{padding:0.375rem}.p-2{padding:0.5rem}.p-6{padding:1.5rem}.px-2{padding-left:0.5rem;padding-right:0.5rem}.px-3{padding-left:0.75rem;padding-right:0.75rem}.px-4{padding-left:0.25rem;padding-right:0.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:0.25rem;padding-bottom:0.25rem}.py-1\\.5{padding-top:0.375rem;padding-bottom:0.375rem}.py-24{padding-top:1.5rem;padding-bottom:1.5rem}.py-3{padding-top:0.75rem;padding-bottom:0.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-sans{font-family:Montserrat, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base\\/7{font-size:1rem;line-height:1.75rem}.text-lg\\/8{font-size:1.125rem;line-height:2rem}.text-sm{font-size:0.875rem;line-height:1.25rem}.text-sm\\/6{font-size:0.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:0.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.tracking-tight{letter-spacing:-0.025em}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.text-primary{color:var(--color-primary)}.text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgb(0 0 0 / 0.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur:blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.transition-colors{transition-property:color, background-color, border-color, text-decoration-color, fill, stroke;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.theme-office{--color-black:#000000;--color-white:#ffffff;--color-primary:#db3b03;--color-secondary:#ec7702;--color-buttons:#89da59;--color-typography:#ff320e}.theme-pg{--color-primary:#00776b;--color-secondary:#01a39d;--color-buttons:#89da59;--color-typography:#ff320e}.hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\\:bg-teal-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 250 / var(--tw-bg-opacity, 1))}.hover\\:bg-teal-700:hover{--tw-bg-opacity:1;background-color:rgb(15 118 110 / var(--tw-bg-opacity, 1))}.hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.hover\\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.hover\\:text-teal-800:hover{--tw-text-opacity:1;color:rgb(17 94 89 / var(--tw-text-opacity, 1))}.focus\\:border-teal-500:focus{--tw-border-opacity:1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)}.focus\\:ring-teal-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(20 184 166 / var(--tw-ring-opacity, 1))}.disabled\\:opacity-50:disabled{opacity:0.5}@media (min-width: 640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.sm\\:gap-y-16{row-gap:1rem}.sm\\:py-32{padding-top:2rem;padding-bottom:2rem}.sm\\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width: 1024px){.lg\\:px-8{padding-left:0.5rem;padding-right:0.5rem}}@media (min-width: 1280px){.xl\\:col-span-2{grid-column:span 2 / span 2}.xl\\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}}";
2344
+ const globalStyles = "*,::before,::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;}::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;}*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb;}::before,::after{--tw-content:''}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Montserrat, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;}body{margin:0;line-height:inherit;}hr{height:0;color:inherit;border-top-width:1px;}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse;}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0;}button,select{text-transform:none}button,input:where([type='button']),input:where([type='reset']),input:where([type='submit']){-webkit-appearance:button;background-color:transparent;background-image:none;}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type='search']{-webkit-appearance:textfield;outline-offset:-2px;}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af;}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af;}button,[role=\"button\"]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=\"until-found\"])){display:none}html[data-theme='office']{--color-primary:rgb(219, 59, 3);--color-secondary:rgb(0, 119, 107);--color-buttons:#89da59;--color-typography:#ff320e}html{--color-primary:#db3b03;--color-secondary:rgb(0, 119, 107);--color-buttons:#fbbc05;--color-typography:#ea4335}:root{--color-primary:#db3b03;--color-secondary:rgb(0, 119, 107);--color-tertiary:rgb(128, 104, 186);--color-white:white;--color-emphasis:rgb(8, 8, 9);--color-supergiant:rgb(213, 66, 99);--color-orange:rgb(250, 200, 127);--color-buttons:#fbbc05;--color-typography:#ea4335;--background:20 66% 99%;--foreground:20 51% 4%;--muted:20 25% 86%;--muted-foreground:20 7% 25%;--popover:20 66% 98%;--popover-foreground:20 51% 3%;--card:20 66% 98%;--card-foreground:20 51% 3%;--border:20 15% 94%;--input:20 15% 94%;--primary:20 48% 72%;--primary-foreground:20 48% 12%;--secondary:20 12% 92%;--secondary-foreground:20 12% 32%;--accent:20 12% 92%;--accent-foreground:20 12% 32%;--destructive:11 80% 22%;--destructive-foreground:11 80% 82%;--ring:20 48% 72%;--radius:0.5rem;--chart-1:12 76% 61%;--chart-2:173 58% 39%;--chart-3:197 37% 24%;--chart-4:43 74% 66%;--chart-5:27 87% 67%}.dark{--background:253 43% 3%;--foreground:253 31% 98%;--muted:253 7% 13%;--muted-foreground:253 13% 63%;--popover:253 43% 3%;--popover-foreground:253 31% 98%;--card:253 43% 4%;--card-foreground:253 31% 99%;--border:215 27.9% 16.9%;--input:215 27.9% 16.9%;--primary:253 91% 58%;--primary-foreground:253 91% 98%;--secondary:253 7% 9%;--secondary-foreground:253 7% 69%;--accent:253 13% 14%;--accent-foreground:253 13% 74%;--destructive:339.2 90.36% 51.18%;--destructive-foreground:0 0% 100%;--ring:253 91% 58%;--chart-1:220 70% 50%;--chart-2:160 60% 45%;--chart-3:30 80% 55%;--chart-4:280 65% 60%;--chart-5:340 75% 55%}*{border-color:hsl(var(--border))}body{box-sizing:border-box;background-color:hsl(var(--background));color:hsl(var(--foreground))}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.mx-auto{margin-left:auto;margin-right:auto}.mb-4{margin-bottom:0.25rem}.mb-6{margin-bottom:1.5rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.contents{display:contents}.list-item{display:list-item}.hidden{display:none}.size-16{width:1rem;height:1rem}.h-3{height:0.75rem}.h-4{height:0.25rem}.w-3{width:0.75rem}.w-4{width:0.25rem}.w-full{width:100%}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-xl{max-width:36rem}.grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:0.25rem}.gap-2{gap:0.5rem}.gap-20{gap:1.25rem}.gap-4{gap:0.25rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{-moz-column-gap:0.5rem;column-gap:0.5rem}.gap-y-12{row-gap:0.75rem}.overflow-x-auto{overflow-x:auto}.text-pretty{text-wrap:pretty}.rounded{border-radius:0.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:0.5rem}.rounded-md{border-radius:0.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-1\\.5{padding:0.375rem}.p-2{padding:0.5rem}.p-6{padding:1.5rem}.px-2{padding-left:0.5rem;padding-right:0.5rem}.px-3{padding-left:0.75rem;padding-right:0.75rem}.px-4{padding-left:0.25rem;padding-right:0.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:0.25rem;padding-bottom:0.25rem}.py-1\\.5{padding-top:0.375rem;padding-bottom:0.375rem}.py-24{padding-top:1.5rem;padding-bottom:1.5rem}.py-3{padding-top:0.75rem;padding-bottom:0.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-sans{font-family:Montserrat, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base\\/7{font-size:1rem;line-height:1.75rem}.text-lg\\/8{font-size:1.125rem;line-height:2rem}.text-sm{font-size:0.875rem;line-height:1.25rem}.text-sm\\/6{font-size:0.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:0.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.italic{font-style:italic}.tracking-tight{letter-spacing:-0.025em}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.text-primary{color:var(--color-primary)}.text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgb(0 0 0 / 0.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur:blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.transition-colors{transition-property:color, background-color, border-color, text-decoration-color, fill, stroke;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.theme-office{--color-black:#000000;--color-white:#ffffff;--color-primary:#db3b03;--color-secondary:#ec7702;--color-buttons:#89da59;--color-typography:#ff320e}.theme-pg{--color-primary:#00776b;--color-secondary:#01a39d;--color-buttons:#89da59;--color-typography:#ff320e}.hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\\:bg-teal-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 250 / var(--tw-bg-opacity, 1))}.hover\\:bg-teal-700:hover{--tw-bg-opacity:1;background-color:rgb(15 118 110 / var(--tw-bg-opacity, 1))}.hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.hover\\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.hover\\:text-teal-800:hover{--tw-text-opacity:1;color:rgb(17 94 89 / var(--tw-text-opacity, 1))}.focus\\:border-teal-500:focus{--tw-border-opacity:1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)}.focus\\:ring-teal-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(20 184 166 / var(--tw-ring-opacity, 1))}.disabled\\:opacity-50:disabled{opacity:0.5}@media (min-width: 640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.sm\\:gap-y-16{row-gap:1rem}.sm\\:py-32{padding-top:2rem;padding-bottom:2rem}.sm\\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width: 1024px){.lg\\:px-8{padding-left:0.5rem;padding-right:0.5rem}}@media (min-width: 1280px){.xl\\:col-span-2{grid-column:span 2 / span 2}.xl\\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}}";
2320
2345
 
2321
2346
  export { H, Host as a, createEvent as c, getAssetPath, h, proxyCustomElement as p, render, setAssetPath, setNonce, setPlatformOptions };
2322
2347
  //# sourceMappingURL=index.js.map