admin-ui-starter-kit 0.4.2 → 0.4.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 (1064) hide show
  1. package/.agents/skills/admin-ui-consumer-migration/SKILL.md +10 -0
  2. package/.agents/skills/admin-ui-consumer-migration/references/actions-service.md +236 -0
  3. package/.agents/skills/component-library-rules/SKILL.md +7 -1
  4. package/.agents/skills/component-library-rules/references/base-wrapper.md +24 -4
  5. package/.agents/skills/component-library-rules/references/components/INDEX.json +4 -3
  6. package/.agents/skills/component-library-rules/references/components/INDEX.md +4 -3
  7. package/.agents/skills/component-library-rules/references/components/ui__inputs.md +117 -18
  8. package/.agents/skills/component-library-rules/references/components/ui__layout-primitives.md +71 -0
  9. package/.agents/skills/component-library-rules/references/components/ui__menus.md +125 -43
  10. package/.agents/skills/component-library-rules/references/components/ui__overlays.md +117 -42
  11. package/AGENTS.md +7 -4
  12. package/CHANGELOG.md +26 -1
  13. package/COMPONENT_SELECTION.md +10 -1
  14. package/INTEGRATION.md +47 -0
  15. package/README.md +62 -5
  16. package/dist/_shared/accordion-Df1XrCDv.cjs +2 -0
  17. package/dist/_shared/accordion-Df1XrCDv.cjs.map +1 -0
  18. package/dist/_shared/accordion-Rzi9wEl6.js +130 -0
  19. package/dist/_shared/accordion-Rzi9wEl6.js.map +1 -0
  20. package/dist/_shared/action-menu-CrOJ63Q9.js +96 -0
  21. package/dist/_shared/action-menu-CrOJ63Q9.js.map +1 -0
  22. package/dist/_shared/action-menu-D9OowHKx.cjs +2 -0
  23. package/dist/_shared/action-menu-D9OowHKx.cjs.map +1 -0
  24. package/dist/_shared/ai-artifact-D4EjKoq6.cjs +3 -0
  25. package/dist/_shared/ai-artifact-D4EjKoq6.cjs.map +1 -0
  26. package/dist/_shared/ai-artifact-nlOrSeqT.js +1099 -0
  27. package/dist/_shared/ai-artifact-nlOrSeqT.js.map +1 -0
  28. package/dist/_shared/auth-C5HawWvp.cjs +2 -0
  29. package/dist/_shared/auth-C5HawWvp.cjs.map +1 -0
  30. package/dist/_shared/auth-DnMEJXP9.js +643 -0
  31. package/dist/_shared/auth-DnMEJXP9.js.map +1 -0
  32. package/dist/_shared/badge-6WYAMJwA.js +108 -0
  33. package/dist/_shared/badge-6WYAMJwA.js.map +1 -0
  34. package/dist/_shared/badge-CBof1rbF.cjs +2 -0
  35. package/dist/_shared/badge-CBof1rbF.cjs.map +1 -0
  36. package/dist/_shared/button-BGKY8UY0.js +173 -0
  37. package/dist/_shared/button-BGKY8UY0.js.map +1 -0
  38. package/dist/_shared/button-BI347RlM.cjs +2 -0
  39. package/dist/_shared/button-BI347RlM.cjs.map +1 -0
  40. package/dist/_shared/button-DEFoa7-c.cjs +2 -0
  41. package/dist/_shared/button-DEFoa7-c.cjs.map +1 -0
  42. package/dist/_shared/button-DlqryxqA.js +46 -0
  43. package/dist/_shared/button-DlqryxqA.js.map +1 -0
  44. package/dist/_shared/buttons-PL-TGJ32.js +143 -0
  45. package/dist/_shared/buttons-PL-TGJ32.js.map +1 -0
  46. package/dist/_shared/buttons-kVvSD_oI.cjs +2 -0
  47. package/dist/_shared/buttons-kVvSD_oI.cjs.map +1 -0
  48. package/dist/_shared/combobox-B4KmDZK0.cjs +2 -0
  49. package/dist/_shared/combobox-B4KmDZK0.cjs.map +1 -0
  50. package/dist/_shared/combobox-YUGi3xSc.js +810 -0
  51. package/dist/_shared/combobox-YUGi3xSc.js.map +1 -0
  52. package/dist/_shared/comments-GzXdwpq4.js +952 -0
  53. package/dist/_shared/comments-GzXdwpq4.js.map +1 -0
  54. package/dist/_shared/comments-Zj_foV1V.cjs +2 -0
  55. package/dist/_shared/comments-Zj_foV1V.cjs.map +1 -0
  56. package/dist/_shared/date-picker-Dl91BM3D.js +1361 -0
  57. package/dist/_shared/date-picker-Dl91BM3D.js.map +1 -0
  58. package/dist/_shared/date-picker-zFOqtmAS.cjs +2 -0
  59. package/dist/_shared/date-picker-zFOqtmAS.cjs.map +1 -0
  60. package/dist/_shared/date-pickers-BBydcIjN.cjs +2 -0
  61. package/dist/_shared/date-pickers-BBydcIjN.cjs.map +1 -0
  62. package/dist/_shared/date-pickers-D2OsgV4V.js +330 -0
  63. package/dist/_shared/date-pickers-D2OsgV4V.js.map +1 -0
  64. package/dist/_shared/dialog-CCN4tjU9.js +101 -0
  65. package/dist/_shared/dialog-CCN4tjU9.js.map +1 -0
  66. package/dist/_shared/dialog-Dd0ENSrU.cjs +2 -0
  67. package/dist/_shared/dialog-Dd0ENSrU.cjs.map +1 -0
  68. package/dist/_shared/display-Dhy5ogxC.cjs +2 -0
  69. package/dist/_shared/display-Dhy5ogxC.cjs.map +1 -0
  70. package/dist/_shared/display-NBtWdAMl.js +1154 -0
  71. package/dist/_shared/display-NBtWdAMl.js.map +1 -0
  72. package/dist/_shared/forms-BweX9Lm8.cjs +2 -0
  73. package/dist/_shared/forms-BweX9Lm8.cjs.map +1 -0
  74. package/dist/_shared/forms-L1hyNKpZ.js +3430 -0
  75. package/dist/_shared/forms-L1hyNKpZ.js.map +1 -0
  76. package/dist/_shared/header-BSBPtGn4.cjs +2 -0
  77. package/dist/_shared/header-BSBPtGn4.cjs.map +1 -0
  78. package/dist/_shared/header-No6GSp4R.js +360 -0
  79. package/dist/_shared/header-No6GSp4R.js.map +1 -0
  80. package/dist/_shared/hooks-BkXvZ4py.js +118 -0
  81. package/dist/_shared/hooks-BkXvZ4py.js.map +1 -0
  82. package/dist/_shared/hooks-D3SbLBRk.cjs +2 -0
  83. package/dist/_shared/hooks-D3SbLBRk.cjs.map +1 -0
  84. package/dist/_shared/mentions-CA1Ka_Bv.cjs +2 -0
  85. package/dist/_shared/mentions-CA1Ka_Bv.cjs.map +1 -0
  86. package/dist/_shared/mentions-CdvvLGQG.js +506 -0
  87. package/dist/_shared/mentions-CdvvLGQG.js.map +1 -0
  88. package/dist/_shared/metadata-Ckcmar8d.js +235 -0
  89. package/dist/_shared/metadata-Ckcmar8d.js.map +1 -0
  90. package/dist/_shared/metadata-DamdYVZL.cjs +2 -0
  91. package/dist/_shared/metadata-DamdYVZL.cjs.map +1 -0
  92. package/dist/_shared/navigation-BemwPPC8.cjs +2 -0
  93. package/dist/_shared/navigation-BemwPPC8.cjs.map +1 -0
  94. package/dist/_shared/navigation-DY540HB0.js +419 -0
  95. package/dist/_shared/navigation-DY540HB0.js.map +1 -0
  96. package/dist/_shared/overlays-CJs_syAu.js +648 -0
  97. package/dist/_shared/overlays-CJs_syAu.js.map +1 -0
  98. package/dist/_shared/overlays-DWFEaAog.cjs +2 -0
  99. package/dist/_shared/overlays-DWFEaAog.cjs.map +1 -0
  100. package/dist/_shared/page-Cg_gNpyK.js +262 -0
  101. package/dist/_shared/page-Cg_gNpyK.js.map +1 -0
  102. package/dist/_shared/page-CpFWQuWU.cjs +2 -0
  103. package/dist/_shared/page-CpFWQuWU.cjs.map +1 -0
  104. package/dist/_shared/rich-text-editor-B2VqNi6j.js +620 -0
  105. package/dist/_shared/rich-text-editor-B2VqNi6j.js.map +1 -0
  106. package/dist/_shared/rich-text-editor-ChE-pI3N.cjs +2 -0
  107. package/dist/_shared/rich-text-editor-ChE-pI3N.cjs.map +1 -0
  108. package/dist/_shared/sheet-BOgUA4fC.cjs +2 -0
  109. package/dist/_shared/sheet-BOgUA4fC.cjs.map +1 -0
  110. package/dist/_shared/sheet-DWQuyRRz.js +100 -0
  111. package/dist/_shared/sheet-DWQuyRRz.js.map +1 -0
  112. package/dist/_shared/sidebar-BGpi9K_Q.js +389 -0
  113. package/dist/_shared/sidebar-BGpi9K_Q.js.map +1 -0
  114. package/dist/_shared/sidebar-BTFfxmNG.cjs +2 -0
  115. package/dist/_shared/sidebar-BTFfxmNG.cjs.map +1 -0
  116. package/dist/_shared/sidebar-CC3lcvNX.cjs +2 -0
  117. package/dist/_shared/sidebar-CC3lcvNX.cjs.map +1 -0
  118. package/dist/_shared/sidebar-wmztVpnO.js +538 -0
  119. package/dist/_shared/sidebar-wmztVpnO.js.map +1 -0
  120. package/dist/_shared/smart-card-B6m7tmt0.cjs +2 -0
  121. package/dist/_shared/smart-card-B6m7tmt0.cjs.map +1 -0
  122. package/dist/_shared/smart-card-thLb85Ih.js +361 -0
  123. package/dist/_shared/smart-card-thLb85Ih.js.map +1 -0
  124. package/dist/_shared/table-BItnJ8lG.cjs +2 -0
  125. package/dist/_shared/table-BItnJ8lG.cjs.map +1 -0
  126. package/dist/_shared/table-D3349b-v.js +1189 -0
  127. package/dist/_shared/table-D3349b-v.js.map +1 -0
  128. package/dist/_shared/workspace-BGVeTeJy.js +357 -0
  129. package/dist/_shared/workspace-BGVeTeJy.js.map +1 -0
  130. package/dist/_shared/workspace-CWyzTUmE.cjs +2 -0
  131. package/dist/_shared/workspace-CWyzTUmE.cjs.map +1 -0
  132. package/dist/components/base/accordion/index.cjs +1 -1
  133. package/dist/components/base/accordion/index.js +1 -1
  134. package/dist/components/base/badge/index.cjs +1 -1
  135. package/dist/components/base/badge/index.js +1 -1
  136. package/dist/components/base/buttons/index.cjs +1 -1
  137. package/dist/components/base/buttons/index.js +2 -2
  138. package/dist/components/base/cards/index.cjs +1 -1
  139. package/dist/components/base/cards/index.js +1 -1
  140. package/dist/components/base/carousel/index.cjs +1 -1
  141. package/dist/components/base/carousel/index.js +1 -1
  142. package/dist/components/base/combobox/index.cjs +1 -1
  143. package/dist/components/base/combobox/index.js +1 -1
  144. package/dist/components/base/date-pickers/index.cjs +1 -1
  145. package/dist/components/base/date-pickers/index.js +2 -2
  146. package/dist/components/base/display/alert.d.ts +1 -1
  147. package/dist/components/base/display/index.cjs +1 -1
  148. package/dist/components/base/display/index.js +6 -6
  149. package/dist/components/base/display/metadata/index.cjs +1 -1
  150. package/dist/components/base/display/metadata/index.js +1 -1
  151. package/dist/components/base/event-calendar/index.cjs +1 -1
  152. package/dist/components/base/event-calendar/index.js +41 -41
  153. package/dist/components/base/forms/index.cjs +1 -1
  154. package/dist/components/base/forms/index.js +1 -1
  155. package/dist/components/base/map/index.cjs +1 -1
  156. package/dist/components/base/map/index.js +31 -31
  157. package/dist/components/base/navigation/index.cjs +1 -1
  158. package/dist/components/base/navigation/index.js +2 -2
  159. package/dist/components/base/sheet/index.cjs +1 -1
  160. package/dist/components/base/sheet/index.js +1 -1
  161. package/dist/components/base/sidebar/index.cjs +1 -1
  162. package/dist/components/base/sidebar/index.js +2 -2
  163. package/dist/components/base/sidebar/sidebar.d.ts +5 -3
  164. package/dist/components/base/sidebar/sidebar.d.ts.map +1 -1
  165. package/dist/components/base/table/index.cjs +1 -1
  166. package/dist/components/base/table/index.js +1 -1
  167. package/dist/components/composed/admin/index.cjs +1 -1
  168. package/dist/components/composed/admin/index.js +47 -47
  169. package/dist/components/composed/ai/index.cjs +1 -1
  170. package/dist/components/composed/ai/index.js +105 -105
  171. package/dist/components/composed/analytics/index.cjs +1 -1
  172. package/dist/components/composed/analytics/index.js +89 -89
  173. package/dist/components/composed/cards/index.cjs +1 -1
  174. package/dist/components/composed/cards/index.js +116 -116
  175. package/dist/components/composed/commerce/index.cjs +1 -1
  176. package/dist/components/composed/commerce/index.js +127 -127
  177. package/dist/components/composed/dark-surfaces/index.cjs +1 -1
  178. package/dist/components/composed/dark-surfaces/index.js +37 -37
  179. package/dist/components/composed/data-display/index.cjs +1 -1
  180. package/dist/components/composed/data-display/index.js +3 -3
  181. package/dist/components/composed/navigation/index.cjs +1 -1
  182. package/dist/components/composed/navigation/index.js +55 -55
  183. package/dist/components/composed/onboarding/index.cjs +1 -1
  184. package/dist/components/composed/onboarding/index.js +1 -1
  185. package/dist/components/composed/timelines/index.cjs +1 -1
  186. package/dist/components/composed/timelines/index.js +2 -2
  187. package/dist/components/features/activities/index.cjs +1 -1
  188. package/dist/components/features/activities/index.js +56 -56
  189. package/dist/components/features/ai-chat/index.cjs +2 -2
  190. package/dist/components/features/ai-chat/index.js +53 -53
  191. package/dist/components/features/card/index.cjs +1 -1
  192. package/dist/components/features/card/index.js +21 -21
  193. package/dist/components/features/comments/index.cjs +1 -1
  194. package/dist/components/features/comments/index.js +2 -2
  195. package/dist/components/features/event-log/index.cjs +1 -1
  196. package/dist/components/features/event-log/index.js +3 -3
  197. package/dist/components/features/filters/index.cjs +1 -1
  198. package/dist/components/features/filters/index.js +143 -143
  199. package/dist/components/features/global-search/index.cjs +1 -1
  200. package/dist/components/features/global-search/index.js +57 -57
  201. package/dist/components/features/kanban/index.cjs +1 -1
  202. package/dist/components/features/kanban/index.js +14 -14
  203. package/dist/components/features/media-library/index.cjs +1 -1
  204. package/dist/components/features/media-library/index.js +178 -178
  205. package/dist/components/features/mentions/index.cjs +1 -1
  206. package/dist/components/features/mentions/index.js +1 -1
  207. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  208. package/dist/components/features/overlays/alert-dialog.d.ts.map +1 -1
  209. package/dist/components/features/overlays/drawer.d.ts +1 -1
  210. package/dist/components/features/overlays/drawer.d.ts.map +1 -1
  211. package/dist/components/features/overlays/index.cjs +1 -1
  212. package/dist/components/features/overlays/index.js +1 -1
  213. package/dist/components/features/overlays/overlays.types.d.ts +1 -0
  214. package/dist/components/features/overlays/overlays.types.d.ts.map +1 -1
  215. package/dist/components/features/products/index.cjs +1 -1
  216. package/dist/components/features/products/index.js +124 -124
  217. package/dist/components/features/rich-text-editor/index.cjs +1 -1
  218. package/dist/components/features/rich-text-editor/index.js +1 -1
  219. package/dist/components/features/schema-form/index.cjs +1 -1
  220. package/dist/components/features/schema-form/index.js +26 -26
  221. package/dist/components/features/suggestions/index.cjs +1 -1
  222. package/dist/components/features/suggestions/index.js +1 -1
  223. package/dist/components/layout/auth/index.cjs +1 -1
  224. package/dist/components/layout/auth/index.js +1 -1
  225. package/dist/components/layout/header/index.cjs +1 -1
  226. package/dist/components/layout/header/index.js +1 -1
  227. package/dist/components/layout/header/partials/header-search.d.ts.map +1 -1
  228. package/dist/components/layout/hooks/index.cjs +1 -1
  229. package/dist/components/layout/hooks/index.js +1 -1
  230. package/dist/components/layout/index.cjs +1 -1
  231. package/dist/components/layout/index.js +6 -6
  232. package/dist/components/layout/page/index.cjs +1 -1
  233. package/dist/components/layout/page/index.js +1 -1
  234. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts.map +1 -1
  235. package/dist/components/layout/sidebar/index.cjs +1 -1
  236. package/dist/components/layout/sidebar/index.js +2 -2
  237. package/dist/components/layout/workspace/index.cjs +1 -1
  238. package/dist/components/layout/workspace/index.js +1 -1
  239. package/dist/components/ui/alert-dialog.d.ts +19 -0
  240. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  241. package/dist/components/ui/alert.d.ts +1 -1
  242. package/dist/components/ui/aspect-ratio.d.ts +5 -0
  243. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  244. package/dist/components/ui/badge.d.ts +1 -1
  245. package/dist/components/ui/button.d.ts +1 -1
  246. package/dist/components/ui/carousel.d.ts +29 -0
  247. package/dist/components/ui/carousel.d.ts.map +1 -0
  248. package/dist/components/ui/direction.d.ts +2 -0
  249. package/dist/components/ui/direction.d.ts.map +1 -0
  250. package/dist/components/ui/drawer.d.ts +14 -0
  251. package/dist/components/ui/drawer.d.ts.map +1 -0
  252. package/dist/components/ui/field.d.ts +25 -0
  253. package/dist/components/ui/field.d.ts.map +1 -0
  254. package/dist/components/ui/input-otp.d.ts +12 -0
  255. package/dist/components/ui/input-otp.d.ts.map +1 -0
  256. package/dist/components/ui/kbd.d.ts +4 -0
  257. package/dist/components/ui/kbd.d.ts.map +1 -0
  258. package/dist/components/ui/label.d.ts +4 -0
  259. package/dist/components/ui/label.d.ts.map +1 -0
  260. package/dist/components/ui/menubar.d.ts +30 -0
  261. package/dist/components/ui/menubar.d.ts.map +1 -0
  262. package/dist/components/ui/native-select.d.ts +9 -0
  263. package/dist/components/ui/native-select.d.ts.map +1 -0
  264. package/dist/components/ui/navigation-menu.d.ts +12 -0
  265. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  266. package/dist/components/ui/resizable.d.ts +8 -0
  267. package/dist/components/ui/resizable.d.ts.map +1 -0
  268. package/dist/services/actions/action-overlay-outlet.d.ts +4 -0
  269. package/dist/services/actions/action-overlay-outlet.d.ts.map +1 -0
  270. package/dist/services/actions/action-provider.d.ts +8 -0
  271. package/dist/services/actions/action-provider.d.ts.map +1 -0
  272. package/dist/services/actions/action-scope.d.ts +4 -0
  273. package/dist/services/actions/action-scope.d.ts.map +1 -0
  274. package/dist/services/actions/action-store.d.ts +44 -0
  275. package/dist/services/actions/action-store.d.ts.map +1 -0
  276. package/dist/services/actions/actions.strings.d.ts +3 -0
  277. package/dist/services/actions/actions.strings.d.ts.map +1 -0
  278. package/dist/services/actions/actions.types.d.ts +248 -0
  279. package/dist/services/actions/actions.types.d.ts.map +1 -0
  280. package/dist/services/actions/hooks.d.ts +8 -0
  281. package/dist/services/actions/hooks.d.ts.map +1 -0
  282. package/dist/services/actions/index.cjs +2 -0
  283. package/dist/services/actions/index.cjs.map +1 -0
  284. package/dist/services/actions/index.d.ts +8 -0
  285. package/dist/services/actions/index.d.ts.map +1 -0
  286. package/dist/services/actions/index.js +562 -0
  287. package/dist/services/actions/index.js.map +1 -0
  288. package/dist/showcase/assets/AreaChart-BYEewdc_.js +6 -0
  289. package/dist/showcase/assets/CSPContext-B11tftuK.js +1 -0
  290. package/dist/showcase/assets/CompositeItem-Duekeg4m.js +1 -0
  291. package/dist/showcase/assets/CompositeRoot-BgNU3T7R.js +1 -0
  292. package/dist/showcase/assets/DialogTrigger-9xWmoeF5.js +1 -0
  293. package/dist/showcase/assets/FieldItemContext-BSFHjS7g.js +1 -0
  294. package/dist/showcase/assets/LabelableContext-B3W_70Qk.js +1 -0
  295. package/dist/showcase/assets/PreviewLayout-nADJqRlP.js +1 -0
  296. package/dist/showcase/assets/RadioGroup-Bp1VCzxr.js +1 -0
  297. package/dist/showcase/assets/Separator-9PWX3shz.js +1 -0
  298. package/dist/showcase/assets/ToolbarRootContext-DwELw9xS.js +1 -0
  299. package/dist/showcase/assets/accordion-CfqHO9_z.js +171 -0
  300. package/dist/showcase/assets/accordion-variants-pkPHxkLW.js +1 -0
  301. package/dist/showcase/assets/action-menu-DFzSuDjI.js +1 -0
  302. package/dist/showcase/assets/activities-Bo97b2-I.js +501 -0
  303. package/dist/showcase/assets/activities-feed-card-D77gf27B.js +1 -0
  304. package/dist/showcase/assets/activity-BUlCWLI8.js +1 -0
  305. package/dist/showcase/assets/admin-CxTV4kZX.js +80 -0
  306. package/dist/showcase/assets/ai-Bym5H8bn.js +41 -0
  307. package/dist/showcase/assets/ai-artifact-DZVl1WmK.js +2 -0
  308. package/dist/showcase/assets/ai-chat-M3X5-PgT.js +568 -0
  309. package/dist/showcase/assets/ai-elements-DjppcMBD.js +387 -0
  310. package/dist/showcase/assets/ai-new-CXnrIi5S.js +167 -0
  311. package/dist/showcase/assets/ai-tool-call-DyMI8DqD.js +1 -0
  312. package/dist/showcase/assets/alert-D6Pygy2s.js +62 -0
  313. package/dist/showcase/assets/alert-DCrWLbEx.js +93 -0
  314. package/dist/showcase/assets/alert-qTNM0vld.js +1 -0
  315. package/dist/showcase/assets/api-key-list-CCpuHYHc.js +73 -0
  316. package/dist/showcase/assets/app-sidebar-CxTRNC5L.js +1 -0
  317. package/dist/showcase/assets/arrow-down--phuskCV.js +1 -0
  318. package/dist/showcase/assets/arrow-left-B__WWqyA.js +1 -0
  319. package/dist/showcase/assets/arrow-right-1-EvXxjB.js +1 -0
  320. package/dist/showcase/assets/arrow-up-lWotnmo7.js +1 -0
  321. package/dist/showcase/assets/arrow-up-right-IyQ3oeq0.js +1 -0
  322. package/dist/showcase/assets/avatar-gugtNx4D.js +57 -0
  323. package/dist/showcase/assets/avatar-n1nywTlx.js +1 -0
  324. package/dist/showcase/assets/badge-TuE-u3Hv.js +28 -0
  325. package/dist/showcase/assets/badge-check-CPDvpVzK.js +1 -0
  326. package/dist/showcase/assets/bell-DeCVddCA.js +1 -0
  327. package/dist/showcase/assets/bot-B_vzJEJH.js +1 -0
  328. package/dist/showcase/assets/box-z4O8t_K5.js +1 -0
  329. package/dist/showcase/assets/brain-DdKBE4Bh.js +1 -0
  330. package/dist/showcase/assets/brand-CfW7mgTY.js +36 -0
  331. package/dist/showcase/assets/breadcrumb-B4TBbKv3.js +52 -0
  332. package/dist/showcase/assets/breadcrumb-bF_sFVBL.js +1 -0
  333. package/dist/showcase/assets/breadcrumbs-CBv3EaMX.js +1 -0
  334. package/dist/showcase/assets/briefcase-ClqzeNt3.js +1 -0
  335. package/dist/showcase/assets/building-2-BQuWgjZj.js +1 -0
  336. package/dist/showcase/assets/button-CWKNCI82.js +44 -0
  337. package/dist/showcase/assets/button-group-BYhxtFwV.js +1 -0
  338. package/dist/showcase/assets/buttons-mBRyBw3Q.js +270 -0
  339. package/dist/showcase/assets/calendar-BgloJjlW.js +1 -0
  340. package/dist/showcase/assets/calendar-CJDWspzi.js +1 -0
  341. package/dist/showcase/assets/calendar-CgML2kJt.js +16 -0
  342. package/dist/showcase/assets/calendar-days-C0gTLVnY.js +1 -0
  343. package/dist/showcase/assets/camera-nIlaz4Sn.js +1 -0
  344. package/dist/showcase/assets/card-1ncRnRvq.js +1 -0
  345. package/dist/showcase/assets/card-CcgWzFB-.js +188 -0
  346. package/dist/showcase/assets/card-primitives-By4-RTuP.js +1 -0
  347. package/dist/showcase/assets/card-radio-group-DeX3qsRg.js +1 -0
  348. package/dist/showcase/assets/cards-DdqQr8rY.js +328 -0
  349. package/dist/showcase/assets/carousel-CV8ltDl8.js +449 -0
  350. package/dist/showcase/assets/chart-BNzHjskC.js +358 -0
  351. package/dist/showcase/assets/chart-column-CpTxRLEH.js +1 -0
  352. package/dist/showcase/assets/checkbox-CZTTm4Dv.js +1 -0
  353. package/dist/showcase/assets/chevron-down-LWBNHe9S.js +1 -0
  354. package/dist/showcase/assets/chevron-left-BsshO7nf.js +1 -0
  355. package/dist/showcase/assets/chevron-right-t68um2_G.js +1 -0
  356. package/dist/showcase/assets/chevron-up-DjhlESJB.js +1 -0
  357. package/dist/showcase/assets/chevrons-up-down-ZUo0Do59.js +1 -0
  358. package/dist/showcase/assets/circle-BL52dLr9.js +1 -0
  359. package/dist/showcase/assets/circle-alert-CXCt6zxc.js +1 -0
  360. package/dist/showcase/assets/circle-check-CbiRRw7s.js +1 -0
  361. package/dist/showcase/assets/circle-check-big-BSgn7lyt.js +1 -0
  362. package/dist/showcase/assets/circle-dot-WEOpGGJf.js +1 -0
  363. package/dist/showcase/assets/circle-question-mark-C9hLlsD7.js +1 -0
  364. package/dist/showcase/assets/circle-x-BT9TJbJC.js +1 -0
  365. package/dist/showcase/assets/clock-3-CfRK8ckc.js +1 -0
  366. package/dist/showcase/assets/clock-D-3zf0c1.js +1 -0
  367. package/dist/showcase/assets/code-xml-CQYKKuBU.js +1 -0
  368. package/dist/showcase/assets/collapsible-BC0hQvat.js +27 -0
  369. package/dist/showcase/assets/collapsible-CRVtVDCF.js +1 -0
  370. package/dist/showcase/assets/combobox-D4VYvYCT.js +696 -0
  371. package/dist/showcase/assets/command-CxeHT4lL.js +1 -0
  372. package/dist/showcase/assets/command-Do_t_Zou.js +1 -0
  373. package/dist/showcase/assets/comment-composer-DoFwvVlq.js +1 -0
  374. package/dist/showcase/assets/comment-item-CT8UbVeg.js +1 -0
  375. package/dist/showcase/assets/comments-CqdXrjUn.js +357 -0
  376. package/dist/showcase/assets/commerce-B9V2Wo_q.js +79 -0
  377. package/dist/showcase/assets/commerce-extras-CNT3QmAT.js +189 -0
  378. package/dist/showcase/assets/composite-BXLXcagx.js +1 -0
  379. package/dist/showcase/assets/contact-card-BLcAXepj.js +65 -0
  380. package/dist/showcase/assets/content-container-DJVD3ZmI.js +1 -0
  381. package/dist/showcase/assets/copyable-od17NrMu.js +96 -0
  382. package/dist/showcase/assets/course-card-CdZQr5yy.js +77 -0
  383. package/dist/showcase/assets/cpu-B8kRNR1R.js +1 -0
  384. package/dist/showcase/assets/credit-card-BYMQj03s.js +1 -0
  385. package/dist/showcase/assets/currency-Cxv3Cp6B.js +149 -0
  386. package/dist/showcase/assets/dark-surfaces-Cfp58iFb.js +90 -0
  387. package/dist/showcase/assets/database-DuUABvxU.js +1 -0
  388. package/dist/showcase/assets/date-block-E9qfY7W7.js +1 -0
  389. package/dist/showcase/assets/date-picker-I8BdaiiU.js +1 -0
  390. package/dist/showcase/assets/date-pickers-BLJaqhcS.js +73 -0
  391. package/dist/showcase/assets/dense-info-Bk1K_7Ww.js +106 -0
  392. package/dist/showcase/assets/dialog-BuatDnQ9.js +1 -0
  393. package/dist/showcase/assets/dialog-DCx-LydW.js +1 -0
  394. package/dist/showcase/assets/display-Bt7busw5.js +403 -0
  395. package/dist/showcase/assets/dist-BPyBHOXU.js +45 -0
  396. package/dist/showcase/assets/dollar-sign-qXQSS6Gh.js +1 -0
  397. package/dist/showcase/assets/download-B2JAmHmJ.js +1 -0
  398. package/dist/showcase/assets/dropdown-menu-DXT3BZLa.js +1 -0
  399. package/dist/showcase/assets/dropzone-BKIxDJNy.js +1 -0
  400. package/dist/showcase/assets/earth-7-Z3Gv2v.js +1 -0
  401. package/dist/showcase/assets/ellipsis-6Krb3RRW.js +1 -0
  402. package/dist/showcase/assets/ellipsis-vertical-DeOMIw1J.js +1 -0
  403. package/dist/showcase/assets/empty-BSYKaeXQ.js +1 -0
  404. package/dist/showcase/assets/empty-item-YElgv25f.js +49 -0
  405. package/dist/showcase/assets/empty-state-D-LrvnKF.js +1 -0
  406. package/dist/showcase/assets/empty-state-dNh1GtVU.js +188 -0
  407. package/dist/showcase/assets/enhanced-activities-Bw99ItYl.js +361 -0
  408. package/dist/showcase/assets/enhanced-combobox-CqLZmU3K.js +1 -0
  409. package/dist/showcase/assets/event-calendar-CcSi7g5A.js +138 -0
  410. package/dist/showcase/assets/event-log-2uq-eYxh.js +330 -0
  411. package/dist/showcase/assets/example-CTJ8AdNR.js +1 -0
  412. package/dist/showcase/assets/external-link-D0gqSa1q.js +1 -0
  413. package/dist/showcase/assets/eye-CDMCDLei.js +1 -0
  414. package/dist/showcase/assets/feature-announcement-BlyNck35.js +34 -0
  415. package/dist/showcase/assets/file-Y5EbzufX.js +1 -0
  416. package/dist/showcase/assets/file-text-DH1mBuPi.js +1 -0
  417. package/dist/showcase/assets/filters-BtHF4GSM.js +78 -0
  418. package/dist/showcase/assets/flag-CJ08LwLY.js +1 -0
  419. package/dist/showcase/assets/folder-open-DODo2pjy.js +1 -0
  420. package/dist/showcase/assets/form-field-CHY7jh1q.js +1 -0
  421. package/dist/showcase/assets/format-DYJqAuDM.js +1 -0
  422. package/dist/showcase/assets/forms-DgvQQXHO.js +862 -0
  423. package/dist/showcase/assets/frame-CdKicP4A.js +167 -0
  424. package/dist/showcase/assets/getPseudoElementBounds-D9-Hr3mO.js +1 -0
  425. package/dist/showcase/assets/gift-DD8O7cld.js +1 -0
  426. package/dist/showcase/assets/giftcard-cards-Dp9eYodY.js +85 -0
  427. package/dist/showcase/assets/git-branch-DZq1Vo2G.js +1 -0
  428. package/dist/showcase/assets/global-search-BqDotXql.js +215 -0
  429. package/dist/showcase/assets/global-search-PH6LXqZw.js +1 -0
  430. package/dist/showcase/assets/globe-mRTwrUxM.js +1 -0
  431. package/dist/showcase/assets/gradient-card-CaL88YKv.js +58 -0
  432. package/dist/showcase/assets/hash-DuqvHQHv.js +1 -0
  433. package/dist/showcase/assets/header-CiNgDop3.js +1 -0
  434. package/dist/showcase/assets/header-notifications-B9XMBsK_.js +1 -0
  435. package/dist/showcase/assets/heart-DsGJfnDx.js +1 -0
  436. package/dist/showcase/assets/house-B504aFIP.js +1 -0
  437. package/dist/showcase/assets/icon-badge-DMNu8xb5.js +1 -0
  438. package/dist/showcase/assets/image-C3DaMxmn.js +1 -0
  439. package/dist/showcase/assets/inbox-BWKQMLMx.js +1 -0
  440. package/dist/showcase/assets/index-DN3tqopz.css +2 -0
  441. package/dist/showcase/assets/index-DaYVSqKu.js +10 -0
  442. package/dist/showcase/assets/inertValue-DrtTkMGx.js +1 -0
  443. package/dist/showcase/assets/info-_FrGoCay.js +1 -0
  444. package/dist/showcase/assets/inline-stat-BYu-tiUU.js +1 -0
  445. package/dist/showcase/assets/input-C96HMHWR.js +1 -0
  446. package/dist/showcase/assets/input-fMPi7XxI.js +1 -0
  447. package/dist/showcase/assets/input-group-BZnSgFCn.js +47 -0
  448. package/dist/showcase/assets/input-group-CVONNP3T.js +1 -0
  449. package/dist/showcase/assets/inputs-Blh0LJ8-.js +155 -0
  450. package/dist/showcase/assets/invoice-header-Bpo4iwX3.js +36 -0
  451. package/dist/showcase/assets/invoice-items-OVIrbG0k.js +36 -0
  452. package/dist/showcase/assets/invoice-mini-CaOMTiUO.js +14 -0
  453. package/dist/showcase/assets/invoice-table-BXd_HhUg.js +30 -0
  454. package/dist/showcase/assets/isSameDay-NBVO9AKF.js +1 -0
  455. package/dist/showcase/assets/isToday-Bk5HMXWn.js +1 -0
  456. package/dist/showcase/assets/italic-BOv5bW4H.js +1 -0
  457. package/dist/showcase/assets/item-B4rdcVVp.js +134 -0
  458. package/dist/showcase/assets/item-BVt0zZ12.js +1 -0
  459. package/dist/showcase/assets/item-C4Xk3DC1.js +1 -0
  460. package/dist/showcase/assets/kanban-BXbelelR.js +186 -0
  461. package/dist/showcase/assets/label-Cv6wotdv.js +1 -0
  462. package/dist/showcase/assets/languages-BofyvcCF.js +1 -0
  463. package/dist/showcase/assets/layers-DJK0t5px.js +1 -0
  464. package/dist/showcase/assets/layout-app-shell-D_yMonSl.js +608 -0
  465. package/dist/showcase/assets/layout-auth-BTvSTwUz.js +754 -0
  466. package/dist/showcase/assets/layout-containers-PMuo__2O.js +101 -0
  467. package/dist/showcase/assets/layout-header-DQ3zeCHz.js +170 -0
  468. package/dist/showcase/assets/layout-page-CbvWdHrK.js +122 -0
  469. package/dist/showcase/assets/layout-primitives-6nsFFIdE.js +34 -0
  470. package/dist/showcase/assets/layout-sidebar-CKqeVCSY.js +224 -0
  471. package/dist/showcase/assets/layout-users-Cypq-42s.js +117 -0
  472. package/dist/showcase/assets/layout-workspace-DiRR8vDv.js +183 -0
  473. package/dist/showcase/assets/lock-DXmvLEEx.js +1 -0
  474. package/dist/showcase/assets/lock-keyhole-Cu6M-jjE.js +1 -0
  475. package/dist/showcase/assets/mail-CXVFHkzh.js +1 -0
  476. package/dist/showcase/assets/mail-check-BNEu3j2a.js +1 -0
  477. package/dist/showcase/assets/map-DnE1pFCQ.js +124 -0
  478. package/dist/showcase/assets/map-pin-CpOVa8IH.js +1 -0
  479. package/dist/showcase/assets/media-library-C-KfEvm4.js +695 -0
  480. package/dist/showcase/assets/mention-inline-suggestions-DlmslsfR.js +1 -0
  481. package/dist/showcase/assets/mentions-C8ZdNFuC.js +138 -0
  482. package/dist/showcase/assets/menus-B8yUL75K.js +165 -0
  483. package/dist/showcase/assets/message-square-DNOTaOFs.js +1 -0
  484. package/dist/showcase/assets/metadata-list-BQAanxM-.js +1 -0
  485. package/dist/showcase/assets/metadata-list-DL9qgDAp.js +288 -0
  486. package/dist/showcase/assets/metric-CYi09Ltx.js +1 -0
  487. package/dist/showcase/assets/metric-bar-CQH1z8T3.js +1 -0
  488. package/dist/showcase/assets/metric-grid-H1ixqMCI.js +1 -0
  489. package/dist/showcase/assets/metric-trend-chip-BBzWzFZ-.js +1 -0
  490. package/dist/showcase/assets/metrics-analytics-bar-C7Z2ITl4.js +44 -0
  491. package/dist/showcase/assets/metrics-analytics-cards-CZZSWiMn.js +50 -0
  492. package/dist/showcase/assets/metrics-comparison-BPqz8k30.js +76 -0
  493. package/dist/showcase/assets/metrics-heatmap-C3NYZAfx.js +27 -0
  494. package/dist/showcase/assets/metrics-inline-badge-RjHfm7um.js +17 -0
  495. package/dist/showcase/assets/metrics-kpi-row-DnBjyDH4.js +31 -0
  496. package/dist/showcase/assets/metrics-micro-grid-CKn405qb.js +42 -0
  497. package/dist/showcase/assets/metrics-overview-D8YGtdrh.js +192 -0
  498. package/dist/showcase/assets/metrics-stat-cards-Dxh6cAha.js +54 -0
  499. package/dist/showcase/assets/minus-20OTSSxf.js +1 -0
  500. package/dist/showcase/assets/money-display-BoiAMxH8.js +1 -0
  501. package/dist/showcase/assets/month-year-picker-Bl59Ygq9.js +1 -0
  502. package/dist/showcase/assets/navigation-B8d2CDU6.js +90 -0
  503. package/dist/showcase/assets/navigation-D16JX3kL.js +230 -0
  504. package/dist/showcase/assets/navigation-extras-Dm83uT6i.js +43 -0
  505. package/dist/showcase/assets/onboarding-checklist-DznDpP9M.js +119 -0
  506. package/dist/showcase/assets/overlays-CzlSqbFz.js +408 -0
  507. package/dist/showcase/assets/overlays-DUFqbkb9.js +159 -0
  508. package/dist/showcase/assets/package-BCXIwEPz.js +1 -0
  509. package/dist/showcase/assets/package-check-Ol-Cw3j-.js +1 -0
  510. package/dist/showcase/assets/page-action-button-DpzdSYvw.js +1 -0
  511. package/dist/showcase/assets/page-header-B_b7SqW8.js +1 -0
  512. package/dist/showcase/assets/pagination-BPDQo9Dl.js +1 -0
  513. package/dist/showcase/assets/pagination-PvkEX0qs.js +42 -0
  514. package/dist/showcase/assets/paperclip-CznEsmLN.js +1 -0
  515. package/dist/showcase/assets/password-input-CWMY5q3b.js +1 -0
  516. package/dist/showcase/assets/pencil-Cl9qi90g.js +1 -0
  517. package/dist/showcase/assets/phone-DbvK_QQJ.js +1 -0
  518. package/dist/showcase/assets/plus-CO8t66Yo.js +1 -0
  519. package/dist/showcase/assets/popover-3QIVx9lU.js +1 -0
  520. package/dist/showcase/assets/popover-Cyg9oYIU.js +1 -0
  521. package/dist/showcase/assets/popover-menu-DJPHeIL1.js +1 -0
  522. package/dist/showcase/assets/products-WsU-qdMz.js +407 -0
  523. package/dist/showcase/assets/progress-C61sf-qt.js +1 -0
  524. package/dist/showcase/assets/progress-PvTl8Fgf.js +18 -0
  525. package/dist/showcase/assets/props-table-C8la6vcG.js +1 -0
  526. package/dist/showcase/assets/props.generated-vFrhDrth.json +38618 -0
  527. package/dist/showcase/assets/quote-N1_lRDnX.js +1 -0
  528. package/dist/showcase/assets/receipt-C6a_WyLu.js +1 -0
  529. package/dist/showcase/assets/receipt-text-CDOh8FAv.js +1 -0
  530. package/dist/showcase/assets/refresh-cw-D4-ECZ1x.js +1 -0
  531. package/dist/showcase/assets/resolveAriaLabelledBy-iFo8AzEr.js +1 -0
  532. package/dist/showcase/assets/resolveValueLabel-DqAP3zJd.js +1 -0
  533. package/dist/showcase/assets/rich-text-editor-CU0IZpwV.js +143 -0
  534. package/dist/showcase/assets/rich-text-editor-DCU7mMoO.js +124 -0
  535. package/dist/showcase/assets/rotate-ccw-Dd5zEmr7.js +1 -0
  536. package/dist/showcase/assets/save-DDmFSQli.js +1 -0
  537. package/dist/showcase/assets/schema-form-B7naqMvv.js +325 -0
  538. package/dist/showcase/assets/scroll-area-CdaYm4UK.js +32 -0
  539. package/dist/showcase/assets/scroll-area-DwWSHYHB.js +1 -0
  540. package/dist/showcase/assets/select-CNzpb5ug.js +1 -0
  541. package/dist/showcase/assets/select-DBXZ_Wzf.js +1 -0
  542. package/dist/showcase/assets/send-eDm7YMmA.js +1 -0
  543. package/dist/showcase/assets/separator-4IC9ED7s.js +1 -0
  544. package/dist/showcase/assets/separator-DPGDsZpG.js +28 -0
  545. package/dist/showcase/assets/settings-IANZGo2i.js +1 -0
  546. package/dist/showcase/assets/sheet-2oCce5ae.js +1 -0
  547. package/dist/showcase/assets/shield-CDZhhvFW.js +1 -0
  548. package/dist/showcase/assets/shield-alert-5hL3sdf3.js +1 -0
  549. package/dist/showcase/assets/shield-check-CaO2dhVS.js +1 -0
  550. package/dist/showcase/assets/shopping-bag-Bt3iK-Bv.js +1 -0
  551. package/dist/showcase/assets/sidebar-Cds60-PS.js +1 -0
  552. package/dist/showcase/assets/sidebar.context-CdH_DH9M.js +1 -0
  553. package/dist/showcase/assets/skeleton-2HajJKO4.js +29 -0
  554. package/dist/showcase/assets/skeleton-CGEJwPdD.js +1 -0
  555. package/dist/showcase/assets/slider-BjQViBR0.js +1 -0
  556. package/dist/showcase/assets/sliders-horizontal-C3JH5WQu.js +1 -0
  557. package/dist/showcase/assets/smart-card-CHouYi8U.js +1 -0
  558. package/dist/showcase/assets/sonner-Cog559j7.js +22 -0
  559. package/dist/showcase/assets/sortable.esm-hUEKsxpQ.js +5 -0
  560. package/dist/showcase/assets/sparkles-B18eTHVN.js +1 -0
  561. package/dist/showcase/assets/spinner-BSI97i4D.js +1 -0
  562. package/dist/showcase/assets/spinner-D0WhVyye.js +30 -0
  563. package/dist/showcase/assets/spinner-DQmJ7k9y.js +49 -0
  564. package/dist/showcase/assets/square-pen-CLyDWdhj.js +1 -0
  565. package/dist/showcase/assets/stacked-avatars-ECnU27uV.js +1 -0
  566. package/dist/showcase/assets/star-C3mhkpSK.js +1 -0
  567. package/dist/showcase/assets/startOfDay-ECIxhJGC.js +1 -0
  568. package/dist/showcase/assets/stringifyLocale-CkHjdQTJ.js +1 -0
  569. package/dist/showcase/assets/styles-CDD7mDye.js +1 -0
  570. package/dist/showcase/assets/suggestions-DOW6NBJp.js +126 -0
  571. package/dist/showcase/assets/switch-D59YKmf6.js +1 -0
  572. package/dist/showcase/assets/switch-NICmdoPn.js +1 -0
  573. package/dist/showcase/assets/sync-B8nBZXQ9.js +107 -0
  574. package/dist/showcase/assets/table-CckompuR.js +382 -0
  575. package/dist/showcase/assets/table-DtA4-Q0p.js +1 -0
  576. package/dist/showcase/assets/table-actions-DdoPJTMy.js +1 -0
  577. package/dist/showcase/assets/tabs-BrC_HxL_.js +1 -0
  578. package/dist/showcase/assets/tabs-UVxr80vY.js +19 -0
  579. package/dist/showcase/assets/tags-input-iDfvhzZD.js +1 -0
  580. package/dist/showcase/assets/text-button-DHFCLCoc.js +1 -0
  581. package/dist/showcase/assets/text-link-nCLLDcS_.js +1 -0
  582. package/dist/showcase/assets/textarea-DsSuQHQY.js +1 -0
  583. package/dist/showcase/assets/textarea-DyGI3Kcn.js +1 -0
  584. package/dist/showcase/assets/timelines-JmMcH657.js +200 -0
  585. package/dist/showcase/assets/toggle-group-BZKzMmC8.js +1 -0
  586. package/dist/showcase/assets/toggles-BSJvy4Tw.js +71 -0
  587. package/dist/showcase/assets/toggles-group-Bsc6eaWw.js +32 -0
  588. package/dist/showcase/assets/trash-2-C9AC7Pcv.js +1 -0
  589. package/dist/showcase/assets/trending-up-CGaDZj0S.js +1 -0
  590. package/dist/showcase/assets/truck-Dq6heokm.js +1 -0
  591. package/dist/showcase/assets/typography-ByvwR6Kg.js +223 -0
  592. package/dist/showcase/assets/ui-badge-BYgJSE_w.js +28 -0
  593. package/dist/showcase/assets/ui-card-BdueUfow.js +30 -0
  594. package/dist/showcase/assets/ui-table-CxtCQUsg.js +42 -0
  595. package/dist/showcase/assets/upload-tray-DKJ8nFZp.js +138 -0
  596. package/dist/showcase/assets/use-layout-link-CGBQHZon.js +1 -0
  597. package/dist/showcase/assets/useAnchoredPopupScrollLock-CywAbxVB.js +1 -0
  598. package/dist/showcase/assets/useAriaLabelledBy-B2bZzE7D.js +1 -0
  599. package/dist/showcase/assets/useCollapsiblePanel-SLdY_s6S.js +1 -0
  600. package/dist/showcase/assets/useCompositeItem-g6aCBp84.js +1 -0
  601. package/dist/showcase/assets/useCompositeListItem-DK0Tpege.js +1 -0
  602. package/dist/showcase/assets/useControlled-BF8maje6.js +1 -0
  603. package/dist/showcase/assets/useLabelableId-hdKzFCp2.js +1 -0
  604. package/dist/showcase/assets/useOpenInteractionType-CnhifZ1E.js +1 -0
  605. package/dist/showcase/assets/useRender-QhawWhpb.js +1 -0
  606. package/dist/showcase/assets/useTriggerFocusGuards-Cht7Sa7e.js +1 -0
  607. package/dist/showcase/assets/useValueChanged-DURO1kfZ.js +1 -0
  608. package/dist/showcase/assets/user-plus-DbOuTfr7.js +1 -0
  609. package/dist/showcase/assets/user-u65Fo7k7.js +1 -0
  610. package/dist/showcase/assets/users-BUb7CmVp.js +1 -0
  611. package/dist/showcase/assets/valueToPercent-gleKSaFe.js +1 -0
  612. package/dist/showcase/assets/vendor-profile-wfI3PBuO.js +37 -0
  613. package/dist/showcase/assets/video-e4hDbTQ2.js +1 -0
  614. package/dist/showcase/assets/wrench-CBUvtxdr.js +1 -0
  615. package/dist/showcase/assets/x-oVTJnCJn.js +1 -0
  616. package/dist/showcase/assets/zap-CzABYL3c.js +1 -0
  617. package/dist/showcase/index.html +2 -2
  618. package/dist/style.css +1 -1
  619. package/package.json +15 -4
  620. package/scripts/README.md +24 -0
  621. package/scripts/metadata.json +325 -0
  622. package/dist/_shared/accordion-BWU7zxlO.cjs +0 -2
  623. package/dist/_shared/accordion-BWU7zxlO.cjs.map +0 -1
  624. package/dist/_shared/accordion-DTYKGqWD.js +0 -130
  625. package/dist/_shared/accordion-DTYKGqWD.js.map +0 -1
  626. package/dist/_shared/action-menu-BoQnI2UF.cjs +0 -2
  627. package/dist/_shared/action-menu-BoQnI2UF.cjs.map +0 -1
  628. package/dist/_shared/action-menu-uyg1Phsn.js +0 -96
  629. package/dist/_shared/action-menu-uyg1Phsn.js.map +0 -1
  630. package/dist/_shared/ai-artifact-CY1Jf9gM.cjs +0 -3
  631. package/dist/_shared/ai-artifact-CY1Jf9gM.cjs.map +0 -1
  632. package/dist/_shared/ai-artifact-DdlK_l56.js +0 -1099
  633. package/dist/_shared/ai-artifact-DdlK_l56.js.map +0 -1
  634. package/dist/_shared/auth-CDjZFJxy.cjs +0 -2
  635. package/dist/_shared/auth-CDjZFJxy.cjs.map +0 -1
  636. package/dist/_shared/auth-_udUdWtn.js +0 -643
  637. package/dist/_shared/auth-_udUdWtn.js.map +0 -1
  638. package/dist/_shared/badge--o9wFHB_.cjs +0 -2
  639. package/dist/_shared/badge--o9wFHB_.cjs.map +0 -1
  640. package/dist/_shared/badge-yGlx9trX.js +0 -108
  641. package/dist/_shared/badge-yGlx9trX.js.map +0 -1
  642. package/dist/_shared/button-683R5quQ.js +0 -46
  643. package/dist/_shared/button-683R5quQ.js.map +0 -1
  644. package/dist/_shared/button-C1qc97U1.cjs +0 -2
  645. package/dist/_shared/button-C1qc97U1.cjs.map +0 -1
  646. package/dist/_shared/button-CjZrRLzR.cjs +0 -2
  647. package/dist/_shared/button-CjZrRLzR.cjs.map +0 -1
  648. package/dist/_shared/button-SuocMQFT.js +0 -173
  649. package/dist/_shared/button-SuocMQFT.js.map +0 -1
  650. package/dist/_shared/buttons-9YBwevkP.cjs +0 -2
  651. package/dist/_shared/buttons-9YBwevkP.cjs.map +0 -1
  652. package/dist/_shared/buttons-BR4BGVYf.js +0 -143
  653. package/dist/_shared/buttons-BR4BGVYf.js.map +0 -1
  654. package/dist/_shared/combobox-CpSmiPV8.cjs +0 -2
  655. package/dist/_shared/combobox-CpSmiPV8.cjs.map +0 -1
  656. package/dist/_shared/combobox-D01JwyFZ.js +0 -810
  657. package/dist/_shared/combobox-D01JwyFZ.js.map +0 -1
  658. package/dist/_shared/comments-D9velZAW.js +0 -952
  659. package/dist/_shared/comments-D9velZAW.js.map +0 -1
  660. package/dist/_shared/comments-DyUAKSQu.cjs +0 -2
  661. package/dist/_shared/comments-DyUAKSQu.cjs.map +0 -1
  662. package/dist/_shared/date-picker-BnsvBFOZ.cjs +0 -2
  663. package/dist/_shared/date-picker-BnsvBFOZ.cjs.map +0 -1
  664. package/dist/_shared/date-picker-TMcjGO26.js +0 -1361
  665. package/dist/_shared/date-picker-TMcjGO26.js.map +0 -1
  666. package/dist/_shared/date-pickers-BI4xLjHR.js +0 -330
  667. package/dist/_shared/date-pickers-BI4xLjHR.js.map +0 -1
  668. package/dist/_shared/date-pickers-BhaUK5S2.cjs +0 -2
  669. package/dist/_shared/date-pickers-BhaUK5S2.cjs.map +0 -1
  670. package/dist/_shared/dialog-A95-614f.js +0 -101
  671. package/dist/_shared/dialog-A95-614f.js.map +0 -1
  672. package/dist/_shared/dialog-ivDByBmO.cjs +0 -2
  673. package/dist/_shared/dialog-ivDByBmO.cjs.map +0 -1
  674. package/dist/_shared/display-C4n0uuxl.js +0 -1154
  675. package/dist/_shared/display-C4n0uuxl.js.map +0 -1
  676. package/dist/_shared/display-oDW0O9yB.cjs +0 -2
  677. package/dist/_shared/display-oDW0O9yB.cjs.map +0 -1
  678. package/dist/_shared/forms-CwJci54_.js +0 -3430
  679. package/dist/_shared/forms-CwJci54_.js.map +0 -1
  680. package/dist/_shared/forms-E3JkTgcC.cjs +0 -2
  681. package/dist/_shared/forms-E3JkTgcC.cjs.map +0 -1
  682. package/dist/_shared/header-BUAddfdE.js +0 -360
  683. package/dist/_shared/header-BUAddfdE.js.map +0 -1
  684. package/dist/_shared/header-BnxWOiNm.cjs +0 -2
  685. package/dist/_shared/header-BnxWOiNm.cjs.map +0 -1
  686. package/dist/_shared/hooks-MW0UTO3q.cjs +0 -2
  687. package/dist/_shared/hooks-MW0UTO3q.cjs.map +0 -1
  688. package/dist/_shared/hooks-ZiPIvs0_.js +0 -118
  689. package/dist/_shared/hooks-ZiPIvs0_.js.map +0 -1
  690. package/dist/_shared/mentions-Br-EP9tq.js +0 -506
  691. package/dist/_shared/mentions-Br-EP9tq.js.map +0 -1
  692. package/dist/_shared/mentions-DNTsRHJl.cjs +0 -2
  693. package/dist/_shared/mentions-DNTsRHJl.cjs.map +0 -1
  694. package/dist/_shared/metadata-CPSQGPJh.cjs +0 -2
  695. package/dist/_shared/metadata-CPSQGPJh.cjs.map +0 -1
  696. package/dist/_shared/metadata-qTNAOM7E.js +0 -235
  697. package/dist/_shared/metadata-qTNAOM7E.js.map +0 -1
  698. package/dist/_shared/navigation-HnnA6uSV.js +0 -419
  699. package/dist/_shared/navigation-HnnA6uSV.js.map +0 -1
  700. package/dist/_shared/navigation-J2g0Tw9D.cjs +0 -2
  701. package/dist/_shared/navigation-J2g0Tw9D.cjs.map +0 -1
  702. package/dist/_shared/overlays-CIeniDjj.js +0 -639
  703. package/dist/_shared/overlays-CIeniDjj.js.map +0 -1
  704. package/dist/_shared/overlays-Xc_F_Y-E.cjs +0 -2
  705. package/dist/_shared/overlays-Xc_F_Y-E.cjs.map +0 -1
  706. package/dist/_shared/page-BFV-KE8H.js +0 -262
  707. package/dist/_shared/page-BFV-KE8H.js.map +0 -1
  708. package/dist/_shared/page-UJfWfw2R.cjs +0 -2
  709. package/dist/_shared/page-UJfWfw2R.cjs.map +0 -1
  710. package/dist/_shared/rich-text-editor-B6WKHUKC.js +0 -620
  711. package/dist/_shared/rich-text-editor-B6WKHUKC.js.map +0 -1
  712. package/dist/_shared/rich-text-editor-Dm-6r_xe.cjs +0 -2
  713. package/dist/_shared/rich-text-editor-Dm-6r_xe.cjs.map +0 -1
  714. package/dist/_shared/sheet-BKEfwhCn.js +0 -100
  715. package/dist/_shared/sheet-BKEfwhCn.js.map +0 -1
  716. package/dist/_shared/sheet-D4yWgkwC.cjs +0 -2
  717. package/dist/_shared/sheet-D4yWgkwC.cjs.map +0 -1
  718. package/dist/_shared/sidebar-BML5ZZ5s.js +0 -537
  719. package/dist/_shared/sidebar-BML5ZZ5s.js.map +0 -1
  720. package/dist/_shared/sidebar-Bl_KRk-S.cjs +0 -2
  721. package/dist/_shared/sidebar-Bl_KRk-S.cjs.map +0 -1
  722. package/dist/_shared/sidebar-C89O5ho_.cjs +0 -2
  723. package/dist/_shared/sidebar-C89O5ho_.cjs.map +0 -1
  724. package/dist/_shared/sidebar-ux-yk-Ph.js +0 -382
  725. package/dist/_shared/sidebar-ux-yk-Ph.js.map +0 -1
  726. package/dist/_shared/smart-card-DYZGY_Su.js +0 -361
  727. package/dist/_shared/smart-card-DYZGY_Su.js.map +0 -1
  728. package/dist/_shared/smart-card-Df80VF8x.cjs +0 -2
  729. package/dist/_shared/smart-card-Df80VF8x.cjs.map +0 -1
  730. package/dist/_shared/table-CBKDA7ZE.js +0 -1189
  731. package/dist/_shared/table-CBKDA7ZE.js.map +0 -1
  732. package/dist/_shared/table-CJoxRCWy.cjs +0 -2
  733. package/dist/_shared/table-CJoxRCWy.cjs.map +0 -1
  734. package/dist/_shared/workspace-CTjIGCE0.cjs +0 -2
  735. package/dist/_shared/workspace-CTjIGCE0.cjs.map +0 -1
  736. package/dist/_shared/workspace-WgJgiSUA.js +0 -357
  737. package/dist/_shared/workspace-WgJgiSUA.js.map +0 -1
  738. package/dist/showcase/assets/AreaChart-DUe3j5uB.js +0 -6
  739. package/dist/showcase/assets/CSPContext-ImKusJJ_.js +0 -1
  740. package/dist/showcase/assets/CompositeItem-DleE4kTc.js +0 -1
  741. package/dist/showcase/assets/CompositeRoot-BbNkvtLz.js +0 -1
  742. package/dist/showcase/assets/DialogTrigger-C0DB0bXw.js +0 -1
  743. package/dist/showcase/assets/FieldItemContext-CFTR-INZ.js +0 -1
  744. package/dist/showcase/assets/FormContext-lmjYAh4E.js +0 -1
  745. package/dist/showcase/assets/LabelableContext-CDv6gSfU.js +0 -1
  746. package/dist/showcase/assets/PreviewLayout-BG1B5TzA.js +0 -1
  747. package/dist/showcase/assets/RadioGroup-C-0MNAYY.js +0 -1
  748. package/dist/showcase/assets/Separator-KsPLUEno.js +0 -1
  749. package/dist/showcase/assets/ToolbarRootContext-AV8xAl2m.js +0 -1
  750. package/dist/showcase/assets/accordion-BWkuKg77.js +0 -171
  751. package/dist/showcase/assets/accordion-variants-CVT_62VO.js +0 -1
  752. package/dist/showcase/assets/action-menu-BOUHlGba.js +0 -1
  753. package/dist/showcase/assets/activities-DMDQje7Y.js +0 -501
  754. package/dist/showcase/assets/activities-feed-card-B8wpu4F3.js +0 -1
  755. package/dist/showcase/assets/activity-B-FxNryB.js +0 -1
  756. package/dist/showcase/assets/admin-CAhEeKt_.js +0 -80
  757. package/dist/showcase/assets/ai-UioEgJ90.js +0 -41
  758. package/dist/showcase/assets/ai-artifact-CUAlhcSX.js +0 -2
  759. package/dist/showcase/assets/ai-chat-C_w2PSmy.js +0 -568
  760. package/dist/showcase/assets/ai-elements-DmxqXR6H.js +0 -387
  761. package/dist/showcase/assets/ai-new-PG02TWQq.js +0 -167
  762. package/dist/showcase/assets/ai-tool-call-BaJx1rR4.js +0 -1
  763. package/dist/showcase/assets/alert-D7n-kQoO.js +0 -93
  764. package/dist/showcase/assets/alert-DIelf1qF.js +0 -1
  765. package/dist/showcase/assets/alert-TQCZEcn-.js +0 -62
  766. package/dist/showcase/assets/api-key-list-CSt4trYG.js +0 -73
  767. package/dist/showcase/assets/app-sidebar-DixqrLf2.js +0 -1
  768. package/dist/showcase/assets/arrow-down-CYh_aUsd.js +0 -1
  769. package/dist/showcase/assets/arrow-left-pYYsNkZE.js +0 -1
  770. package/dist/showcase/assets/arrow-right-Bf1Tl6D5.js +0 -1
  771. package/dist/showcase/assets/arrow-up-BhmQRZs9.js +0 -1
  772. package/dist/showcase/assets/arrow-up-right-CuAsO3-r.js +0 -1
  773. package/dist/showcase/assets/avatar-5EFTnHEG.js +0 -1
  774. package/dist/showcase/assets/avatar-DLpnivU0.js +0 -57
  775. package/dist/showcase/assets/badge-check-BRAVo7dA.js +0 -1
  776. package/dist/showcase/assets/badge-yFoRqbiq.js +0 -28
  777. package/dist/showcase/assets/bell-Dt3Nz2y2.js +0 -1
  778. package/dist/showcase/assets/bot-5Ro5Dayc.js +0 -1
  779. package/dist/showcase/assets/box-mt6TbZO6.js +0 -1
  780. package/dist/showcase/assets/brain-736080Wh.js +0 -1
  781. package/dist/showcase/assets/brand-4K8xsJ91.js +0 -36
  782. package/dist/showcase/assets/breadcrumb-CAlApdCw.js +0 -1
  783. package/dist/showcase/assets/breadcrumb-DHeGqoTD.js +0 -52
  784. package/dist/showcase/assets/breadcrumbs-D_lniGJs.js +0 -1
  785. package/dist/showcase/assets/briefcase-B_Uti-Iu.js +0 -1
  786. package/dist/showcase/assets/building-2-zgcwuzxP.js +0 -1
  787. package/dist/showcase/assets/button-PmqgeJKm.js +0 -44
  788. package/dist/showcase/assets/button-group-DAOmmujV.js +0 -1
  789. package/dist/showcase/assets/buttons-PtpR_v16.js +0 -270
  790. package/dist/showcase/assets/calendar-BiOGjB7a.js +0 -1
  791. package/dist/showcase/assets/calendar-C1A98cz0.js +0 -16
  792. package/dist/showcase/assets/calendar-DTgagmt7.js +0 -1
  793. package/dist/showcase/assets/calendar-days-pr8kXiTx.js +0 -1
  794. package/dist/showcase/assets/camera-CGKLOOep.js +0 -1
  795. package/dist/showcase/assets/card-CFIG8Dgg.js +0 -1
  796. package/dist/showcase/assets/card-CRd07Iun.js +0 -188
  797. package/dist/showcase/assets/card-primitives-YgCOqVDI.js +0 -1
  798. package/dist/showcase/assets/card-radio-group-Du6yaMZ-.js +0 -1
  799. package/dist/showcase/assets/cards-H7ywhTNM.js +0 -328
  800. package/dist/showcase/assets/carousel-Dwll5oz1.js +0 -449
  801. package/dist/showcase/assets/chart-BWnVf-d-.js +0 -358
  802. package/dist/showcase/assets/chart-column-DjAyOA-t.js +0 -1
  803. package/dist/showcase/assets/checkbox-fwuAAaUZ.js +0 -1
  804. package/dist/showcase/assets/chevron-down-CSn8HCwf.js +0 -1
  805. package/dist/showcase/assets/chevron-left-Ddj6-KOu.js +0 -1
  806. package/dist/showcase/assets/chevron-right-d-umkBru.js +0 -1
  807. package/dist/showcase/assets/chevron-up-CeFY6O0I.js +0 -1
  808. package/dist/showcase/assets/chevrons-up-down-Ck3rUZtc.js +0 -1
  809. package/dist/showcase/assets/circle-Dy08kACD.js +0 -1
  810. package/dist/showcase/assets/circle-alert-ysbx8rsZ.js +0 -1
  811. package/dist/showcase/assets/circle-check-TT7cFQrr.js +0 -1
  812. package/dist/showcase/assets/circle-check-big-4RnJfeaC.js +0 -1
  813. package/dist/showcase/assets/circle-dot-CvoDXS-W.js +0 -1
  814. package/dist/showcase/assets/circle-question-mark-Dbi-WTYN.js +0 -1
  815. package/dist/showcase/assets/circle-x-c5z6-eYV.js +0 -1
  816. package/dist/showcase/assets/clock-3-DDEsD4Tb.js +0 -1
  817. package/dist/showcase/assets/clock-DuBsP5t3.js +0 -1
  818. package/dist/showcase/assets/code-xml-SoYTMEdm.js +0 -1
  819. package/dist/showcase/assets/collapsible-Cv3oGVkH.js +0 -27
  820. package/dist/showcase/assets/collapsible-DagkA3To.js +0 -1
  821. package/dist/showcase/assets/combobox-CPC4a_MH.js +0 -696
  822. package/dist/showcase/assets/command-BtaMPVtf.js +0 -45
  823. package/dist/showcase/assets/command-C37Q471b.js +0 -1
  824. package/dist/showcase/assets/comment-composer-W0xfh_HP.js +0 -1
  825. package/dist/showcase/assets/comment-item-Ctcpx1GX.js +0 -1
  826. package/dist/showcase/assets/comments-BODDdRry.js +0 -357
  827. package/dist/showcase/assets/commerce-B9MICTY2.js +0 -79
  828. package/dist/showcase/assets/commerce-extras-DsgnTkBH.js +0 -189
  829. package/dist/showcase/assets/composite-B-19wwf9.js +0 -1
  830. package/dist/showcase/assets/contact-card-CqP3YxTq.js +0 -65
  831. package/dist/showcase/assets/content-container-x2tsQKwH.js +0 -1
  832. package/dist/showcase/assets/copyable-DH0w0i_h.js +0 -96
  833. package/dist/showcase/assets/course-card-qpC4JUUM.js +0 -77
  834. package/dist/showcase/assets/cpu-DjJeD_0Z.js +0 -1
  835. package/dist/showcase/assets/credit-card-CYgRtM77.js +0 -1
  836. package/dist/showcase/assets/currency-hguqIjWU.js +0 -149
  837. package/dist/showcase/assets/dark-surfaces-Cj34O9A0.js +0 -90
  838. package/dist/showcase/assets/database-BVwSMeGM.js +0 -1
  839. package/dist/showcase/assets/date-block-LCTDXG5-.js +0 -1
  840. package/dist/showcase/assets/date-picker-CbYq8wZ7.js +0 -1
  841. package/dist/showcase/assets/date-pickers-BaSX23MK.js +0 -73
  842. package/dist/showcase/assets/dense-info-kY1QmtaP.js +0 -106
  843. package/dist/showcase/assets/dialog-B85US9Ue.js +0 -1
  844. package/dist/showcase/assets/dialog-iIgfMvTJ.js +0 -1
  845. package/dist/showcase/assets/display-DTaQWVJp.js +0 -403
  846. package/dist/showcase/assets/dollar-sign-DlK6XF_v.js +0 -1
  847. package/dist/showcase/assets/download-B_EY5cGA.js +0 -1
  848. package/dist/showcase/assets/dropdown-menu-bPWrLPgm.js +0 -1
  849. package/dist/showcase/assets/dropzone-Bl7RO_Uk.js +0 -1
  850. package/dist/showcase/assets/earth-C7n2JAYm.js +0 -1
  851. package/dist/showcase/assets/ellipsis-ntuo3ejh.js +0 -1
  852. package/dist/showcase/assets/ellipsis-vertical-yH8S83bc.js +0 -1
  853. package/dist/showcase/assets/empty-CY8f7iFe.js +0 -1
  854. package/dist/showcase/assets/empty-item-Ct7uCr40.js +0 -49
  855. package/dist/showcase/assets/empty-state-DlO8SJi8.js +0 -188
  856. package/dist/showcase/assets/empty-state-IAAUTn6f.js +0 -1
  857. package/dist/showcase/assets/enhanced-activities-DLwShhof.js +0 -361
  858. package/dist/showcase/assets/enhanced-combobox-Cs_-wq9p.js +0 -1
  859. package/dist/showcase/assets/event-calendar-C4KlumlG.js +0 -138
  860. package/dist/showcase/assets/event-log-BvUU5Rj8.js +0 -330
  861. package/dist/showcase/assets/example-BIrQab7K.js +0 -1
  862. package/dist/showcase/assets/external-link-DuJlM_H4.js +0 -1
  863. package/dist/showcase/assets/eye-CnRPL_H8.js +0 -1
  864. package/dist/showcase/assets/feature-announcement-0dOcSH7F.js +0 -34
  865. package/dist/showcase/assets/file-Dc5UHkfE.js +0 -1
  866. package/dist/showcase/assets/file-text-D3AE37vP.js +0 -1
  867. package/dist/showcase/assets/filters-CsovNSxS.js +0 -78
  868. package/dist/showcase/assets/flag-CJJ43K4x.js +0 -1
  869. package/dist/showcase/assets/folder-open-Dp0sceCi.js +0 -1
  870. package/dist/showcase/assets/form-field-Cxm4APa9.js +0 -1
  871. package/dist/showcase/assets/format-bDaUGCSP.js +0 -1
  872. package/dist/showcase/assets/forms-BrVikK1p.js +0 -862
  873. package/dist/showcase/assets/frame-CkLEABTd.js +0 -167
  874. package/dist/showcase/assets/getPseudoElementBounds-Bznj386s.js +0 -1
  875. package/dist/showcase/assets/gift-Bx8IO1FQ.js +0 -1
  876. package/dist/showcase/assets/giftcard-cards-CZTXBjv0.js +0 -85
  877. package/dist/showcase/assets/git-branch-D9jt-u1q.js +0 -1
  878. package/dist/showcase/assets/global-search-C2R_3Pb3.js +0 -215
  879. package/dist/showcase/assets/global-search-D9XJ747r.js +0 -1
  880. package/dist/showcase/assets/globe-BJHI134i.js +0 -1
  881. package/dist/showcase/assets/gradient-card-CV8w2JG5.js +0 -58
  882. package/dist/showcase/assets/hash-CtBGoIvf.js +0 -1
  883. package/dist/showcase/assets/header-B3FSlVv4.js +0 -1
  884. package/dist/showcase/assets/header-notifications-3VH9lzzJ.js +0 -1
  885. package/dist/showcase/assets/heart-BWZYF4xJ.js +0 -1
  886. package/dist/showcase/assets/house-CAQOnHLO.js +0 -1
  887. package/dist/showcase/assets/icon-badge-CxvxB8Vd.js +0 -1
  888. package/dist/showcase/assets/image-Byz-p7hT.js +0 -1
  889. package/dist/showcase/assets/inbox-D4UE_W9O.js +0 -1
  890. package/dist/showcase/assets/index-ADfexGMA.css +0 -2
  891. package/dist/showcase/assets/index-Cz4UGUT2.js +0 -10
  892. package/dist/showcase/assets/inertValue-BVXUUuS4.js +0 -1
  893. package/dist/showcase/assets/info-DFu8OfxV.js +0 -1
  894. package/dist/showcase/assets/inline-stat-DqI70yoJ.js +0 -1
  895. package/dist/showcase/assets/input-BPDdWrB1.js +0 -1
  896. package/dist/showcase/assets/input-BzafMIDj.js +0 -1
  897. package/dist/showcase/assets/input-group-BYZYeQ7j.js +0 -1
  898. package/dist/showcase/assets/input-group-YIWmmLJ6.js +0 -47
  899. package/dist/showcase/assets/inputs-DjzrYJdb.js +0 -49
  900. package/dist/showcase/assets/invoice-header-B00JrPAb.js +0 -36
  901. package/dist/showcase/assets/invoice-items-CUt5D3Wz.js +0 -36
  902. package/dist/showcase/assets/invoice-mini-CRoaQ9g9.js +0 -14
  903. package/dist/showcase/assets/invoice-table-DYNnDTQl.js +0 -30
  904. package/dist/showcase/assets/isSameDay-DVNkwpSk.js +0 -1
  905. package/dist/showcase/assets/isToday-DZ1HTCty.js +0 -1
  906. package/dist/showcase/assets/italic-AbetEb3d.js +0 -1
  907. package/dist/showcase/assets/item-BGA6_5Zh.js +0 -134
  908. package/dist/showcase/assets/item-BJOYyqeO.js +0 -1
  909. package/dist/showcase/assets/item-CbiuwbAN.js +0 -1
  910. package/dist/showcase/assets/kanban-Br-Yz002.js +0 -186
  911. package/dist/showcase/assets/label-BlCKlLE-.js +0 -1
  912. package/dist/showcase/assets/languages-CKcUvHnt.js +0 -1
  913. package/dist/showcase/assets/layers-CakZLRSD.js +0 -1
  914. package/dist/showcase/assets/layout-app-shell-ukDXqPxC.js +0 -608
  915. package/dist/showcase/assets/layout-auth-BFza65L3.js +0 -754
  916. package/dist/showcase/assets/layout-containers-v1jG_b7r.js +0 -101
  917. package/dist/showcase/assets/layout-header-CqBf9wjY.js +0 -170
  918. package/dist/showcase/assets/layout-page-WJcljCac.js +0 -122
  919. package/dist/showcase/assets/layout-sidebar-DL6TLuQC.js +0 -224
  920. package/dist/showcase/assets/layout-users-B8qpsvV9.js +0 -117
  921. package/dist/showcase/assets/layout-workspace-iOKZ4-9K.js +0 -183
  922. package/dist/showcase/assets/lock-Dn4-vUBz.js +0 -1
  923. package/dist/showcase/assets/lock-keyhole-M6KZ_7RC.js +0 -1
  924. package/dist/showcase/assets/mail-check-DXqQwivW.js +0 -1
  925. package/dist/showcase/assets/mail-w1nhszbW.js +0 -1
  926. package/dist/showcase/assets/map-CquesVXo.js +0 -124
  927. package/dist/showcase/assets/map-pin-DUl-Lt6t.js +0 -1
  928. package/dist/showcase/assets/media-library-CCJBQRPu.js +0 -695
  929. package/dist/showcase/assets/mention-inline-suggestions-DyW6IwL8.js +0 -1
  930. package/dist/showcase/assets/mentions-Ea4pSJqG.js +0 -138
  931. package/dist/showcase/assets/menus-CJjtE4fD.js +0 -89
  932. package/dist/showcase/assets/message-square-B0RnrJV6.js +0 -1
  933. package/dist/showcase/assets/metadata-list-DkN9yfTj.js +0 -288
  934. package/dist/showcase/assets/metadata-list-fm8e58ID.js +0 -1
  935. package/dist/showcase/assets/metric-bar-BydkmggA.js +0 -1
  936. package/dist/showcase/assets/metric-grid-BKjrYpt9.js +0 -1
  937. package/dist/showcase/assets/metric-guQTLTAa.js +0 -1
  938. package/dist/showcase/assets/metric-trend-chip-DehaJ3nC.js +0 -1
  939. package/dist/showcase/assets/metrics-analytics-bar-YjwFT4ae.js +0 -44
  940. package/dist/showcase/assets/metrics-analytics-cards-B6DspERM.js +0 -50
  941. package/dist/showcase/assets/metrics-comparison-Nru5wypZ.js +0 -76
  942. package/dist/showcase/assets/metrics-heatmap-CcumN0Or.js +0 -27
  943. package/dist/showcase/assets/metrics-inline-badge-2WB7w9mz.js +0 -17
  944. package/dist/showcase/assets/metrics-kpi-row-jU3hsB3C.js +0 -31
  945. package/dist/showcase/assets/metrics-micro-grid-CaJ99RXL.js +0 -42
  946. package/dist/showcase/assets/metrics-overview-Sa7z6jct.js +0 -192
  947. package/dist/showcase/assets/metrics-stat-cards-PLvMkA0M.js +0 -54
  948. package/dist/showcase/assets/minus-OyRBql2C.js +0 -1
  949. package/dist/showcase/assets/money-display-23DKz-jK.js +0 -1
  950. package/dist/showcase/assets/month-year-picker-oEoInnKW.js +0 -1
  951. package/dist/showcase/assets/navigation-Ds60FMAs.js +0 -230
  952. package/dist/showcase/assets/navigation-Dufz6qnF.js +0 -90
  953. package/dist/showcase/assets/navigation-extras-DKufT82I.js +0 -43
  954. package/dist/showcase/assets/onboarding-checklist-DSkS2ktA.js +0 -119
  955. package/dist/showcase/assets/overlays-BptoR4sm.js +0 -408
  956. package/dist/showcase/assets/overlays-CVGJ_FEg.js +0 -88
  957. package/dist/showcase/assets/package-0ZgMoFm1.js +0 -1
  958. package/dist/showcase/assets/package-check-CT0dhSM8.js +0 -1
  959. package/dist/showcase/assets/page-action-button-DrHJKFbp.js +0 -1
  960. package/dist/showcase/assets/page-header-CikNDnqI.js +0 -1
  961. package/dist/showcase/assets/pagination-CxuA2zkE.js +0 -42
  962. package/dist/showcase/assets/pagination-DsPLs2Tx.js +0 -1
  963. package/dist/showcase/assets/paperclip-CDMZ_JAo.js +0 -1
  964. package/dist/showcase/assets/password-input-BVaUPw7a.js +0 -1
  965. package/dist/showcase/assets/pencil-BouoJ5x7.js +0 -1
  966. package/dist/showcase/assets/phone-DCNFH5yg.js +0 -1
  967. package/dist/showcase/assets/plus-DkHZm34I.js +0 -1
  968. package/dist/showcase/assets/popover-BSB11Qjp.js +0 -1
  969. package/dist/showcase/assets/popover-CECpX3MQ.js +0 -1
  970. package/dist/showcase/assets/popover-menu-CuA8fb7i.js +0 -1
  971. package/dist/showcase/assets/products-BJHNTW62.js +0 -407
  972. package/dist/showcase/assets/progress-DGvRQyPS.js +0 -1
  973. package/dist/showcase/assets/progress-tpxRVOkp.js +0 -18
  974. package/dist/showcase/assets/props-table-BR-KjRNe.js +0 -1
  975. package/dist/showcase/assets/props.generated-qdUud3iu.json +0 -38611
  976. package/dist/showcase/assets/quote-CN-Sodsj.js +0 -1
  977. package/dist/showcase/assets/receipt-T8B9lscp.js +0 -1
  978. package/dist/showcase/assets/receipt-text-CeBruM29.js +0 -1
  979. package/dist/showcase/assets/refresh-cw-DnxNcOMm.js +0 -1
  980. package/dist/showcase/assets/resolveAriaLabelledBy-B2ZzrlGb.js +0 -1
  981. package/dist/showcase/assets/resolveValueLabel-CGuVi0Dj.js +0 -1
  982. package/dist/showcase/assets/rich-text-editor-Bha0lSKT.js +0 -143
  983. package/dist/showcase/assets/rich-text-editor-NeOPmoZF.js +0 -124
  984. package/dist/showcase/assets/rotate-ccw-7aUlKQpX.js +0 -1
  985. package/dist/showcase/assets/save-AT8JlA8E.js +0 -1
  986. package/dist/showcase/assets/schema-form-BpkVygoO.js +0 -325
  987. package/dist/showcase/assets/scroll-area-B0wmaMAD.js +0 -32
  988. package/dist/showcase/assets/scroll-area-CgXTHlpJ.js +0 -1
  989. package/dist/showcase/assets/select-BG_Iad8E.js +0 -1
  990. package/dist/showcase/assets/select-t6dryszf.js +0 -1
  991. package/dist/showcase/assets/send-BzGRF4t-.js +0 -1
  992. package/dist/showcase/assets/separator-BjGdXNcn.js +0 -1
  993. package/dist/showcase/assets/separator-DbiGagrP.js +0 -28
  994. package/dist/showcase/assets/settings-BSRT_96A.js +0 -1
  995. package/dist/showcase/assets/sheet-CEuKOBxr.js +0 -1
  996. package/dist/showcase/assets/shield-CcR2q5u_.js +0 -1
  997. package/dist/showcase/assets/shield-alert-DhbgXV1X.js +0 -1
  998. package/dist/showcase/assets/shield-check-CRbBJXw2.js +0 -1
  999. package/dist/showcase/assets/shopping-bag-B5BzpLV5.js +0 -1
  1000. package/dist/showcase/assets/sidebar--2nHUTn3.js +0 -1
  1001. package/dist/showcase/assets/sidebar.context-BCb20eIt.js +0 -1
  1002. package/dist/showcase/assets/skeleton-BeVdks4r.js +0 -1
  1003. package/dist/showcase/assets/skeleton-DijlT51X.js +0 -29
  1004. package/dist/showcase/assets/slider-Cp4m3NTK.js +0 -1
  1005. package/dist/showcase/assets/sliders-horizontal-C8RwUn0S.js +0 -1
  1006. package/dist/showcase/assets/smart-card-B4P_C0nk.js +0 -1
  1007. package/dist/showcase/assets/sonner-CLYYRmEW.js +0 -22
  1008. package/dist/showcase/assets/sortable.esm-CoekVJlU.js +0 -5
  1009. package/dist/showcase/assets/sparkles-DFJmoAFP.js +0 -1
  1010. package/dist/showcase/assets/spinner-CeQHboSs.js +0 -49
  1011. package/dist/showcase/assets/spinner-DMKANM9S.js +0 -30
  1012. package/dist/showcase/assets/spinner-WEI7TMVk.js +0 -1
  1013. package/dist/showcase/assets/square-pen-CfvmmXYo.js +0 -1
  1014. package/dist/showcase/assets/stacked-avatars-CcCnnUrA.js +0 -1
  1015. package/dist/showcase/assets/star-DK5onZCp.js +0 -1
  1016. package/dist/showcase/assets/startOfDay-BuizEr24.js +0 -1
  1017. package/dist/showcase/assets/styles-BStlbPXe.js +0 -1
  1018. package/dist/showcase/assets/suggestions-Cd_XUmz3.js +0 -126
  1019. package/dist/showcase/assets/switch-5f1vwEZ7.js +0 -1
  1020. package/dist/showcase/assets/switch-arjWj-n7.js +0 -1
  1021. package/dist/showcase/assets/sync-DorQdMfx.js +0 -107
  1022. package/dist/showcase/assets/table-ClYkDRAk.js +0 -1
  1023. package/dist/showcase/assets/table-D9q0odD8.js +0 -382
  1024. package/dist/showcase/assets/table-actions-UJbkGb44.js +0 -1
  1025. package/dist/showcase/assets/tabs-BENBPFif.js +0 -19
  1026. package/dist/showcase/assets/tabs-ePpje8sU.js +0 -1
  1027. package/dist/showcase/assets/tags-input-DRlg3zQH.js +0 -1
  1028. package/dist/showcase/assets/text-button-CQvP6Kic.js +0 -1
  1029. package/dist/showcase/assets/text-link-DT-nOORV.js +0 -1
  1030. package/dist/showcase/assets/textarea-BGHGV17m.js +0 -1
  1031. package/dist/showcase/assets/textarea-pstF1OBP.js +0 -1
  1032. package/dist/showcase/assets/timelines-D8y-IyxW.js +0 -200
  1033. package/dist/showcase/assets/toggle-group-BVyFo04r.js +0 -1
  1034. package/dist/showcase/assets/toggles-dhLpAHSR.js +0 -71
  1035. package/dist/showcase/assets/toggles-group-BJ5Jio2p.js +0 -32
  1036. package/dist/showcase/assets/trash-2-OsaEm8cc.js +0 -1
  1037. package/dist/showcase/assets/trending-up-HlQQXTth.js +0 -1
  1038. package/dist/showcase/assets/truck-CvvBxBeB.js +0 -1
  1039. package/dist/showcase/assets/typography-D_99bjSh.js +0 -223
  1040. package/dist/showcase/assets/ui-badge-C1bu7wRu.js +0 -28
  1041. package/dist/showcase/assets/ui-card-Ct1FFUxv.js +0 -30
  1042. package/dist/showcase/assets/ui-table-Dxu9Jjq0.js +0 -42
  1043. package/dist/showcase/assets/upload-tray-BeOBVU1z.js +0 -138
  1044. package/dist/showcase/assets/use-layout-link-BK_oEoBg.js +0 -1
  1045. package/dist/showcase/assets/useAnchoredPopupScrollLock-DLXArfPo.js +0 -1
  1046. package/dist/showcase/assets/useAriaLabelledBy-etINba8U.js +0 -1
  1047. package/dist/showcase/assets/useCollapsiblePanel-BNe9r1t_.js +0 -1
  1048. package/dist/showcase/assets/useCompositeItem-CvG1CBEV.js +0 -1
  1049. package/dist/showcase/assets/useCompositeListItem-CcY0U1bY.js +0 -1
  1050. package/dist/showcase/assets/useControlled-Cpg8gDqb.js +0 -1
  1051. package/dist/showcase/assets/useLabelableId-Czdg4nY8.js +0 -1
  1052. package/dist/showcase/assets/useOpenInteractionType-eyZ6twES.js +0 -1
  1053. package/dist/showcase/assets/useRender-BAZlIYnj.js +0 -1
  1054. package/dist/showcase/assets/useTriggerFocusGuards-C2I8g7TT.js +0 -1
  1055. package/dist/showcase/assets/useValueChanged-Bz3WRSDy.js +0 -1
  1056. package/dist/showcase/assets/user-Bqmz8M16.js +0 -1
  1057. package/dist/showcase/assets/user-plus-MMxrhI4h.js +0 -1
  1058. package/dist/showcase/assets/users-ERTaffcv.js +0 -1
  1059. package/dist/showcase/assets/valueToPercent-B5BHWU68.js +0 -1
  1060. package/dist/showcase/assets/vendor-profile-BAwCE0wP.js +0 -37
  1061. package/dist/showcase/assets/video-DJm0ubTE.js +0 -1
  1062. package/dist/showcase/assets/wrench-gaXnvr_b.js +0 -1
  1063. package/dist/showcase/assets/x-BqJnRkKw.js +0 -1
  1064. package/dist/showcase/assets/zap-DHBVTfYZ.js +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-text-editor-B6WKHUKC.js","names":[],"sources":["../../src/components/features/rich-text-editor/partials/rich-text-editor-toolbar.tsx","../../src/components/features/rich-text-editor/rich-text-editor.strings.ts","../../src/components/features/rich-text-editor/partials/caret-helpers.ts","../../src/components/features/rich-text-editor/partials/counts-footer.tsx","../../src/components/features/rich-text-editor/partials/html-helpers.ts","../../src/components/features/rich-text-editor/partials/rich-text-editor-tiptap.tsx","../../src/components/features/rich-text-editor/partials/rich-text-editor-fallback.tsx","../../src/components/features/rich-text-editor/rich-text-editor.tsx"],"sourcesContent":["import { Code2 } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '@/components/base/buttons/button';\n\nimport type { RichTextEditorStrings } from '../rich-text-editor.strings';\nimport type {\n\tRichTextEditorToolbarItem,\n\tToolbarButtonConfig,\n} from '../rich-text-editor.types';\n\nexport interface RichTextEditorToolbarProps {\n\tbuttons: ToolbarButtonConfig[];\n\textraToolbarItems?: ReadonlyArray<RichTextEditorToolbarItem>;\n\thideSourceToggle?: boolean;\n\tsourceMode: boolean;\n\ttoggleSourceMode: () => void;\n\tdisabled?: boolean;\n\t/**\n\t * The TipTap variant disables built-in buttons until the editor instance\n\t * is ready; the fallback variant simply marks them disabled. This flag\n\t * lets callers force the disabled state without re-deriving it per button.\n\t */\n\thasEditor?: boolean;\n\ttoolbarTrailing?: ReactNode;\n\tstrings: RichTextEditorStrings;\n}\n\nexport function RichTextEditorToolbar({\n\tbuttons,\n\textraToolbarItems,\n\thideSourceToggle = false,\n\tsourceMode,\n\ttoggleSourceMode,\n\tdisabled = false,\n\thasEditor = true,\n\ttoolbarTrailing,\n\tstrings,\n}: RichTextEditorToolbarProps) {\n\tconst hasExtras = (extraToolbarItems?.length ?? 0) > 0;\n\n\treturn (\n\t\t<div className=\"border-border flex flex-wrap items-center gap-1 border-b p-1.5\">\n\t\t\t{buttons.map((button) => {\n\t\t\t\tconst Icon = button.icon;\n\t\t\t\tconst isActive = button.isActive();\n\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey={button.id}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant={isActive ? 'primary' : 'secondary'}\n\t\t\t\t\t\tbuttonStyle={isActive ? 'solid' : 'ghost'}\n\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\tonClick={button.run}\n\t\t\t\t\t\tdisabled={disabled || !hasEditor || sourceMode || button.disabled}\n\t\t\t\t\t\taria-label={button.label}\n\t\t\t\t\t\ttitle={button.label}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t})}\n\n\t\t\t{!hideSourceToggle && (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"bg-border mx-1 h-4 w-px\" />\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant={sourceMode ? 'primary' : 'secondary'}\n\t\t\t\t\t\tbuttonStyle={sourceMode ? 'solid' : 'ghost'}\n\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\tonClick={toggleSourceMode}\n\t\t\t\t\t\tdisabled={disabled || !hasEditor}\n\t\t\t\t\t\taria-label={strings.toolbar.sourceCode}\n\t\t\t\t\t\ttitle={strings.toolbar.sourceCode}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Code2 className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{hasExtras && (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"bg-border mx-1 h-4 w-px\" />\n\t\t\t\t\t{extraToolbarItems?.map((item) => {\n\t\t\t\t\t\tconst Icon = item.icon;\n\t\t\t\t\t\tconst isActive = item.isActive?.() ?? false;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant={isActive ? 'primary' : 'secondary'}\n\t\t\t\t\t\t\t\tbuttonStyle={isActive ? 'solid' : 'ghost'}\n\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\tonClick={item.onClick}\n\t\t\t\t\t\t\t\tdisabled={disabled || !hasEditor || sourceMode || item.disabled}\n\t\t\t\t\t\t\t\taria-label={item.label}\n\t\t\t\t\t\t\t\ttitle={item.label}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{!!toolbarTrailing && (\n\t\t\t\t<div className=\"ml-auto flex items-center gap-1\">{toolbarTrailing}</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nRichTextEditorToolbar.displayName = 'RichTextEditorToolbar';\n","/**\n * Default user-facing strings for `<RichTextEditor>`.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <RichTextEditor strings={{ toolbar: { bold: t('editor.bold') } }} … />\n */\n\nexport interface RichTextEditorStrings {\n\t/** Accessible label for the editable rich-text surface. */\n\teditorLabel: string;\n\t/** Accessible label for the HTML source textarea. */\n\tsourceLabel: string;\n\t/** Toolbar button labels (used for `aria-label` and tooltip `title`). */\n\ttoolbar: {\n\t\tbold: string;\n\t\titalic: string;\n\t\tstrike: string;\n\t\tbulletList: string;\n\t\torderedList: string;\n\t\tblockquote: string;\n\t\tundo: string;\n\t\tredo: string;\n\t\tsourceCode: string;\n\t};\n\t/** Footer count labels — `{n}` is replaced with the count. */\n\tcounts: {\n\t\tcharacters: string;\n\t\twords: string;\n\t\tmax: string;\n\t};\n}\n\nexport const defaultRichTextEditorStrings: RichTextEditorStrings = {\n\teditorLabel: 'Rich text editor',\n\tsourceLabel: 'HTML source',\n\ttoolbar: {\n\t\tbold: 'Bold',\n\t\titalic: 'Italic',\n\t\tstrike: 'Strike',\n\t\tbulletList: 'Bullet list',\n\t\torderedList: 'Ordered list',\n\t\tblockquote: 'Quote',\n\t\tundo: 'Undo',\n\t\tredo: 'Redo',\n\t\tsourceCode: 'Source code',\n\t},\n\tcounts: {\n\t\tcharacters: 'characters',\n\t\twords: 'words',\n\t\tmax: 'max',\n\t},\n};\n","/**\n * Caret-introspection helpers used by `<RichTextEditor>` to expose the\n * text before the caret and replace a leading run of characters with\n * inline HTML — the building blocks for `@`-mention chips and similar\n * inline triggers.\n */\nimport type { RichTextCaretContext, TiptapEditor } from '../rich-text-editor.types';\n\n/**\n * Read the current selection's caret context.\n *\n * Walks back from the caret through the current text node and any\n * preceding sibling text nodes inside the same block-level container\n * (paragraph / list-item / heading) collecting plain text. Returns the\n * accumulated text plus the caret's bounding rect when available.\n *\n * Returns `null` when there is no live selection or the selection isn't\n * a text caret inside a contenteditable.\n */\nexport function readCaretContext(): RichTextCaretContext | null {\n\tif (typeof window === 'undefined') return null;\n\tconst sel = window.getSelection();\n\tif (!sel || sel.rangeCount === 0) return null;\n\tconst range = sel.getRangeAt(0);\n\tif (!range.collapsed) return null;\n\n\tconst startNode = range.startContainer;\n\tconst startOffset = range.startOffset;\n\n\tlet block: Node | null = startNode;\n\twhile (block && block.nodeType !== Node.ELEMENT_NODE) {\n\t\tblock = block.parentNode;\n\t}\n\tif (!block) return null;\n\tconst editable =\n\t\t(block as Element).closest('[contenteditable=\"true\"]') ??\n\t\t(block as Element).closest('.ProseMirror');\n\tif (!editable) return null;\n\n\tlet text = '';\n\tif (startNode.nodeType === Node.TEXT_NODE) {\n\t\ttext = (startNode.textContent ?? '').slice(0, startOffset);\n\t}\n\n\tlet cursor: Node | null = startNode;\n\twhile (cursor && cursor !== editable && cursor !== block) {\n\t\tlet prev: Node | null = cursor.previousSibling;\n\t\twhile (prev) {\n\t\t\ttext = (prev.textContent ?? '') + text;\n\t\t\tprev = prev.previousSibling;\n\t\t}\n\t\tcursor = cursor.parentNode;\n\t\tif (cursor && (cursor as Element).matches?.('p, li, h1, h2, h3, h4, h5, h6, blockquote')) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlet rect: RichTextCaretContext['rect'];\n\tconst r = range.getBoundingClientRect();\n\tif (r && (r.top || r.left || r.right || r.bottom)) {\n\t\trect = { top: r.top, left: r.left, bottom: r.bottom, right: r.right };\n\t}\n\n\treturn { textBefore: text, rect };\n}\n\n/**\n * Extend the selection backwards by `length` characters, then insert\n * `html`. The selection extension means `editor.insertContent` (or the\n * fallback's `range.deleteContents()` + insert) replaces the trigger\n * range with the chip atomically — no manual text-content mutation, no\n * timing races between \"delete\" and \"insert\".\n */\nexport function replaceBeforeCaret(\n\teditor: TiptapEditor | null,\n\tlength: number,\n\thtml: string,\n\tnotifyChange: (next: string) => void,\n): void {\n\tif (typeof window === 'undefined') return;\n\tconst sel = window.getSelection();\n\tif (!sel || sel.rangeCount === 0) return;\n\tconst caret = sel.getRangeAt(0);\n\tif (!caret.collapsed) return;\n\n\tlet remaining = length;\n\tlet startNode: Node = caret.startContainer;\n\tlet startOffset = caret.startOffset;\n\n\twhile (remaining > 0) {\n\t\tif (startNode.nodeType === Node.TEXT_NODE) {\n\t\t\tconst take = Math.min(startOffset, remaining);\n\t\t\tstartOffset -= take;\n\t\t\tremaining -= take;\n\t\t\tif (remaining === 0) break;\n\t\t}\n\t\tconst prev = previousTextNode(startNode);\n\t\tif (!prev) break;\n\t\tstartNode = prev;\n\t\tstartOffset = prev.textContent?.length ?? 0;\n\t}\n\n\tconst range = document.createRange();\n\trange.setStart(startNode, startOffset);\n\trange.setEnd(caret.endContainer, caret.endOffset);\n\tsel.removeAllRanges();\n\tsel.addRange(range);\n\n\tif (editor) {\n\t\teditor.chain().focus().insertContent(html).run();\n\t\tnotifyChange(editor.getHTML());\n\t\treturn;\n\t}\n\n\trange.deleteContents();\n\tconst fragment = document.createRange().createContextualFragment(html);\n\trange.insertNode(fragment);\n\tsel.collapseToEnd();\n\tconst editable =\n\t\t(startNode as Element | null)?.parentElement?.closest?.('[contenteditable=\"true\"]') ?? null;\n\tif (editable) notifyChange((editable as HTMLElement).innerHTML);\n}\n\nexport function insertHtmlIntoEditable(editable: HTMLElement | null, html: string): void {\n\tif (typeof window === 'undefined' || !editable) return;\n\teditable.focus();\n\n\tconst sel = window.getSelection();\n\tif (!sel || sel.rangeCount === 0) {\n\t\teditable.insertAdjacentHTML('beforeend', html);\n\t\treturn;\n\t}\n\n\tconst range = sel.getRangeAt(0);\n\tif (!editable.contains(range.commonAncestorContainer)) {\n\t\teditable.insertAdjacentHTML('beforeend', html);\n\t\treturn;\n\t}\n\n\trange.deleteContents();\n\tconst fragment = document.createRange().createContextualFragment(html);\n\trange.insertNode(fragment);\n\trange.collapse(false);\n\tsel.removeAllRanges();\n\tsel.addRange(range);\n}\n\nfunction previousTextNode(node: Node): Node | null {\n\tlet current: Node | null = node;\n\twhile (current) {\n\t\tif (current.previousSibling) {\n\t\t\tcurrent = current.previousSibling;\n\t\t\twhile (current && current.lastChild) {\n\t\t\t\tcurrent = current.lastChild;\n\t\t\t}\n\t\t\tif (current && current.nodeType === Node.TEXT_NODE) return current;\n\t\t\tcontinue;\n\t\t}\n\t\tcurrent = current.parentNode;\n\t\tif (!current || (current as Element).matches?.('p, li, h1, h2, h3, h4, h5, h6, blockquote, [contenteditable=\"true\"]')) {\n\t\t\treturn null;\n\t\t}\n\t}\n\treturn null;\n}\n","import { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport type { RichTextEditorStrings } from '../rich-text-editor.strings';\nimport type { TiptapEditor } from '../rich-text-editor.types';\n\ninterface CountsFooterTextProps {\n\ttext: string;\n\tmaxLength?: number;\n\tstrings: RichTextEditorStrings;\n}\n\nexport function CountsFooterText({ text, maxLength, strings }: CountsFooterTextProps) {\n\tconst chars = text.length;\n\tconst words = text.trim().length > 0 ? text.trim().split(/\\s+/).length : 0;\n\tconst overLimit = typeof maxLength === 'number' && chars > maxLength;\n\n\treturn (\n\t\t<div className=\"border-border flex items-center justify-end gap-3 border-t px-3 py-1.5\">\n\t\t\t<Text\n\t\t\t\ttag=\"span\"\n\t\t\t\tsize=\"xs\"\n\t\t\t\ttype={overLimit ? 'error' : 'secondary'}\n\t\t\t\tweight={overLimit ? 'medium' : 'regular'}\n\t\t\t\tclassName={cn('tabular-nums')}\n\t\t\t>\n\t\t\t\t{chars}\n\t\t\t\t{typeof maxLength === 'number' ? ` / ${maxLength}` : ''} {strings.counts.characters}\n\t\t\t</Text>\n\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"tabular-nums\">\n\t\t\t\t{words} {strings.counts.words}\n\t\t\t</Text>\n\t\t</div>\n\t);\n}\n\nCountsFooterText.displayName = 'CountsFooterText';\n\ninterface CountsFooterProps {\n\teditor: TiptapEditor;\n\tsourceMode: boolean;\n\tsourceValue: string;\n\tmaxLength?: number;\n\tstrings: RichTextEditorStrings;\n}\n\nexport function CountsFooter({\n\teditor,\n\tsourceMode,\n\tsourceValue,\n\tmaxLength,\n\tstrings,\n}: CountsFooterProps) {\n\tconst text = sourceMode\n\t\t? sourceValue.replace(/<[^>]*>/g, '')\n\t\t: (editor?.getText() ?? '');\n\n\treturn <CountsFooterText text={text} maxLength={maxLength} strings={strings} />;\n}\n\nCountsFooter.displayName = 'CountsFooter';\n","/**\n * Plain HTML normalization shared by the TipTap and contenteditable\n * fallback editors. Keeping these out of the React tree means the\n * editor partials stay focused on rendering.\n */\n\nexport function normalizeHtml(value: string): string {\n\tconst trimmed = value.trim();\n\n\tif (trimmed === '' || trimmed === '<p></p>' || trimmed === '<p><br></p>') {\n\t\treturn '';\n\t}\n\n\treturn trimmed;\n}\n\nexport function toEditorContent(value: string): string {\n\tconst normalized = normalizeHtml(value);\n\treturn normalized === '' ? '<p></p>' : normalized;\n}\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {\n\tBold,\n\tItalic,\n\tList,\n\tListOrdered,\n\tQuote,\n\tRedo2,\n\tStrikethrough,\n\tUndo2,\n} from 'lucide-react';\nimport * as TiptapReact from '@tiptap/react';\nimport * as StarterKitModule from '@tiptap/starter-kit';\n\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { defaultRichTextEditorStrings } from '../rich-text-editor.strings';\nimport type {\n\tRichTextEditorHandle,\n\tRichTextEditorProps,\n\tToolbarButtonConfig,\n} from '../rich-text-editor.types';\nimport { readCaretContext, replaceBeforeCaret } from './caret-helpers';\nimport { CountsFooter } from './counts-footer';\nimport { normalizeHtml, toEditorContent } from './html-helpers';\nimport { RichTextEditorToolbar } from './rich-text-editor-toolbar';\n\nconst EditorContent = TiptapReact.EditorContent;\nconst useTiptapEditor = TiptapReact.useEditor;\nconst StarterKit =\n\t'default' in StarterKitModule ? StarterKitModule.default : StarterKitModule;\n\nexport const TiptapRichTextEditor = forwardRef<RichTextEditorHandle, RichTextEditorProps>(function TiptapRichTextEditor(\n\t{\n\t\tvalue,\n\t\tonChange,\n\t\tplaceholder,\n\t\tcompact = false,\n\t\tminHeight,\n\t\tmaxHeight,\n\t\tdisabled = false,\n\t\tshowCounts = false,\n\t\tmaxLength,\n\t\textraToolbarItems,\n\t\ttoolbarTrailing,\n\t\tfooterSlot,\n\t\thideSourceToggle = false,\n\t\tautoFocus = false,\n\t\tclassName,\n\t\tonCaretChange,\n\t\tstrings: stringsProp,\n\t},\n\tref,\n) {\n\tconst strings = useStrings(defaultRichTextEditorStrings, stringsProp);\n\tconst [isFocused, setIsFocused] = useState(false);\n\tconst [sourceMode, setSourceMode] = useState(false);\n\tconst [sourceValue, setSourceValue] = useState('');\n\tconst isFocusedRef = useRef(false);\n\tconst externalValueRef = useRef<string>(normalizeHtml(value));\n\tconst onCaretChangeRef = useRef(onCaretChange);\n\tonCaretChangeRef.current = onCaretChange;\n\n\tconst editor = useTiptapEditor({\n\t\textensions: [StarterKit],\n\t\tcontent: toEditorContent(value),\n\t\teditable: !disabled,\n\t\timmediatelyRender: false,\n\t\tautofocus: autoFocus ? 'end' : false,\n\t\tonFocus: () => {\n\t\t\tisFocusedRef.current = true;\n\t\t\tsetIsFocused(true);\n\t\t},\n\t\tonBlur: () => {\n\t\t\tisFocusedRef.current = false;\n\t\t\tsetIsFocused(false);\n\t\t},\n\t\tonUpdate: ({ editor: currentEditor }: { editor: { getHTML: () => string } }) => {\n\t\t\tconst html = normalizeHtml(currentEditor.getHTML());\n\t\t\tif (!isFocusedRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (html !== externalValueRef.current) {\n\t\t\t\texternalValueRef.current = html;\n\t\t\t\tonChange(html);\n\t\t\t}\n\n\t\t\tonCaretChangeRef.current?.();\n\t\t},\n\t\teditorProps: {\n\t\t\tattributes: {\n\t\t\t\trole: 'textbox',\n\t\t\t\t'aria-label': strings.editorLabel,\n\t\t\t\t'aria-multiline': 'true',\n\t\t\t\tclass: 'prose prose-sm prose-p:my-0.5 prose-p:leading-relaxed prose-headings:my-1 prose-ul:my-1 prose-ol:my-1 prose-li:my-0.5 max-w-none px-3 py-2 text-sm focus-visible:outline-none dark:prose-invert',\n\t\t\t},\n\t\t},\n\t});\n\n\tuseEffect(() => {\n\t\tif (!editor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst current = normalizeHtml(editor.getHTML());\n\t\tconst next = normalizeHtml(value);\n\t\texternalValueRef.current = next;\n\n\t\tif (current !== next) {\n\t\t\teditor.commands.setContent(toEditorContent(next), { emitUpdate: false });\n\t\t}\n\t}, [editor, value]);\n\n\tuseEffect(() => {\n\t\tif (!editor) {\n\t\t\treturn;\n\t\t}\n\n\t\teditor.setEditable(!disabled);\n\t}, [disabled, editor]);\n\n\tuseEffect(() => {\n\t\tif (typeof document === 'undefined') return;\n\t\tconst handler = () => {\n\t\t\tif (!isFocusedRef.current) return;\n\t\t\tonCaretChangeRef.current?.();\n\t\t};\n\t\tdocument.addEventListener('selectionchange', handler);\n\t\treturn () => document.removeEventListener('selectionchange', handler);\n\t}, []);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tfocus: () => {\n\t\t\t\teditor?.chain().focus().run();\n\t\t\t},\n\t\t\tgetHTML: () => normalizeHtml(editor?.getHTML() ?? ''),\n\t\t\tsetHTML: (html: string) => {\n\t\t\t\tconst next = normalizeHtml(html);\n\t\t\t\texternalValueRef.current = next;\n\t\t\t\teditor?.commands.setContent(toEditorContent(next), { emitUpdate: false });\n\t\t\t\tonChange(next);\n\t\t\t},\n\t\t\tinsertHTML: (html: string) => {\n\t\t\t\tif (!editor) return;\n\t\t\t\teditor.chain().focus().insertContent(html).run();\n\t\t\t},\n\t\t\tisEmpty: () => normalizeHtml(editor?.getHTML() ?? '') === '',\n\t\t\tclear: () => {\n\t\t\t\texternalValueRef.current = '';\n\t\t\t\teditor?.commands.setContent('<p></p>', { emitUpdate: false });\n\t\t\t\tonChange('');\n\t\t\t},\n\t\t\tgetCaretContext: () => readCaretContext(),\n\t\t\treplaceBeforeCaret: (length: number, html: string) => {\n\t\t\t\treplaceBeforeCaret(editor, length, html, (next) => {\n\t\t\t\t\texternalValueRef.current = normalizeHtml(next);\n\t\t\t\t\tonChange(externalValueRef.current);\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t\t[editor, onChange],\n\t);\n\n\tconst contentStyle = useMemo(\n\t\t() => ({\n\t\t\tminHeight: minHeight ?? (compact ? '2rem' : '12rem'),\n\t\t\t...(maxHeight ? { maxHeight, overflowY: 'auto' as const } : {}),\n\t\t}),\n\t\t[compact, maxHeight, minHeight],\n\t);\n\n\tconst toggleSourceMode = useCallback(() => {\n\t\tif (!editor) return;\n\n\t\tif (sourceMode) {\n\t\t\tconst html = toEditorContent(sourceValue);\n\t\t\teditor.commands.setContent(html, { emitUpdate: false });\n\t\t\tconst normalized = normalizeHtml(sourceValue);\n\t\t\texternalValueRef.current = normalized;\n\t\t\tonChange(normalized);\n\t\t\tsetSourceMode(false);\n\t\t} else {\n\t\t\tsetSourceValue(editor.getHTML());\n\t\t\tsetSourceMode(true);\n\t\t}\n\t}, [editor, onChange, sourceMode, sourceValue]);\n\n\tconst handleSourceChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\t\tconst next = e.target.value;\n\t\t\tsetSourceValue(next);\n\t\t\tconst normalized = normalizeHtml(next);\n\t\t\texternalValueRef.current = normalized;\n\t\t\tonChange(normalized);\n\t\t},\n\t\t[onChange],\n\t);\n\n\tconst toolbarButtons = useMemo<ToolbarButtonConfig[]>(\n\t\t() => [\n\t\t\t{\n\t\t\t\tid: 'bold',\n\t\t\t\ticon: Bold,\n\t\t\t\tlabel: strings.toolbar.bold,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('bold')),\n\t\t\t\trun: () => editor?.chain().focus().toggleBold().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'italic',\n\t\t\t\ticon: Italic,\n\t\t\t\tlabel: strings.toolbar.italic,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('italic')),\n\t\t\t\trun: () => editor?.chain().focus().toggleItalic().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'strike',\n\t\t\t\ticon: Strikethrough,\n\t\t\t\tlabel: strings.toolbar.strike,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('strike')),\n\t\t\t\trun: () => editor?.chain().focus().toggleStrike().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'bullet-list',\n\t\t\t\ticon: List,\n\t\t\t\tlabel: strings.toolbar.bulletList,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('bulletList')),\n\t\t\t\trun: () => editor?.chain().focus().toggleBulletList().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'ordered-list',\n\t\t\t\ticon: ListOrdered,\n\t\t\t\tlabel: strings.toolbar.orderedList,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('orderedList')),\n\t\t\t\trun: () => editor?.chain().focus().toggleOrderedList().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'blockquote',\n\t\t\t\ticon: Quote,\n\t\t\t\tlabel: strings.toolbar.blockquote,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('blockquote')),\n\t\t\t\trun: () => editor?.chain().focus().toggleBlockquote().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'undo',\n\t\t\t\ticon: Undo2,\n\t\t\t\tlabel: strings.toolbar.undo,\n\t\t\t\tisActive: () => false,\n\t\t\t\trun: () => editor?.chain().focus().undo().run(),\n\t\t\t\tdisabled: !editor?.can().chain().focus().undo().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'redo',\n\t\t\t\ticon: Redo2,\n\t\t\t\tlabel: strings.toolbar.redo,\n\t\t\t\tisActive: () => false,\n\t\t\t\trun: () => editor?.chain().focus().redo().run(),\n\t\t\t\tdisabled: !editor?.can().chain().focus().redo().run(),\n\t\t\t},\n\t\t],\n\t\t[editor, strings],\n\t);\n\n\tconst countsFooter =\n\t\tshowCounts && editor ? (\n\t\t\t<CountsFooter\n\t\t\t\teditor={editor}\n\t\t\t\tsourceMode={sourceMode}\n\t\t\t\tsourceValue={sourceValue}\n\t\t\t\tmaxLength={maxLength}\n\t\t\t\tstrings={strings}\n\t\t\t/>\n\t\t) : null;\n\n\tconst placeholderText = typeof placeholder === 'string' ? placeholder : '';\n\tconst showPlaceholder =\n\t\tplaceholderText.length > 0 && !isFocused && Boolean(editor?.isEmpty);\n\tconst placeholderNode = showPlaceholder ? (\n\t\t<span className=\"text-muted-foreground pointer-events-none absolute left-3 top-2 text-sm\">\n\t\t\t{placeholderText}\n\t\t</span>\n\t) : null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'border-input bg-background rounded-md border',\n\t\t\t\tdisabled && 'opacity-70',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<RichTextEditorToolbar\n\t\t\t\tbuttons={toolbarButtons}\n\t\t\t\textraToolbarItems={extraToolbarItems}\n\t\t\t\thideSourceToggle={hideSourceToggle}\n\t\t\t\tsourceMode={sourceMode}\n\t\t\t\ttoggleSourceMode={toggleSourceMode}\n\t\t\t\tdisabled={disabled}\n\t\t\t\thasEditor={Boolean(editor)}\n\t\t\t\ttoolbarTrailing={toolbarTrailing}\n\t\t\t\tstrings={strings}\n\t\t\t/>\n\n\t\t\t{sourceMode ? (\n\t\t\t\t<textarea\n\t\t\t\t\taria-label={strings.sourceLabel}\n\t\t\t\t\tvalue={sourceValue}\n\t\t\t\t\tonChange={handleSourceChange}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tspellCheck={false}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'bg-muted/50 w-full resize-y px-3 py-2 font-mono text-xs leading-relaxed focus-visible:outline-none',\n\t\t\t\t\t\tdisabled && 'cursor-not-allowed',\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={contentStyle}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"relative\" style={contentStyle}>\n\t\t\t\t\t{placeholderNode}\n\n\t\t\t\t\t<EditorContent\n\t\t\t\t\t\teditor={editor}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-full',\n\t\t\t\t\t\t\t'[&_.ProseMirror]:h-full',\n\t\t\t\t\t\t\t'[&_.ProseMirror]:min-h-full',\n\t\t\t\t\t\t\t'[&_.ProseMirror]:outline-none',\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!footerSlot && (\n\t\t\t\t<div className=\"px-3 pb-2 pt-1\">{footerSlot}</div>\n\t\t\t)}\n\n\t\t\t{countsFooter}\n\t\t</div>\n\t);\n});\n\nTiptapRichTextEditor.displayName = 'TiptapRichTextEditor';\n\nexport const hasTiptapRuntime =\n\ttypeof EditorContent === 'function' &&\n\ttypeof useTiptapEditor === 'function' &&\n\ttypeof StarterKit === 'object' &&\n\tStarterKit !== null;\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {\n\tBold,\n\tItalic,\n\tList,\n\tListOrdered,\n\tQuote,\n\tRedo2,\n\tStrikethrough,\n\tUndo2,\n} from 'lucide-react';\n\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { defaultRichTextEditorStrings } from '../rich-text-editor.strings';\nimport type {\n\tRichTextEditorHandle,\n\tRichTextEditorProps,\n\tToolbarButtonConfig,\n} from '../rich-text-editor.types';\nimport {\n\tinsertHtmlIntoEditable,\n\treadCaretContext,\n\treplaceBeforeCaret,\n} from './caret-helpers';\nimport { CountsFooterText } from './counts-footer';\nimport { normalizeHtml, toEditorContent } from './html-helpers';\nimport { RichTextEditorToolbar } from './rich-text-editor-toolbar';\n\n/**\n * Fallback editor used when the TipTap runtime is unavailable (e.g. in\n * environments where the package failed to load). Renders a\n * `contenteditable` surface with the same imperative handle so callers\n * never need to care which variant they got.\n */\nexport const FallbackRichTextEditor = forwardRef<RichTextEditorHandle, RichTextEditorProps>(function FallbackRichTextEditor(\n\t{\n\t\tvalue,\n\t\tonChange,\n\t\tplaceholder,\n\t\tcompact = false,\n\t\tminHeight,\n\t\tmaxHeight,\n\t\tdisabled = false,\n\t\tshowCounts = false,\n\t\tmaxLength,\n\t\textraToolbarItems,\n\t\ttoolbarTrailing,\n\t\tfooterSlot,\n\t\thideSourceToggle = false,\n\t\tautoFocus = false,\n\t\tclassName,\n\t\tonCaretChange,\n\t\tstrings: stringsProp,\n\t},\n\tref,\n) {\n\tconst strings = useStrings(defaultRichTextEditorStrings, stringsProp);\n\tconst editableRef = useRef<HTMLDivElement>(null);\n\tconst [isFocused, setIsFocused] = useState(false);\n\tconst [sourceMode, setSourceMode] = useState(false);\n\tconst [sourceValue, setSourceValue] = useState('');\n\tconst externalValueRef = useRef<string>(normalizeHtml(value));\n\tconst onCaretChangeRef = useRef(onCaretChange);\n\tonCaretChangeRef.current = onCaretChange;\n\n\tuseEffect(() => {\n\t\tconst editable = editableRef.current;\n\t\tif (!editable || isFocused) return;\n\t\tconst next = toEditorContent(value);\n\t\tif (normalizeHtml(editable.innerHTML) !== normalizeHtml(next)) {\n\t\t\teditable.innerHTML = next;\n\t\t}\n\t\texternalValueRef.current = normalizeHtml(value);\n\t}, [isFocused, value]);\n\n\tuseEffect(() => {\n\t\tif (!autoFocus) return;\n\t\teditableRef.current?.focus();\n\t}, [autoFocus]);\n\n\tconst emitEditableChange = useCallback(() => {\n\t\tconst editable = editableRef.current;\n\t\tconst html = normalizeHtml(editable?.innerHTML ?? '');\n\t\texternalValueRef.current = html;\n\t\tonChange(html);\n\t\tonCaretChangeRef.current?.();\n\t}, [onChange]);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tfocus: () => editableRef.current?.focus(),\n\t\t\tgetHTML: () => normalizeHtml(editableRef.current?.innerHTML ?? ''),\n\t\t\tsetHTML: (html: string) => {\n\t\t\t\tconst next = normalizeHtml(html);\n\t\t\t\texternalValueRef.current = next;\n\t\t\t\tif (editableRef.current) {\n\t\t\t\t\teditableRef.current.innerHTML = toEditorContent(next);\n\t\t\t\t}\n\t\t\t\tonChange(next);\n\t\t\t},\n\t\t\tinsertHTML: (html: string) => {\n\t\t\t\tinsertHtmlIntoEditable(editableRef.current, html);\n\t\t\t\temitEditableChange();\n\t\t\t},\n\t\t\tisEmpty: () => normalizeHtml(editableRef.current?.innerHTML ?? '') === '',\n\t\t\tclear: () => {\n\t\t\t\texternalValueRef.current = '';\n\t\t\t\tif (editableRef.current) editableRef.current.innerHTML = '<p></p>';\n\t\t\t\tonChange('');\n\t\t\t},\n\t\t\tgetCaretContext: () => readCaretContext(),\n\t\t\treplaceBeforeCaret: (length: number, html: string) => {\n\t\t\t\treplaceBeforeCaret(null, length, html, () => emitEditableChange());\n\t\t\t},\n\t\t}),\n\t\t[emitEditableChange, onChange],\n\t);\n\n\tconst contentStyle = useMemo(\n\t\t() => ({\n\t\t\tminHeight: minHeight ?? (compact ? '2rem' : '12rem'),\n\t\t\t...(maxHeight ? { maxHeight, overflowY: 'auto' as const } : {}),\n\t\t}),\n\t\t[compact, maxHeight, minHeight],\n\t);\n\n\tconst toggleSourceMode = useCallback(() => {\n\t\tif (sourceMode) {\n\t\t\tconst normalized = normalizeHtml(sourceValue);\n\t\t\texternalValueRef.current = normalized;\n\t\t\tif (editableRef.current) {\n\t\t\t\teditableRef.current.innerHTML = toEditorContent(normalized);\n\t\t\t}\n\t\t\tonChange(normalized);\n\t\t\tsetSourceMode(false);\n\t\t\treturn;\n\t\t}\n\t\tsetSourceValue(editableRef.current?.innerHTML ?? toEditorContent(value));\n\t\tsetSourceMode(true);\n\t}, [onChange, sourceMode, sourceValue, value]);\n\n\tconst handleSourceChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\t\tconst next = e.target.value;\n\t\t\tsetSourceValue(next);\n\t\t\tconst normalized = normalizeHtml(next);\n\t\t\texternalValueRef.current = normalized;\n\t\t\tonChange(normalized);\n\t\t},\n\t\t[onChange],\n\t);\n\n\tconst placeholderText = typeof placeholder === 'string' ? placeholder : '';\n\tconst isEmpty = normalizeHtml(externalValueRef.current) === '';\n\tconst placeholderNode =\n\t\tplaceholderText.length > 0 && !isFocused && isEmpty ? (\n\t\t\t<span className=\"text-muted-foreground pointer-events-none absolute left-3 top-2 text-sm\">\n\t\t\t\t{placeholderText}\n\t\t\t</span>\n\t\t) : null;\n\n\tconst toolbarButtons = useMemo<ToolbarButtonConfig[]>(\n\t\t() => [\n\t\t\t{ id: 'bold', icon: Bold, label: strings.toolbar.bold, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'italic', icon: Italic, label: strings.toolbar.italic, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'strike', icon: Strikethrough, label: strings.toolbar.strike, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'bullet-list', icon: List, label: strings.toolbar.bulletList, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'ordered-list', icon: ListOrdered, label: strings.toolbar.orderedList, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'blockquote', icon: Quote, label: strings.toolbar.blockquote, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'undo', icon: Undo2, label: strings.toolbar.undo, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'redo', icon: Redo2, label: strings.toolbar.redo, isActive: () => false, run: () => undefined, disabled: true },\n\t\t],\n\t\t[strings],\n\t);\n\n\tconst text = sourceMode\n\t\t? sourceValue.replace(/<[^>]*>/g, '')\n\t\t: (editableRef.current?.innerText ?? normalizeHtml(value).replace(/<[^>]*>/g, ''));\n\tconst countsFooter =\n\t\tshowCounts ? (\n\t\t\t<CountsFooterText text={text} maxLength={maxLength} strings={strings} />\n\t\t) : null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'border-input bg-background rounded-md border',\n\t\t\t\tdisabled && 'opacity-70',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<RichTextEditorToolbar\n\t\t\t\tbuttons={toolbarButtons}\n\t\t\t\textraToolbarItems={extraToolbarItems}\n\t\t\t\thideSourceToggle={hideSourceToggle}\n\t\t\t\tsourceMode={sourceMode}\n\t\t\t\ttoggleSourceMode={toggleSourceMode}\n\t\t\t\tdisabled={disabled}\n\t\t\t\thasEditor\n\t\t\t\ttoolbarTrailing={toolbarTrailing}\n\t\t\t\tstrings={strings}\n\t\t\t/>\n\n\t\t\t{sourceMode ? (\n\t\t\t\t<textarea\n\t\t\t\t\taria-label={strings.sourceLabel}\n\t\t\t\t\tvalue={sourceValue}\n\t\t\t\t\tonChange={handleSourceChange}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tspellCheck={false}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'bg-muted/50 w-full resize-y px-3 py-2 font-mono text-xs leading-relaxed focus-visible:outline-none',\n\t\t\t\t\t\tdisabled && 'cursor-not-allowed',\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={contentStyle}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"relative\" style={contentStyle}>\n\t\t\t\t\t{placeholderNode}\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={editableRef}\n\t\t\t\t\t\trole=\"textbox\"\n\t\t\t\t\t\taria-label={strings.editorLabel}\n\t\t\t\t\t\taria-multiline=\"true\"\n\t\t\t\t\t\tcontentEditable={!disabled}\n\t\t\t\t\t\tsuppressContentEditableWarning\n\t\t\t\t\t\tonInput={emitEditableChange}\n\t\t\t\t\t\tonKeyUp={() => onCaretChangeRef.current?.()}\n\t\t\t\t\t\tonMouseUp={() => onCaretChangeRef.current?.()}\n\t\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'prose prose-sm prose-p:my-0.5 prose-p:leading-relaxed prose-headings:my-1 prose-ul:my-1 prose-ol:my-1 prose-li:my-0.5 max-w-none px-3 py-2 text-sm focus-visible:outline-none dark:prose-invert',\n\t\t\t\t\t\t\t'h-full min-h-full',\n\t\t\t\t\t\t\tdisabled && 'cursor-not-allowed',\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tdangerouslySetInnerHTML={{ __html: toEditorContent(value) }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!footerSlot && (\n\t\t\t\t<div className=\"px-3 pb-2 pt-1\">{footerSlot}</div>\n\t\t\t)}\n\n\t\t\t{countsFooter}\n\t\t</div>\n\t);\n});\n\nFallbackRichTextEditor.displayName = 'FallbackRichTextEditor';\n","/**\n * Public `<RichTextEditor>` shell — picks the TipTap-backed editor when\n * the runtime is loaded and falls back to a plain `contenteditable`\n * surface otherwise. Both variants implement the same imperative\n * `RichTextEditorHandle`, so callers don't have to branch.\n *\n * Heavy lifting lives in `partials/`:\n * - `partials/rich-text-editor-tiptap.tsx` — TipTap variant\n * - `partials/rich-text-editor-fallback.tsx` — contenteditable variant\n * - `partials/rich-text-editor-toolbar.tsx` — shared toolbar\n * - `partials/counts-footer.tsx` — char/word counts\n * - `partials/caret-helpers.ts` — caret introspection\n * - `partials/html-helpers.ts` — HTML normalization\n */\nimport { forwardRef } from 'react';\n\nimport {\n\tFallbackRichTextEditor,\n\tTiptapRichTextEditor,\n\thasTiptapRuntime,\n} from './partials';\nimport type {\n\tRichTextEditorHandle,\n\tRichTextEditorProps,\n} from './rich-text-editor.types';\n\nexport const RichTextEditor = forwardRef<RichTextEditorHandle, RichTextEditorProps>(function RichTextEditor(\n\tprops,\n\tref,\n) {\n\tif (!hasTiptapRuntime) {\n\t\treturn <FallbackRichTextEditor className=\"rich-text-editor--component\" {...props} ref={ref} />;\n\t}\n\n\treturn <TiptapRichTextEditor {...props} ref={ref} />;\n});\n\nRichTextEditor.displayName = 'RichTextEditor';\n\nexport type {\n\tRichTextEditorProps,\n\tRichTextEditorHandle,\n\tRichTextEditorToolbarItem,\n\tRichTextCaretContext,\n} from './rich-text-editor.types';\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require("./chunk-CMqjfN_6.cjs"),t=require("../lib/strings.cjs"),n=require("../lib/utils.cjs"),r=require("./heading-0DYCOrgC.cjs"),i=require("./button-C1qc97U1.cjs");let a=require("react"),o=require("react/jsx-runtime"),s=require("lucide-react"),c=require("@tiptap/react");c=e.t(c,1);let l=require("@tiptap/starter-kit");l=e.t(l,1);function u({buttons:e,extraToolbarItems:t,hideSourceToggle:n=!1,sourceMode:r,toggleSourceMode:a,disabled:c=!1,hasEditor:l=!0,toolbarTrailing:u,strings:d}){let f=(t?.length??0)>0;return(0,o.jsxs)(`div`,{className:`border-border flex flex-wrap items-center gap-1 border-b p-1.5`,children:[e.map(e=>{let t=e.icon,n=e.isActive();return(0,o.jsx)(i.t,{type:`button`,variant:n?`primary`:`secondary`,buttonStyle:n?`solid`:`ghost`,size:`icon-xs`,onClick:e.run,disabled:c||!l||r||e.disabled,"aria-label":e.label,title:e.label,children:(0,o.jsx)(t,{className:`h-3.5 w-3.5`})},e.id)}),!n&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`div`,{className:`bg-border mx-1 h-4 w-px`}),(0,o.jsx)(i.t,{type:`button`,variant:r?`primary`:`secondary`,buttonStyle:r?`solid`:`ghost`,size:`icon-xs`,onClick:a,disabled:c||!l,"aria-label":d.toolbar.sourceCode,title:d.toolbar.sourceCode,children:(0,o.jsx)(s.Code2,{className:`h-3.5 w-3.5`})})]}),f&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`div`,{className:`bg-border mx-1 h-4 w-px`}),t?.map(e=>{let t=e.icon,n=e.isActive?.()??!1;return(0,o.jsx)(i.t,{type:`button`,variant:n?`primary`:`secondary`,buttonStyle:n?`solid`:`ghost`,size:`icon-xs`,onClick:e.onClick,disabled:c||!l||r||e.disabled,"aria-label":e.label,title:e.label,children:(0,o.jsx)(t,{className:`h-3.5 w-3.5`})},e.id)})]}),!!u&&(0,o.jsx)(`div`,{className:`ml-auto flex items-center gap-1`,children:u})]})}u.displayName=`RichTextEditorToolbar`;var d={editorLabel:`Rich text editor`,sourceLabel:`HTML source`,toolbar:{bold:`Bold`,italic:`Italic`,strike:`Strike`,bulletList:`Bullet list`,orderedList:`Ordered list`,blockquote:`Quote`,undo:`Undo`,redo:`Redo`,sourceCode:`Source code`},counts:{characters:`characters`,words:`words`,max:`max`}};function f(){if(typeof window>`u`)return null;let e=window.getSelection();if(!e||e.rangeCount===0)return null;let t=e.getRangeAt(0);if(!t.collapsed)return null;let n=t.startContainer,r=t.startOffset,i=n;for(;i&&i.nodeType!==Node.ELEMENT_NODE;)i=i.parentNode;if(!i)return null;let a=i.closest(`[contenteditable="true"]`)??i.closest(`.ProseMirror`);if(!a)return null;let o=``;n.nodeType===Node.TEXT_NODE&&(o=(n.textContent??``).slice(0,r));let s=n;for(;s&&s!==a&&s!==i;){let e=s.previousSibling;for(;e;)o=(e.textContent??``)+o,e=e.previousSibling;if(s=s.parentNode,s&&s.matches?.(`p, li, h1, h2, h3, h4, h5, h6, blockquote`))break}let c,l=t.getBoundingClientRect();return l&&(l.top||l.left||l.right||l.bottom)&&(c={top:l.top,left:l.left,bottom:l.bottom,right:l.right}),{textBefore:o,rect:c}}function p(e,t,n,r){if(typeof window>`u`)return;let i=window.getSelection();if(!i||i.rangeCount===0)return;let a=i.getRangeAt(0);if(!a.collapsed)return;let o=t,s=a.startContainer,c=a.startOffset;for(;o>0;){if(s.nodeType===Node.TEXT_NODE){let e=Math.min(c,o);if(c-=e,o-=e,o===0)break}let e=h(s);if(!e)break;s=e,c=e.textContent?.length??0}let l=document.createRange();if(l.setStart(s,c),l.setEnd(a.endContainer,a.endOffset),i.removeAllRanges(),i.addRange(l),e){e.chain().focus().insertContent(n).run(),r(e.getHTML());return}l.deleteContents();let u=document.createRange().createContextualFragment(n);l.insertNode(u),i.collapseToEnd();let d=s?.parentElement?.closest?.(`[contenteditable="true"]`)??null;d&&r(d.innerHTML)}function m(e,t){if(typeof window>`u`||!e)return;e.focus();let n=window.getSelection();if(!n||n.rangeCount===0){e.insertAdjacentHTML(`beforeend`,t);return}let r=n.getRangeAt(0);if(!e.contains(r.commonAncestorContainer)){e.insertAdjacentHTML(`beforeend`,t);return}r.deleteContents();let i=document.createRange().createContextualFragment(t);r.insertNode(i),r.collapse(!1),n.removeAllRanges(),n.addRange(r)}function h(e){let t=e;for(;t;){if(t.previousSibling){for(t=t.previousSibling;t&&t.lastChild;)t=t.lastChild;if(t&&t.nodeType===Node.TEXT_NODE)return t;continue}if(t=t.parentNode,!t||t.matches?.(`p, li, h1, h2, h3, h4, h5, h6, blockquote, [contenteditable="true"]`))return null}return null}function g({text:e,maxLength:t,strings:i}){let a=e.length,s=e.trim().length>0?e.trim().split(/\s+/).length:0,c=typeof t==`number`&&a>t;return(0,o.jsxs)(`div`,{className:`border-border flex items-center justify-end gap-3 border-t px-3 py-1.5`,children:[(0,o.jsxs)(r.n,{tag:`span`,size:`xs`,type:c?`error`:`secondary`,weight:c?`medium`:`regular`,className:n.cn(`tabular-nums`),children:[a,typeof t==`number`?` / ${t}`:``,` `,i.counts.characters]}),(0,o.jsxs)(r.n,{tag:`span`,size:`xs`,type:`secondary`,className:`tabular-nums`,children:[s,` `,i.counts.words]})]})}g.displayName=`CountsFooterText`;function _({editor:e,sourceMode:t,sourceValue:n,maxLength:r,strings:i}){return(0,o.jsx)(g,{text:t?n.replace(/<[^>]*>/g,``):e?.getText()??``,maxLength:r,strings:i})}_.displayName=`CountsFooter`;function v(e){let t=e.trim();return t===``||t===`<p></p>`||t===`<p><br></p>`?``:t}function y(e){let t=v(e);return t===``?`<p></p>`:t}var b=c.EditorContent,x=c.useEditor,S=`default`in l?l.default:l,C=(0,a.forwardRef)(function({value:e,onChange:r,placeholder:i,compact:c=!1,minHeight:l,maxHeight:m,disabled:h=!1,showCounts:g=!1,maxLength:C,extraToolbarItems:w,toolbarTrailing:T,footerSlot:E,hideSourceToggle:D=!1,autoFocus:O=!1,className:k,onCaretChange:A,strings:j},M){let N=t.useStrings(d,j),[P,F]=(0,a.useState)(!1),[I,L]=(0,a.useState)(!1),[R,z]=(0,a.useState)(``),B=(0,a.useRef)(!1),V=(0,a.useRef)(v(e)),H=(0,a.useRef)(A);H.current=A;let U=x({extensions:[S],content:y(e),editable:!h,immediatelyRender:!1,autofocus:O?`end`:!1,onFocus:()=>{B.current=!0,F(!0)},onBlur:()=>{B.current=!1,F(!1)},onUpdate:({editor:e})=>{let t=v(e.getHTML());B.current&&(t!==V.current&&(V.current=t,r(t)),H.current?.())},editorProps:{attributes:{role:`textbox`,"aria-label":N.editorLabel,"aria-multiline":`true`,class:`prose prose-sm prose-p:my-0.5 prose-p:leading-relaxed prose-headings:my-1 prose-ul:my-1 prose-ol:my-1 prose-li:my-0.5 max-w-none px-3 py-2 text-sm focus-visible:outline-none dark:prose-invert`}}});(0,a.useEffect)(()=>{if(!U)return;let t=v(U.getHTML()),n=v(e);V.current=n,t!==n&&U.commands.setContent(y(n),{emitUpdate:!1})},[U,e]),(0,a.useEffect)(()=>{U&&U.setEditable(!h)},[h,U]),(0,a.useEffect)(()=>{if(typeof document>`u`)return;let e=()=>{B.current&&H.current?.()};return document.addEventListener(`selectionchange`,e),()=>document.removeEventListener(`selectionchange`,e)},[]),(0,a.useImperativeHandle)(M,()=>({focus:()=>{U?.chain().focus().run()},getHTML:()=>v(U?.getHTML()??``),setHTML:e=>{let t=v(e);V.current=t,U?.commands.setContent(y(t),{emitUpdate:!1}),r(t)},insertHTML:e=>{U&&U.chain().focus().insertContent(e).run()},isEmpty:()=>v(U?.getHTML()??``)===``,clear:()=>{V.current=``,U?.commands.setContent(`<p></p>`,{emitUpdate:!1}),r(``)},getCaretContext:()=>f(),replaceBeforeCaret:(e,t)=>{p(U,e,t,e=>{V.current=v(e),r(V.current)})}}),[U,r]);let W=(0,a.useMemo)(()=>({minHeight:l??(c?`2rem`:`12rem`),...m?{maxHeight:m,overflowY:`auto`}:{}}),[c,m,l]),G=(0,a.useCallback)(()=>{if(U)if(I){let e=y(R);U.commands.setContent(e,{emitUpdate:!1});let t=v(R);V.current=t,r(t),L(!1)}else z(U.getHTML()),L(!0)},[U,r,I,R]),K=(0,a.useCallback)(e=>{let t=e.target.value;z(t);let n=v(t);V.current=n,r(n)},[r]),q=(0,a.useMemo)(()=>[{id:`bold`,icon:s.Bold,label:N.toolbar.bold,isActive:()=>!!U?.isActive(`bold`),run:()=>U?.chain().focus().toggleBold().run()},{id:`italic`,icon:s.Italic,label:N.toolbar.italic,isActive:()=>!!U?.isActive(`italic`),run:()=>U?.chain().focus().toggleItalic().run()},{id:`strike`,icon:s.Strikethrough,label:N.toolbar.strike,isActive:()=>!!U?.isActive(`strike`),run:()=>U?.chain().focus().toggleStrike().run()},{id:`bullet-list`,icon:s.List,label:N.toolbar.bulletList,isActive:()=>!!U?.isActive(`bulletList`),run:()=>U?.chain().focus().toggleBulletList().run()},{id:`ordered-list`,icon:s.ListOrdered,label:N.toolbar.orderedList,isActive:()=>!!U?.isActive(`orderedList`),run:()=>U?.chain().focus().toggleOrderedList().run()},{id:`blockquote`,icon:s.Quote,label:N.toolbar.blockquote,isActive:()=>!!U?.isActive(`blockquote`),run:()=>U?.chain().focus().toggleBlockquote().run()},{id:`undo`,icon:s.Undo2,label:N.toolbar.undo,isActive:()=>!1,run:()=>U?.chain().focus().undo().run(),disabled:!U?.can().chain().focus().undo().run()},{id:`redo`,icon:s.Redo2,label:N.toolbar.redo,isActive:()=>!1,run:()=>U?.chain().focus().redo().run(),disabled:!U?.can().chain().focus().redo().run()}],[U,N]),J=g&&U?(0,o.jsx)(_,{editor:U,sourceMode:I,sourceValue:R,maxLength:C,strings:N}):null,Y=typeof i==`string`?i:``,X=Y.length>0&&!P&&U?.isEmpty?(0,o.jsx)(`span`,{className:`text-muted-foreground pointer-events-none absolute left-3 top-2 text-sm`,children:Y}):null;return(0,o.jsxs)(`div`,{className:n.cn(`border-input bg-background rounded-md border`,h&&`opacity-70`,k),children:[(0,o.jsx)(u,{buttons:q,extraToolbarItems:w,hideSourceToggle:D,sourceMode:I,toggleSourceMode:G,disabled:h,hasEditor:!!U,toolbarTrailing:T,strings:N}),I?(0,o.jsx)(`textarea`,{"aria-label":N.sourceLabel,value:R,onChange:K,disabled:h,spellCheck:!1,className:n.cn(`bg-muted/50 w-full resize-y px-3 py-2 font-mono text-xs leading-relaxed focus-visible:outline-none`,h&&`cursor-not-allowed`),style:W}):(0,o.jsxs)(`div`,{className:`relative`,style:W,children:[X,(0,o.jsx)(b,{editor:U,className:n.cn(`h-full`,`[&_.ProseMirror]:h-full`,`[&_.ProseMirror]:min-h-full`,`[&_.ProseMirror]:outline-none`)})]}),!!E&&(0,o.jsx)(`div`,{className:`px-3 pb-2 pt-1`,children:E}),J]})});C.displayName=`TiptapRichTextEditor`;var w=typeof b==`function`&&typeof x==`function`&&typeof S==`object`&&!!S,T=(0,a.forwardRef)(function({value:e,onChange:r,placeholder:i,compact:c=!1,minHeight:l,maxHeight:h,disabled:_=!1,showCounts:b=!1,maxLength:x,extraToolbarItems:S,toolbarTrailing:C,footerSlot:w,hideSourceToggle:T=!1,autoFocus:E=!1,className:D,onCaretChange:O,strings:k},A){let j=t.useStrings(d,k),M=(0,a.useRef)(null),[N,P]=(0,a.useState)(!1),[F,I]=(0,a.useState)(!1),[L,R]=(0,a.useState)(``),z=(0,a.useRef)(v(e)),B=(0,a.useRef)(O);B.current=O,(0,a.useEffect)(()=>{let t=M.current;if(!t||N)return;let n=y(e);v(t.innerHTML)!==v(n)&&(t.innerHTML=n),z.current=v(e)},[N,e]),(0,a.useEffect)(()=>{E&&M.current?.focus()},[E]);let V=(0,a.useCallback)(()=>{let e=M.current,t=v(e?.innerHTML??``);z.current=t,r(t),B.current?.()},[r]);(0,a.useImperativeHandle)(A,()=>({focus:()=>M.current?.focus(),getHTML:()=>v(M.current?.innerHTML??``),setHTML:e=>{let t=v(e);z.current=t,M.current&&(M.current.innerHTML=y(t)),r(t)},insertHTML:e=>{m(M.current,e),V()},isEmpty:()=>v(M.current?.innerHTML??``)===``,clear:()=>{z.current=``,M.current&&(M.current.innerHTML=`<p></p>`),r(``)},getCaretContext:()=>f(),replaceBeforeCaret:(e,t)=>{p(null,e,t,()=>V())}}),[V,r]);let H=(0,a.useMemo)(()=>({minHeight:l??(c?`2rem`:`12rem`),...h?{maxHeight:h,overflowY:`auto`}:{}}),[c,h,l]),U=(0,a.useCallback)(()=>{if(F){let e=v(L);z.current=e,M.current&&(M.current.innerHTML=y(e)),r(e),I(!1);return}R(M.current?.innerHTML??y(e)),I(!0)},[r,F,L,e]),W=(0,a.useCallback)(e=>{let t=e.target.value;R(t);let n=v(t);z.current=n,r(n)},[r]),G=typeof i==`string`?i:``,K=v(z.current)===``,q=G.length>0&&!N&&K?(0,o.jsx)(`span`,{className:`text-muted-foreground pointer-events-none absolute left-3 top-2 text-sm`,children:G}):null,J=(0,a.useMemo)(()=>[{id:`bold`,icon:s.Bold,label:j.toolbar.bold,isActive:()=>!1,run:()=>void 0,disabled:!0},{id:`italic`,icon:s.Italic,label:j.toolbar.italic,isActive:()=>!1,run:()=>void 0,disabled:!0},{id:`strike`,icon:s.Strikethrough,label:j.toolbar.strike,isActive:()=>!1,run:()=>void 0,disabled:!0},{id:`bullet-list`,icon:s.List,label:j.toolbar.bulletList,isActive:()=>!1,run:()=>void 0,disabled:!0},{id:`ordered-list`,icon:s.ListOrdered,label:j.toolbar.orderedList,isActive:()=>!1,run:()=>void 0,disabled:!0},{id:`blockquote`,icon:s.Quote,label:j.toolbar.blockquote,isActive:()=>!1,run:()=>void 0,disabled:!0},{id:`undo`,icon:s.Undo2,label:j.toolbar.undo,isActive:()=>!1,run:()=>void 0,disabled:!0},{id:`redo`,icon:s.Redo2,label:j.toolbar.redo,isActive:()=>!1,run:()=>void 0,disabled:!0}],[j]),Y=F?L.replace(/<[^>]*>/g,``):M.current?.innerText??v(e).replace(/<[^>]*>/g,``),X=b?(0,o.jsx)(g,{text:Y,maxLength:x,strings:j}):null;return(0,o.jsxs)(`div`,{className:n.cn(`border-input bg-background rounded-md border`,_&&`opacity-70`,D),children:[(0,o.jsx)(u,{buttons:J,extraToolbarItems:S,hideSourceToggle:T,sourceMode:F,toggleSourceMode:U,disabled:_,hasEditor:!0,toolbarTrailing:C,strings:j}),F?(0,o.jsx)(`textarea`,{"aria-label":j.sourceLabel,value:L,onChange:W,disabled:_,spellCheck:!1,className:n.cn(`bg-muted/50 w-full resize-y px-3 py-2 font-mono text-xs leading-relaxed focus-visible:outline-none`,_&&`cursor-not-allowed`),style:H}):(0,o.jsxs)(`div`,{className:`relative`,style:H,children:[q,(0,o.jsx)(`div`,{ref:M,role:`textbox`,"aria-label":j.editorLabel,"aria-multiline":`true`,contentEditable:!_,suppressContentEditableWarning:!0,onInput:V,onKeyUp:()=>B.current?.(),onMouseUp:()=>B.current?.(),onFocus:()=>P(!0),onBlur:()=>P(!1),className:n.cn(`prose prose-sm prose-p:my-0.5 prose-p:leading-relaxed prose-headings:my-1 prose-ul:my-1 prose-ol:my-1 prose-li:my-0.5 max-w-none px-3 py-2 text-sm focus-visible:outline-none dark:prose-invert`,`h-full min-h-full`,_&&`cursor-not-allowed`),dangerouslySetInnerHTML:{__html:y(e)}})]}),!!w&&(0,o.jsx)(`div`,{className:`px-3 pb-2 pt-1`,children:w}),X]})});T.displayName=`FallbackRichTextEditor`;var E=(0,a.forwardRef)(function(e,t){return w?(0,o.jsx)(C,{...e,ref:t}):(0,o.jsx)(T,{className:`rich-text-editor--component`,...e,ref:t})});E.displayName=`RichTextEditor`,Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return E}});
2
- //# sourceMappingURL=rich-text-editor-Dm-6r_xe.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-text-editor-Dm-6r_xe.cjs","names":[],"sources":["../../src/components/features/rich-text-editor/partials/rich-text-editor-toolbar.tsx","../../src/components/features/rich-text-editor/rich-text-editor.strings.ts","../../src/components/features/rich-text-editor/partials/caret-helpers.ts","../../src/components/features/rich-text-editor/partials/counts-footer.tsx","../../src/components/features/rich-text-editor/partials/html-helpers.ts","../../src/components/features/rich-text-editor/partials/rich-text-editor-tiptap.tsx","../../src/components/features/rich-text-editor/partials/rich-text-editor-fallback.tsx","../../src/components/features/rich-text-editor/rich-text-editor.tsx"],"sourcesContent":["import { Code2 } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '@/components/base/buttons/button';\n\nimport type { RichTextEditorStrings } from '../rich-text-editor.strings';\nimport type {\n\tRichTextEditorToolbarItem,\n\tToolbarButtonConfig,\n} from '../rich-text-editor.types';\n\nexport interface RichTextEditorToolbarProps {\n\tbuttons: ToolbarButtonConfig[];\n\textraToolbarItems?: ReadonlyArray<RichTextEditorToolbarItem>;\n\thideSourceToggle?: boolean;\n\tsourceMode: boolean;\n\ttoggleSourceMode: () => void;\n\tdisabled?: boolean;\n\t/**\n\t * The TipTap variant disables built-in buttons until the editor instance\n\t * is ready; the fallback variant simply marks them disabled. This flag\n\t * lets callers force the disabled state without re-deriving it per button.\n\t */\n\thasEditor?: boolean;\n\ttoolbarTrailing?: ReactNode;\n\tstrings: RichTextEditorStrings;\n}\n\nexport function RichTextEditorToolbar({\n\tbuttons,\n\textraToolbarItems,\n\thideSourceToggle = false,\n\tsourceMode,\n\ttoggleSourceMode,\n\tdisabled = false,\n\thasEditor = true,\n\ttoolbarTrailing,\n\tstrings,\n}: RichTextEditorToolbarProps) {\n\tconst hasExtras = (extraToolbarItems?.length ?? 0) > 0;\n\n\treturn (\n\t\t<div className=\"border-border flex flex-wrap items-center gap-1 border-b p-1.5\">\n\t\t\t{buttons.map((button) => {\n\t\t\t\tconst Icon = button.icon;\n\t\t\t\tconst isActive = button.isActive();\n\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey={button.id}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant={isActive ? 'primary' : 'secondary'}\n\t\t\t\t\t\tbuttonStyle={isActive ? 'solid' : 'ghost'}\n\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\tonClick={button.run}\n\t\t\t\t\t\tdisabled={disabled || !hasEditor || sourceMode || button.disabled}\n\t\t\t\t\t\taria-label={button.label}\n\t\t\t\t\t\ttitle={button.label}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t})}\n\n\t\t\t{!hideSourceToggle && (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"bg-border mx-1 h-4 w-px\" />\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant={sourceMode ? 'primary' : 'secondary'}\n\t\t\t\t\t\tbuttonStyle={sourceMode ? 'solid' : 'ghost'}\n\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\tonClick={toggleSourceMode}\n\t\t\t\t\t\tdisabled={disabled || !hasEditor}\n\t\t\t\t\t\taria-label={strings.toolbar.sourceCode}\n\t\t\t\t\t\ttitle={strings.toolbar.sourceCode}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Code2 className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{hasExtras && (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"bg-border mx-1 h-4 w-px\" />\n\t\t\t\t\t{extraToolbarItems?.map((item) => {\n\t\t\t\t\t\tconst Icon = item.icon;\n\t\t\t\t\t\tconst isActive = item.isActive?.() ?? false;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant={isActive ? 'primary' : 'secondary'}\n\t\t\t\t\t\t\t\tbuttonStyle={isActive ? 'solid' : 'ghost'}\n\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\tonClick={item.onClick}\n\t\t\t\t\t\t\t\tdisabled={disabled || !hasEditor || sourceMode || item.disabled}\n\t\t\t\t\t\t\t\taria-label={item.label}\n\t\t\t\t\t\t\t\ttitle={item.label}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon className=\"h-3.5 w-3.5\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{!!toolbarTrailing && (\n\t\t\t\t<div className=\"ml-auto flex items-center gap-1\">{toolbarTrailing}</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nRichTextEditorToolbar.displayName = 'RichTextEditorToolbar';\n","/**\n * Default user-facing strings for `<RichTextEditor>`.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <RichTextEditor strings={{ toolbar: { bold: t('editor.bold') } }} … />\n */\n\nexport interface RichTextEditorStrings {\n\t/** Accessible label for the editable rich-text surface. */\n\teditorLabel: string;\n\t/** Accessible label for the HTML source textarea. */\n\tsourceLabel: string;\n\t/** Toolbar button labels (used for `aria-label` and tooltip `title`). */\n\ttoolbar: {\n\t\tbold: string;\n\t\titalic: string;\n\t\tstrike: string;\n\t\tbulletList: string;\n\t\torderedList: string;\n\t\tblockquote: string;\n\t\tundo: string;\n\t\tredo: string;\n\t\tsourceCode: string;\n\t};\n\t/** Footer count labels — `{n}` is replaced with the count. */\n\tcounts: {\n\t\tcharacters: string;\n\t\twords: string;\n\t\tmax: string;\n\t};\n}\n\nexport const defaultRichTextEditorStrings: RichTextEditorStrings = {\n\teditorLabel: 'Rich text editor',\n\tsourceLabel: 'HTML source',\n\ttoolbar: {\n\t\tbold: 'Bold',\n\t\titalic: 'Italic',\n\t\tstrike: 'Strike',\n\t\tbulletList: 'Bullet list',\n\t\torderedList: 'Ordered list',\n\t\tblockquote: 'Quote',\n\t\tundo: 'Undo',\n\t\tredo: 'Redo',\n\t\tsourceCode: 'Source code',\n\t},\n\tcounts: {\n\t\tcharacters: 'characters',\n\t\twords: 'words',\n\t\tmax: 'max',\n\t},\n};\n","/**\n * Caret-introspection helpers used by `<RichTextEditor>` to expose the\n * text before the caret and replace a leading run of characters with\n * inline HTML — the building blocks for `@`-mention chips and similar\n * inline triggers.\n */\nimport type { RichTextCaretContext, TiptapEditor } from '../rich-text-editor.types';\n\n/**\n * Read the current selection's caret context.\n *\n * Walks back from the caret through the current text node and any\n * preceding sibling text nodes inside the same block-level container\n * (paragraph / list-item / heading) collecting plain text. Returns the\n * accumulated text plus the caret's bounding rect when available.\n *\n * Returns `null` when there is no live selection or the selection isn't\n * a text caret inside a contenteditable.\n */\nexport function readCaretContext(): RichTextCaretContext | null {\n\tif (typeof window === 'undefined') return null;\n\tconst sel = window.getSelection();\n\tif (!sel || sel.rangeCount === 0) return null;\n\tconst range = sel.getRangeAt(0);\n\tif (!range.collapsed) return null;\n\n\tconst startNode = range.startContainer;\n\tconst startOffset = range.startOffset;\n\n\tlet block: Node | null = startNode;\n\twhile (block && block.nodeType !== Node.ELEMENT_NODE) {\n\t\tblock = block.parentNode;\n\t}\n\tif (!block) return null;\n\tconst editable =\n\t\t(block as Element).closest('[contenteditable=\"true\"]') ??\n\t\t(block as Element).closest('.ProseMirror');\n\tif (!editable) return null;\n\n\tlet text = '';\n\tif (startNode.nodeType === Node.TEXT_NODE) {\n\t\ttext = (startNode.textContent ?? '').slice(0, startOffset);\n\t}\n\n\tlet cursor: Node | null = startNode;\n\twhile (cursor && cursor !== editable && cursor !== block) {\n\t\tlet prev: Node | null = cursor.previousSibling;\n\t\twhile (prev) {\n\t\t\ttext = (prev.textContent ?? '') + text;\n\t\t\tprev = prev.previousSibling;\n\t\t}\n\t\tcursor = cursor.parentNode;\n\t\tif (cursor && (cursor as Element).matches?.('p, li, h1, h2, h3, h4, h5, h6, blockquote')) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlet rect: RichTextCaretContext['rect'];\n\tconst r = range.getBoundingClientRect();\n\tif (r && (r.top || r.left || r.right || r.bottom)) {\n\t\trect = { top: r.top, left: r.left, bottom: r.bottom, right: r.right };\n\t}\n\n\treturn { textBefore: text, rect };\n}\n\n/**\n * Extend the selection backwards by `length` characters, then insert\n * `html`. The selection extension means `editor.insertContent` (or the\n * fallback's `range.deleteContents()` + insert) replaces the trigger\n * range with the chip atomically — no manual text-content mutation, no\n * timing races between \"delete\" and \"insert\".\n */\nexport function replaceBeforeCaret(\n\teditor: TiptapEditor | null,\n\tlength: number,\n\thtml: string,\n\tnotifyChange: (next: string) => void,\n): void {\n\tif (typeof window === 'undefined') return;\n\tconst sel = window.getSelection();\n\tif (!sel || sel.rangeCount === 0) return;\n\tconst caret = sel.getRangeAt(0);\n\tif (!caret.collapsed) return;\n\n\tlet remaining = length;\n\tlet startNode: Node = caret.startContainer;\n\tlet startOffset = caret.startOffset;\n\n\twhile (remaining > 0) {\n\t\tif (startNode.nodeType === Node.TEXT_NODE) {\n\t\t\tconst take = Math.min(startOffset, remaining);\n\t\t\tstartOffset -= take;\n\t\t\tremaining -= take;\n\t\t\tif (remaining === 0) break;\n\t\t}\n\t\tconst prev = previousTextNode(startNode);\n\t\tif (!prev) break;\n\t\tstartNode = prev;\n\t\tstartOffset = prev.textContent?.length ?? 0;\n\t}\n\n\tconst range = document.createRange();\n\trange.setStart(startNode, startOffset);\n\trange.setEnd(caret.endContainer, caret.endOffset);\n\tsel.removeAllRanges();\n\tsel.addRange(range);\n\n\tif (editor) {\n\t\teditor.chain().focus().insertContent(html).run();\n\t\tnotifyChange(editor.getHTML());\n\t\treturn;\n\t}\n\n\trange.deleteContents();\n\tconst fragment = document.createRange().createContextualFragment(html);\n\trange.insertNode(fragment);\n\tsel.collapseToEnd();\n\tconst editable =\n\t\t(startNode as Element | null)?.parentElement?.closest?.('[contenteditable=\"true\"]') ?? null;\n\tif (editable) notifyChange((editable as HTMLElement).innerHTML);\n}\n\nexport function insertHtmlIntoEditable(editable: HTMLElement | null, html: string): void {\n\tif (typeof window === 'undefined' || !editable) return;\n\teditable.focus();\n\n\tconst sel = window.getSelection();\n\tif (!sel || sel.rangeCount === 0) {\n\t\teditable.insertAdjacentHTML('beforeend', html);\n\t\treturn;\n\t}\n\n\tconst range = sel.getRangeAt(0);\n\tif (!editable.contains(range.commonAncestorContainer)) {\n\t\teditable.insertAdjacentHTML('beforeend', html);\n\t\treturn;\n\t}\n\n\trange.deleteContents();\n\tconst fragment = document.createRange().createContextualFragment(html);\n\trange.insertNode(fragment);\n\trange.collapse(false);\n\tsel.removeAllRanges();\n\tsel.addRange(range);\n}\n\nfunction previousTextNode(node: Node): Node | null {\n\tlet current: Node | null = node;\n\twhile (current) {\n\t\tif (current.previousSibling) {\n\t\t\tcurrent = current.previousSibling;\n\t\t\twhile (current && current.lastChild) {\n\t\t\t\tcurrent = current.lastChild;\n\t\t\t}\n\t\t\tif (current && current.nodeType === Node.TEXT_NODE) return current;\n\t\t\tcontinue;\n\t\t}\n\t\tcurrent = current.parentNode;\n\t\tif (!current || (current as Element).matches?.('p, li, h1, h2, h3, h4, h5, h6, blockquote, [contenteditable=\"true\"]')) {\n\t\t\treturn null;\n\t\t}\n\t}\n\treturn null;\n}\n","import { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport type { RichTextEditorStrings } from '../rich-text-editor.strings';\nimport type { TiptapEditor } from '../rich-text-editor.types';\n\ninterface CountsFooterTextProps {\n\ttext: string;\n\tmaxLength?: number;\n\tstrings: RichTextEditorStrings;\n}\n\nexport function CountsFooterText({ text, maxLength, strings }: CountsFooterTextProps) {\n\tconst chars = text.length;\n\tconst words = text.trim().length > 0 ? text.trim().split(/\\s+/).length : 0;\n\tconst overLimit = typeof maxLength === 'number' && chars > maxLength;\n\n\treturn (\n\t\t<div className=\"border-border flex items-center justify-end gap-3 border-t px-3 py-1.5\">\n\t\t\t<Text\n\t\t\t\ttag=\"span\"\n\t\t\t\tsize=\"xs\"\n\t\t\t\ttype={overLimit ? 'error' : 'secondary'}\n\t\t\t\tweight={overLimit ? 'medium' : 'regular'}\n\t\t\t\tclassName={cn('tabular-nums')}\n\t\t\t>\n\t\t\t\t{chars}\n\t\t\t\t{typeof maxLength === 'number' ? ` / ${maxLength}` : ''} {strings.counts.characters}\n\t\t\t</Text>\n\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"tabular-nums\">\n\t\t\t\t{words} {strings.counts.words}\n\t\t\t</Text>\n\t\t</div>\n\t);\n}\n\nCountsFooterText.displayName = 'CountsFooterText';\n\ninterface CountsFooterProps {\n\teditor: TiptapEditor;\n\tsourceMode: boolean;\n\tsourceValue: string;\n\tmaxLength?: number;\n\tstrings: RichTextEditorStrings;\n}\n\nexport function CountsFooter({\n\teditor,\n\tsourceMode,\n\tsourceValue,\n\tmaxLength,\n\tstrings,\n}: CountsFooterProps) {\n\tconst text = sourceMode\n\t\t? sourceValue.replace(/<[^>]*>/g, '')\n\t\t: (editor?.getText() ?? '');\n\n\treturn <CountsFooterText text={text} maxLength={maxLength} strings={strings} />;\n}\n\nCountsFooter.displayName = 'CountsFooter';\n","/**\n * Plain HTML normalization shared by the TipTap and contenteditable\n * fallback editors. Keeping these out of the React tree means the\n * editor partials stay focused on rendering.\n */\n\nexport function normalizeHtml(value: string): string {\n\tconst trimmed = value.trim();\n\n\tif (trimmed === '' || trimmed === '<p></p>' || trimmed === '<p><br></p>') {\n\t\treturn '';\n\t}\n\n\treturn trimmed;\n}\n\nexport function toEditorContent(value: string): string {\n\tconst normalized = normalizeHtml(value);\n\treturn normalized === '' ? '<p></p>' : normalized;\n}\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {\n\tBold,\n\tItalic,\n\tList,\n\tListOrdered,\n\tQuote,\n\tRedo2,\n\tStrikethrough,\n\tUndo2,\n} from 'lucide-react';\nimport * as TiptapReact from '@tiptap/react';\nimport * as StarterKitModule from '@tiptap/starter-kit';\n\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { defaultRichTextEditorStrings } from '../rich-text-editor.strings';\nimport type {\n\tRichTextEditorHandle,\n\tRichTextEditorProps,\n\tToolbarButtonConfig,\n} from '../rich-text-editor.types';\nimport { readCaretContext, replaceBeforeCaret } from './caret-helpers';\nimport { CountsFooter } from './counts-footer';\nimport { normalizeHtml, toEditorContent } from './html-helpers';\nimport { RichTextEditorToolbar } from './rich-text-editor-toolbar';\n\nconst EditorContent = TiptapReact.EditorContent;\nconst useTiptapEditor = TiptapReact.useEditor;\nconst StarterKit =\n\t'default' in StarterKitModule ? StarterKitModule.default : StarterKitModule;\n\nexport const TiptapRichTextEditor = forwardRef<RichTextEditorHandle, RichTextEditorProps>(function TiptapRichTextEditor(\n\t{\n\t\tvalue,\n\t\tonChange,\n\t\tplaceholder,\n\t\tcompact = false,\n\t\tminHeight,\n\t\tmaxHeight,\n\t\tdisabled = false,\n\t\tshowCounts = false,\n\t\tmaxLength,\n\t\textraToolbarItems,\n\t\ttoolbarTrailing,\n\t\tfooterSlot,\n\t\thideSourceToggle = false,\n\t\tautoFocus = false,\n\t\tclassName,\n\t\tonCaretChange,\n\t\tstrings: stringsProp,\n\t},\n\tref,\n) {\n\tconst strings = useStrings(defaultRichTextEditorStrings, stringsProp);\n\tconst [isFocused, setIsFocused] = useState(false);\n\tconst [sourceMode, setSourceMode] = useState(false);\n\tconst [sourceValue, setSourceValue] = useState('');\n\tconst isFocusedRef = useRef(false);\n\tconst externalValueRef = useRef<string>(normalizeHtml(value));\n\tconst onCaretChangeRef = useRef(onCaretChange);\n\tonCaretChangeRef.current = onCaretChange;\n\n\tconst editor = useTiptapEditor({\n\t\textensions: [StarterKit],\n\t\tcontent: toEditorContent(value),\n\t\teditable: !disabled,\n\t\timmediatelyRender: false,\n\t\tautofocus: autoFocus ? 'end' : false,\n\t\tonFocus: () => {\n\t\t\tisFocusedRef.current = true;\n\t\t\tsetIsFocused(true);\n\t\t},\n\t\tonBlur: () => {\n\t\t\tisFocusedRef.current = false;\n\t\t\tsetIsFocused(false);\n\t\t},\n\t\tonUpdate: ({ editor: currentEditor }: { editor: { getHTML: () => string } }) => {\n\t\t\tconst html = normalizeHtml(currentEditor.getHTML());\n\t\t\tif (!isFocusedRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (html !== externalValueRef.current) {\n\t\t\t\texternalValueRef.current = html;\n\t\t\t\tonChange(html);\n\t\t\t}\n\n\t\t\tonCaretChangeRef.current?.();\n\t\t},\n\t\teditorProps: {\n\t\t\tattributes: {\n\t\t\t\trole: 'textbox',\n\t\t\t\t'aria-label': strings.editorLabel,\n\t\t\t\t'aria-multiline': 'true',\n\t\t\t\tclass: 'prose prose-sm prose-p:my-0.5 prose-p:leading-relaxed prose-headings:my-1 prose-ul:my-1 prose-ol:my-1 prose-li:my-0.5 max-w-none px-3 py-2 text-sm focus-visible:outline-none dark:prose-invert',\n\t\t\t},\n\t\t},\n\t});\n\n\tuseEffect(() => {\n\t\tif (!editor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst current = normalizeHtml(editor.getHTML());\n\t\tconst next = normalizeHtml(value);\n\t\texternalValueRef.current = next;\n\n\t\tif (current !== next) {\n\t\t\teditor.commands.setContent(toEditorContent(next), { emitUpdate: false });\n\t\t}\n\t}, [editor, value]);\n\n\tuseEffect(() => {\n\t\tif (!editor) {\n\t\t\treturn;\n\t\t}\n\n\t\teditor.setEditable(!disabled);\n\t}, [disabled, editor]);\n\n\tuseEffect(() => {\n\t\tif (typeof document === 'undefined') return;\n\t\tconst handler = () => {\n\t\t\tif (!isFocusedRef.current) return;\n\t\t\tonCaretChangeRef.current?.();\n\t\t};\n\t\tdocument.addEventListener('selectionchange', handler);\n\t\treturn () => document.removeEventListener('selectionchange', handler);\n\t}, []);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tfocus: () => {\n\t\t\t\teditor?.chain().focus().run();\n\t\t\t},\n\t\t\tgetHTML: () => normalizeHtml(editor?.getHTML() ?? ''),\n\t\t\tsetHTML: (html: string) => {\n\t\t\t\tconst next = normalizeHtml(html);\n\t\t\t\texternalValueRef.current = next;\n\t\t\t\teditor?.commands.setContent(toEditorContent(next), { emitUpdate: false });\n\t\t\t\tonChange(next);\n\t\t\t},\n\t\t\tinsertHTML: (html: string) => {\n\t\t\t\tif (!editor) return;\n\t\t\t\teditor.chain().focus().insertContent(html).run();\n\t\t\t},\n\t\t\tisEmpty: () => normalizeHtml(editor?.getHTML() ?? '') === '',\n\t\t\tclear: () => {\n\t\t\t\texternalValueRef.current = '';\n\t\t\t\teditor?.commands.setContent('<p></p>', { emitUpdate: false });\n\t\t\t\tonChange('');\n\t\t\t},\n\t\t\tgetCaretContext: () => readCaretContext(),\n\t\t\treplaceBeforeCaret: (length: number, html: string) => {\n\t\t\t\treplaceBeforeCaret(editor, length, html, (next) => {\n\t\t\t\t\texternalValueRef.current = normalizeHtml(next);\n\t\t\t\t\tonChange(externalValueRef.current);\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t\t[editor, onChange],\n\t);\n\n\tconst contentStyle = useMemo(\n\t\t() => ({\n\t\t\tminHeight: minHeight ?? (compact ? '2rem' : '12rem'),\n\t\t\t...(maxHeight ? { maxHeight, overflowY: 'auto' as const } : {}),\n\t\t}),\n\t\t[compact, maxHeight, minHeight],\n\t);\n\n\tconst toggleSourceMode = useCallback(() => {\n\t\tif (!editor) return;\n\n\t\tif (sourceMode) {\n\t\t\tconst html = toEditorContent(sourceValue);\n\t\t\teditor.commands.setContent(html, { emitUpdate: false });\n\t\t\tconst normalized = normalizeHtml(sourceValue);\n\t\t\texternalValueRef.current = normalized;\n\t\t\tonChange(normalized);\n\t\t\tsetSourceMode(false);\n\t\t} else {\n\t\t\tsetSourceValue(editor.getHTML());\n\t\t\tsetSourceMode(true);\n\t\t}\n\t}, [editor, onChange, sourceMode, sourceValue]);\n\n\tconst handleSourceChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\t\tconst next = e.target.value;\n\t\t\tsetSourceValue(next);\n\t\t\tconst normalized = normalizeHtml(next);\n\t\t\texternalValueRef.current = normalized;\n\t\t\tonChange(normalized);\n\t\t},\n\t\t[onChange],\n\t);\n\n\tconst toolbarButtons = useMemo<ToolbarButtonConfig[]>(\n\t\t() => [\n\t\t\t{\n\t\t\t\tid: 'bold',\n\t\t\t\ticon: Bold,\n\t\t\t\tlabel: strings.toolbar.bold,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('bold')),\n\t\t\t\trun: () => editor?.chain().focus().toggleBold().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'italic',\n\t\t\t\ticon: Italic,\n\t\t\t\tlabel: strings.toolbar.italic,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('italic')),\n\t\t\t\trun: () => editor?.chain().focus().toggleItalic().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'strike',\n\t\t\t\ticon: Strikethrough,\n\t\t\t\tlabel: strings.toolbar.strike,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('strike')),\n\t\t\t\trun: () => editor?.chain().focus().toggleStrike().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'bullet-list',\n\t\t\t\ticon: List,\n\t\t\t\tlabel: strings.toolbar.bulletList,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('bulletList')),\n\t\t\t\trun: () => editor?.chain().focus().toggleBulletList().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'ordered-list',\n\t\t\t\ticon: ListOrdered,\n\t\t\t\tlabel: strings.toolbar.orderedList,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('orderedList')),\n\t\t\t\trun: () => editor?.chain().focus().toggleOrderedList().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'blockquote',\n\t\t\t\ticon: Quote,\n\t\t\t\tlabel: strings.toolbar.blockquote,\n\t\t\t\tisActive: () => Boolean(editor?.isActive('blockquote')),\n\t\t\t\trun: () => editor?.chain().focus().toggleBlockquote().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'undo',\n\t\t\t\ticon: Undo2,\n\t\t\t\tlabel: strings.toolbar.undo,\n\t\t\t\tisActive: () => false,\n\t\t\t\trun: () => editor?.chain().focus().undo().run(),\n\t\t\t\tdisabled: !editor?.can().chain().focus().undo().run(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'redo',\n\t\t\t\ticon: Redo2,\n\t\t\t\tlabel: strings.toolbar.redo,\n\t\t\t\tisActive: () => false,\n\t\t\t\trun: () => editor?.chain().focus().redo().run(),\n\t\t\t\tdisabled: !editor?.can().chain().focus().redo().run(),\n\t\t\t},\n\t\t],\n\t\t[editor, strings],\n\t);\n\n\tconst countsFooter =\n\t\tshowCounts && editor ? (\n\t\t\t<CountsFooter\n\t\t\t\teditor={editor}\n\t\t\t\tsourceMode={sourceMode}\n\t\t\t\tsourceValue={sourceValue}\n\t\t\t\tmaxLength={maxLength}\n\t\t\t\tstrings={strings}\n\t\t\t/>\n\t\t) : null;\n\n\tconst placeholderText = typeof placeholder === 'string' ? placeholder : '';\n\tconst showPlaceholder =\n\t\tplaceholderText.length > 0 && !isFocused && Boolean(editor?.isEmpty);\n\tconst placeholderNode = showPlaceholder ? (\n\t\t<span className=\"text-muted-foreground pointer-events-none absolute left-3 top-2 text-sm\">\n\t\t\t{placeholderText}\n\t\t</span>\n\t) : null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'border-input bg-background rounded-md border',\n\t\t\t\tdisabled && 'opacity-70',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<RichTextEditorToolbar\n\t\t\t\tbuttons={toolbarButtons}\n\t\t\t\textraToolbarItems={extraToolbarItems}\n\t\t\t\thideSourceToggle={hideSourceToggle}\n\t\t\t\tsourceMode={sourceMode}\n\t\t\t\ttoggleSourceMode={toggleSourceMode}\n\t\t\t\tdisabled={disabled}\n\t\t\t\thasEditor={Boolean(editor)}\n\t\t\t\ttoolbarTrailing={toolbarTrailing}\n\t\t\t\tstrings={strings}\n\t\t\t/>\n\n\t\t\t{sourceMode ? (\n\t\t\t\t<textarea\n\t\t\t\t\taria-label={strings.sourceLabel}\n\t\t\t\t\tvalue={sourceValue}\n\t\t\t\t\tonChange={handleSourceChange}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tspellCheck={false}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'bg-muted/50 w-full resize-y px-3 py-2 font-mono text-xs leading-relaxed focus-visible:outline-none',\n\t\t\t\t\t\tdisabled && 'cursor-not-allowed',\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={contentStyle}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"relative\" style={contentStyle}>\n\t\t\t\t\t{placeholderNode}\n\n\t\t\t\t\t<EditorContent\n\t\t\t\t\t\teditor={editor}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-full',\n\t\t\t\t\t\t\t'[&_.ProseMirror]:h-full',\n\t\t\t\t\t\t\t'[&_.ProseMirror]:min-h-full',\n\t\t\t\t\t\t\t'[&_.ProseMirror]:outline-none',\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!footerSlot && (\n\t\t\t\t<div className=\"px-3 pb-2 pt-1\">{footerSlot}</div>\n\t\t\t)}\n\n\t\t\t{countsFooter}\n\t\t</div>\n\t);\n});\n\nTiptapRichTextEditor.displayName = 'TiptapRichTextEditor';\n\nexport const hasTiptapRuntime =\n\ttypeof EditorContent === 'function' &&\n\ttypeof useTiptapEditor === 'function' &&\n\ttypeof StarterKit === 'object' &&\n\tStarterKit !== null;\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {\n\tBold,\n\tItalic,\n\tList,\n\tListOrdered,\n\tQuote,\n\tRedo2,\n\tStrikethrough,\n\tUndo2,\n} from 'lucide-react';\n\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { defaultRichTextEditorStrings } from '../rich-text-editor.strings';\nimport type {\n\tRichTextEditorHandle,\n\tRichTextEditorProps,\n\tToolbarButtonConfig,\n} from '../rich-text-editor.types';\nimport {\n\tinsertHtmlIntoEditable,\n\treadCaretContext,\n\treplaceBeforeCaret,\n} from './caret-helpers';\nimport { CountsFooterText } from './counts-footer';\nimport { normalizeHtml, toEditorContent } from './html-helpers';\nimport { RichTextEditorToolbar } from './rich-text-editor-toolbar';\n\n/**\n * Fallback editor used when the TipTap runtime is unavailable (e.g. in\n * environments where the package failed to load). Renders a\n * `contenteditable` surface with the same imperative handle so callers\n * never need to care which variant they got.\n */\nexport const FallbackRichTextEditor = forwardRef<RichTextEditorHandle, RichTextEditorProps>(function FallbackRichTextEditor(\n\t{\n\t\tvalue,\n\t\tonChange,\n\t\tplaceholder,\n\t\tcompact = false,\n\t\tminHeight,\n\t\tmaxHeight,\n\t\tdisabled = false,\n\t\tshowCounts = false,\n\t\tmaxLength,\n\t\textraToolbarItems,\n\t\ttoolbarTrailing,\n\t\tfooterSlot,\n\t\thideSourceToggle = false,\n\t\tautoFocus = false,\n\t\tclassName,\n\t\tonCaretChange,\n\t\tstrings: stringsProp,\n\t},\n\tref,\n) {\n\tconst strings = useStrings(defaultRichTextEditorStrings, stringsProp);\n\tconst editableRef = useRef<HTMLDivElement>(null);\n\tconst [isFocused, setIsFocused] = useState(false);\n\tconst [sourceMode, setSourceMode] = useState(false);\n\tconst [sourceValue, setSourceValue] = useState('');\n\tconst externalValueRef = useRef<string>(normalizeHtml(value));\n\tconst onCaretChangeRef = useRef(onCaretChange);\n\tonCaretChangeRef.current = onCaretChange;\n\n\tuseEffect(() => {\n\t\tconst editable = editableRef.current;\n\t\tif (!editable || isFocused) return;\n\t\tconst next = toEditorContent(value);\n\t\tif (normalizeHtml(editable.innerHTML) !== normalizeHtml(next)) {\n\t\t\teditable.innerHTML = next;\n\t\t}\n\t\texternalValueRef.current = normalizeHtml(value);\n\t}, [isFocused, value]);\n\n\tuseEffect(() => {\n\t\tif (!autoFocus) return;\n\t\teditableRef.current?.focus();\n\t}, [autoFocus]);\n\n\tconst emitEditableChange = useCallback(() => {\n\t\tconst editable = editableRef.current;\n\t\tconst html = normalizeHtml(editable?.innerHTML ?? '');\n\t\texternalValueRef.current = html;\n\t\tonChange(html);\n\t\tonCaretChangeRef.current?.();\n\t}, [onChange]);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tfocus: () => editableRef.current?.focus(),\n\t\t\tgetHTML: () => normalizeHtml(editableRef.current?.innerHTML ?? ''),\n\t\t\tsetHTML: (html: string) => {\n\t\t\t\tconst next = normalizeHtml(html);\n\t\t\t\texternalValueRef.current = next;\n\t\t\t\tif (editableRef.current) {\n\t\t\t\t\teditableRef.current.innerHTML = toEditorContent(next);\n\t\t\t\t}\n\t\t\t\tonChange(next);\n\t\t\t},\n\t\t\tinsertHTML: (html: string) => {\n\t\t\t\tinsertHtmlIntoEditable(editableRef.current, html);\n\t\t\t\temitEditableChange();\n\t\t\t},\n\t\t\tisEmpty: () => normalizeHtml(editableRef.current?.innerHTML ?? '') === '',\n\t\t\tclear: () => {\n\t\t\t\texternalValueRef.current = '';\n\t\t\t\tif (editableRef.current) editableRef.current.innerHTML = '<p></p>';\n\t\t\t\tonChange('');\n\t\t\t},\n\t\t\tgetCaretContext: () => readCaretContext(),\n\t\t\treplaceBeforeCaret: (length: number, html: string) => {\n\t\t\t\treplaceBeforeCaret(null, length, html, () => emitEditableChange());\n\t\t\t},\n\t\t}),\n\t\t[emitEditableChange, onChange],\n\t);\n\n\tconst contentStyle = useMemo(\n\t\t() => ({\n\t\t\tminHeight: minHeight ?? (compact ? '2rem' : '12rem'),\n\t\t\t...(maxHeight ? { maxHeight, overflowY: 'auto' as const } : {}),\n\t\t}),\n\t\t[compact, maxHeight, minHeight],\n\t);\n\n\tconst toggleSourceMode = useCallback(() => {\n\t\tif (sourceMode) {\n\t\t\tconst normalized = normalizeHtml(sourceValue);\n\t\t\texternalValueRef.current = normalized;\n\t\t\tif (editableRef.current) {\n\t\t\t\teditableRef.current.innerHTML = toEditorContent(normalized);\n\t\t\t}\n\t\t\tonChange(normalized);\n\t\t\tsetSourceMode(false);\n\t\t\treturn;\n\t\t}\n\t\tsetSourceValue(editableRef.current?.innerHTML ?? toEditorContent(value));\n\t\tsetSourceMode(true);\n\t}, [onChange, sourceMode, sourceValue, value]);\n\n\tconst handleSourceChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\t\tconst next = e.target.value;\n\t\t\tsetSourceValue(next);\n\t\t\tconst normalized = normalizeHtml(next);\n\t\t\texternalValueRef.current = normalized;\n\t\t\tonChange(normalized);\n\t\t},\n\t\t[onChange],\n\t);\n\n\tconst placeholderText = typeof placeholder === 'string' ? placeholder : '';\n\tconst isEmpty = normalizeHtml(externalValueRef.current) === '';\n\tconst placeholderNode =\n\t\tplaceholderText.length > 0 && !isFocused && isEmpty ? (\n\t\t\t<span className=\"text-muted-foreground pointer-events-none absolute left-3 top-2 text-sm\">\n\t\t\t\t{placeholderText}\n\t\t\t</span>\n\t\t) : null;\n\n\tconst toolbarButtons = useMemo<ToolbarButtonConfig[]>(\n\t\t() => [\n\t\t\t{ id: 'bold', icon: Bold, label: strings.toolbar.bold, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'italic', icon: Italic, label: strings.toolbar.italic, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'strike', icon: Strikethrough, label: strings.toolbar.strike, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'bullet-list', icon: List, label: strings.toolbar.bulletList, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'ordered-list', icon: ListOrdered, label: strings.toolbar.orderedList, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'blockquote', icon: Quote, label: strings.toolbar.blockquote, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'undo', icon: Undo2, label: strings.toolbar.undo, isActive: () => false, run: () => undefined, disabled: true },\n\t\t\t{ id: 'redo', icon: Redo2, label: strings.toolbar.redo, isActive: () => false, run: () => undefined, disabled: true },\n\t\t],\n\t\t[strings],\n\t);\n\n\tconst text = sourceMode\n\t\t? sourceValue.replace(/<[^>]*>/g, '')\n\t\t: (editableRef.current?.innerText ?? normalizeHtml(value).replace(/<[^>]*>/g, ''));\n\tconst countsFooter =\n\t\tshowCounts ? (\n\t\t\t<CountsFooterText text={text} maxLength={maxLength} strings={strings} />\n\t\t) : null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'border-input bg-background rounded-md border',\n\t\t\t\tdisabled && 'opacity-70',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<RichTextEditorToolbar\n\t\t\t\tbuttons={toolbarButtons}\n\t\t\t\textraToolbarItems={extraToolbarItems}\n\t\t\t\thideSourceToggle={hideSourceToggle}\n\t\t\t\tsourceMode={sourceMode}\n\t\t\t\ttoggleSourceMode={toggleSourceMode}\n\t\t\t\tdisabled={disabled}\n\t\t\t\thasEditor\n\t\t\t\ttoolbarTrailing={toolbarTrailing}\n\t\t\t\tstrings={strings}\n\t\t\t/>\n\n\t\t\t{sourceMode ? (\n\t\t\t\t<textarea\n\t\t\t\t\taria-label={strings.sourceLabel}\n\t\t\t\t\tvalue={sourceValue}\n\t\t\t\t\tonChange={handleSourceChange}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tspellCheck={false}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'bg-muted/50 w-full resize-y px-3 py-2 font-mono text-xs leading-relaxed focus-visible:outline-none',\n\t\t\t\t\t\tdisabled && 'cursor-not-allowed',\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={contentStyle}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"relative\" style={contentStyle}>\n\t\t\t\t\t{placeholderNode}\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={editableRef}\n\t\t\t\t\t\trole=\"textbox\"\n\t\t\t\t\t\taria-label={strings.editorLabel}\n\t\t\t\t\t\taria-multiline=\"true\"\n\t\t\t\t\t\tcontentEditable={!disabled}\n\t\t\t\t\t\tsuppressContentEditableWarning\n\t\t\t\t\t\tonInput={emitEditableChange}\n\t\t\t\t\t\tonKeyUp={() => onCaretChangeRef.current?.()}\n\t\t\t\t\t\tonMouseUp={() => onCaretChangeRef.current?.()}\n\t\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'prose prose-sm prose-p:my-0.5 prose-p:leading-relaxed prose-headings:my-1 prose-ul:my-1 prose-ol:my-1 prose-li:my-0.5 max-w-none px-3 py-2 text-sm focus-visible:outline-none dark:prose-invert',\n\t\t\t\t\t\t\t'h-full min-h-full',\n\t\t\t\t\t\t\tdisabled && 'cursor-not-allowed',\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tdangerouslySetInnerHTML={{ __html: toEditorContent(value) }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!footerSlot && (\n\t\t\t\t<div className=\"px-3 pb-2 pt-1\">{footerSlot}</div>\n\t\t\t)}\n\n\t\t\t{countsFooter}\n\t\t</div>\n\t);\n});\n\nFallbackRichTextEditor.displayName = 'FallbackRichTextEditor';\n","/**\n * Public `<RichTextEditor>` shell — picks the TipTap-backed editor when\n * the runtime is loaded and falls back to a plain `contenteditable`\n * surface otherwise. Both variants implement the same imperative\n * `RichTextEditorHandle`, so callers don't have to branch.\n *\n * Heavy lifting lives in `partials/`:\n * - `partials/rich-text-editor-tiptap.tsx` — TipTap variant\n * - `partials/rich-text-editor-fallback.tsx` — contenteditable variant\n * - `partials/rich-text-editor-toolbar.tsx` — shared toolbar\n * - `partials/counts-footer.tsx` — char/word counts\n * - `partials/caret-helpers.ts` — caret introspection\n * - `partials/html-helpers.ts` — HTML normalization\n */\nimport { forwardRef } from 'react';\n\nimport {\n\tFallbackRichTextEditor,\n\tTiptapRichTextEditor,\n\thasTiptapRuntime,\n} from './partials';\nimport type {\n\tRichTextEditorHandle,\n\tRichTextEditorProps,\n} from './rich-text-editor.types';\n\nexport const RichTextEditor = forwardRef<RichTextEditorHandle, RichTextEditorProps>(function RichTextEditor(\n\tprops,\n\tref,\n) {\n\tif (!hasTiptapRuntime) {\n\t\treturn <FallbackRichTextEditor className=\"rich-text-editor--component\" {...props} ref={ref} />;\n\t}\n\n\treturn <TiptapRichTextEditor {...props} ref={ref} />;\n});\n\nRichTextEditor.displayName = 'RichTextEditor';\n\nexport type {\n\tRichTextEditorProps,\n\tRichTextEditorHandle,\n\tRichTextEditorToolbarItem,\n\tRichTextCaretContext,\n} from './rich-text-editor.types';\n"],"mappings":"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"}
@@ -1,100 +0,0 @@
1
- import { cn as e } from "../lib/utils.js";
2
- import { t } from "./button-683R5quQ.js";
3
- import { t as n } from "./slot-C5EJicOc.js";
4
- import "react";
5
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
- import { XIcon as a } from "lucide-react";
7
- import { Dialog as o } from "@base-ui/react/dialog";
8
- //#region src/components/ui/sheet.tsx
9
- function s({ ...e }) {
10
- return /* @__PURE__ */ r(o.Root, {
11
- "data-slot": "sheet",
12
- modal: "trap-focus",
13
- ...e
14
- });
15
- }
16
- function c({ asChild: e = !1, ...t }) {
17
- let i = e ? /* @__PURE__ */ r(n, {}) : void 0;
18
- return /* @__PURE__ */ r(o.Trigger, {
19
- "data-slot": "sheet-trigger",
20
- render: i,
21
- ...t
22
- });
23
- }
24
- function l({ asChild: e = !1, ...t }) {
25
- let i = e ? /* @__PURE__ */ r(n, {}) : void 0;
26
- return /* @__PURE__ */ r(o.Close, {
27
- "data-slot": "sheet-close",
28
- render: i,
29
- ...t
30
- });
31
- }
32
- function u({ ...e }) {
33
- return /* @__PURE__ */ r(o.Portal, {
34
- "data-slot": "sheet-portal",
35
- ...e
36
- });
37
- }
38
- function d({ className: t, ...n }) {
39
- return /* @__PURE__ */ r(o.Backdrop, {
40
- "data-slot": "sheet-overlay",
41
- className: e("data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 z-50", t),
42
- ...n
43
- });
44
- }
45
- function f({ className: n, children: s, side: c = "right", showCloseButton: l = !0, ...f }) {
46
- return /* @__PURE__ */ i(u, { children: [/* @__PURE__ */ r(d, {}), /* @__PURE__ */ i(o.Popup, {
47
- "data-slot": "sheet-content",
48
- "data-side": c,
49
- className: e("bg-background data-open:animate-in data-closed:animate-out data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 fixed z-50 flex flex-col gap-4 bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", n),
50
- ...f,
51
- children: [s, !!l && /* @__PURE__ */ i(o.Close, {
52
- "data-slot": "sheet-close",
53
- render: /* @__PURE__ */ r(t, {
54
- variant: "ghost",
55
- className: "absolute top-4 right-4",
56
- size: "icon-sm"
57
- }),
58
- children: [/* @__PURE__ */ r(a, {}), /* @__PURE__ */ r("span", {
59
- className: "sr-only",
60
- children: "Close"
61
- })]
62
- })]
63
- })] });
64
- }
65
- function p({ className: t, ...n }) {
66
- return /* @__PURE__ */ r("div", {
67
- "data-slot": "sheet-header",
68
- className: e("gap-1.5 p-4 flex flex-col", t),
69
- ...n
70
- });
71
- }
72
- function m({ className: t, ...n }) {
73
- return /* @__PURE__ */ r("div", {
74
- "data-slot": "sheet-footer",
75
- className: e("gap-2 p-4 mt-auto flex flex-col", t),
76
- ...n
77
- });
78
- }
79
- function h({ className: t, asChild: i = !1, ...a }) {
80
- let s = i ? /* @__PURE__ */ r(n, {}) : void 0;
81
- return /* @__PURE__ */ r(o.Title, {
82
- "data-slot": "sheet-title",
83
- render: s,
84
- className: e("text-foreground font-medium", t),
85
- ...a
86
- });
87
- }
88
- function g({ className: t, asChild: i = !1, ...a }) {
89
- let s = i ? /* @__PURE__ */ r(n, {}) : void 0;
90
- return /* @__PURE__ */ r(o.Description, {
91
- "data-slot": "sheet-description",
92
- render: s,
93
- className: e("text-muted-foreground text-sm", t),
94
- ...a
95
- });
96
- }
97
- //#endregion
98
- export { m as a, c, g as i, l as n, p as o, f as r, h as s, s as t };
99
-
100
- //# sourceMappingURL=sheet-BKEfwhCn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sheet-BKEfwhCn.js","names":[],"sources":["../../src/components/ui/sheet.tsx"],"sourcesContent":["\"use client\"\n\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\"\nimport { XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Slot } from \"@/components/ui/slot\"\nimport { cn } from \"@/lib/utils\"\n\nfunction Sheet({ ...props }: SheetPrimitive.Root.Props) {\n return <SheetPrimitive.Root data-slot=\"sheet\" modal=\"trap-focus\" {...props} />\n}\n\nfunction SheetTrigger({\n asChild = false,\n ...props\n}: SheetPrimitive.Trigger.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <SheetPrimitive.Trigger\n data-slot=\"sheet-trigger\"\n render={renderSlot}\n {...props}\n />\n )\n}\n\nfunction SheetClose({\n asChild = false,\n ...props\n}: SheetPrimitive.Close.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n render={renderSlot}\n {...props}\n />\n )\n}\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {\n return (\n <SheetPrimitive.Backdrop\n data-slot=\"sheet-overlay\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 z-50\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Popup\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\"bg-background data-open:animate-in data-closed:animate-out data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 fixed z-50 flex flex-col gap-4 bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm\", className)}\n {...props}\n >\n {children}\n {!!showCloseButton && (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-4 right-4\"\n size=\"icon-sm\"\n />\n }\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Popup>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"gap-1.5 p-4 flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"gap-2 p-4 mt-auto flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n asChild = false,\n ...props\n}: SheetPrimitive.Title.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n render={renderSlot}\n className={cn(\"text-foreground font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n asChild = false,\n ...props\n}: SheetPrimitive.Description.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n render={renderSlot}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n"],"mappings":";;;;;;;;AAUA,SAAS,EAAM,EAAE,GAAG,KAAoC;CACtD,OAAO,kBAAC,EAAe,MAAhB;EAAqB,aAAU;EAAQ,OAAM;EAAa,GAAI;CAAQ,CAAA;AAC/E;AAEA,SAAS,EAAa,EACpB,aAAU,IACV,GAAG,KACoD;CACvD,IAAM,IAAa,IAAU,kBAAC,GAAD,CAAO,CAAA,IAAI,KAAA;CAExC,OACE,kBAAC,EAAe,SAAhB;EACE,aAAU;EACV,QAAQ;EACR,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAW,EAClB,aAAU,IACV,GAAG,KACkD;CACrD,IAAM,IAAa,IAAU,kBAAC,GAAD,CAAO,CAAA,IAAI,KAAA;CAExC,OACE,kBAAC,EAAe,OAAhB;EACE,aAAU;EACV,QAAQ;EACR,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAY,EAAE,GAAG,KAAsC;CAC9D,OAAO,kBAAC,EAAe,QAAhB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;AAEA,SAAS,EAAa,EAAE,cAAW,GAAG,KAAwC;CAC5E,OACE,kBAAC,EAAe,UAAhB;EACE,aAAU;EACV,WAAW,EAAG,2OAA2O,CAAS;EAClQ,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAa,EACpB,cACA,aACA,UAAO,SACP,qBAAkB,IAClB,GAAG,KAIF;CACD,OACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,CAAe,CAAA,GACf,kBAAC,EAAe,OAAhB;EACE,aAAU;EACV,aAAW;EACX,WAAW,EAAG,0mCAA0mC,CAAS;EACjoC,GAAI;YAJN,CAMG,GACA,CAAC,CAAC,KACD,kBAAC,EAAe,OAAhB;GACE,aAAU;GACV,QACE,kBAAC,GAAD;IACE,SAAQ;IACR,WAAU;IACV,MAAK;GACN,CAAA;aAPL,CAUE,kBAAC,GAAD,CACC,CAAA,GACD,kBAAC,QAAD;IAAM,WAAU;cAAU;GAAW,CAAA,CACjB;IAEJ;GACX,EAAA,CAAA;AAEjB;AAEA,SAAS,EAAY,EAAE,cAAW,GAAG,KAAsC;CACzE,OACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,6BAA6B,CAAS;EACpD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAY,EAAE,cAAW,GAAG,KAAsC;CACzE,OACE,kBAAC,OAAD;EACE,aAAU;EACV,WAAW,EAAG,mCAAmC,CAAS;EAC1D,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAW,EAClB,cACA,aAAU,IACV,GAAG,KACkD;CACrD,IAAM,IAAa,IAAU,kBAAC,GAAD,CAAO,CAAA,IAAI,KAAA;CAExC,OACE,kBAAC,EAAe,OAAhB;EACE,aAAU;EACV,QAAQ;EACR,WAAW,EAAG,+BAA+B,CAAS;EACtD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAiB,EACxB,cACA,aAAU,IACV,GAAG,KACwD;CAC3D,IAAM,IAAa,IAAU,kBAAC,GAAD,CAAO,CAAA,IAAI,KAAA;CAExC,OACE,kBAAC,EAAe,aAAhB;EACE,aAAU;EACV,QAAQ;EACR,WAAW,EAAG,iCAAiC,CAAS;EACxD,GAAI;CACL,CAAA;AAEL"}
@@ -1,2 +0,0 @@
1
- const e=require("./chunk-CMqjfN_6.cjs"),t=require("../lib/utils.cjs"),n=require("./button-CjZrRLzR.cjs"),r=require("./slot-D-Rwlrz2.cjs");let i=require("react");i=e.t(i,1);let a=require("react/jsx-runtime"),o=require("lucide-react"),s=require("@base-ui/react/dialog");function c({...e}){return(0,a.jsx)(s.Dialog.Root,{"data-slot":`sheet`,modal:`trap-focus`,...e})}function l({asChild:e=!1,...t}){let n=e?(0,a.jsx)(r.t,{}):void 0;return(0,a.jsx)(s.Dialog.Trigger,{"data-slot":`sheet-trigger`,render:n,...t})}function u({asChild:e=!1,...t}){let n=e?(0,a.jsx)(r.t,{}):void 0;return(0,a.jsx)(s.Dialog.Close,{"data-slot":`sheet-close`,render:n,...t})}function d({...e}){return(0,a.jsx)(s.Dialog.Portal,{"data-slot":`sheet-portal`,...e})}function f({className:e,...n}){return(0,a.jsx)(s.Dialog.Backdrop,{"data-slot":`sheet-overlay`,className:t.cn(`data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 z-50`,e),...n})}function p({className:e,children:r,side:i=`right`,showCloseButton:c=!0,...l}){return(0,a.jsxs)(d,{children:[(0,a.jsx)(f,{}),(0,a.jsxs)(s.Dialog.Popup,{"data-slot":`sheet-content`,"data-side":i,className:t.cn(`bg-background data-open:animate-in data-closed:animate-out data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 fixed z-50 flex flex-col gap-4 bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm`,e),...l,children:[r,!!c&&(0,a.jsxs)(s.Dialog.Close,{"data-slot":`sheet-close`,render:(0,a.jsx)(n.t,{variant:`ghost`,className:`absolute top-4 right-4`,size:`icon-sm`}),children:[(0,a.jsx)(o.XIcon,{}),(0,a.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function m({className:e,...n}){return(0,a.jsx)(`div`,{"data-slot":`sheet-header`,className:t.cn(`gap-1.5 p-4 flex flex-col`,e),...n})}function h({className:e,...n}){return(0,a.jsx)(`div`,{"data-slot":`sheet-footer`,className:t.cn(`gap-2 p-4 mt-auto flex flex-col`,e),...n})}function g({className:e,asChild:n=!1,...i}){let o=n?(0,a.jsx)(r.t,{}):void 0;return(0,a.jsx)(s.Dialog.Title,{"data-slot":`sheet-title`,render:o,className:t.cn(`text-foreground font-medium`,e),...i})}function _({className:e,asChild:n=!1,...i}){let o=n?(0,a.jsx)(r.t,{}):void 0;return(0,a.jsx)(s.Dialog.Description,{"data-slot":`sheet-description`,render:o,className:t.cn(`text-muted-foreground text-sm`,e),...i})}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return c}});
2
- //# sourceMappingURL=sheet-D4yWgkwC.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sheet-D4yWgkwC.cjs","names":[],"sources":["../../src/components/ui/sheet.tsx"],"sourcesContent":["\"use client\"\n\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\"\nimport { XIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { Slot } from \"@/components/ui/slot\"\nimport { cn } from \"@/lib/utils\"\n\nfunction Sheet({ ...props }: SheetPrimitive.Root.Props) {\n return <SheetPrimitive.Root data-slot=\"sheet\" modal=\"trap-focus\" {...props} />\n}\n\nfunction SheetTrigger({\n asChild = false,\n ...props\n}: SheetPrimitive.Trigger.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <SheetPrimitive.Trigger\n data-slot=\"sheet-trigger\"\n render={renderSlot}\n {...props}\n />\n )\n}\n\nfunction SheetClose({\n asChild = false,\n ...props\n}: SheetPrimitive.Close.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n render={renderSlot}\n {...props}\n />\n )\n}\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {\n return (\n <SheetPrimitive.Backdrop\n data-slot=\"sheet-overlay\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 z-50\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Popup\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\"bg-background data-open:animate-in data-closed:animate-out data-[side=right]:data-closed:slide-out-to-right-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=top]:data-closed:slide-out-to-top-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:fade-out-0 data-open:fade-in-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=bottom]:data-open:slide-in-from-bottom-10 fixed z-50 flex flex-col gap-4 bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm\", className)}\n {...props}\n >\n {children}\n {!!showCloseButton && (\n <SheetPrimitive.Close\n data-slot=\"sheet-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-4 right-4\"\n size=\"icon-sm\"\n />\n }\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Popup>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"gap-1.5 p-4 flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"gap-2 p-4 mt-auto flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n asChild = false,\n ...props\n}: SheetPrimitive.Title.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n render={renderSlot}\n className={cn(\"text-foreground font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n asChild = false,\n ...props\n}: SheetPrimitive.Description.Props & { asChild?: boolean }) {\n const renderSlot = asChild ? <Slot /> : undefined\n\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n render={renderSlot}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n"],"mappings":"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"}