themelia-react-ui 2.0.5 → 2.0.6

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 (489) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/MIGRATION.md +119 -0
  3. package/README.md +13 -6
  4. package/dist/{accordion-B9MHG0cT.js → accordion-0tQUZ20r.js} +7 -7
  5. package/dist/accordion-0tQUZ20r.js.map +1 -0
  6. package/dist/{action-menu-Dr8K-ghE.js → action-menu-C0gjzLyE.js} +7 -7
  7. package/dist/{action-menu-Dr8K-ghE.js.map → action-menu-C0gjzLyE.js.map} +1 -1
  8. package/dist/{ai-artifact-C58tQcBy.js → ai-artifact-CGGpQryR.js} +172 -157
  9. package/dist/ai-artifact-CGGpQryR.js.map +1 -0
  10. package/dist/{app-shell-B_IuNWOo.js → app-shell-EHuuRDGy.js} +5 -5
  11. package/dist/{app-shell-B_IuNWOo.js.map → app-shell-EHuuRDGy.js.map} +1 -1
  12. package/dist/{attachment-Dg_69lPS.js → attachment-BCpA4e7i.js} +8 -8
  13. package/dist/{attachment-Dg_69lPS.js.map → attachment-BCpA4e7i.js.map} +1 -1
  14. package/dist/{auth-DTkkshS8.js → auth-B0girIk_.js} +15 -15
  15. package/dist/auth-B0girIk_.js.map +1 -0
  16. package/dist/{avatar-CeZaFmNH.js → avatar-B9Jnp-T-.js} +3 -3
  17. package/dist/{avatar-CeZaFmNH.js.map → avatar-B9Jnp-T-.js.map} +1 -1
  18. package/dist/{badge-xIiV_E7f.js → badge-wWauMgAt.js} +3 -3
  19. package/dist/{badge-xIiV_E7f.js.map → badge-wWauMgAt.js.map} +1 -1
  20. package/dist/base/accordion.js +1 -1
  21. package/dist/base/action-menu.js +1 -1
  22. package/dist/base/attachment.js +1 -1
  23. package/dist/base/avatar.js +1 -1
  24. package/dist/base/badge.js +1 -1
  25. package/dist/base/batch-action-bar.js +1 -1
  26. package/dist/base/buttons.js +1 -1
  27. package/dist/base/cards.js +2 -2
  28. package/dist/base/carousel.js +3 -3
  29. package/dist/base/cascader.js +1 -1
  30. package/dist/base/chart.js +1 -1
  31. package/dist/base/choice-inputs.js +2 -2
  32. package/dist/base/code-block.js +1 -1
  33. package/dist/base/combobox.js +1 -1
  34. package/dist/base/command.js +1 -1
  35. package/dist/base/copyable.js +1 -1
  36. package/dist/base/date-pickers.js +2 -2
  37. package/dist/base/display.js +6 -6
  38. package/dist/base/feedback.js +4 -4
  39. package/dist/base/forms-numeric.js +1 -1
  40. package/dist/base/forms.js +2 -2
  41. package/dist/base/inline-edit.js +8 -8
  42. package/dist/base/item.js +1 -1
  43. package/dist/base/media-gallery.js +1 -1
  44. package/dist/base/metadata-list.js +1 -1
  45. package/dist/base/navigation.js +6 -6
  46. package/dist/base/popover-menu.js +1 -1
  47. package/dist/base/popover.js +1 -1
  48. package/dist/base/qr-code.js +1 -1
  49. package/dist/base/repeaters.js +195 -188
  50. package/dist/base/repeaters.js.map +1 -1
  51. package/dist/base/sheet.js +1 -1
  52. package/dist/base/sidebar.js +2 -2
  53. package/dist/base/signature-pad.js +7 -7
  54. package/dist/base/skeleton.js +1 -1
  55. package/dist/base/spinner.js +5 -5
  56. package/dist/base/spinner.js.map +1 -1
  57. package/dist/base/structure.js +1 -1
  58. package/dist/base/table.js +1 -1
  59. package/dist/base/text-inputs.js +2 -2
  60. package/dist/base/toaster.js +1 -1
  61. package/dist/base/tree.js +1 -1
  62. package/dist/base/upload-queue.js +1 -1
  63. package/dist/base/upload.js +3 -3
  64. package/dist/base/value-inputs.js +1 -1
  65. package/dist/{batch-action-bar-Cb8cuvyy.js → batch-action-bar-BoqWIIpV.js} +5 -5
  66. package/dist/{batch-action-bar-Cb8cuvyy.js.map → batch-action-bar-BoqWIIpV.js.map} +1 -1
  67. package/dist/blocks/admin.js +17 -17
  68. package/dist/blocks/ai.js +227 -221
  69. package/dist/blocks/ai.js.map +1 -1
  70. package/dist/blocks/analytics/usage-card.js +1 -1
  71. package/dist/blocks/analytics.js +424 -449
  72. package/dist/blocks/analytics.js.map +1 -1
  73. package/dist/blocks/collaboration.js +1 -1
  74. package/dist/blocks/commerce/receipt.js +1 -1
  75. package/dist/blocks/commerce.js +225 -220
  76. package/dist/blocks/commerce.js.map +1 -1
  77. package/dist/blocks/data-display.js +2 -2
  78. package/dist/blocks/onboarding.js +5 -5
  79. package/dist/blocks/planning.js +11 -11
  80. package/dist/blocks/timelines.js +1 -1
  81. package/dist/{breadcrumbs-J-K2kl4c.js → breadcrumbs-Bp9Ke7kd.js} +4 -4
  82. package/dist/breadcrumbs-Bp9Ke7kd.js.map +1 -0
  83. package/dist/{button-S2Cubiiz.js → button-ChBovTx0.js} +2 -2
  84. package/dist/{button-S2Cubiiz.js.map → button-ChBovTx0.js.map} +1 -1
  85. package/dist/{buttons-BedGfygC.js → buttons-DeW0bQeK.js} +6 -6
  86. package/dist/{buttons-BedGfygC.js.map → buttons-DeW0bQeK.js.map} +1 -1
  87. package/dist/{cards-rNX1M4Xn.js → cards-CNXnmvV5.js} +8 -8
  88. package/dist/{cards-rNX1M4Xn.js.map → cards-CNXnmvV5.js.map} +1 -1
  89. package/dist/{cascader-B1MiqkBq.js → cascader-CrAl9zD5.js} +15 -15
  90. package/dist/{cascader-B1MiqkBq.js.map → cascader-CrAl9zD5.js.map} +1 -1
  91. package/dist/{chart-Darg_0Kv.js → chart-I7ROnsl8.js} +5 -5
  92. package/dist/{chart-Darg_0Kv.js.map → chart-I7ROnsl8.js.map} +1 -1
  93. package/dist/{checkbox-fflqmODR.js → checkbox-MoyHIAPs.js} +3 -3
  94. package/dist/{checkbox-fflqmODR.js.map → checkbox-MoyHIAPs.js.map} +1 -1
  95. package/dist/{choice-inputs-zUgBZfE4.js → choice-inputs-DHGtx0QV.js} +122 -110
  96. package/dist/choice-inputs-DHGtx0QV.js.map +1 -0
  97. package/dist/{code-block-BzmM9Eig.js → code-block-BSJyq9e-.js} +7 -7
  98. package/dist/{code-block-BzmM9Eig.js.map → code-block-BSJyq9e-.js.map} +1 -1
  99. package/dist/{collapsible-BkAI_XD4.js → collapsible-BzJ91LUG.js} +3 -3
  100. package/dist/{collapsible-BkAI_XD4.js.map → collapsible-BzJ91LUG.js.map} +1 -1
  101. package/dist/{collection-content-gDh1v6O4.js → collection-content-CSnwtOTH.js} +3 -3
  102. package/dist/{collection-content-gDh1v6O4.js.map → collection-content-CSnwtOTH.js.map} +1 -1
  103. package/dist/{combobox-BEx0vJgF.js → combobox-Bcvu5J8O.js} +11 -10
  104. package/dist/{combobox-BEx0vJgF.js.map → combobox-Bcvu5J8O.js.map} +1 -1
  105. package/dist/combobox-C2JiSQPc.js +915 -0
  106. package/dist/combobox-C2JiSQPc.js.map +1 -0
  107. package/dist/{command-CrlPIL6m.js → command-9e52NPgK.js} +6 -6
  108. package/dist/{command-CrlPIL6m.js.map → command-9e52NPgK.js.map} +1 -1
  109. package/dist/{comments-Dmpp0YIc.js → comments-BsgErEqd.js} +33 -28
  110. package/dist/comments-BsgErEqd.js.map +1 -0
  111. package/dist/components/base/choice-inputs/choice-types.d.ts +4 -0
  112. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +7 -6
  113. package/dist/components/base/combobox/combobox-field.d.ts +2 -2
  114. package/dist/components/base/date-pickers/date-picker-internals.d.ts +3 -1
  115. package/dist/components/base/date-pickers/datepicker.types.d.ts +10 -4
  116. package/dist/components/base/date-pickers/time-picker.d.ts +17 -3
  117. package/dist/components/base/feedback/state-display.d.ts +5 -1
  118. package/dist/components/base/feedback/state-display.strings.d.ts +9 -0
  119. package/dist/components/base/forms/form-field.d.ts +7 -2
  120. package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -1
  121. package/dist/components/base/forms-numeric/decimal-input.d.ts +2 -2
  122. package/dist/components/base/forms-numeric/dimensions-input.d.ts +4 -1
  123. package/dist/components/base/forms-numeric/numeric-composite-field.d.ts +12 -0
  124. package/dist/components/base/forms-numeric/weight-input.d.ts +6 -1
  125. package/dist/components/base/navigation/language-switcher.d.ts +12 -4
  126. package/dist/components/base/repeaters/key-value-editor.d.ts +2 -1
  127. package/dist/components/base/sidebar/sidebar.d.ts +2 -0
  128. package/dist/components/base/upload/avatar-upload.d.ts +2 -1
  129. package/dist/components/base/upload/image-upload.d.ts +2 -1
  130. package/dist/components/blocks/ai/ai-citation/types.d.ts +2 -0
  131. package/dist/components/blocks/ai/ai-reasoning/types.d.ts +2 -0
  132. package/dist/components/blocks/ai/ai-sources/types.d.ts +2 -0
  133. package/dist/components/blocks/ai/ai-tool-call/types.d.ts +2 -0
  134. package/dist/components/blocks/analytics/metric/metric.d.ts +4 -0
  135. package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
  136. package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +4 -5
  137. package/dist/components/blocks/analytics/types.d.ts +2 -2
  138. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  139. package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +4 -3
  140. package/dist/components/features/activities/activities.types.d.ts +18 -11
  141. package/dist/components/features/activities/hooks/use-activity-resources.d.ts +2 -1
  142. package/dist/components/features/ai-chat/hooks/use-ai-chat-scroll.d.ts +1 -1
  143. package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
  144. package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +4 -2
  145. package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
  146. package/dist/components/features/combobox/combobox.d.ts +2 -2
  147. package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -1
  148. package/dist/components/features/combobox/hooks/use-combobox-state.d.ts +1 -0
  149. package/dist/components/features/combobox/hooks/use-load-more.d.ts +1 -0
  150. package/dist/components/features/combobox/types.d.ts +37 -8
  151. package/dist/components/features/email-composer/types.d.ts +3 -1
  152. package/dist/components/features/filters/facets/date-facet.d.ts +4 -2
  153. package/dist/components/features/filters/facets/range-facet.d.ts +12 -0
  154. package/dist/components/features/filters/filters.types.d.ts +3 -3
  155. package/dist/components/features/filters/partials/date-filter-content.d.ts +3 -2
  156. package/dist/components/features/filters/partials/filter-popover-content.d.ts +4 -2
  157. package/dist/components/features/filters/partials/range-filter-content.d.ts +12 -0
  158. package/dist/components/features/filters/utils/filter-utils.d.ts +5 -1
  159. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  160. package/dist/components/features/media-library/media-library.d.ts +1 -1
  161. package/dist/components/features/media-library/media-library.strings.d.ts +6 -0
  162. package/dist/components/features/media-library/media-library.types.d.ts +36 -8
  163. package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
  164. package/dist/components/features/mentions/hooks/use-mentions.d.ts +16 -1
  165. package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +5 -1
  166. package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +1 -7
  167. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +2 -2
  168. package/dist/components/features/products/products.types.d.ts +2 -2
  169. package/dist/components/features/questionnaire/questionnaire.types.d.ts +3 -0
  170. package/dist/components/features/resource/resource.d.ts +1 -1
  171. package/dist/components/features/resource/resource.types.d.ts +2 -0
  172. package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts +1 -1
  173. package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +1 -1
  174. package/dist/components/features/rich-text-editor/partials/editor-field-aria.d.ts +14 -0
  175. package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +3 -1
  176. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
  177. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +17 -3
  178. package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -1
  179. package/dist/components/features/schema-form/partials/schema-form-field.d.ts +3 -1
  180. package/dist/components/features/schema-form/schema-form.utils.d.ts +1 -1
  181. package/dist/components/features/suggestions/suggestions.types.d.ts +1 -1
  182. package/dist/components/features/table/data-table.d.ts +1 -1
  183. package/dist/components/features/table/index.d.ts +1 -0
  184. package/dist/components/features/table/table-body.d.ts +1 -1
  185. package/dist/components/features/table/table-helpers.d.ts +6 -3
  186. package/dist/components/features/table/table.strings.d.ts +3 -0
  187. package/dist/components/features/table/table.types.d.ts +17 -1
  188. package/dist/components/layout/header/header.types.d.ts +3 -2
  189. package/dist/components/layout/layout.types.d.ts +5 -3
  190. package/dist/components/layout/navigation/side-nav.d.ts +3 -2
  191. package/dist/components/layout/normalize-layout-path.d.ts +1 -0
  192. package/dist/components/layout/settings/settings.d.ts +1 -1
  193. package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
  194. package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +3 -1
  195. package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -0
  196. package/dist/components/layout/sidebar/sidebar.types.d.ts +2 -0
  197. package/dist/components/primitives/link.d.ts +3 -2
  198. package/dist/components/primitives/money.d.ts +1 -1
  199. package/dist/components/primitives/number.d.ts +1 -1
  200. package/dist/components/typography/rich-text/rich-text-tree.d.ts +7 -5
  201. package/dist/{containers-CIxwbZt5.js → containers-CSdc32h9.js} +2 -2
  202. package/dist/{containers-CIxwbZt5.js.map → containers-CSdc32h9.js.map} +1 -1
  203. package/dist/{copyable-DIznBqiT.js → copyable-3fdHfMR3.js} +4 -4
  204. package/dist/{copyable-DIznBqiT.js.map → copyable-3fdHfMR3.js.map} +1 -1
  205. package/dist/{data-display-BdgCAw8T.js → data-display-Cmj-xZYl.js} +16 -15
  206. package/dist/data-display-Cmj-xZYl.js.map +1 -0
  207. package/dist/{date-Cq8ioE4o.js → date-Br0FicVv.js} +4 -4
  208. package/dist/{date-Cq8ioE4o.js.map → date-Br0FicVv.js.map} +1 -1
  209. package/dist/date-picker-CyQlFYsP.js +1617 -0
  210. package/dist/date-picker-CyQlFYsP.js.map +1 -0
  211. package/dist/date-pickers-tj2MXmXd.js +185 -0
  212. package/dist/date-pickers-tj2MXmXd.js.map +1 -0
  213. package/dist/{display-KsZLw9Ov.js → display-CT_N2a3w.js} +7 -7
  214. package/dist/{display-KsZLw9Ov.js.map → display-CT_N2a3w.js.map} +1 -1
  215. package/dist/{dropdown-menu-CLs8Lihj.js → dropdown-menu-C08iIugv.js} +6 -6
  216. package/dist/{dropdown-menu-CLs8Lihj.js.map → dropdown-menu-C08iIugv.js.map} +1 -1
  217. package/dist/features/activities.js +283 -270
  218. package/dist/features/activities.js.map +1 -1
  219. package/dist/features/ai-chat.js +40 -27
  220. package/dist/features/ai-chat.js.map +1 -1
  221. package/dist/features/appointment-calendar.js +126 -126
  222. package/dist/features/appointment-calendar.js.map +1 -1
  223. package/dist/features/async-preview.js +9 -9
  224. package/dist/features/combobox.js +1 -1
  225. package/dist/features/comments.js +1 -1
  226. package/dist/features/data-view.js +10 -10
  227. package/dist/features/email-composer.js +24 -19
  228. package/dist/features/email-composer.js.map +1 -1
  229. package/dist/features/event-calendar.js +129 -125
  230. package/dist/features/event-calendar.js.map +1 -1
  231. package/dist/features/filters.js +2 -2
  232. package/dist/features/global-search.js +16 -20
  233. package/dist/features/global-search.js.map +1 -1
  234. package/dist/features/kanban.js +18 -28
  235. package/dist/features/kanban.js.map +1 -1
  236. package/dist/features/map/style.css +15 -0
  237. package/dist/features/map.js +331 -314
  238. package/dist/features/map.js.map +1 -1
  239. package/dist/features/media-library.js +1044 -866
  240. package/dist/features/media-library.js.map +1 -1
  241. package/dist/features/mentions.js +2 -2
  242. package/dist/features/overlays.js +1 -1
  243. package/dist/features/products.js +978 -964
  244. package/dist/features/products.js.map +1 -1
  245. package/dist/features/questionnaire.js +159 -152
  246. package/dist/features/questionnaire.js.map +1 -1
  247. package/dist/features/resource-assignment.js +8 -8
  248. package/dist/features/resource.js +74 -71
  249. package/dist/features/resource.js.map +1 -1
  250. package/dist/features/rich-text-editor.js +28 -19
  251. package/dist/features/rich-text-editor.js.map +1 -1
  252. package/dist/features/schema-form.js +297 -256
  253. package/dist/features/schema-form.js.map +1 -1
  254. package/dist/features/suggestions.js +57 -50
  255. package/dist/features/suggestions.js.map +1 -1
  256. package/dist/features/sync.js +3 -3
  257. package/dist/features/table.js +1 -1
  258. package/dist/features/theme-tweaker.js +400 -399
  259. package/dist/features/theme-tweaker.js.map +1 -1
  260. package/dist/feedback-Dzo1xtAU.js +246 -0
  261. package/dist/feedback-Dzo1xtAU.js.map +1 -0
  262. package/dist/{field-affordance-recipes-DWcNcOjh.js → field-affordance-recipes-D6H7tVJi.js} +2 -2
  263. package/dist/{field-affordance-recipes-DWcNcOjh.js.map → field-affordance-recipes-D6H7tVJi.js.map} +1 -1
  264. package/dist/field-control-attributes-B6i335wr.js +18 -0
  265. package/dist/field-control-attributes-B6i335wr.js.map +1 -0
  266. package/dist/{field-state-recipes-BVA2CWHo.js → field-state-recipes-7sza8QbC.js} +4 -2
  267. package/dist/{field-state-recipes-BVA2CWHo.js.map → field-state-recipes-7sza8QbC.js.map} +1 -1
  268. package/dist/{filters-DzgSJpMK.js → filters-Dl80yYtN.js} +763 -605
  269. package/dist/filters-Dl80yYtN.js.map +1 -0
  270. package/dist/form-field-CAPdwdnZ.js +74 -0
  271. package/dist/form-field-CAPdwdnZ.js.map +1 -0
  272. package/dist/{form-sizing-Bs2qFUeE.js → form-sizing-CgcrUbLU.js} +2 -2
  273. package/dist/{form-sizing-Bs2qFUeE.js.map → form-sizing-CgcrUbLU.js.map} +1 -1
  274. package/dist/{forms-C0RGnJTe.js → forms-B3W8CH7-.js} +8 -8
  275. package/dist/{forms-C0RGnJTe.js.map → forms-B3W8CH7-.js.map} +1 -1
  276. package/dist/forms-numeric-CwjQJe-O.js +991 -0
  277. package/dist/forms-numeric-CwjQJe-O.js.map +1 -0
  278. package/dist/{header-DMMxG__r.js → header-ZIIsRKxP.js} +113 -113
  279. package/dist/header-ZIIsRKxP.js.map +1 -0
  280. package/dist/hooks/use-files.d.ts +2 -0
  281. package/dist/{hooks-DB6CJ4MR.js → hooks-BitHSh-Y.js} +3 -3
  282. package/dist/{hooks-DB6CJ4MR.js.map → hooks-BitHSh-Y.js.map} +1 -1
  283. package/dist/{icon-badge-DZF-YjQp.js → icon-badge-npxF1SLX.js} +2 -2
  284. package/dist/{icon-badge-DZF-YjQp.js.map → icon-badge-npxF1SLX.js.map} +1 -1
  285. package/dist/index.js +1 -1
  286. package/dist/{input-CvyDQlY7.js → input-7KAc7XQL.js} +6 -6
  287. package/dist/{input-CvyDQlY7.js.map → input-7KAc7XQL.js.map} +1 -1
  288. package/dist/{input-DMBwAZmr.js → input-DIREVYHs.js} +3 -3
  289. package/dist/{input-DMBwAZmr.js.map → input-DIREVYHs.js.map} +1 -1
  290. package/dist/{interaction-recipes-XR9ZpVYL.js → interaction-recipes-4wZ2tvfb.js} +2 -2
  291. package/dist/{interaction-recipes-XR9ZpVYL.js.map → interaction-recipes-4wZ2tvfb.js.map} +1 -1
  292. package/dist/{item-DjCcM18E.js → item-FfWnaYST.js} +99 -98
  293. package/dist/item-FfWnaYST.js.map +1 -0
  294. package/dist/layout/app-shell.js +1 -1
  295. package/dist/layout/auth.js +1 -1
  296. package/dist/layout/containers.js +1 -1
  297. package/dist/layout/header.js +1 -1
  298. package/dist/layout/hooks.js +1 -1
  299. package/dist/layout/navigation.js +1 -1
  300. package/dist/layout/page.js +1 -1
  301. package/dist/layout/settings.js +1 -1
  302. package/dist/layout/sidebar.js +2 -2
  303. package/dist/layout/workspace.js +1 -1
  304. package/dist/layout.js +11 -11
  305. package/dist/layout.types-E_GAApzO.js +30 -0
  306. package/dist/layout.types-E_GAApzO.js.map +1 -0
  307. package/dist/lib/field-control-attributes.d.ts +11 -0
  308. package/dist/lib/field-state-recipes.d.ts +2 -0
  309. package/dist/lib/format.d.ts +1 -0
  310. package/dist/lib/surface-recipes.d.ts +1 -1
  311. package/dist/lib/token-merge.generated.d.ts +6 -6
  312. package/dist/lib/utils.js +1 -1
  313. package/dist/{media-gallery-C-vChPmE.js → media-gallery-C81DAnKI.js} +6 -6
  314. package/dist/{media-gallery-C-vChPmE.js.map → media-gallery-C81DAnKI.js.map} +1 -1
  315. package/dist/{mentions-0_4nWuI-.js → mentions-qOnedSt4.js} +236 -167
  316. package/dist/mentions-qOnedSt4.js.map +1 -0
  317. package/dist/message-BJHnn43M.js +135 -0
  318. package/dist/message-BJHnn43M.js.map +1 -0
  319. package/dist/{metadata-list-C3MkU-Om.js → metadata-list-XkqZ_UXH.js} +11 -11
  320. package/dist/{metadata-list-C3MkU-Om.js.map → metadata-list-XkqZ_UXH.js.map} +1 -1
  321. package/dist/{navigation-DaRjthVk.js → navigation-BgtPJAhi.js} +119 -119
  322. package/dist/navigation-BgtPJAhi.js.map +1 -0
  323. package/dist/{navigation-C90-oQFq.js → navigation-Bt-v7rWP.js} +52 -46
  324. package/dist/navigation-Bt-v7rWP.js.map +1 -0
  325. package/dist/normalize-layout-path-BmEgg6fu.js +14 -0
  326. package/dist/normalize-layout-path-BmEgg6fu.js.map +1 -0
  327. package/dist/{number-CRU3kGuk.js → number-CYqBcrSj.js} +78 -86
  328. package/dist/number-CYqBcrSj.js.map +1 -0
  329. package/dist/{overflow-tab-bar-IVFVQFV6.js → overflow-tab-bar-BQCA2Zn2.js} +7 -7
  330. package/dist/{overflow-tab-bar-IVFVQFV6.js.map → overflow-tab-bar-BQCA2Zn2.js.map} +1 -1
  331. package/dist/{overlays-BSgCtM2v.js → overlays-CC8zI3Du.js} +264 -260
  332. package/dist/overlays-CC8zI3Du.js.map +1 -0
  333. package/dist/{page-DUUKDAjo.js → page-BoQ1VaFJ.js} +13 -13
  334. package/dist/{page-DUUKDAjo.js.map → page-BoQ1VaFJ.js.map} +1 -1
  335. package/dist/{page-header-commands-7P3sfE9u.js → page-header-commands-DIKspJfx.js} +4 -4
  336. package/dist/{page-header-commands-7P3sfE9u.js.map → page-header-commands-DIKspJfx.js.map} +1 -1
  337. package/dist/{pagination-CgCjElfu.js → pagination-Br8TdV9A.js} +4 -4
  338. package/dist/{pagination-CgCjElfu.js.map → pagination-Br8TdV9A.js.map} +1 -1
  339. package/dist/{popover-B85RenIl.js → popover-k8TdUcAt.js} +10 -10
  340. package/dist/popover-k8TdUcAt.js.map +1 -0
  341. package/dist/{popover-menu-DlnQ2zlR.js → popover-menu-yn-o0kyA.js} +7 -7
  342. package/dist/{popover-menu-DlnQ2zlR.js.map → popover-menu-yn-o0kyA.js.map} +1 -1
  343. package/dist/{popover.recipes-DdiEp0rd.js → popover.recipes-DJ0AkUan.js} +2 -2
  344. package/dist/{popover.recipes-DdiEp0rd.js.map → popover.recipes-DJ0AkUan.js.map} +1 -1
  345. package/dist/{portal-recipes-BpsV_iRw.js → portal-recipes-DyUXqUtD.js} +2 -2
  346. package/dist/{portal-recipes-BpsV_iRw.js.map → portal-recipes-DyUXqUtD.js.map} +1 -1
  347. package/dist/{primitives-ByWgGUgt.js → primitives-BkkQjYl7.js} +22 -17
  348. package/dist/primitives-BkkQjYl7.js.map +1 -0
  349. package/dist/primitives.js +4 -4
  350. package/dist/{progress-BJhQP9WX.js → progress-DZFXXzPs.js} +4 -4
  351. package/dist/{progress-BJhQP9WX.js.map → progress-DZFXXzPs.js.map} +1 -1
  352. package/dist/{receipt-tOc7B3hw.js → receipt-C7LhOg7Q.js} +6 -6
  353. package/dist/{receipt-tOc7B3hw.js.map → receipt-C7LhOg7Q.js.map} +1 -1
  354. package/dist/rich-text-BnTzZjIo.js +45 -0
  355. package/dist/rich-text-BnTzZjIo.js.map +1 -0
  356. package/dist/rich-text-editor-CAurDwT5.js +1273 -0
  357. package/dist/rich-text-editor-CAurDwT5.js.map +1 -0
  358. package/dist/{rich-text-editor-toolbar-laT3tpBT.js → rich-text-editor-toolbar-DbXig7Jk.js} +36 -35
  359. package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +1 -0
  360. package/dist/rich-text-tree-BqyQ_7-R.js +66 -0
  361. package/dist/rich-text-tree-BqyQ_7-R.js.map +1 -0
  362. package/dist/{sanitize-html-DsQmI48u.js → sanitize-html-BWkH4dLM.js} +29 -16
  363. package/dist/sanitize-html-BWkH4dLM.js.map +1 -0
  364. package/dist/{scroll-area-B0dB2cBi.js → scroll-area-Bj6CRUif.js} +2 -2
  365. package/dist/{scroll-area-B0dB2cBi.js.map → scroll-area-Bj6CRUif.js.map} +1 -1
  366. package/dist/{separator-Bb17I4pu.js → separator-B9ewiCGO.js} +2 -2
  367. package/dist/{separator-Bb17I4pu.js.map → separator-B9ewiCGO.js.map} +1 -1
  368. package/dist/{separator-Ct_WSWTJ.js → separator-DM6gs2vu.js} +3 -3
  369. package/dist/{separator-Ct_WSWTJ.js.map → separator-DM6gs2vu.js.map} +1 -1
  370. package/dist/services/actions.js +1 -1
  371. package/dist/settings-DZPHgpx4.js +155 -0
  372. package/dist/settings-DZPHgpx4.js.map +1 -0
  373. package/dist/{sheet-BGPERY55.js → sheet-C4DHsgLk.js} +6 -6
  374. package/dist/{sheet-BGPERY55.js.map → sheet-C4DHsgLk.js.map} +1 -1
  375. package/dist/sidebar-C8BnDwTH.js +709 -0
  376. package/dist/sidebar-C8BnDwTH.js.map +1 -0
  377. package/dist/{sidebar-f9gRWXIR.js → sidebar-CmD6a-HK.js} +16 -13
  378. package/dist/sidebar-CmD6a-HK.js.map +1 -0
  379. package/dist/{skeleton-BapcJd9C.js → skeleton-DDgdhmu9.js} +5 -5
  380. package/dist/{skeleton-BapcJd9C.js.map → skeleton-DDgdhmu9.js.map} +1 -1
  381. package/dist/{smart-card-CW0hjetE.js → smart-card-B6vLxqa_.js} +8 -8
  382. package/dist/{smart-card-CW0hjetE.js.map → smart-card-B6vLxqa_.js.map} +1 -1
  383. package/dist/{structure-DuxKl954.js → structure-DZJ2wbAU.js} +2 -2
  384. package/dist/{structure-DuxKl954.js.map → structure-DZJ2wbAU.js.map} +1 -1
  385. package/dist/style.css +1 -1
  386. package/dist/{surface-recipes-BKRVW8Os.js → surface-recipes-C8mNycaY.js} +2 -2
  387. package/dist/{surface-recipes-BKRVW8Os.js.map → surface-recipes-C8mNycaY.js.map} +1 -1
  388. package/dist/{table-CFOWY9pQ.js → table-CBonSdTp.js} +534 -486
  389. package/dist/table-CBonSdTp.js.map +1 -0
  390. package/dist/{table-B4TE7iOV.js → table-CXSPHH25.js} +75 -71
  391. package/dist/table-CXSPHH25.js.map +1 -0
  392. package/dist/{tabs-e7ko9S2o.js → tabs-C4Kr_hCr.js} +50 -49
  393. package/dist/tabs-C4Kr_hCr.js.map +1 -0
  394. package/dist/{text-inputs-B1culiSK.js → text-inputs-jdkS3ReG.js} +9 -9
  395. package/dist/{text-inputs-B1culiSK.js.map → text-inputs-jdkS3ReG.js.map} +1 -1
  396. package/dist/{timelines-D3Sl9ueq.js → timelines-CoPwdJP0.js} +10 -10
  397. package/dist/{timelines-D3Sl9ueq.js.map → timelines-CoPwdJP0.js.map} +1 -1
  398. package/dist/{tooltip-8wz5S_Zr.js → tooltip-31NwIpTo.js} +4 -4
  399. package/dist/{tooltip-8wz5S_Zr.js.map → tooltip-31NwIpTo.js.map} +1 -1
  400. package/dist/{tree-CzUJHnFs.js → tree-CeYVzdFE.js} +6 -6
  401. package/dist/{tree-CzUJHnFs.js.map → tree-CeYVzdFE.js.map} +1 -1
  402. package/dist/typography/rich-text.js +1 -1
  403. package/dist/{typography-BQnine1k.js → typography-C7-YMW1S.js} +2 -2
  404. package/dist/{typography-BQnine1k.js.map → typography-C7-YMW1S.js.map} +1 -1
  405. package/dist/typography.js +1 -1
  406. package/dist/{upload-BOW6U2tI.js → upload-Hdm5gObf.js} +303 -291
  407. package/dist/upload-Hdm5gObf.js.map +1 -0
  408. package/dist/{upload-queue-qUXn1ykN.js → upload-queue-D0sYPuqo.js} +8 -8
  409. package/dist/{upload-queue-qUXn1ykN.js.map → upload-queue-D0sYPuqo.js.map} +1 -1
  410. package/dist/{usage-card-BeSLY0i0.js → usage-card-9s8hLDfn.js} +9 -9
  411. package/dist/{usage-card-BeSLY0i0.js.map → usage-card-9s8hLDfn.js.map} +1 -1
  412. package/dist/{utils-B6kKb8jB.js → utils-DhuoqFy4.js} +31 -37
  413. package/dist/utils-DhuoqFy4.js.map +1 -0
  414. package/dist/{value-inputs-skdVB2zh.js → value-inputs-D3aPgq9H.js} +15 -15
  415. package/dist/{value-inputs-skdVB2zh.js.map → value-inputs-D3aPgq9H.js.map} +1 -1
  416. package/dist/{value-typography-uAmWUAL1.js → value-typography-uSzzG9Gf.js} +32 -26
  417. package/dist/value-typography-uSzzG9Gf.js.map +1 -0
  418. package/dist/{workspace-DHeHv0qw.js → workspace-CC8Vchiu.js} +12 -12
  419. package/dist/{workspace-DHeHv0qw.js.map → workspace-CC8Vchiu.js.map} +1 -1
  420. package/docs/consumer-skill/examples/edit.tsx +3 -3
  421. package/docs/consumer-skill/references/agents-md.md +19 -19
  422. package/docs/consumer-skill/references/analytics.md +15 -0
  423. package/docs/consumer-skill/references/component-contracts.json +14724 -13057
  424. package/docs/consumer-skill/references/composition.md +21 -4
  425. package/docs/consumer-skill/references/design-contract.md +1 -0
  426. package/docs/consumer-skill/references/installation.md +51 -8
  427. package/docs/consumer-skill/references/integration.md +24 -1
  428. package/docs/consumer-skill/references/public-api.json +172 -34
  429. package/docs/consumer-skill/references/review.md +51 -11
  430. package/docs/consumer-skill/references/rhf-workflows.md +72 -0
  431. package/docs/consumer-skill/references/theming.md +7 -2
  432. package/docs/consumer-skill/references/tokens.json +1 -1
  433. package/docs/consumer-skill/scripts/composition-policy.mjs +144 -30
  434. package/docs/consumer-skill/scripts/setup-skills.mjs +46 -9
  435. package/package.json +4 -2
  436. package/templates/admin-shell-template.tsx +1 -2
  437. package/templates/customers-template.tsx +18 -16
  438. package/dist/accordion-B9MHG0cT.js.map +0 -1
  439. package/dist/ai-artifact-C58tQcBy.js.map +0 -1
  440. package/dist/auth-DTkkshS8.js.map +0 -1
  441. package/dist/breadcrumbs-J-K2kl4c.js.map +0 -1
  442. package/dist/choice-inputs-zUgBZfE4.js.map +0 -1
  443. package/dist/combobox-BwzoXFSG.js +0 -884
  444. package/dist/combobox-BwzoXFSG.js.map +0 -1
  445. package/dist/comments-Dmpp0YIc.js.map +0 -1
  446. package/dist/data-display-BdgCAw8T.js.map +0 -1
  447. package/dist/date-picker-RlIzKom_.js +0 -1551
  448. package/dist/date-picker-RlIzKom_.js.map +0 -1
  449. package/dist/date-pickers-DY-CpXS1.js +0 -179
  450. package/dist/date-pickers-DY-CpXS1.js.map +0 -1
  451. package/dist/feedback-Dm4izqFn.js +0 -240
  452. package/dist/feedback-Dm4izqFn.js.map +0 -1
  453. package/dist/filters-DzgSJpMK.js.map +0 -1
  454. package/dist/form-field-BriWAXyg.js +0 -63
  455. package/dist/form-field-BriWAXyg.js.map +0 -1
  456. package/dist/forms-numeric-DIhghX1Q.js +0 -910
  457. package/dist/forms-numeric-DIhghX1Q.js.map +0 -1
  458. package/dist/header-DMMxG__r.js.map +0 -1
  459. package/dist/item-DjCcM18E.js.map +0 -1
  460. package/dist/layout.types-Cn7aUzJp.js +0 -20
  461. package/dist/layout.types-Cn7aUzJp.js.map +0 -1
  462. package/dist/mentions-0_4nWuI-.js.map +0 -1
  463. package/dist/message-g8p7eVtN.js +0 -128
  464. package/dist/message-g8p7eVtN.js.map +0 -1
  465. package/dist/navigation-C90-oQFq.js.map +0 -1
  466. package/dist/navigation-DaRjthVk.js.map +0 -1
  467. package/dist/number-CRU3kGuk.js.map +0 -1
  468. package/dist/overlays-BSgCtM2v.js.map +0 -1
  469. package/dist/popover-B85RenIl.js.map +0 -1
  470. package/dist/primitives-ByWgGUgt.js.map +0 -1
  471. package/dist/rich-text-Dth5E882.js +0 -78
  472. package/dist/rich-text-Dth5E882.js.map +0 -1
  473. package/dist/rich-text-editor-C1fOjBTd.js +0 -1195
  474. package/dist/rich-text-editor-C1fOjBTd.js.map +0 -1
  475. package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +0 -1
  476. package/dist/safe-image-src-C6kQSMBZ.js +0 -17
  477. package/dist/safe-image-src-C6kQSMBZ.js.map +0 -1
  478. package/dist/sanitize-html-DsQmI48u.js.map +0 -1
  479. package/dist/settings-Bar5wiSo.js +0 -167
  480. package/dist/settings-Bar5wiSo.js.map +0 -1
  481. package/dist/sidebar-D-JYMMbY.js +0 -686
  482. package/dist/sidebar-D-JYMMbY.js.map +0 -1
  483. package/dist/sidebar-f9gRWXIR.js.map +0 -1
  484. package/dist/table-B4TE7iOV.js.map +0 -1
  485. package/dist/table-CFOWY9pQ.js.map +0 -1
  486. package/dist/tabs-e7ko9S2o.js.map +0 -1
  487. package/dist/upload-BOW6U2tI.js.map +0 -1
  488. package/dist/utils-B6kKb8jB.js.map +0 -1
  489. package/dist/value-typography-uAmWUAL1.js.map +0 -1
@@ -1,1195 +0,0 @@
1
- "use client";
2
- import { interpolateString as e, useStrings as t } from "./lib/strings.js";
3
- import { t as n } from "./utils-B6kKb8jB.js";
4
- import { n as r } from "./buttons-BedGfygC.js";
5
- import { c as i } from "./typography-BQnine1k.js";
6
- import { t as a } from "./structure-DuxKl954.js";
7
- import { n as o } from "./safe-image-src-C6kQSMBZ.js";
8
- import { g as s } from "./primitives-ByWgGUgt.js";
9
- import { t as c } from "./number-CRU3kGuk.js";
10
- import { t as l } from "./input-CvyDQlY7.js";
11
- import { t as u } from "./form-field-BriWAXyg.js";
12
- import { n as d, t as ee } from "./rich-text-editor-toolbar-laT3tpBT.js";
13
- import { t as te } from "./rich-text-editor.strings-CB59ekH2.js";
14
- import { forwardRef as ne, useCallback as f, useEffect as p, useId as re, useImperativeHandle as ie, useMemo as m, useRef as h, useState as g } from "react";
15
- import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
16
- import { AlertCircle as ae, Bold as oe, ImagePlus as b, Italic as se, List as ce, ListOrdered as le, Loader2 as ue, Quote as de, Redo2 as fe, Strikethrough as pe, Undo2 as me } from "lucide-react";
17
- import { createPortal as he } from "react-dom";
18
- import * as x from "@tiptap/react";
19
- import * as S from "@tiptap/starter-kit";
20
- //#region src/components/features/rich-text-editor/partials/caret-helpers.ts
21
- function ge() {
22
- if (typeof window > "u") return null;
23
- let e = window.getSelection();
24
- if (!e || e.rangeCount === 0) return null;
25
- let t = e.getRangeAt(0);
26
- if (!t.collapsed) return null;
27
- let n = t.startContainer, r = t.startOffset, i = n;
28
- for (; i && i.nodeType !== Node.ELEMENT_NODE;) i = i.parentNode;
29
- if (!i) return null;
30
- let a = i.closest("[contenteditable=\"true\"]") ?? i.closest(".ProseMirror");
31
- if (!a) return null;
32
- let o = "";
33
- n.nodeType === Node.TEXT_NODE && (o = (n.textContent ?? "").slice(0, r));
34
- let s = n;
35
- for (; s && s !== a && s !== i;) {
36
- let e = s.previousSibling;
37
- for (; e;) o = (e.textContent ?? "") + o, e = e.previousSibling;
38
- if (s = s.parentNode, s && s.matches?.("p, li, h1, h2, h3, h4, h5, h6, blockquote")) break;
39
- }
40
- let c, l = t.getBoundingClientRect();
41
- return l && (l.top || l.left || l.right || l.bottom) && (c = {
42
- top: l.top,
43
- left: l.left,
44
- bottom: l.bottom,
45
- right: l.right
46
- }), {
47
- textBefore: o,
48
- rect: c
49
- };
50
- }
51
- function _e(e, t, n, r) {
52
- if (typeof window > "u") return;
53
- if (e) {
54
- let { selection: i } = e.state;
55
- if (!i.empty) return;
56
- let a = i.from - Math.min(t, i.$from.parentOffset);
57
- e.chain().focus().insertContentAt({
58
- from: a,
59
- to: i.from
60
- }, n).run(), r(e.getHTML());
61
- return;
62
- }
63
- let i = window.getSelection();
64
- if (!i || i.rangeCount === 0) return;
65
- let a = i.getRangeAt(0);
66
- if (!a.collapsed) return;
67
- let o = t, s = a.startContainer, c = a.startOffset;
68
- for (; o > 0;) {
69
- if (s.nodeType === Node.TEXT_NODE) {
70
- let e = Math.min(c, o);
71
- if (c -= e, o -= e, o === 0) break;
72
- }
73
- let e = C(s);
74
- if (!e) break;
75
- s = e, c = e.textContent?.length ?? 0;
76
- }
77
- let l = document.createRange();
78
- l.setStart(s, c), l.setEnd(a.endContainer, a.endOffset), i.removeAllRanges(), i.addRange(l), l.deleteContents();
79
- let u = document.createRange().createContextualFragment(n);
80
- l.insertNode(u), i.collapseToEnd();
81
- let d = s?.parentElement?.closest?.("[contenteditable=\"true\"]") ?? null;
82
- d && r(d.innerHTML);
83
- }
84
- function ve(e, t) {
85
- if (typeof window > "u" || !e) return;
86
- e.focus();
87
- let n = window.getSelection();
88
- if (!n || n.rangeCount === 0) {
89
- e.insertAdjacentHTML("beforeend", t);
90
- return;
91
- }
92
- let r = n.getRangeAt(0);
93
- if (!e.contains(r.commonAncestorContainer)) {
94
- e.insertAdjacentHTML("beforeend", t);
95
- return;
96
- }
97
- r.deleteContents();
98
- let i = document.createRange().createContextualFragment(t);
99
- r.insertNode(i), r.collapse(!1), n.removeAllRanges(), n.addRange(r);
100
- }
101
- function C(e) {
102
- let t = e;
103
- for (; t;) {
104
- if (t.previousSibling) {
105
- for (t = t.previousSibling; t && t.lastChild;) t = t.lastChild;
106
- if (t && t.nodeType === Node.TEXT_NODE) return t;
107
- continue;
108
- }
109
- if (t = t.parentNode, !t || t.matches?.("p, li, h1, h2, h3, h4, h5, h6, blockquote, [contenteditable=\"true\"]")) return null;
110
- }
111
- return null;
112
- }
113
- //#endregion
114
- //#region src/components/features/rich-text-editor/partials/counts-footer.tsx
115
- function w({ text: e, maxLength: t, strings: r, className: a }) {
116
- let o = e.length, l = e.trim().length > 0 ? e.trim().split(/\s+/).length : 0, u = typeof t == "number" && o > t;
117
- return /* @__PURE__ */ y("div", {
118
- className: n("counts-footer-text--component border-border flex items-center justify-end gap-space-lg border-t px-surface-xs py-space-sm", a),
119
- children: [/* @__PURE__ */ y(i, {
120
- tag: "span",
121
- size: "xs",
122
- type: u ? "error" : "secondary",
123
- weight: u ? "medium" : "regular",
124
- className: n("tabular-nums"),
125
- children: [
126
- /* @__PURE__ */ v(c, {
127
- value: o,
128
- size: "xs",
129
- type: u ? "error" : "secondary",
130
- align: "left"
131
- }),
132
- typeof t == "number" && /* @__PURE__ */ y(_, { children: [" / ", /* @__PURE__ */ v(c, {
133
- value: t,
134
- size: "xs",
135
- type: u ? "error" : "secondary",
136
- align: "left"
137
- })] }),
138
- " ",
139
- r.counts.characters
140
- ]
141
- }), /* @__PURE__ */ y(s, {
142
- size: "xs",
143
- className: "tabular-nums",
144
- children: [
145
- /* @__PURE__ */ v(c, {
146
- value: l,
147
- size: "xs",
148
- type: "secondary",
149
- align: "left"
150
- }),
151
- " ",
152
- r.counts.words
153
- ]
154
- })]
155
- });
156
- }
157
- w.displayName = "CountsFooterText";
158
- function T({ editor: e, sourceMode: t, sourceValue: n, maxLength: r, strings: i }) {
159
- let a = t ? n.replace(/<[^>]*>/g, "") : e?.getText() ?? "";
160
- return /* @__PURE__ */ v(w, {
161
- text: a,
162
- maxLength: r,
163
- strings: i
164
- });
165
- }
166
- T.displayName = "CountsFooter";
167
- //#endregion
168
- //#region src/components/features/rich-text-editor/partials/html-helpers.ts
169
- function E(e) {
170
- let t = e.trim();
171
- return t === "" || t === "<p></p>" || t === "<p><br></p>" ? "" : t;
172
- }
173
- function D(e) {
174
- let t = E(e);
175
- return t === "" ? "<p></p>" : t;
176
- }
177
- //#endregion
178
- //#region src/components/features/rich-text-editor/partials/inline-reference-node.ts
179
- var O = "rsc-mention inline-reference--chip", k = "inlineReference";
180
- function A(e) {
181
- return ({ editor: t }) => t.commands.command(({ tr: t, state: n }) => {
182
- let { selection: r } = n;
183
- if (!r.empty) return !1;
184
- let { $from: i } = r, a = e === "backward" ? i.nodeBefore : i.nodeAfter;
185
- if (a?.type.name !== k) return !1;
186
- let o = e === "backward" ? i.pos - a.nodeSize : i.pos;
187
- return t.delete(o, o + a.nodeSize), !0;
188
- });
189
- }
190
- var j = null;
191
- function M() {
192
- return j ??= x.Node.create({
193
- name: k,
194
- group: "inline",
195
- inline: !0,
196
- atom: !0,
197
- selectable: !0,
198
- draggable: !1,
199
- addAttributes() {
200
- return {
201
- id: {
202
- default: null,
203
- parseHTML: (e) => e.getAttribute("data-ref-id"),
204
- renderHTML: (e) => ({ "data-ref-id": e.id })
205
- },
206
- kind: {
207
- default: null,
208
- parseHTML: (e) => e.getAttribute("data-ref-kind"),
209
- renderHTML: (e) => e.kind ? { "data-ref-kind": e.kind } : {}
210
- },
211
- tone: {
212
- default: null,
213
- parseHTML: (e) => e.getAttribute("data-ref-tone"),
214
- renderHTML: (e) => e.tone ? { "data-ref-tone": e.tone } : {}
215
- },
216
- label: {
217
- default: "",
218
- parseHTML: (e) => e.textContent ?? "",
219
- renderHTML: () => ({})
220
- }
221
- };
222
- },
223
- parseHTML() {
224
- return [{ tag: "span[data-ref-id]" }];
225
- },
226
- renderHTML({ node: e, HTMLAttributes: t }) {
227
- return [
228
- "span",
229
- x.mergeAttributes({
230
- class: "rsc-mention",
231
- contenteditable: "false"
232
- }, t),
233
- e.attrs.label
234
- ];
235
- },
236
- renderText({ node: e }) {
237
- return e.attrs.label;
238
- },
239
- addNodeView() {
240
- return ({ node: e }) => {
241
- let t = document.createElement("span");
242
- return t.className = O, t.setAttribute("contenteditable", "false"), t.setAttribute("data-ref-id", String(e.attrs.id ?? "")), e.attrs.kind && t.setAttribute("data-ref-kind", String(e.attrs.kind)), e.attrs.tone && t.setAttribute("data-ref-tone", String(e.attrs.tone)), t.textContent = String(e.attrs.label ?? ""), { dom: t };
243
- };
244
- },
245
- addKeyboardShortcuts() {
246
- return {
247
- Backspace: A("backward"),
248
- Delete: A("forward")
249
- };
250
- }
251
- }), j;
252
- }
253
- var N = "data-rte-upload", ye = "rich-text-editor--upload my-space-xs flex min-h-control items-center rounded-radius border border-dashed border-input bg-muted/30 px-row-x py-row-y", P = RegExp(`<span[^>]*\\b${N}="[^"]*"[^>]*>[\\s\\S]*?</span>`, "g");
254
- function be(e) {
255
- return e.includes("data-rte-upload") ? e.replace(P, "") : e;
256
- }
257
- function F(e, t) {
258
- let n = e.type.toLowerCase(), r = e.name.toLowerCase();
259
- return t.split(",").map((e) => e.trim().toLowerCase()).filter(Boolean).some((e) => e.startsWith(".") ? r.endsWith(e) : e.endsWith("/*") ? n.startsWith(e.slice(0, -1)) : n === e);
260
- }
261
- function I(e) {
262
- return e.replace(/\.[^.]+$/, "").replace(/[-_]+/g, " ").trim();
263
- }
264
- function xe(e) {
265
- return Array.from(e?.files ?? []).filter((e) => e.type.startsWith("image/"));
266
- }
267
- var L = 0;
268
- function Se(t, n, r) {
269
- let [i, a] = g([]), [s, c] = g(null), l = h(/* @__PURE__ */ new Map());
270
- p(() => () => {
271
- for (let e of l.current.values()) e.controller?.abort();
272
- }, []);
273
- let u = f((e) => {
274
- l.current.get(e)?.controller?.abort(), l.current.delete(e), a((t) => t.filter((t) => t.id !== e));
275
- }, []), d = f(async (e) => {
276
- let r = l.current.get(e);
277
- if (!r || !t) return;
278
- r.controller?.abort();
279
- let i = new AbortController();
280
- r.controller = i;
281
- let s = {
282
- id: e,
283
- name: r.file.name,
284
- status: "uploading"
285
- };
286
- a((t) => t.some((t) => t.id === e) ? t.map((t) => t.id === e ? s : t) : [...t, s]);
287
- try {
288
- let a = await t.upload(r.file, { signal: i.signal });
289
- if (i.signal.aborted) return;
290
- let s = o(a?.src);
291
- if (!s) throw Error(`The uploaded image source for ${r.file.name} is not an allowed URL.`);
292
- let c = n.current?.findPlaceholder(e);
293
- u(e), c && n.current?.resolvePlaceholder(e, {
294
- src: s,
295
- alt: a.alt ?? I(r.file.name),
296
- width: a.width,
297
- height: a.height
298
- });
299
- } catch (n) {
300
- if (i.signal.aborted) return;
301
- t.onError?.(n, r.file), a((t) => t.map((t) => t.id === e ? {
302
- ...t,
303
- status: "error"
304
- } : t));
305
- }
306
- }, [
307
- n,
308
- u,
309
- t
310
- ]);
311
- return {
312
- uploads: i,
313
- notice: s,
314
- dismissNotice: () => c(null),
315
- addFiles: f((i) => {
316
- if (!t) return;
317
- let a = t.accept ?? "image/png,image/jpeg,image/gif,image/webp", o = [];
318
- for (let s of i) {
319
- let i = F(s, a) ? t.maxSize && s.size > t.maxSize ? r.tooLarge : null : r.unsupported;
320
- if (i) {
321
- let n = e(i, { name: s.name });
322
- o.push(n), t.onError?.(Error(n), s);
323
- continue;
324
- }
325
- L += 1;
326
- let c = `upload-${L}`;
327
- l.current.set(c, { file: s }), n.current?.insertPlaceholder(c), d(c);
328
- }
329
- c(o.length > 0 ? o.join(" ") : null);
330
- }, [
331
- n,
332
- t,
333
- d,
334
- r.tooLarge,
335
- r.unsupported
336
- ]),
337
- retry: f((e) => {
338
- d(e);
339
- }, [d]),
340
- remove: f((e) => {
341
- u(e), n.current?.removePlaceholder(e);
342
- }, [n, u]),
343
- prune: f(() => {
344
- for (let e of Array.from(l.current.keys())) n.current?.findPlaceholder(e) || u(e);
345
- }, [n, u])
346
- };
347
- }
348
- function R({ upload: t, strings: n, onRetry: o, onRemove: s }) {
349
- let c = t.status === "error";
350
- return /* @__PURE__ */ y(a, {
351
- direction: "horizontal",
352
- align: "center",
353
- gap: "sm",
354
- wrap: !0,
355
- className: "rich-text-editor--upload-status w-full min-w-0",
356
- "data-status": t.status,
357
- children: [
358
- c ? /* @__PURE__ */ v(ae, {
359
- className: "size-icon shrink-0 text-destructive",
360
- "aria-hidden": "true"
361
- }) : /* @__PURE__ */ v(ue, {
362
- className: "size-icon shrink-0 animate-spin text-muted-foreground motion-reduce:animate-none",
363
- "aria-hidden": "true"
364
- }),
365
- /* @__PURE__ */ v(i, {
366
- tag: "span",
367
- size: "xs",
368
- type: c ? "error" : "secondary",
369
- role: c ? "alert" : "status",
370
- className: "min-w-0 flex-1 basis-40 break-words",
371
- children: e(c ? n.failed : n.uploading, { name: t.name })
372
- }),
373
- c && /* @__PURE__ */ v(r, {
374
- type: "button",
375
- size: "sm",
376
- onClick: o,
377
- children: n.retry
378
- }),
379
- /* @__PURE__ */ v(r, {
380
- type: "button",
381
- size: "sm",
382
- buttonStyle: "ghost",
383
- onClick: s,
384
- children: c ? n.remove : n.cancel
385
- })
386
- ]
387
- });
388
- }
389
- function Ce({ queue: e, adapterRef: t, strings: n }) {
390
- return /* @__PURE__ */ v(_, { children: e.uploads.map((r) => {
391
- let i = t.current?.findPlaceholder(r.id);
392
- return i ? he(/* @__PURE__ */ v(R, {
393
- upload: r,
394
- strings: n,
395
- onRetry: () => e.retry(r.id),
396
- onRemove: () => e.remove(r.id)
397
- }), i, r.id) : null;
398
- }) });
399
- }
400
- function we(e, t, n, r) {
401
- let i = h(null), a = h(r);
402
- a.current = r;
403
- let o = !!e;
404
- return {
405
- item: m(() => o ? {
406
- id: "insert-image",
407
- icon: b,
408
- label: t.insert,
409
- toggle: !1,
410
- onClick: () => {
411
- a.current?.(), i.current?.click();
412
- }
413
- } : null, [o, t.insert]),
414
- input: e ? /* @__PURE__ */ v("input", {
415
- ref: i,
416
- type: "file",
417
- accept: e.accept ?? "image/png,image/jpeg,image/gif,image/webp",
418
- multiple: !0,
419
- hidden: !0,
420
- tabIndex: -1,
421
- "aria-hidden": "true",
422
- onChange: (e) => {
423
- let t = Array.from(e.target.files ?? []);
424
- e.target.value = "", t.length > 0 && n(t);
425
- }
426
- }) : null
427
- };
428
- }
429
- function Te({ alt: e, onAltChange: t, onRemove: n, notice: o, onDismissNotice: s, strings: c }) {
430
- let d = re();
431
- return e === null && !o ? null : /* @__PURE__ */ y(a, {
432
- gap: "sm",
433
- className: "rich-text-editor--image-details border-t border-border/60 px-surface-xs py-space-sm",
434
- children: [!!o && /* @__PURE__ */ y(a, {
435
- direction: "horizontal",
436
- align: "center",
437
- gap: "sm",
438
- children: [/* @__PURE__ */ v(i, {
439
- tag: "span",
440
- size: "xs",
441
- type: "error",
442
- role: "alert",
443
- className: "min-w-0 flex-1",
444
- children: o
445
- }), /* @__PURE__ */ v(r, {
446
- type: "button",
447
- size: "sm",
448
- buttonStyle: "ghost",
449
- onClick: s,
450
- children: c.remove
451
- })]
452
- }), e !== null && /* @__PURE__ */ v(u, {
453
- label: c.descriptionLabel,
454
- hint: c.descriptionHint,
455
- htmlFor: d,
456
- children: /* @__PURE__ */ v(_, { children: /* @__PURE__ */ y(a, {
457
- direction: "horizontal",
458
- align: "center",
459
- gap: "sm",
460
- wrap: !1,
461
- children: [/* @__PURE__ */ v(l, {
462
- id: d,
463
- value: e,
464
- className: "min-w-0 flex-1",
465
- onChange: (e) => t(e.target.value)
466
- }), /* @__PURE__ */ v(r, {
467
- type: "button",
468
- buttonStyle: "outline",
469
- onClick: n,
470
- children: c.removeImage
471
- })]
472
- }) })
473
- })]
474
- });
475
- }
476
- //#endregion
477
- //#region src/components/features/rich-text-editor/partials/image-nodes.ts
478
- function z(e) {
479
- let t = Number(e);
480
- return Number.isFinite(t) && t > 0 ? t : null;
481
- }
482
- var B = null, V = null;
483
- function H() {
484
- return B ??= x.Node.create({
485
- name: "image",
486
- group: "inline",
487
- inline: !0,
488
- atom: !0,
489
- selectable: !0,
490
- draggable: !0,
491
- addAttributes() {
492
- return {
493
- src: {
494
- default: null,
495
- parseHTML: (e) => o(e.getAttribute("src")) ?? null
496
- },
497
- alt: {
498
- default: "",
499
- parseHTML: (e) => e.getAttribute("alt") ?? ""
500
- },
501
- title: { default: null },
502
- width: {
503
- default: null,
504
- parseHTML: (e) => z(e.getAttribute("width"))
505
- },
506
- height: {
507
- default: null,
508
- parseHTML: (e) => z(e.getAttribute("height"))
509
- }
510
- };
511
- },
512
- parseHTML() {
513
- return [{
514
- tag: "img[src]",
515
- getAttrs: (e) => o(e.getAttribute("src")) ? null : !1
516
- }];
517
- },
518
- renderHTML({ HTMLAttributes: e }) {
519
- let t = o(e.src);
520
- return ["img", x.mergeAttributes(e, { src: t ?? null })];
521
- }
522
- }), B;
523
- }
524
- function U() {
525
- return V ??= x.Node.create({
526
- name: "imageUpload",
527
- group: "inline",
528
- inline: !0,
529
- atom: !0,
530
- selectable: !1,
531
- addAttributes() {
532
- return { id: { default: null } };
533
- },
534
- parseHTML() {
535
- return [];
536
- },
537
- renderHTML({ node: e }) {
538
- return ["span", { [N]: e.attrs.id }];
539
- },
540
- addNodeView() {
541
- return ({ node: e }) => {
542
- let t = document.createElement("span");
543
- return t.setAttribute(N, String(e.attrs.id)), t.setAttribute("contenteditable", "false"), t.className = ye, {
544
- dom: t,
545
- ignoreMutation: () => !0,
546
- stopEvent: () => !0
547
- };
548
- };
549
- }
550
- }), V;
551
- }
552
- //#endregion
553
- //#region src/components/features/rich-text-editor/partials/rich-text-editor-tiptap.tsx
554
- function W(e) {
555
- return E(be(e?.getHTML() ?? ""));
556
- }
557
- var G = x.EditorContent, K = x.useEditor, q = "default" in S ? S.default : S, J = ne(function({ value: e, onValueChange: r, placeholder: a, compact: o = !1, bodyHeight: s, minHeight: c, maxHeight: l, disabled: u = !1, showCounts: ne = !1, maxLength: re, extraToolbarItems: _, toolbarTrailing: ae, footerSlot: b, hideSourceToggle: ue = !1, autoFocus: he = !1, className: x, onCaretChange: S, strings: ve, images: C }, w) {
558
- let O = t(te, ve), k = !!C, A = h(null), j = h(null), [N, ye] = g(!1), [P, be] = g(!1), [F, I] = g(""), L = h(!1), R = h(E(e)), z = h(S);
559
- z.current = S;
560
- let B = K({
561
- extensions: m(() => [
562
- q,
563
- M(),
564
- ...k ? [H(), U()] : []
565
- ], [k]),
566
- content: D(e),
567
- editable: !u,
568
- immediatelyRender: !1,
569
- autofocus: he ? "end" : !1,
570
- onFocus: () => {
571
- L.current = !0, ye(!0);
572
- },
573
- onBlur: () => {
574
- L.current = !1, ye(!1);
575
- },
576
- onUpdate: ({ editor: e }) => {
577
- A.current?.prune();
578
- let t = W(e);
579
- L.current && (t !== R.current && (R.current = t, r(t)), z.current?.());
580
- },
581
- editorProps: {
582
- handlePaste: (e, t) => {
583
- let n = xe(t.clipboardData);
584
- return !A.current || !V.current || n.length === 0 ? !1 : (A.current.addFiles(n), !0);
585
- },
586
- handleDrop: (e, t, n, r) => {
587
- let i = xe(t.dataTransfer);
588
- if (r || !A.current || !V.current || i.length === 0) return !1;
589
- let a = e.posAtCoords({
590
- left: t.clientX,
591
- top: t.clientY
592
- });
593
- return a && j.current?.commands.setTextSelection(a.pos), A.current.addFiles(i), !0;
594
- },
595
- attributes: {
596
- role: "textbox",
597
- "aria-label": O.editorLabel,
598
- "aria-multiline": "true",
599
- class: d.editable
600
- }
601
- }
602
- }, [k]);
603
- p(() => {
604
- if (!B) return;
605
- let t = W(B), n = E(e);
606
- R.current = n, t !== n && B.commands.setContent(D(n), { emitUpdate: !1 });
607
- }, [B, e]), p(() => {
608
- B && B.setEditable(!u);
609
- }, [u, B]), p(() => {
610
- if (typeof document > "u") return;
611
- let e = () => {
612
- L.current && z.current?.();
613
- };
614
- return document.addEventListener("selectionchange", e), () => document.removeEventListener("selectionchange", e);
615
- }, []), ie(w, () => ({
616
- focus: () => {
617
- B?.chain().focus().run();
618
- },
619
- getHTML: () => W(B),
620
- setHTML: (e) => {
621
- let t = E(e);
622
- R.current = t, B?.commands.setContent(D(t), { emitUpdate: !1 }), r(t);
623
- },
624
- insertHTML: (e) => {
625
- B && B.chain().focus().insertContent(e).run();
626
- },
627
- isEmpty: () => W(B) === "",
628
- clear: () => {
629
- R.current = "", B?.commands.setContent("<p></p>", { emitUpdate: !1 }), r("");
630
- },
631
- getCaretContext: () => ge(),
632
- replaceBeforeCaret: (e, t) => {
633
- _e(B, e, t, (e) => {
634
- R.current = E(e), r(R.current);
635
- });
636
- }
637
- }), [B, r]), j.current = B ?? null;
638
- let V = h(C);
639
- V.current = C;
640
- let J = f(() => {
641
- if (!B) return;
642
- let e = W(B);
643
- e !== R.current && (R.current = e, r(e));
644
- }, [B, r]), Ee = f((e) => {
645
- let t = null;
646
- return B?.state.doc.descendants((n, r) => (!t && e(n) && (t = {
647
- pos: r,
648
- node: n
649
- }), !t)), t;
650
- }, [B]), Y = h(null);
651
- Y.current = B ? {
652
- insertPlaceholder: (e) => {
653
- B.chain().focus().insertContent({
654
- type: "imageUpload",
655
- attrs: { id: e }
656
- }).run();
657
- },
658
- findPlaceholder: (e) => B.view.dom.querySelector(`[data-rte-upload="${e}"]`),
659
- resolvePlaceholder: (e, t) => {
660
- let n = Ee((t) => t.type.name === "imageUpload" && t.attrs.id === e);
661
- if (!n) return;
662
- let r = B.schema.nodes.image.create({
663
- src: t.src,
664
- alt: t.alt ?? "",
665
- width: t.width ?? null,
666
- height: t.height ?? null
667
- });
668
- B.view.dispatch(B.state.tr.replaceWith(n.pos, n.pos + n.node.nodeSize, r)), J();
669
- },
670
- removePlaceholder: (e) => {
671
- let t = Ee((t) => t.type.name === "imageUpload" && t.attrs.id === e);
672
- t && (B.view.dispatch(B.state.tr.delete(t.pos, t.pos + t.node.nodeSize)), J());
673
- }
674
- } : null;
675
- let X = Se(C, Y, O.images);
676
- A.current = k ? X : null;
677
- let Z = we(C, O.images, X.addFiles), De = m(() => Z.item ? [Z.item, ..._ ?? []] : _, [_, Z.item]), [Q, $] = g(null);
678
- p(() => {
679
- if (!B || !k) return;
680
- let e = () => {
681
- let e = B.state.selection, t = null;
682
- if (e.node?.type.name === "image") t = {
683
- pos: e.from,
684
- alt: String(e.node.attrs.alt ?? "")
685
- };
686
- else if (e.empty) {
687
- let { nodeBefore: n, nodeAfter: r } = e.$from;
688
- n?.type.name === "image" ? t = {
689
- pos: e.from - n.nodeSize,
690
- alt: String(n.attrs.alt ?? "")
691
- } : r?.type.name === "image" && (t = {
692
- pos: e.from,
693
- alt: String(r.attrs.alt ?? "")
694
- });
695
- }
696
- $(t);
697
- };
698
- return B.on("selectionUpdate", e), B.on("update", e), () => {
699
- B.off("selectionUpdate", e), B.off("update", e);
700
- };
701
- }, [B, k]);
702
- let Oe = d.bodyMinHeight[s ?? (o ? "control" : "document")], ke = m(() => ({
703
- ...c ? { minHeight: c } : {},
704
- ...l ? {
705
- maxHeight: l,
706
- overflowY: "auto"
707
- } : {}
708
- }), [l, c]), Ae = f(() => {
709
- if (B) {
710
- if (P) {
711
- let e = D(F);
712
- B.commands.setContent(e, { emitUpdate: !1 });
713
- let t = E(F);
714
- R.current = t, r(t), be(!1);
715
- } else I(B.getHTML()), be(!0);
716
- }
717
- }, [
718
- B,
719
- r,
720
- P,
721
- F
722
- ]), je = f((e) => {
723
- let t = e.target.value;
724
- I(t);
725
- let n = E(t);
726
- R.current = n, r(n);
727
- }, [r]), Me = m(() => [
728
- {
729
- id: "bold",
730
- icon: oe,
731
- label: O.toolbar.bold,
732
- isActive: () => !!B?.isActive("bold"),
733
- toggle: !0,
734
- run: () => B?.chain().focus().toggleBold().run()
735
- },
736
- {
737
- id: "italic",
738
- icon: se,
739
- label: O.toolbar.italic,
740
- isActive: () => !!B?.isActive("italic"),
741
- toggle: !0,
742
- run: () => B?.chain().focus().toggleItalic().run()
743
- },
744
- {
745
- id: "strike",
746
- icon: pe,
747
- label: O.toolbar.strike,
748
- isActive: () => !!B?.isActive("strike"),
749
- toggle: !0,
750
- run: () => B?.chain().focus().toggleStrike().run()
751
- },
752
- {
753
- id: "bullet-list",
754
- icon: ce,
755
- label: O.toolbar.bulletList,
756
- isActive: () => !!B?.isActive("bulletList"),
757
- toggle: !0,
758
- run: () => B?.chain().focus().toggleBulletList().run()
759
- },
760
- {
761
- id: "ordered-list",
762
- icon: le,
763
- label: O.toolbar.orderedList,
764
- isActive: () => !!B?.isActive("orderedList"),
765
- toggle: !0,
766
- run: () => B?.chain().focus().toggleOrderedList().run()
767
- },
768
- {
769
- id: "blockquote",
770
- icon: de,
771
- label: O.toolbar.blockquote,
772
- isActive: () => !!B?.isActive("blockquote"),
773
- toggle: !0,
774
- run: () => B?.chain().focus().toggleBlockquote().run()
775
- },
776
- {
777
- id: "undo",
778
- icon: me,
779
- label: O.toolbar.undo,
780
- isActive: () => !1,
781
- run: () => B?.chain().focus().undo().run(),
782
- disabled: !B?.can().chain().focus().undo().run()
783
- },
784
- {
785
- id: "redo",
786
- icon: fe,
787
- label: O.toolbar.redo,
788
- isActive: () => !1,
789
- run: () => B?.chain().focus().redo().run(),
790
- disabled: !B?.can().chain().focus().redo().run()
791
- }
792
- ], [B, O]), Ne = ne && B ? /* @__PURE__ */ v(T, {
793
- editor: B,
794
- sourceMode: P,
795
- sourceValue: F,
796
- maxLength: re,
797
- strings: O
798
- }) : null, Pe = typeof a == "string" ? a : "", Fe = Pe.length > 0 && !N && B?.isEmpty ? /* @__PURE__ */ v(i, {
799
- tag: "span",
800
- size: "sm",
801
- type: "secondary",
802
- className: d.placeholder,
803
- children: Pe
804
- }) : null;
805
- return /* @__PURE__ */ y("div", {
806
- className: n(d.frame, u && d.disabled, x),
807
- children: [
808
- /* @__PURE__ */ v(ee, {
809
- buttons: Me,
810
- extraToolbarItems: De,
811
- hideSourceToggle: ue,
812
- sourceMode: P,
813
- toggleSourceMode: Ae,
814
- disabled: u,
815
- hasEditor: !!B,
816
- toolbarTrailing: ae,
817
- strings: O
818
- }),
819
- P ? /* @__PURE__ */ v("textarea", {
820
- "aria-label": O.sourceLabel,
821
- value: F,
822
- onChange: je,
823
- disabled: u,
824
- spellCheck: !1,
825
- className: n(d.source, Oe, u && "cursor-not-allowed"),
826
- style: ke
827
- }) : /* @__PURE__ */ y("div", {
828
- className: n("relative", Oe),
829
- style: ke,
830
- children: [Fe, /* @__PURE__ */ v(G, {
831
- editor: B,
832
- className: d.content
833
- })]
834
- }),
835
- k && /* @__PURE__ */ v(Te, {
836
- alt: Q ? Q.alt : null,
837
- onAltChange: (e) => {
838
- if (!B || !Q) return;
839
- let t = B.state.doc.nodeAt(Q.pos);
840
- t?.type.name === "image" && (B.view.dispatch(B.state.tr.setNodeMarkup(Q.pos, void 0, {
841
- ...t.attrs,
842
- alt: e
843
- })), $({
844
- ...Q,
845
- alt: e
846
- }), J());
847
- },
848
- onRemove: () => {
849
- if (!B || !Q) return;
850
- let e = B.state.doc.nodeAt(Q.pos);
851
- e?.type.name === "image" && (B.view.dispatch(B.state.tr.delete(Q.pos, Q.pos + e.nodeSize)), $(null), J(), B.commands.focus());
852
- },
853
- notice: X.notice,
854
- onDismissNotice: X.dismissNotice,
855
- strings: O.images
856
- }),
857
- !!b && /* @__PURE__ */ v("div", {
858
- className: n(d.regionX, "pb-space-md pt-space-xs"),
859
- children: b
860
- }),
861
- Ne,
862
- Z.input,
863
- k && /* @__PURE__ */ v(Ce, {
864
- queue: X,
865
- adapterRef: Y,
866
- strings: O.images
867
- })
868
- ]
869
- });
870
- });
871
- J.displayName = "TiptapRichTextEditor";
872
- var Ee = ((e) => typeof e == "function" || typeof e == "object" && !!e && "$$typeof" in e)(G) && typeof K == "function" && typeof q == "object" && !!q;
873
- //#endregion
874
- //#region src/components/features/rich-text-editor/partials/rich-text-editor-fallback.tsx
875
- function Y(e) {
876
- if (!e) return "";
877
- if (!e.querySelector("[data-rte-upload]")) return e.innerHTML;
878
- let t = e.cloneNode(!0);
879
- for (let e of Array.from(t.querySelectorAll(`[${N}]`))) e.remove();
880
- return t.innerHTML;
881
- }
882
- function X(e) {
883
- for (let t of Array.from(e.querySelectorAll("img"))) o(t.getAttribute("src")) || t.remove();
884
- }
885
- function Z(e) {
886
- let t = window.getSelection();
887
- if (!t || t.rangeCount === 0) return null;
888
- let n = t.getRangeAt(0);
889
- if (!e.contains(n.commonAncestorContainer)) return null;
890
- for (let t of Array.from(e.querySelectorAll("img"))) if (n.intersectsNode(t) && !n.collapsed) return t;
891
- if (!n.collapsed) return null;
892
- let { startContainer: r, startOffset: i } = n;
893
- return (r.nodeType === Node.TEXT_NODE ? [i === 0 ? r.previousSibling : null, i === (r.textContent?.length ?? 0) ? r.nextSibling : null] : [r.childNodes[i - 1] ?? null, r.childNodes[i] ?? null]).find((e) => e instanceof HTMLImageElement) ?? null;
894
- }
895
- function De(e, t) {
896
- let n = document, r = n.caretRangeFromPoint?.(e, t) ?? null;
897
- if (!r) {
898
- let i = n.caretPositionFromPoint?.(e, t);
899
- i && (r = document.createRange(), r.setStart(i.offsetNode, i.offset));
900
- }
901
- if (!r) return;
902
- r.collapse(!0);
903
- let i = window.getSelection();
904
- i?.removeAllRanges(), i?.addRange(r);
905
- }
906
- var Q = ne(function({ value: e, onValueChange: r, placeholder: a, compact: o = !1, bodyHeight: s, minHeight: c, maxHeight: l, disabled: u = !1, showCounts: ne = !1, maxLength: re, extraToolbarItems: _, toolbarTrailing: ae, footerSlot: b, hideSourceToggle: ue = !1, autoFocus: he = !1, className: x, onCaretChange: S, strings: C, images: T }, O) {
907
- let k = t(te, C), A = h(null), j = h(null), [M, P] = g(null), [be, F] = g(""), [I, L] = g(!1), [R, z] = g(!1), [B, V] = g(""), H = h(E(e)), U = h(S);
908
- U.current = S;
909
- let W = f((e) => {
910
- A.current = e, e && e.innerHTML === "" && (e.innerHTML = D(H.current));
911
- }, []);
912
- p(() => {
913
- let t = A.current;
914
- if (!t || I) return;
915
- let n = D(e);
916
- E(Y(t)) !== E(n) && (t.innerHTML = n), H.current = E(e);
917
- }, [I, e]), p(() => {
918
- he && A.current?.focus();
919
- }, [he]);
920
- let G = f(() => {
921
- let e = A.current, t = E(Y(e));
922
- H.current = t, r(t), U.current?.();
923
- }, [r]), K = h(null);
924
- K.current = {
925
- insertPlaceholder: (e) => {
926
- let t = A.current;
927
- if (!t) return;
928
- let n = j.current;
929
- if (n && t.contains(n.commonAncestorContainer) && !t.contains(document.activeElement)) {
930
- t.focus();
931
- let e = window.getSelection();
932
- e?.removeAllRanges(), e?.addRange(n);
933
- }
934
- ve(t, `<span ${N}="${e}" contenteditable="false" class="${ye}"></span>`);
935
- },
936
- findPlaceholder: (e) => A.current?.querySelector(`[data-rte-upload="${e}"]`) ?? null,
937
- resolvePlaceholder: (e, t) => {
938
- let n = A.current?.querySelector(`[${N}="${e}"]`);
939
- if (!n) return;
940
- let r = document.createElement("img");
941
- r.setAttribute("src", t.src), r.setAttribute("alt", t.alt ?? ""), t.width && r.setAttribute("width", String(t.width)), t.height && r.setAttribute("height", String(t.height)), n.replaceWith(r), G();
942
- },
943
- removePlaceholder: (e) => {
944
- A.current?.querySelector(`[${N}="${e}"]`)?.remove(), G();
945
- }
946
- };
947
- let q = Se(T, K, k.images), J = we(T, k.images, q.addFiles, () => {
948
- let e = window.getSelection(), t = e && e.rangeCount > 0 ? e.getRangeAt(0) : null;
949
- j.current = t && A.current?.contains(t.commonAncestorContainer) ? t.cloneRange() : null;
950
- }), Ee = m(() => J.item ? [J.item, ..._ ?? []] : _, [_, J.item]), Q = f(() => {
951
- let e = A.current;
952
- if (!T || !e) return;
953
- let t = window.getSelection();
954
- if (t && t.rangeCount > 0 && !e.contains(t.getRangeAt(0).commonAncestorContainer)) return;
955
- let n = Z(e);
956
- P(n), F(n?.getAttribute("alt") ?? "");
957
- }, [T]);
958
- p(() => {
959
- if (T && typeof document < "u") return document.addEventListener("selectionchange", Q), () => document.removeEventListener("selectionchange", Q);
960
- }, [T, Q]);
961
- let $ = f(() => {
962
- let e = A.current;
963
- T && e && (X(e), q.prune(), M && !M.isConnected && P(null)), G();
964
- }, [
965
- M,
966
- G,
967
- T,
968
- q
969
- ]);
970
- ie(O, () => ({
971
- focus: () => A.current?.focus(),
972
- getHTML: () => E(Y(A.current)),
973
- setHTML: (e) => {
974
- let t = E(e);
975
- H.current = t, A.current && (A.current.innerHTML = D(t)), r(t);
976
- },
977
- insertHTML: (e) => {
978
- ve(A.current, e), G();
979
- },
980
- isEmpty: () => E(Y(A.current)) === "",
981
- clear: () => {
982
- H.current = "", A.current && (A.current.innerHTML = "<p></p>"), r("");
983
- },
984
- getCaretContext: () => ge(),
985
- replaceBeforeCaret: (e, t) => {
986
- _e(null, e, t, () => G());
987
- }
988
- }), [G, r]);
989
- let Oe = d.bodyMinHeight[s ?? (o ? "control" : "document")], ke = m(() => ({
990
- ...c ? { minHeight: c } : {},
991
- ...l ? {
992
- maxHeight: l,
993
- overflowY: "auto"
994
- } : {}
995
- }), [l, c]), Ae = f(() => {
996
- if (R) {
997
- let e = E(B);
998
- H.current = e, A.current && (A.current.innerHTML = D(e)), r(e), z(!1);
999
- return;
1000
- }
1001
- V(A.current?.innerHTML ?? D(e)), z(!0);
1002
- }, [
1003
- r,
1004
- R,
1005
- B,
1006
- e
1007
- ]), je = f((e) => {
1008
- let t = e.target.value;
1009
- V(t);
1010
- let n = E(t);
1011
- H.current = n, r(n);
1012
- }, [r]), Me = typeof a == "string" ? a : "", Ne = E(H.current) === "" && q.uploads.length === 0, Pe = Me.length > 0 && !I && Ne ? /* @__PURE__ */ v(i, {
1013
- tag: "span",
1014
- size: "sm",
1015
- type: "secondary",
1016
- className: d.placeholder,
1017
- children: Me
1018
- }) : null, Fe = m(() => [
1019
- {
1020
- id: "bold",
1021
- toggle: !0,
1022
- icon: oe,
1023
- label: k.toolbar.bold,
1024
- isActive: () => !1,
1025
- run: () => void 0,
1026
- disabled: !0
1027
- },
1028
- {
1029
- id: "italic",
1030
- toggle: !0,
1031
- icon: se,
1032
- label: k.toolbar.italic,
1033
- isActive: () => !1,
1034
- run: () => void 0,
1035
- disabled: !0
1036
- },
1037
- {
1038
- id: "strike",
1039
- toggle: !0,
1040
- icon: pe,
1041
- label: k.toolbar.strike,
1042
- isActive: () => !1,
1043
- run: () => void 0,
1044
- disabled: !0
1045
- },
1046
- {
1047
- id: "bullet-list",
1048
- toggle: !0,
1049
- icon: ce,
1050
- label: k.toolbar.bulletList,
1051
- isActive: () => !1,
1052
- run: () => void 0,
1053
- disabled: !0
1054
- },
1055
- {
1056
- id: "ordered-list",
1057
- toggle: !0,
1058
- icon: le,
1059
- label: k.toolbar.orderedList,
1060
- isActive: () => !1,
1061
- run: () => void 0,
1062
- disabled: !0
1063
- },
1064
- {
1065
- id: "blockquote",
1066
- toggle: !0,
1067
- icon: de,
1068
- label: k.toolbar.blockquote,
1069
- isActive: () => !1,
1070
- run: () => void 0,
1071
- disabled: !0
1072
- },
1073
- {
1074
- id: "undo",
1075
- icon: me,
1076
- label: k.toolbar.undo,
1077
- isActive: () => !1,
1078
- run: () => void 0,
1079
- disabled: !0
1080
- },
1081
- {
1082
- id: "redo",
1083
- icon: fe,
1084
- label: k.toolbar.redo,
1085
- isActive: () => !1,
1086
- run: () => void 0,
1087
- disabled: !0
1088
- }
1089
- ], [k]), Ie = R ? B.replace(/<[^>]*>/g, "") : A.current?.innerText ?? E(e).replace(/<[^>]*>/g, ""), Le = ne ? /* @__PURE__ */ v(w, {
1090
- text: Ie,
1091
- maxLength: re,
1092
- strings: k
1093
- }) : null;
1094
- return /* @__PURE__ */ y("div", {
1095
- className: n(d.frame, u && d.disabled, x),
1096
- children: [
1097
- /* @__PURE__ */ v(ee, {
1098
- buttons: Fe,
1099
- extraToolbarItems: Ee,
1100
- hideSourceToggle: ue,
1101
- sourceMode: R,
1102
- toggleSourceMode: Ae,
1103
- disabled: u,
1104
- hasEditor: !0,
1105
- toolbarTrailing: ae,
1106
- strings: k
1107
- }),
1108
- R ? /* @__PURE__ */ v("textarea", {
1109
- "aria-label": k.sourceLabel,
1110
- value: B,
1111
- onChange: je,
1112
- disabled: u,
1113
- spellCheck: !1,
1114
- className: n(d.source, Oe, u && "cursor-not-allowed"),
1115
- style: ke
1116
- }) : /* @__PURE__ */ y("div", {
1117
- className: n("relative", Oe),
1118
- style: ke,
1119
- children: [Pe, /* @__PURE__ */ v("div", {
1120
- ref: W,
1121
- role: "textbox",
1122
- "aria-label": k.editorLabel,
1123
- "aria-multiline": "true",
1124
- contentEditable: !u,
1125
- suppressContentEditableWarning: !0,
1126
- onInput: $,
1127
- onKeyUp: () => U.current?.(),
1128
- onMouseUp: () => U.current?.(),
1129
- onClick: T ? (e) => {
1130
- if (!(e.target instanceof HTMLImageElement)) return;
1131
- let t = document.createRange();
1132
- t.selectNode(e.target);
1133
- let n = window.getSelection();
1134
- n?.removeAllRanges(), n?.addRange(t);
1135
- } : void 0,
1136
- onPaste: T ? (e) => {
1137
- let t = xe(e.clipboardData);
1138
- t.length !== 0 && (e.preventDefault(), q.addFiles(t));
1139
- } : void 0,
1140
- onDragOver: T ? (e) => {
1141
- Array.from(e.dataTransfer.types).includes("Files") && e.preventDefault();
1142
- } : void 0,
1143
- onDrop: T ? (e) => {
1144
- let t = xe(e.dataTransfer);
1145
- t.length !== 0 && (e.preventDefault(), A.current?.focus(), De(e.clientX, e.clientY), q.addFiles(t));
1146
- } : void 0,
1147
- onFocus: () => L(!0),
1148
- onBlur: () => L(!1),
1149
- className: n(d.editable, "h-full min-h-full", u && "cursor-not-allowed")
1150
- })]
1151
- }),
1152
- !!T && /* @__PURE__ */ v(Te, {
1153
- alt: M ? be : null,
1154
- onAltChange: (e) => {
1155
- F(e), M?.setAttribute("alt", e), G();
1156
- },
1157
- onRemove: () => {
1158
- M?.remove(), P(null), G(), A.current?.focus();
1159
- },
1160
- notice: q.notice,
1161
- onDismissNotice: q.dismissNotice,
1162
- strings: k.images
1163
- }),
1164
- !!b && /* @__PURE__ */ v("div", {
1165
- className: n(d.regionX, "pb-space-md pt-space-xs"),
1166
- children: b
1167
- }),
1168
- Le,
1169
- J.input,
1170
- /* @__PURE__ */ v(Ce, {
1171
- queue: q,
1172
- adapterRef: K,
1173
- strings: k.images
1174
- })
1175
- ]
1176
- });
1177
- });
1178
- Q.displayName = "FallbackRichTextEditor";
1179
- //#endregion
1180
- //#region src/components/features/rich-text-editor/rich-text-editor.tsx
1181
- var $ = ne(function(e, t) {
1182
- return Ee ? /* @__PURE__ */ v(J, {
1183
- ...e,
1184
- ref: t
1185
- }) : /* @__PURE__ */ v(Q, {
1186
- className: "rich-text-editor--component",
1187
- ...e,
1188
- ref: t
1189
- });
1190
- });
1191
- $.displayName = "RichTextEditor";
1192
- //#endregion
1193
- export { w as n, $ as t };
1194
-
1195
- //# sourceMappingURL=rich-text-editor-C1fOjBTd.js.map