@puzzle-ui/ui 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (602) hide show
  1. package/README.md +16 -2
  2. package/dist/LICENSE +21 -0
  3. package/dist/components/actions/button/button-content.cjs +41 -0
  4. package/dist/components/actions/button/button-content.cjs.map +1 -0
  5. package/dist/components/actions/button/button-content.js +41 -0
  6. package/dist/components/actions/button/button-content.js.map +1 -0
  7. package/dist/components/actions/button/button.css +191 -0
  8. package/dist/components/actions/button/button.types.d.cts +30 -0
  9. package/dist/components/actions/button/button.types.d.ts +30 -0
  10. package/dist/components/actions/button/index.cjs +80 -0
  11. package/dist/components/actions/button/index.cjs.map +1 -0
  12. package/dist/components/actions/button/index.d.cts +3 -0
  13. package/dist/components/actions/button/index.d.ts +3 -0
  14. package/dist/components/actions/button/index.js +80 -0
  15. package/dist/components/actions/button/index.js.map +1 -0
  16. package/dist/components/actions/button-group/button-group.css +64 -0
  17. package/dist/components/actions/button-group/index.cjs +25 -0
  18. package/dist/components/actions/button-group/index.cjs.map +1 -0
  19. package/dist/components/actions/button-group/index.d.cts +14 -0
  20. package/dist/components/actions/button-group/index.d.ts +14 -0
  21. package/dist/components/actions/button-group/index.js +25 -0
  22. package/dist/components/actions/button-group/index.js.map +1 -0
  23. package/dist/components/actions/toggle-group/index.cjs +124 -0
  24. package/dist/components/actions/toggle-group/index.cjs.map +1 -0
  25. package/dist/components/actions/toggle-group/index.d.cts +10 -0
  26. package/dist/components/actions/toggle-group/index.d.ts +10 -0
  27. package/dist/components/actions/toggle-group/index.js +124 -0
  28. package/dist/components/actions/toggle-group/index.js.map +1 -0
  29. package/dist/components/actions/toggle-group/toggle-group.css +67 -0
  30. package/dist/components/actions/toggle-group/toggle-group.types.d.cts +54 -0
  31. package/dist/components/actions/toggle-group/toggle-group.types.d.ts +54 -0
  32. package/dist/components/data-display/alert/alert.css +128 -0
  33. package/dist/components/data-display/alert/alert.types.d.cts +14 -0
  34. package/dist/components/data-display/alert/alert.types.d.ts +14 -0
  35. package/dist/components/data-display/alert/alert.utils.cjs +11 -0
  36. package/dist/components/data-display/alert/alert.utils.cjs.map +1 -0
  37. package/dist/components/data-display/alert/alert.utils.js +11 -0
  38. package/dist/components/data-display/alert/alert.utils.js.map +1 -0
  39. package/dist/components/data-display/alert/index.cjs +103 -0
  40. package/dist/components/data-display/alert/index.cjs.map +1 -0
  41. package/dist/components/data-display/alert/index.d.cts +3 -0
  42. package/dist/components/data-display/alert/index.d.ts +3 -0
  43. package/dist/components/data-display/alert/index.js +103 -0
  44. package/dist/components/data-display/alert/index.js.map +1 -0
  45. package/dist/components/data-display/avatar/avatar.css +30 -0
  46. package/dist/components/data-display/avatar/index.cjs +42 -0
  47. package/dist/components/data-display/avatar/index.cjs.map +1 -0
  48. package/dist/components/data-display/avatar/index.d.cts +10 -0
  49. package/dist/components/data-display/avatar/index.d.ts +10 -0
  50. package/dist/components/data-display/avatar/index.js +42 -0
  51. package/dist/components/data-display/avatar/index.js.map +1 -0
  52. package/dist/components/data-display/badge/badge.css +91 -0
  53. package/dist/components/data-display/badge/index.cjs +31 -0
  54. package/dist/components/data-display/badge/index.cjs.map +1 -0
  55. package/dist/components/data-display/badge/index.d.cts +18 -0
  56. package/dist/components/data-display/badge/index.d.ts +18 -0
  57. package/dist/components/data-display/badge/index.js +31 -0
  58. package/dist/components/data-display/badge/index.js.map +1 -0
  59. package/dist/components/data-display/card/card.css +164 -0
  60. package/dist/components/data-display/card/index.cjs +42 -0
  61. package/dist/components/data-display/card/index.cjs.map +1 -0
  62. package/dist/components/data-display/card/index.d.cts +29 -0
  63. package/dist/components/data-display/card/index.d.ts +29 -0
  64. package/dist/components/data-display/card/index.js +35 -0
  65. package/dist/components/data-display/card/index.js.map +1 -0
  66. package/dist/components/data-display/image/image.css +80 -0
  67. package/dist/components/data-display/image/image.types.d.cts +154 -0
  68. package/dist/components/data-display/image/image.types.d.ts +154 -0
  69. package/dist/components/data-display/image/image.utils.cjs +55 -0
  70. package/dist/components/data-display/image/image.utils.cjs.map +1 -0
  71. package/dist/components/data-display/image/image.utils.js +51 -0
  72. package/dist/components/data-display/image/image.utils.js.map +1 -0
  73. package/dist/components/data-display/image/index.cjs +176 -0
  74. package/dist/components/data-display/image/index.cjs.map +1 -0
  75. package/dist/components/data-display/image/index.d.cts +3 -0
  76. package/dist/components/data-display/image/index.d.ts +3 -0
  77. package/dist/components/data-display/image/index.js +176 -0
  78. package/dist/components/data-display/image/index.js.map +1 -0
  79. package/dist/components/data-display/image/use-image-state.cjs +54 -0
  80. package/dist/components/data-display/image/use-image-state.cjs.map +1 -0
  81. package/dist/components/data-display/image/use-image-state.js +54 -0
  82. package/dist/components/data-display/image/use-image-state.js.map +1 -0
  83. package/dist/components/data-display/paper/index.cjs +16 -0
  84. package/dist/components/data-display/paper/index.cjs.map +1 -0
  85. package/dist/components/data-display/paper/index.d.cts +8 -0
  86. package/dist/components/data-display/paper/index.d.ts +8 -0
  87. package/dist/components/data-display/paper/index.js +16 -0
  88. package/dist/components/data-display/paper/index.js.map +1 -0
  89. package/dist/components/data-display/paper/paper.css +40 -0
  90. package/dist/components/data-display/progress/circular-progress.cjs +75 -0
  91. package/dist/components/data-display/progress/circular-progress.cjs.map +1 -0
  92. package/dist/components/data-display/progress/circular-progress.css +21 -0
  93. package/dist/components/data-display/progress/circular-progress.d.cts +9 -0
  94. package/dist/components/data-display/progress/circular-progress.d.ts +9 -0
  95. package/dist/components/data-display/progress/circular-progress.js +75 -0
  96. package/dist/components/data-display/progress/circular-progress.js.map +1 -0
  97. package/dist/components/data-display/progress/linear-progress.cjs +32 -0
  98. package/dist/components/data-display/progress/linear-progress.cjs.map +1 -0
  99. package/dist/components/data-display/progress/linear-progress.css +39 -0
  100. package/dist/components/data-display/progress/linear-progress.d.cts +5 -0
  101. package/dist/components/data-display/progress/linear-progress.d.ts +5 -0
  102. package/dist/components/data-display/progress/linear-progress.js +32 -0
  103. package/dist/components/data-display/progress/linear-progress.js.map +1 -0
  104. package/dist/components/data-display/progress/types.d.cts +5 -0
  105. package/dist/components/data-display/progress/types.d.ts +5 -0
  106. package/dist/components/data-display/progress/utils.cjs +16 -0
  107. package/dist/components/data-display/progress/utils.cjs.map +1 -0
  108. package/dist/components/data-display/progress/utils.js +15 -0
  109. package/dist/components/data-display/progress/utils.js.map +1 -0
  110. package/dist/components/data-display/skeleton/index.cjs +18 -0
  111. package/dist/components/data-display/skeleton/index.cjs.map +1 -0
  112. package/dist/components/data-display/skeleton/index.d.cts +10 -0
  113. package/dist/components/data-display/skeleton/index.d.ts +10 -0
  114. package/dist/components/data-display/skeleton/index.js +18 -0
  115. package/dist/components/data-display/skeleton/index.js.map +1 -0
  116. package/dist/components/data-display/skeleton/skeleton.css +47 -0
  117. package/dist/components/editors/text-editor/editor.cjs +620 -0
  118. package/dist/components/editors/text-editor/editor.cjs.map +1 -0
  119. package/dist/components/editors/text-editor/editor.d.cts +1 -0
  120. package/dist/components/editors/text-editor/editor.d.ts +1 -0
  121. package/dist/components/editors/text-editor/editor.js +620 -0
  122. package/dist/components/editors/text-editor/editor.js.map +1 -0
  123. package/dist/components/editors/text-editor/index.cjs +39 -0
  124. package/dist/components/editors/text-editor/index.cjs.map +1 -0
  125. package/dist/components/editors/text-editor/index.d.cts +13 -0
  126. package/dist/components/editors/text-editor/index.d.ts +13 -0
  127. package/dist/components/editors/text-editor/index.js +38 -0
  128. package/dist/components/editors/text-editor/index.js.map +1 -0
  129. package/dist/components/editors/text-editor/text-document.cjs +406 -0
  130. package/dist/components/editors/text-editor/text-document.cjs.map +1 -0
  131. package/dist/components/editors/text-editor/text-document.js +391 -0
  132. package/dist/components/editors/text-editor/text-document.js.map +1 -0
  133. package/dist/components/editors/text-editor/text-editor-toolbar.cjs +251 -0
  134. package/dist/components/editors/text-editor/text-editor-toolbar.cjs.map +1 -0
  135. package/dist/components/editors/text-editor/text-editor-toolbar.css +16 -0
  136. package/dist/components/editors/text-editor/text-editor-toolbar.d.cts +7 -0
  137. package/dist/components/editors/text-editor/text-editor-toolbar.d.ts +7 -0
  138. package/dist/components/editors/text-editor/text-editor-toolbar.js +251 -0
  139. package/dist/components/editors/text-editor/text-editor-toolbar.js.map +1 -0
  140. package/dist/components/editors/text-editor/text-editor.css +116 -0
  141. package/dist/components/editors/text-editor/text-editor.types.d.cts +37 -0
  142. package/dist/components/editors/text-editor/text-editor.types.d.ts +37 -0
  143. package/dist/components/editors/text-editor/text-parser.cjs +262 -0
  144. package/dist/components/editors/text-editor/text-parser.cjs.map +1 -0
  145. package/dist/components/editors/text-editor/text-parser.js +261 -0
  146. package/dist/components/editors/text-editor/text-parser.js.map +1 -0
  147. package/dist/components/editors/text-editor/text-renderer.cjs +85 -0
  148. package/dist/components/editors/text-editor/text-renderer.cjs.map +1 -0
  149. package/dist/components/editors/text-editor/text-renderer.d.cts +7 -0
  150. package/dist/components/editors/text-editor/text-renderer.d.ts +7 -0
  151. package/dist/components/editors/text-editor/text-renderer.js +85 -0
  152. package/dist/components/editors/text-editor/text-renderer.js.map +1 -0
  153. package/dist/components/forms/autocomplete/autocomplete.css +384 -0
  154. package/dist/components/forms/autocomplete/autocomplete.types.d.cts +86 -0
  155. package/dist/components/forms/autocomplete/autocomplete.types.d.ts +86 -0
  156. package/dist/components/forms/autocomplete/autocomplete.utils.cjs +47 -0
  157. package/dist/components/forms/autocomplete/autocomplete.utils.cjs.map +1 -0
  158. package/dist/components/forms/autocomplete/autocomplete.utils.js +44 -0
  159. package/dist/components/forms/autocomplete/autocomplete.utils.js.map +1 -0
  160. package/dist/components/forms/autocomplete/index.cjs +532 -0
  161. package/dist/components/forms/autocomplete/index.cjs.map +1 -0
  162. package/dist/components/forms/autocomplete/index.d.cts +3 -0
  163. package/dist/components/forms/autocomplete/index.d.ts +3 -0
  164. package/dist/components/forms/autocomplete/index.js +532 -0
  165. package/dist/components/forms/autocomplete/index.js.map +1 -0
  166. package/dist/components/forms/checkbox/checkbox.css +146 -0
  167. package/dist/components/forms/checkbox/index.cjs +80 -0
  168. package/dist/components/forms/checkbox/index.cjs.map +1 -0
  169. package/dist/components/forms/checkbox/index.d.cts +20 -0
  170. package/dist/components/forms/checkbox/index.d.ts +20 -0
  171. package/dist/components/forms/checkbox/index.js +80 -0
  172. package/dist/components/forms/checkbox/index.js.map +1 -0
  173. package/dist/components/forms/date-picker/date-picker.css +478 -0
  174. package/dist/components/forms/date-picker/date-picker.types.d.cts +75 -0
  175. package/dist/components/forms/date-picker/date-picker.types.d.ts +75 -0
  176. package/dist/components/forms/date-picker/date-picker.utils.cjs +76 -0
  177. package/dist/components/forms/date-picker/date-picker.utils.cjs.map +1 -0
  178. package/dist/components/forms/date-picker/date-picker.utils.js +64 -0
  179. package/dist/components/forms/date-picker/date-picker.utils.js.map +1 -0
  180. package/dist/components/forms/date-picker/index.cjs +572 -0
  181. package/dist/components/forms/date-picker/index.cjs.map +1 -0
  182. package/dist/components/forms/date-picker/index.d.cts +3 -0
  183. package/dist/components/forms/date-picker/index.d.ts +3 -0
  184. package/dist/components/forms/date-picker/index.js +572 -0
  185. package/dist/components/forms/date-picker/index.js.map +1 -0
  186. package/dist/components/forms/file-upload/file-upload.css +290 -0
  187. package/dist/components/forms/file-upload/file-upload.types.d.cts +51 -0
  188. package/dist/components/forms/file-upload/file-upload.types.d.ts +51 -0
  189. package/dist/components/forms/file-upload/file-upload.utils.cjs +76 -0
  190. package/dist/components/forms/file-upload/file-upload.utils.cjs.map +1 -0
  191. package/dist/components/forms/file-upload/file-upload.utils.js +72 -0
  192. package/dist/components/forms/file-upload/file-upload.utils.js.map +1 -0
  193. package/dist/components/forms/file-upload/index.cjs +346 -0
  194. package/dist/components/forms/file-upload/index.cjs.map +1 -0
  195. package/dist/components/forms/file-upload/index.d.cts +3 -0
  196. package/dist/components/forms/file-upload/index.d.ts +3 -0
  197. package/dist/components/forms/file-upload/index.js +346 -0
  198. package/dist/components/forms/file-upload/index.js.map +1 -0
  199. package/dist/components/forms/form-field/form-field-state.cjs +25 -0
  200. package/dist/components/forms/form-field/form-field-state.cjs.map +1 -0
  201. package/dist/components/forms/form-field/form-field-state.js +25 -0
  202. package/dist/components/forms/form-field/form-field-state.js.map +1 -0
  203. package/dist/components/forms/form-field/form-field.css +44 -0
  204. package/dist/components/forms/form-field/index.cjs +61 -0
  205. package/dist/components/forms/form-field/index.cjs.map +1 -0
  206. package/dist/components/forms/form-field/index.d.cts +23 -0
  207. package/dist/components/forms/form-field/index.d.ts +23 -0
  208. package/dist/components/forms/form-field/index.js +61 -0
  209. package/dist/components/forms/form-field/index.js.map +1 -0
  210. package/dist/components/forms/input/index.d.cts +4 -0
  211. package/dist/components/forms/input/index.d.ts +4 -0
  212. package/dist/components/forms/input/input.css +153 -0
  213. package/dist/components/forms/input/number-input.cjs +192 -0
  214. package/dist/components/forms/input/number-input.cjs.map +1 -0
  215. package/dist/components/forms/input/number-input.d.cts +20 -0
  216. package/dist/components/forms/input/number-input.d.ts +20 -0
  217. package/dist/components/forms/input/number-input.js +192 -0
  218. package/dist/components/forms/input/number-input.js.map +1 -0
  219. package/dist/components/forms/input/text-area-input.cjs +47 -0
  220. package/dist/components/forms/input/text-area-input.cjs.map +1 -0
  221. package/dist/components/forms/input/text-area-input.d.cts +8 -0
  222. package/dist/components/forms/input/text-area-input.d.ts +8 -0
  223. package/dist/components/forms/input/text-area-input.js +47 -0
  224. package/dist/components/forms/input/text-area-input.js.map +1 -0
  225. package/dist/components/forms/input/text-input.cjs +47 -0
  226. package/dist/components/forms/input/text-input.cjs.map +1 -0
  227. package/dist/components/forms/input/text-input.d.cts +9 -0
  228. package/dist/components/forms/input/text-input.d.ts +9 -0
  229. package/dist/components/forms/input/text-input.js +47 -0
  230. package/dist/components/forms/input/text-input.js.map +1 -0
  231. package/dist/components/forms/label/index.cjs +26 -0
  232. package/dist/components/forms/label/index.cjs.map +1 -0
  233. package/dist/components/forms/label/index.d.cts +8 -0
  234. package/dist/components/forms/label/index.d.ts +8 -0
  235. package/dist/components/forms/label/index.js +26 -0
  236. package/dist/components/forms/label/index.js.map +1 -0
  237. package/dist/components/forms/label/label.css +22 -0
  238. package/dist/components/forms/radio-group/index.cjs +226 -0
  239. package/dist/components/forms/radio-group/index.cjs.map +1 -0
  240. package/dist/components/forms/radio-group/index.d.cts +5 -0
  241. package/dist/components/forms/radio-group/index.d.ts +5 -0
  242. package/dist/components/forms/radio-group/index.js +225 -0
  243. package/dist/components/forms/radio-group/index.js.map +1 -0
  244. package/dist/components/forms/radio-group/radio-group.css +222 -0
  245. package/dist/components/forms/radio-group/radio-group.types.d.cts +51 -0
  246. package/dist/components/forms/radio-group/radio-group.types.d.ts +51 -0
  247. package/dist/components/forms/radio-group/radio-group.utils.cjs +22 -0
  248. package/dist/components/forms/radio-group/radio-group.utils.cjs.map +1 -0
  249. package/dist/components/forms/radio-group/radio-group.utils.js +21 -0
  250. package/dist/components/forms/radio-group/radio-group.utils.js.map +1 -0
  251. package/dist/components/forms/select/index.cjs +468 -0
  252. package/dist/components/forms/select/index.cjs.map +1 -0
  253. package/dist/components/forms/select/index.d.cts +112 -0
  254. package/dist/components/forms/select/index.d.ts +112 -0
  255. package/dist/components/forms/select/index.js +468 -0
  256. package/dist/components/forms/select/index.js.map +1 -0
  257. package/dist/components/forms/select/select.css +363 -0
  258. package/dist/components/forms/slider/index.cjs +93 -0
  259. package/dist/components/forms/slider/index.cjs.map +1 -0
  260. package/dist/components/forms/slider/index.d.cts +37 -0
  261. package/dist/components/forms/slider/index.d.ts +37 -0
  262. package/dist/components/forms/slider/index.js +93 -0
  263. package/dist/components/forms/slider/index.js.map +1 -0
  264. package/dist/components/forms/slider/slider.css +202 -0
  265. package/dist/components/forms/stepper/index.cjs +113 -0
  266. package/dist/components/forms/stepper/index.cjs.map +1 -0
  267. package/dist/components/forms/stepper/index.d.cts +48 -0
  268. package/dist/components/forms/stepper/index.d.ts +48 -0
  269. package/dist/components/forms/stepper/index.js +113 -0
  270. package/dist/components/forms/stepper/index.js.map +1 -0
  271. package/dist/components/forms/stepper/stepper.css +241 -0
  272. package/dist/components/forms/switch/index.cjs +45 -0
  273. package/dist/components/forms/switch/index.cjs.map +1 -0
  274. package/dist/components/forms/switch/index.d.cts +11 -0
  275. package/dist/components/forms/switch/index.d.ts +11 -0
  276. package/dist/components/forms/switch/index.js +45 -0
  277. package/dist/components/forms/switch/index.js.map +1 -0
  278. package/dist/components/forms/switch/switch.css +142 -0
  279. package/dist/components/layout/app-bar/app-bar.css +197 -0
  280. package/dist/components/layout/app-bar/index.cjs +150 -0
  281. package/dist/components/layout/app-bar/index.cjs.map +1 -0
  282. package/dist/components/layout/app-bar/index.d.cts +21 -0
  283. package/dist/components/layout/app-bar/index.d.ts +21 -0
  284. package/dist/components/layout/app-bar/index.js +150 -0
  285. package/dist/components/layout/app-bar/index.js.map +1 -0
  286. package/dist/components/layout/background/background.css +160 -0
  287. package/dist/components/layout/background/index.cjs +34 -0
  288. package/dist/components/layout/background/index.cjs.map +1 -0
  289. package/dist/components/layout/background/index.d.cts +23 -0
  290. package/dist/components/layout/background/index.d.ts +23 -0
  291. package/dist/components/layout/background/index.js +34 -0
  292. package/dist/components/layout/background/index.js.map +1 -0
  293. package/dist/components/layout/bottom-navigation/bottom-navigation.css +108 -0
  294. package/dist/components/layout/bottom-navigation/index.cjs +51 -0
  295. package/dist/components/layout/bottom-navigation/index.cjs.map +1 -0
  296. package/dist/components/layout/bottom-navigation/index.d.cts +19 -0
  297. package/dist/components/layout/bottom-navigation/index.d.ts +19 -0
  298. package/dist/components/layout/bottom-navigation/index.js +50 -0
  299. package/dist/components/layout/bottom-navigation/index.js.map +1 -0
  300. package/dist/components/layout/breadcrumbs/breadcrumbs.css +80 -0
  301. package/dist/components/layout/breadcrumbs/index.cjs +38 -0
  302. package/dist/components/layout/breadcrumbs/index.cjs.map +1 -0
  303. package/dist/components/layout/breadcrumbs/index.d.cts +18 -0
  304. package/dist/components/layout/breadcrumbs/index.d.ts +18 -0
  305. package/dist/components/layout/breadcrumbs/index.js +38 -0
  306. package/dist/components/layout/breadcrumbs/index.js.map +1 -0
  307. package/dist/components/layout/collapsable-sidebar/collapsable-sidebar.css +240 -0
  308. package/dist/components/layout/collapsable-sidebar/index.cjs +107 -0
  309. package/dist/components/layout/collapsable-sidebar/index.cjs.map +1 -0
  310. package/dist/components/layout/collapsable-sidebar/index.d.cts +35 -0
  311. package/dist/components/layout/collapsable-sidebar/index.d.ts +35 -0
  312. package/dist/components/layout/collapsable-sidebar/index.js +107 -0
  313. package/dist/components/layout/collapsable-sidebar/index.js.map +1 -0
  314. package/dist/components/layout/container/container.css +24 -0
  315. package/dist/components/layout/container/container.utils.cjs +11 -0
  316. package/dist/components/layout/container/container.utils.cjs.map +1 -0
  317. package/dist/components/layout/container/container.utils.d.cts +1 -0
  318. package/dist/components/layout/container/container.utils.d.ts +1 -0
  319. package/dist/components/layout/container/container.utils.js +11 -0
  320. package/dist/components/layout/container/container.utils.js.map +1 -0
  321. package/dist/components/layout/container/index.cjs +17 -0
  322. package/dist/components/layout/container/index.cjs.map +1 -0
  323. package/dist/components/layout/container/index.d.cts +11 -0
  324. package/dist/components/layout/container/index.d.ts +11 -0
  325. package/dist/components/layout/container/index.js +17 -0
  326. package/dist/components/layout/container/index.js.map +1 -0
  327. package/dist/components/layout/page-layout/index.cjs +80 -0
  328. package/dist/components/layout/page-layout/index.cjs.map +1 -0
  329. package/dist/components/layout/page-layout/index.d.cts +61 -0
  330. package/dist/components/layout/page-layout/index.d.ts +61 -0
  331. package/dist/components/layout/page-layout/index.js +80 -0
  332. package/dist/components/layout/page-layout/index.js.map +1 -0
  333. package/dist/components/layout/page-layout/page-layout.css +88 -0
  334. package/dist/components/layout/section/index.cjs +15 -0
  335. package/dist/components/layout/section/index.cjs.map +1 -0
  336. package/dist/components/layout/section/index.d.cts +2 -0
  337. package/dist/components/layout/section/index.d.ts +2 -0
  338. package/dist/components/layout/section/index.js +15 -0
  339. package/dist/components/layout/section/index.js.map +1 -0
  340. package/dist/components/layout/section/section.css +71 -0
  341. package/dist/components/layout/section/types.d.cts +13 -0
  342. package/dist/components/layout/section/types.d.ts +13 -0
  343. package/dist/components/layout/section-stack/index.cjs +29 -0
  344. package/dist/components/layout/section-stack/index.cjs.map +1 -0
  345. package/dist/components/layout/section-stack/index.d.cts +8 -0
  346. package/dist/components/layout/section-stack/index.d.ts +8 -0
  347. package/dist/components/layout/section-stack/index.js +29 -0
  348. package/dist/components/layout/section-stack/index.js.map +1 -0
  349. package/dist/components/layout/sidebar/index.cjs +16 -0
  350. package/dist/components/layout/sidebar/index.cjs.map +1 -0
  351. package/dist/components/layout/sidebar/index.d.cts +7 -0
  352. package/dist/components/layout/sidebar/index.d.ts +7 -0
  353. package/dist/components/layout/sidebar/index.js +16 -0
  354. package/dist/components/layout/sidebar/index.js.map +1 -0
  355. package/dist/components/layout/sidebar/sidebar.css +21 -0
  356. package/dist/components/layout/stack/index.cjs +30 -0
  357. package/dist/components/layout/stack/index.cjs.map +1 -0
  358. package/dist/components/layout/stack/index.d.cts +31 -0
  359. package/dist/components/layout/stack/index.d.ts +31 -0
  360. package/dist/components/layout/stack/index.js +30 -0
  361. package/dist/components/layout/stack/index.js.map +1 -0
  362. package/dist/components/layout/stack/stack.css +303 -0
  363. package/dist/components/navigation/accordion/accordion.css +97 -0
  364. package/dist/components/navigation/accordion/index.cjs +107 -0
  365. package/dist/components/navigation/accordion/index.cjs.map +1 -0
  366. package/dist/components/navigation/accordion/index.d.cts +48 -0
  367. package/dist/components/navigation/accordion/index.d.ts +48 -0
  368. package/dist/components/navigation/accordion/index.js +107 -0
  369. package/dist/components/navigation/accordion/index.js.map +1 -0
  370. package/dist/components/navigation/carousel/carousel.css +283 -0
  371. package/dist/components/navigation/carousel/controller.cjs +46 -0
  372. package/dist/components/navigation/carousel/controller.cjs.map +1 -0
  373. package/dist/components/navigation/carousel/controller.d.cts +16 -0
  374. package/dist/components/navigation/carousel/controller.d.ts +16 -0
  375. package/dist/components/navigation/carousel/controller.js +45 -0
  376. package/dist/components/navigation/carousel/controller.js.map +1 -0
  377. package/dist/components/navigation/carousel/index.cjs +494 -0
  378. package/dist/components/navigation/carousel/index.cjs.map +1 -0
  379. package/dist/components/navigation/carousel/index.d.cts +27 -0
  380. package/dist/components/navigation/carousel/index.d.ts +27 -0
  381. package/dist/components/navigation/carousel/index.js +494 -0
  382. package/dist/components/navigation/carousel/index.js.map +1 -0
  383. package/dist/components/navigation/link/index.cjs +40 -0
  384. package/dist/components/navigation/link/index.cjs.map +1 -0
  385. package/dist/components/navigation/link/index.d.cts +3 -0
  386. package/dist/components/navigation/link/index.d.ts +3 -0
  387. package/dist/components/navigation/link/index.js +40 -0
  388. package/dist/components/navigation/link/index.js.map +1 -0
  389. package/dist/components/navigation/link/link.css +31 -0
  390. package/dist/components/navigation/link/types.d.cts +12 -0
  391. package/dist/components/navigation/link/types.d.ts +12 -0
  392. package/dist/components/navigation/tabs/index.cjs +111 -0
  393. package/dist/components/navigation/tabs/index.cjs.map +1 -0
  394. package/dist/components/navigation/tabs/index.d.cts +30 -0
  395. package/dist/components/navigation/tabs/index.d.ts +30 -0
  396. package/dist/components/navigation/tabs/index.js +110 -0
  397. package/dist/components/navigation/tabs/index.js.map +1 -0
  398. package/dist/components/navigation/tabs/tabs.css +216 -0
  399. package/dist/components/navigation/tree-view/index.cjs +455 -0
  400. package/dist/components/navigation/tree-view/index.cjs.map +1 -0
  401. package/dist/components/navigation/tree-view/index.d.cts +96 -0
  402. package/dist/components/navigation/tree-view/index.d.ts +96 -0
  403. package/dist/components/navigation/tree-view/index.js +455 -0
  404. package/dist/components/navigation/tree-view/index.js.map +1 -0
  405. package/dist/components/navigation/tree-view/tree-view.css +258 -0
  406. package/dist/components/overlays/backdrop/backdrop.css +10 -0
  407. package/dist/components/overlays/backdrop/index.cjs +70 -0
  408. package/dist/components/overlays/backdrop/index.cjs.map +1 -0
  409. package/dist/components/overlays/backdrop/index.d.cts +12 -0
  410. package/dist/components/overlays/backdrop/index.d.ts +12 -0
  411. package/dist/components/overlays/backdrop/index.js +70 -0
  412. package/dist/components/overlays/backdrop/index.js.map +1 -0
  413. package/dist/components/overlays/command/command.css +154 -0
  414. package/dist/components/overlays/command/command.types.d.cts +36 -0
  415. package/dist/components/overlays/command/command.types.d.ts +36 -0
  416. package/dist/components/overlays/command/command.utils.cjs +39 -0
  417. package/dist/components/overlays/command/command.utils.cjs.map +1 -0
  418. package/dist/components/overlays/command/command.utils.js +35 -0
  419. package/dist/components/overlays/command/command.utils.js.map +1 -0
  420. package/dist/components/overlays/command/index.cjs +274 -0
  421. package/dist/components/overlays/command/index.cjs.map +1 -0
  422. package/dist/components/overlays/command/index.d.cts +4 -0
  423. package/dist/components/overlays/command/index.d.ts +4 -0
  424. package/dist/components/overlays/command/index.js +273 -0
  425. package/dist/components/overlays/command/index.js.map +1 -0
  426. package/dist/components/overlays/dialog/dialog.css +121 -0
  427. package/dist/components/overlays/dialog/index.cjs +80 -0
  428. package/dist/components/overlays/dialog/index.cjs.map +1 -0
  429. package/dist/components/overlays/dialog/index.d.cts +35 -0
  430. package/dist/components/overlays/dialog/index.d.ts +35 -0
  431. package/dist/components/overlays/dialog/index.js +80 -0
  432. package/dist/components/overlays/dialog/index.js.map +1 -0
  433. package/dist/components/overlays/drawer/drawer.css +133 -0
  434. package/dist/components/overlays/drawer/index.cjs +90 -0
  435. package/dist/components/overlays/drawer/index.cjs.map +1 -0
  436. package/dist/components/overlays/drawer/index.d.cts +11 -0
  437. package/dist/components/overlays/drawer/index.d.ts +11 -0
  438. package/dist/components/overlays/drawer/index.js +90 -0
  439. package/dist/components/overlays/drawer/index.js.map +1 -0
  440. package/dist/components/overlays/drawer/use-resize-bar.cjs +152 -0
  441. package/dist/components/overlays/drawer/use-resize-bar.cjs.map +1 -0
  442. package/dist/components/overlays/drawer/use-resize-bar.js +152 -0
  443. package/dist/components/overlays/drawer/use-resize-bar.js.map +1 -0
  444. package/dist/components/overlays/dropdown-menu/dropdown-menu-content.cjs +120 -0
  445. package/dist/components/overlays/dropdown-menu/dropdown-menu-content.cjs.map +1 -0
  446. package/dist/components/overlays/dropdown-menu/dropdown-menu-content.d.cts +3 -0
  447. package/dist/components/overlays/dropdown-menu/dropdown-menu-content.d.ts +3 -0
  448. package/dist/components/overlays/dropdown-menu/dropdown-menu-content.js +120 -0
  449. package/dist/components/overlays/dropdown-menu/dropdown-menu-content.js.map +1 -0
  450. package/dist/components/overlays/dropdown-menu/dropdown-menu-items.cjs +136 -0
  451. package/dist/components/overlays/dropdown-menu/dropdown-menu-items.cjs.map +1 -0
  452. package/dist/components/overlays/dropdown-menu/dropdown-menu-items.d.cts +7 -0
  453. package/dist/components/overlays/dropdown-menu/dropdown-menu-items.d.ts +7 -0
  454. package/dist/components/overlays/dropdown-menu/dropdown-menu-items.js +132 -0
  455. package/dist/components/overlays/dropdown-menu/dropdown-menu-items.js.map +1 -0
  456. package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.cjs +76 -0
  457. package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.cjs.map +1 -0
  458. package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.d.cts +4 -0
  459. package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.d.ts +4 -0
  460. package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.js +75 -0
  461. package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.js.map +1 -0
  462. package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.cjs +96 -0
  463. package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.cjs.map +1 -0
  464. package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.d.cts +3 -0
  465. package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.d.ts +3 -0
  466. package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.js +96 -0
  467. package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.js.map +1 -0
  468. package/dist/components/overlays/dropdown-menu/dropdown-menu.cjs +111 -0
  469. package/dist/components/overlays/dropdown-menu/dropdown-menu.cjs.map +1 -0
  470. package/dist/components/overlays/dropdown-menu/dropdown-menu.context.cjs +21 -0
  471. package/dist/components/overlays/dropdown-menu/dropdown-menu.context.cjs.map +1 -0
  472. package/dist/components/overlays/dropdown-menu/dropdown-menu.context.js +18 -0
  473. package/dist/components/overlays/dropdown-menu/dropdown-menu.context.js.map +1 -0
  474. package/dist/components/overlays/dropdown-menu/dropdown-menu.css +127 -0
  475. package/dist/components/overlays/dropdown-menu/dropdown-menu.d.cts +3 -0
  476. package/dist/components/overlays/dropdown-menu/dropdown-menu.d.ts +3 -0
  477. package/dist/components/overlays/dropdown-menu/dropdown-menu.js +111 -0
  478. package/dist/components/overlays/dropdown-menu/dropdown-menu.js.map +1 -0
  479. package/dist/components/overlays/dropdown-menu/dropdown-menu.types.d.cts +66 -0
  480. package/dist/components/overlays/dropdown-menu/dropdown-menu.types.d.ts +66 -0
  481. package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.cjs +44 -0
  482. package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.cjs.map +1 -0
  483. package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.js +39 -0
  484. package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.js.map +1 -0
  485. package/dist/components/overlays/dropdown-menu/index.cjs +31 -0
  486. package/dist/components/overlays/dropdown-menu/index.cjs.map +1 -0
  487. package/dist/components/overlays/dropdown-menu/index.d.cts +19 -0
  488. package/dist/components/overlays/dropdown-menu/index.d.ts +19 -0
  489. package/dist/components/overlays/dropdown-menu/index.js +22 -0
  490. package/dist/components/overlays/dropdown-menu/index.js.map +1 -0
  491. package/dist/components/overlays/floating-position/calculate-position.cjs +94 -0
  492. package/dist/components/overlays/floating-position/calculate-position.cjs.map +1 -0
  493. package/dist/components/overlays/floating-position/calculate-position.js +89 -0
  494. package/dist/components/overlays/floating-position/calculate-position.js.map +1 -0
  495. package/dist/components/overlays/floating-position/use-floating-position.cjs +89 -0
  496. package/dist/components/overlays/floating-position/use-floating-position.cjs.map +1 -0
  497. package/dist/components/overlays/floating-position/use-floating-position.js +89 -0
  498. package/dist/components/overlays/floating-position/use-floating-position.js.map +1 -0
  499. package/dist/components/overlays/notification/index.cjs +142 -0
  500. package/dist/components/overlays/notification/index.cjs.map +1 -0
  501. package/dist/components/overlays/notification/index.d.cts +16 -0
  502. package/dist/components/overlays/notification/index.d.ts +16 -0
  503. package/dist/components/overlays/notification/index.js +139 -0
  504. package/dist/components/overlays/notification/index.js.map +1 -0
  505. package/dist/components/overlays/notification/notification-provider.cjs +69 -0
  506. package/dist/components/overlays/notification/notification-provider.cjs.map +1 -0
  507. package/dist/components/overlays/notification/notification-provider.d.cts +3 -0
  508. package/dist/components/overlays/notification/notification-provider.d.ts +3 -0
  509. package/dist/components/overlays/notification/notification-provider.js +68 -0
  510. package/dist/components/overlays/notification/notification-provider.js.map +1 -0
  511. package/dist/components/overlays/notification/notification.css +172 -0
  512. package/dist/components/overlays/notification/notification.types.d.cts +41 -0
  513. package/dist/components/overlays/notification/notification.types.d.ts +41 -0
  514. package/dist/components/overlays/notification/notification.utils.cjs +23 -0
  515. package/dist/components/overlays/notification/notification.utils.cjs.map +1 -0
  516. package/dist/components/overlays/notification/notification.utils.js +22 -0
  517. package/dist/components/overlays/notification/notification.utils.js.map +1 -0
  518. package/dist/components/overlays/notification/use-notification.cjs +12 -0
  519. package/dist/components/overlays/notification/use-notification.cjs.map +1 -0
  520. package/dist/components/overlays/notification/use-notification.d.cts +3 -0
  521. package/dist/components/overlays/notification/use-notification.d.ts +3 -0
  522. package/dist/components/overlays/notification/use-notification.js +12 -0
  523. package/dist/components/overlays/notification/use-notification.js.map +1 -0
  524. package/dist/components/overlays/overlay-stack/index.cjs +195 -0
  525. package/dist/components/overlays/overlay-stack/index.cjs.map +1 -0
  526. package/dist/components/overlays/overlay-stack/index.js +193 -0
  527. package/dist/components/overlays/overlay-stack/index.js.map +1 -0
  528. package/dist/components/overlays/popout/index.cjs +190 -0
  529. package/dist/components/overlays/popout/index.cjs.map +1 -0
  530. package/dist/components/overlays/popout/index.d.cts +26 -0
  531. package/dist/components/overlays/popout/index.d.ts +26 -0
  532. package/dist/components/overlays/popout/index.js +190 -0
  533. package/dist/components/overlays/popout/index.js.map +1 -0
  534. package/dist/components/overlays/popout/popout.css +15 -0
  535. package/dist/components/overlays/popover/index.cjs +163 -0
  536. package/dist/components/overlays/popover/index.cjs.map +1 -0
  537. package/dist/components/overlays/popover/index.d.cts +28 -0
  538. package/dist/components/overlays/popover/index.d.ts +28 -0
  539. package/dist/components/overlays/popover/index.js +163 -0
  540. package/dist/components/overlays/popover/index.js.map +1 -0
  541. package/dist/components/overlays/popover/popover.css +56 -0
  542. package/dist/components/overlays/portal/index.cjs +33 -0
  543. package/dist/components/overlays/portal/index.cjs.map +1 -0
  544. package/dist/components/overlays/portal/index.d.cts +15 -0
  545. package/dist/components/overlays/portal/index.d.ts +15 -0
  546. package/dist/components/overlays/portal/index.js +33 -0
  547. package/dist/components/overlays/portal/index.js.map +1 -0
  548. package/dist/components/overlays/portal/target.cjs +17 -0
  549. package/dist/components/overlays/portal/target.cjs.map +1 -0
  550. package/dist/components/overlays/portal/target.css +3 -0
  551. package/dist/components/overlays/portal/target.d.cts +7 -0
  552. package/dist/components/overlays/portal/target.d.ts +7 -0
  553. package/dist/components/overlays/portal/target.js +17 -0
  554. package/dist/components/overlays/portal/target.js.map +1 -0
  555. package/dist/components/overlays/tooltip/index.cjs +71 -0
  556. package/dist/components/overlays/tooltip/index.cjs.map +1 -0
  557. package/dist/components/overlays/tooltip/index.d.cts +24 -0
  558. package/dist/components/overlays/tooltip/index.d.ts +24 -0
  559. package/dist/components/overlays/tooltip/index.js +71 -0
  560. package/dist/components/overlays/tooltip/index.js.map +1 -0
  561. package/dist/components/overlays/tooltip/tooltip.css +67 -0
  562. package/dist/components/typography/heading.cjs +14 -0
  563. package/dist/components/typography/heading.cjs.map +1 -0
  564. package/dist/components/typography/heading.d.cts +11 -0
  565. package/dist/components/typography/heading.d.ts +11 -0
  566. package/dist/components/typography/heading.js +14 -0
  567. package/dist/components/typography/heading.js.map +1 -0
  568. package/dist/components/typography/text.cjs +14 -0
  569. package/dist/components/typography/text.cjs.map +1 -0
  570. package/dist/components/typography/text.d.cts +12 -0
  571. package/dist/components/typography/text.d.ts +12 -0
  572. package/dist/components/typography/text.js +14 -0
  573. package/dist/components/typography/text.js.map +1 -0
  574. package/dist/components/utilities/preview/highlight.cjs +79 -0
  575. package/dist/components/utilities/preview/highlight.cjs.map +1 -0
  576. package/dist/components/utilities/preview/highlight.js +79 -0
  577. package/dist/components/utilities/preview/highlight.js.map +1 -0
  578. package/dist/components/utilities/preview/index.cjs +391 -0
  579. package/dist/components/utilities/preview/index.cjs.map +1 -0
  580. package/dist/components/utilities/preview/index.d.cts +20 -0
  581. package/dist/components/utilities/preview/index.d.ts +20 -0
  582. package/dist/components/utilities/preview/index.js +391 -0
  583. package/dist/components/utilities/preview/index.js.map +1 -0
  584. package/dist/components/utilities/preview/preview.css +268 -0
  585. package/dist/components/utilities/scroll-lock/index.cjs +124 -0
  586. package/dist/components/utilities/scroll-lock/index.cjs.map +1 -0
  587. package/dist/components/utilities/scroll-lock/index.d.cts +6 -0
  588. package/dist/components/utilities/scroll-lock/index.d.ts +6 -0
  589. package/dist/components/utilities/scroll-lock/index.js +124 -0
  590. package/dist/components/utilities/scroll-lock/index.js.map +1 -0
  591. package/dist/components/utilities/transition/index.cjs +171 -0
  592. package/dist/components/utilities/transition/index.cjs.map +1 -0
  593. package/dist/components/utilities/transition/index.d.cts +27 -0
  594. package/dist/components/utilities/transition/index.d.ts +27 -0
  595. package/dist/components/utilities/transition/index.js +171 -0
  596. package/dist/components/utilities/transition/index.js.map +1 -0
  597. package/dist/components/utilities/transition/transition.css +130 -0
  598. package/dist/index.cjs +155 -0
  599. package/dist/index.d.cts +85 -0
  600. package/dist/index.d.ts +85 -0
  601. package/dist/index.js +69 -0
  602. package/package.json +65 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-document.cjs","names":[],"sources":["../../../../src/components/editors/text-editor/text-document.ts"],"sourcesContent":["import type {\n TextBlock,\n TextDocument,\n TextInline,\n TextMark,\n TextPoint,\n TextSelection,\n TextBlockVariant,\n TextAlign,\n TextListType,\n} from \"./text-editor.types\";\n\nconst HEADING_VARIANTS = new Set<TextBlockVariant>([\n \"display1\",\n \"display2\",\n \"headline1\",\n \"headline2\",\n \"headline3\",\n \"headline4\",\n]);\n\nconst MARK_ORDER: TextMark[] = [\"bold\", \"italic\", \"underline\", \"strike\"];\n\nexport const isHeadingVariant = (variant: TextBlockVariant): boolean =>\n HEADING_VARIANTS.has(variant);\n\nexport const createTextDocument = (text = \"\"): TextDocument => ({\n type: \"doc\",\n content: [\n {\n type: \"paragraph\",\n variant: \"body1\",\n children: text ? [{ text }] : [],\n },\n ],\n});\n\nexport const createTextSelection = (block = 0, offset = 0): TextSelection => ({\n anchor: { block, offset },\n focus: { block, offset },\n});\n\nexport const getBlockText = (block: TextBlock): string =>\n block.children.map((child) => child.text).join(\"\");\n\nexport const getBlockLength = (block: TextBlock): number =>\n block.children.reduce((length, child) => length + child.text.length, 0);\n\nexport const isCollapsedSelection = (selection: TextSelection): boolean =>\n selection.anchor.block === selection.focus.block &&\n selection.anchor.offset === selection.focus.offset;\n\nexport const getOrderedSelection = (\n selection: TextSelection,\n): { start: TextPoint; end: TextPoint } => {\n const { anchor, focus } = selection;\n if (\n anchor.block < focus.block ||\n (anchor.block === focus.block && anchor.offset <= focus.offset)\n ) {\n return { start: anchor, end: focus };\n }\n\n return { start: focus, end: anchor };\n};\n\nconst normalizeMarks = (marks: TextMark[] = []): TextMark[] =>\n MARK_ORDER.filter((mark) => marks.includes(mark));\n\nconst sameMarks = (left: TextMark[] = [], right: TextMark[] = []): boolean => {\n const a = normalizeMarks(left);\n const b = normalizeMarks(right);\n return a.length === b.length && a.every((mark, index) => mark === b[index]);\n};\n\nexport const normalizeInlines = (inlines: TextInline[]): TextInline[] => {\n const result: TextInline[] = [];\n\n for (const inline of inlines) {\n if (!inline.text) continue;\n\n const marks = normalizeMarks(inline.marks);\n const previous = result[result.length - 1];\n\n if (previous && sameMarks(previous.marks, marks)) {\n previous.text += inline.text;\n continue;\n }\n\n result.push({\n text: inline.text,\n ...(marks.length ? { marks } : {}),\n });\n }\n\n return result;\n};\n\nconst isTextMark = (value: unknown): value is TextMark =>\n value === \"bold\" ||\n value === \"italic\" ||\n value === \"underline\" ||\n value === \"strike\";\n\nconst isTextVariant = (value: unknown): value is TextBlockVariant =>\n value === \"display1\" ||\n value === \"display2\" ||\n value === \"headline1\" ||\n value === \"headline2\" ||\n value === \"headline3\" ||\n value === \"headline4\" ||\n value === \"subtitle1\" ||\n value === \"subtitle2\" ||\n value === \"body1\" ||\n value === \"body2\" ||\n value === \"button\" ||\n value === \"caption\" ||\n value === \"overline\";\n\nexport const normalizeTextDocument = (input: TextDocument): TextDocument => {\n const content = Array.isArray(input?.content)\n ? input.content.flatMap((candidate) => {\n if (!candidate || !Array.isArray(candidate.children)) return [];\n\n const variant = isTextVariant(candidate.variant)\n ? candidate.variant\n : \"body1\";\n\n const children = normalizeInlines(\n candidate.children.flatMap((inline) => {\n if (!inline || typeof inline.text !== \"string\") return [];\n const marks = Array.isArray(inline.marks)\n ? inline.marks.filter(isTextMark)\n : [];\n return [{ text: inline.text, marks }];\n }),\n );\n\n const listType =\n candidate.listType === \"bullet\" || candidate.listType === \"ordered\"\n ? candidate.listType\n : undefined;\n const align =\n candidate.align === \"left\" ||\n candidate.align === \"center\" ||\n candidate.align === \"right\" ||\n candidate.align === \"justify\"\n ? (candidate.align as TextAlign)\n : undefined;\n\n const type = listType\n ? \"listItem\"\n : candidate.type === \"heading\" && isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\";\n const headingLevel =\n type === \"heading\" &&\n Number.isInteger(candidate.headingLevel) &&\n candidate.headingLevel! >= 1 &&\n candidate.headingLevel! <= 6\n ? candidate.headingLevel\n : undefined;\n\n return [\n {\n type: listType\n ? \"listItem\"\n : candidate.type === \"heading\" && isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\",\n variant,\n children,\n ...(listType ? { listType } : {}),\n ...(align ? { align } : {}),\n ...(headingLevel ? { headingLevel } : {}),\n } satisfies TextBlock,\n ];\n })\n : [];\n\n return {\n type: \"doc\",\n content: content.length\n ? content\n : [{ type: \"paragraph\", variant: \"body1\", children: [] }],\n };\n};\n\nconst sliceInlines = (\n inlines: TextInline[],\n from: number,\n to: number,\n): TextInline[] => {\n if (to <= from) return [];\n\n const result: TextInline[] = [];\n let position = 0;\n\n for (const inline of inlines) {\n const start = position;\n const end = position + inline.text.length;\n const overlapStart = Math.max(start, from);\n const overlapEnd = Math.min(end, to);\n\n if (overlapStart < overlapEnd) {\n result.push({\n text: inline.text.slice(overlapStart - start, overlapEnd - start),\n ...(inline.marks?.length ? { marks: [...inline.marks] } : {}),\n });\n }\n\n position = end;\n if (position >= to) break;\n }\n\n return normalizeInlines(result);\n};\n\nconst transformInlineRange = (\n inlines: TextInline[],\n from: number,\n to: number,\n transform: (marks: TextMark[]) => TextMark[],\n): TextInline[] => {\n if (to <= from) return inlines.map((inline) => ({ ...inline }));\n\n const result: TextInline[] = [];\n let position = 0;\n\n for (const inline of inlines) {\n const start = position;\n const end = start + inline.text.length;\n\n if (end <= from || start >= to) {\n result.push({\n ...inline,\n ...(inline.marks ? { marks: [...inline.marks] } : {}),\n });\n } else {\n const leftLength = Math.max(0, from - start);\n const rightStart = Math.max(0, to - start);\n const marks = inline.marks ?? [];\n\n if (leftLength > 0) {\n result.push({\n text: inline.text.slice(0, leftLength),\n ...(marks.length ? { marks: [...marks] } : {}),\n });\n }\n\n const middleEnd = Math.min(inline.text.length, to - start);\n if (middleEnd > leftLength) {\n result.push({\n text: inline.text.slice(leftLength, middleEnd),\n marks: transform([...marks]),\n });\n }\n\n if (rightStart < inline.text.length) {\n result.push({\n text: inline.text.slice(Math.max(0, rightStart)),\n ...(marks.length ? { marks: [...marks] } : {}),\n });\n }\n }\n\n position = end;\n }\n\n return normalizeInlines(result);\n};\n\nexport const applyMark = (\n document: TextDocument,\n selection: TextSelection,\n mark: TextMark,\n force?: boolean,\n): TextDocument => {\n if (isCollapsedSelection(selection)) return document;\n\n const { start, end } = getOrderedSelection(selection);\n const allMarked = document.content.every((block, index) => {\n if (index < start.block || index > end.block) return true;\n const from = index === start.block ? start.offset : 0;\n const to = index === end.block ? end.offset : getBlockLength(block);\n if (to <= from) return true;\n\n let position = 0;\n for (const inline of block.children) {\n const inlineStart = position;\n const inlineEnd = position + inline.text.length;\n position = inlineEnd;\n if (inlineEnd <= from || inlineStart >= to) continue;\n if (!inline.marks?.includes(mark)) return false;\n }\n return true;\n });\n\n const addMark = force ?? !allMarked;\n const content = document.content.map((block, index) => {\n if (index < start.block || index > end.block) return block;\n const from = index === start.block ? start.offset : 0;\n const to = index === end.block ? end.offset : getBlockLength(block);\n if (to <= from) return block;\n\n return {\n ...block,\n children: transformInlineRange(block.children, from, to, (marks) => {\n const next = new Set(marks);\n if (addMark) next.add(mark);\n else next.delete(mark);\n return MARK_ORDER.filter((item) => next.has(item));\n }),\n };\n });\n\n return { type: \"doc\", content };\n};\n\nexport const setTextVariant = (\n document: TextDocument,\n selection: TextSelection,\n variant: TextBlockVariant,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n return {\n ...block,\n type: block.listType\n ? \"listItem\"\n : isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\",\n variant,\n };\n }),\n };\n};\n\nconst inlineWithOffset = (\n inlines: TextInline[],\n offset: number,\n): { before: TextInline[]; after: TextInline[] } => ({\n before: sliceInlines(inlines, 0, offset),\n after: sliceInlines(\n inlines,\n offset,\n inlines.reduce((sum, item) => sum + item.text.length, 0),\n ),\n});\n\nexport const insertDocumentAtSelection = (\n document: TextDocument,\n selection: TextSelection,\n insertedDocument: TextDocument,\n): { document: TextDocument; selection: TextSelection } => {\n const source = normalizeTextDocument(document);\n const inserted = normalizeTextDocument(insertedDocument);\n const { start, end } = getOrderedSelection(selection);\n const startIndex = Math.max(\n 0,\n Math.min(start.block, source.content.length - 1),\n );\n const endIndex = Math.max(\n startIndex,\n Math.min(end.block, source.content.length - 1),\n );\n const startBlock = source.content[startIndex];\n const endBlock = source.content[endIndex];\n const startOffset = Math.max(\n 0,\n Math.min(start.offset, getBlockLength(startBlock)),\n );\n const endOffset = Math.max(0, Math.min(end.offset, getBlockLength(endBlock)));\n const prefix = inlineWithOffset(startBlock.children, startOffset).before;\n const suffix = inlineWithOffset(endBlock.children, endOffset).after;\n const insertedBlocks = inserted.content.map((block) => ({\n ...block,\n children: block.children.map((inline) => ({\n ...inline,\n ...(inline.marks ? { marks: [...inline.marks] } : {}),\n })),\n }));\n\n const leftSurvives = prefix.length > 0 || startOffset > 0;\n const rightSurvives =\n suffix.length > 0 || endOffset < getBlockLength(endBlock);\n const first = insertedBlocks[0];\n const last = insertedBlocks[insertedBlocks.length - 1];\n const separatePrefix = leftSurvives && first.type === \"heading\";\n const separateSuffix = rightSurvives && last.type === \"heading\";\n const replacement: TextBlock[] = [];\n\n if (separatePrefix) {\n replacement.push({\n ...startBlock,\n children: prefix,\n });\n }\n\n if (insertedBlocks.length === 1) {\n if (separatePrefix || separateSuffix) {\n replacement.push({\n ...first,\n type: separatePrefix || !leftSurvives ? first.type : startBlock.type,\n variant:\n separatePrefix || !leftSurvives ? first.variant : startBlock.variant,\n children: separatePrefix\n ? first.children\n : normalizeInlines([...prefix, ...first.children]),\n });\n if (separateSuffix) {\n replacement.push({ ...endBlock, children: suffix });\n } else {\n const finalIndex = replacement.length - 1;\n replacement[finalIndex] = {\n ...replacement[finalIndex],\n children: normalizeInlines([\n ...replacement[finalIndex].children,\n ...suffix,\n ]),\n };\n }\n } else {\n const useInsertedStyle = !leftSurvives && !rightSurvives;\n replacement.push({\n ...(useInsertedStyle ? first : startBlock),\n type: useInsertedStyle ? first.type : startBlock.type,\n variant: useInsertedStyle ? first.variant : startBlock.variant,\n children: normalizeInlines([...prefix, ...first.children, ...suffix]),\n });\n }\n } else {\n replacement.push({\n ...(separatePrefix || !leftSurvives ? first : startBlock),\n type: separatePrefix || !leftSurvives ? first.type : startBlock.type,\n variant:\n separatePrefix || !leftSurvives ? first.variant : startBlock.variant,\n children: separatePrefix\n ? first.children\n : normalizeInlines([...prefix, ...first.children]),\n });\n\n for (let index = 1; index < insertedBlocks.length - 1; index += 1) {\n replacement.push(insertedBlocks[index]);\n }\n\n if (separateSuffix) {\n replacement.push(last);\n replacement.push({ ...endBlock, children: suffix });\n } else {\n replacement.push({\n ...(rightSurvives ? endBlock : last),\n type: rightSurvives ? endBlock.type : last.type,\n variant: rightSurvives ? endBlock.variant : last.variant,\n children: normalizeInlines([...last.children, ...suffix]),\n });\n }\n }\n\n const content = [\n ...source.content.slice(0, startIndex),\n ...replacement,\n ...source.content.slice(endIndex + 1),\n ];\n const caretReplacementIndex = separateSuffix\n ? replacement.length - 2\n : replacement.length - 1;\n const caretBlock = replacement[Math.max(0, caretReplacementIndex)];\n const suffixLength = suffix.reduce(\n (total, inline) => total + inline.text.length,\n 0,\n );\n const caretOffset = separateSuffix\n ? getBlockLength(caretBlock)\n : Math.max(0, getBlockLength(caretBlock) - suffixLength);\n const caret = {\n block: startIndex + Math.max(0, caretReplacementIndex),\n offset: caretOffset,\n };\n\n return {\n document: {\n type: \"doc\",\n content: content.length ? content : createTextDocument().content,\n },\n selection: { anchor: caret, focus: caret },\n };\n};\n\nexport const insertTextAtSelection = (\n document: TextDocument,\n selection: TextSelection,\n text: string,\n marks: TextMark[] = [],\n): { document: TextDocument; selection: TextSelection } => {\n const inserted: TextDocument = {\n type: \"doc\",\n content: text.split(\"\\n\").map((line) => ({\n type: \"paragraph\",\n variant: \"body1\",\n children: line\n ? [{ text: line, ...(marks.length ? { marks: [...marks] } : {}) }]\n : [],\n })),\n };\n return insertDocumentAtSelection(document, selection, inserted);\n};\n\n/** Apply text alignment to every block touched by the current selection. */\nexport const setTextAlign = (\n document: TextDocument,\n selection: TextSelection,\n align: TextAlign,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n return { ...block, align };\n }),\n };\n};\n\nexport const getTextAlign = (\n document: TextDocument,\n selection: TextSelection,\n): TextAlign | null => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n if (selected.length === 0) return null;\n const align = selected[0].align ?? null;\n return selected.every((block) => (block.align ?? null) === align)\n ? align\n : null;\n};\n\n/** Toggle a list type for the selected blocks; null removes list formatting. */\nexport const setListType = (\n document: TextDocument,\n selection: TextSelection,\n listType: TextListType | null,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n const remove =\n listType != null &&\n selected.length > 0 &&\n selected.every((block) => block.listType === listType);\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n if (remove || listType == null) {\n const { listType: _listType, ...rest } = block;\n return {\n ...rest,\n type: block.type === \"listItem\" ? \"paragraph\" : block.type,\n };\n }\n return { ...block, type: \"listItem\", listType };\n }),\n };\n};\n\nexport const getListType = (\n document: TextDocument,\n selection: TextSelection,\n listType: TextListType,\n): boolean => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n return (\n selected.length > 0 &&\n selected.every((block) => block.listType === listType)\n );\n};\n"],"mappings":";AAYA,MAAM,mCAAmB,IAAI,IAAsB;CACjD;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,aAAyB;CAAC;CAAQ;CAAU;CAAa;AAAQ;AAEvE,MAAa,oBAAoB,YAC/B,iBAAiB,IAAI,OAAO;AAE9B,MAAa,sBAAsB,OAAO,QAAsB;CAC9D,MAAM;CACN,SAAS,CACP;EACE,MAAM;EACN,SAAS;EACT,UAAU,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC;CACjC,CACF;AACF;AAEA,MAAa,uBAAuB,QAAQ,GAAG,SAAS,OAAsB;CAC5E,QAAQ;EAAE;EAAO;CAAO;CACxB,OAAO;EAAE;EAAO;CAAO;AACzB;AAKA,MAAa,kBAAkB,UAC7B,MAAM,SAAS,QAAQ,QAAQ,UAAU,SAAS,MAAM,KAAK,QAAQ,CAAC;AAExE,MAAa,wBAAwB,cACnC,UAAU,OAAO,UAAU,UAAU,MAAM,SAC3C,UAAU,OAAO,WAAW,UAAU,MAAM;AAE9C,MAAa,uBACX,cACyC;CACzC,MAAM,EAAE,QAAQ,UAAU;CAC1B,IACE,OAAO,QAAQ,MAAM,SACpB,OAAO,UAAU,MAAM,SAAS,OAAO,UAAU,MAAM,QAExD,OAAO;EAAE,OAAO;EAAQ,KAAK;CAAM;CAGrC,OAAO;EAAE,OAAO;EAAO,KAAK;CAAO;AACrC;AAEA,MAAM,kBAAkB,QAAoB,CAAC,MAC3C,WAAW,QAAQ,SAAS,MAAM,SAAS,IAAI,CAAC;AAElD,MAAM,aAAa,OAAmB,CAAC,GAAG,QAAoB,CAAC,MAAe;CAC5E,MAAM,IAAI,eAAe,IAAI;CAC7B,MAAM,IAAI,eAAe,KAAK;CAC9B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,MAAM,UAAU,SAAS,EAAE,MAAM;AAC5E;AAEA,MAAa,oBAAoB,YAAwC;CACvE,MAAM,SAAuB,CAAC;CAE9B,KAAK,MAAM,UAAU,SAAS;EAC5B,IAAI,CAAC,OAAO,MAAM;EAElB,MAAM,QAAQ,eAAe,OAAO,KAAK;EACzC,MAAM,WAAW,OAAO,OAAO,SAAS;EAExC,IAAI,YAAY,UAAU,SAAS,OAAO,KAAK,GAAG;GAChD,SAAS,QAAQ,OAAO;GACxB;EACF;EAEA,OAAO,KAAK;GACV,MAAM,OAAO;GACb,GAAI,MAAM,SAAS,EAAE,MAAM,IAAI,CAAC;EAClC,CAAC;CACH;CAEA,OAAO;AACT;AAEA,MAAM,cAAc,UAClB,UAAU,UACV,UAAU,YACV,UAAU,eACV,UAAU;AAEZ,MAAM,iBAAiB,UACrB,UAAU,cACV,UAAU,cACV,UAAU,eACV,UAAU,eACV,UAAU,eACV,UAAU,eACV,UAAU,eACV,UAAU,eACV,UAAU,WACV,UAAU,WACV,UAAU,YACV,UAAU,aACV,UAAU;AAEZ,MAAa,yBAAyB,UAAsC;CAC1E,MAAM,UAAU,MAAM,QAAQ,OAAO,OAAO,IACxC,MAAM,QAAQ,SAAS,cAAc;EACnC,IAAI,CAAC,aAAa,CAAC,MAAM,QAAQ,UAAU,QAAQ,GAAG,OAAO,CAAC;EAE9D,MAAM,UAAU,cAAc,UAAU,OAAO,IAC3C,UAAU,UACV;EAEJ,MAAM,WAAW,iBACf,UAAU,SAAS,SAAS,WAAW;GACrC,IAAI,CAAC,UAAU,OAAO,OAAO,SAAS,UAAU,OAAO,CAAC;GACxD,MAAM,QAAQ,MAAM,QAAQ,OAAO,KAAK,IACpC,OAAO,MAAM,OAAO,UAAU,IAC9B,CAAC;GACL,OAAO,CAAC;IAAE,MAAM,OAAO;IAAM;GAAM,CAAC;EACtC,CAAC,CACH;EAEA,MAAM,WACJ,UAAU,aAAa,YAAY,UAAU,aAAa,YACtD,UAAU,WACV,KAAA;EACN,MAAM,QACJ,UAAU,UAAU,UACpB,UAAU,UAAU,YACpB,UAAU,UAAU,WACpB,UAAU,UAAU,YACf,UAAU,QACX,KAAA;EAON,MAAM,gBALO,WACT,aACA,UAAU,SAAS,aAAa,iBAAiB,OAAO,IACtD,YACA,iBAEK,aACT,OAAO,UAAU,UAAU,YAAY,KACvC,UAAU,gBAAiB,KAC3B,UAAU,gBAAiB,IACvB,UAAU,eACV,KAAA;EAEN,OAAO,CACL;GACE,MAAM,WACF,aACA,UAAU,SAAS,aAAa,iBAAiB,OAAO,IACtD,YACA;GACN;GACA;GACA,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;GAC/B,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;GACzB,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;EACzC,CACF;CACF,CAAC,IACD,CAAC;CAEL,OAAO;EACL,MAAM;EACN,SAAS,QAAQ,SACb,UACA,CAAC;GAAE,MAAM;GAAa,SAAS;GAAS,UAAU,CAAC;EAAE,CAAC;CAC5D;AACF;AAEA,MAAM,gBACJ,SACA,MACA,OACiB;CACjB,IAAI,MAAM,MAAM,OAAO,CAAC;CAExB,MAAM,SAAuB,CAAC;CAC9B,IAAI,WAAW;CAEf,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,QAAQ;EACd,MAAM,MAAM,WAAW,OAAO,KAAK;EACnC,MAAM,eAAe,KAAK,IAAI,OAAO,IAAI;EACzC,MAAM,aAAa,KAAK,IAAI,KAAK,EAAE;EAEnC,IAAI,eAAe,YACjB,OAAO,KAAK;GACV,MAAM,OAAO,KAAK,MAAM,eAAe,OAAO,aAAa,KAAK;GAChE,GAAI,OAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC;EAC7D,CAAC;EAGH,WAAW;EACX,IAAI,YAAY,IAAI;CACtB;CAEA,OAAO,iBAAiB,MAAM;AAChC;AAEA,MAAM,wBACJ,SACA,MACA,IACA,cACiB;CACjB,IAAI,MAAM,MAAM,OAAO,QAAQ,KAAK,YAAY,EAAE,GAAG,OAAO,EAAE;CAE9D,MAAM,SAAuB,CAAC;CAC9B,IAAI,WAAW;CAEf,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,QAAQ;EACd,MAAM,MAAM,QAAQ,OAAO,KAAK;EAEhC,IAAI,OAAO,QAAQ,SAAS,IAC1B,OAAO,KAAK;GACV,GAAG;GACH,GAAI,OAAO,QAAQ,EAAE,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC;EACrD,CAAC;OACI;GACL,MAAM,aAAa,KAAK,IAAI,GAAG,OAAO,KAAK;GAC3C,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK;GACzC,MAAM,QAAQ,OAAO,SAAS,CAAC;GAE/B,IAAI,aAAa,GACf,OAAO,KAAK;IACV,MAAM,OAAO,KAAK,MAAM,GAAG,UAAU;IACrC,GAAI,MAAM,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC;GAC9C,CAAC;GAGH,MAAM,YAAY,KAAK,IAAI,OAAO,KAAK,QAAQ,KAAK,KAAK;GACzD,IAAI,YAAY,YACd,OAAO,KAAK;IACV,MAAM,OAAO,KAAK,MAAM,YAAY,SAAS;IAC7C,OAAO,UAAU,CAAC,GAAG,KAAK,CAAC;GAC7B,CAAC;GAGH,IAAI,aAAa,OAAO,KAAK,QAC3B,OAAO,KAAK;IACV,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,UAAU,CAAC;IAC/C,GAAI,MAAM,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC;GAC9C,CAAC;EAEL;EAEA,WAAW;CACb;CAEA,OAAO,iBAAiB,MAAM;AAChC;AAEA,MAAa,aACX,UACA,WACA,MACA,UACiB;CACjB,IAAI,qBAAqB,SAAS,GAAG,OAAO;CAE5C,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,SAAS,QAAQ,OAAO,OAAO,UAAU;EACzD,IAAI,QAAQ,MAAM,SAAS,QAAQ,IAAI,OAAO,OAAO;EACrD,MAAM,OAAO,UAAU,MAAM,QAAQ,MAAM,SAAS;EACpD,MAAM,KAAK,UAAU,IAAI,QAAQ,IAAI,SAAS,eAAe,KAAK;EAClE,IAAI,MAAM,MAAM,OAAO;EAEvB,IAAI,WAAW;EACf,KAAK,MAAM,UAAU,MAAM,UAAU;GACnC,MAAM,cAAc;GACpB,MAAM,YAAY,WAAW,OAAO,KAAK;GACzC,WAAW;GACX,IAAI,aAAa,QAAQ,eAAe,IAAI;GAC5C,IAAI,CAAC,OAAO,OAAO,SAAS,IAAI,GAAG,OAAO;EAC5C;EACA,OAAO;CACT,CAAC;CAED,MAAM,UAAU,SAAS,CAAC;CAkB1B,OAAO;EAAE,MAAM;EAAO,SAjBN,SAAS,QAAQ,KAAK,OAAO,UAAU;GACrD,IAAI,QAAQ,MAAM,SAAS,QAAQ,IAAI,OAAO,OAAO;GACrD,MAAM,OAAO,UAAU,MAAM,QAAQ,MAAM,SAAS;GACpD,MAAM,KAAK,UAAU,IAAI,QAAQ,IAAI,SAAS,eAAe,KAAK;GAClE,IAAI,MAAM,MAAM,OAAO;GAEvB,OAAO;IACL,GAAG;IACH,UAAU,qBAAqB,MAAM,UAAU,MAAM,KAAK,UAAU;KAClE,MAAM,OAAO,IAAI,IAAI,KAAK;KAC1B,IAAI,SAAS,KAAK,IAAI,IAAI;UACrB,KAAK,OAAO,IAAI;KACrB,OAAO,WAAW,QAAQ,SAAS,KAAK,IAAI,IAAI,CAAC;IACnD,CAAC;GACH;EACF,CAE4B;CAAE;AAChC;AAEA,MAAa,kBACX,UACA,WACA,YACiB;CACjB,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,qBAAqB,SAAS,IAC5C,MAAM,QACN,IAAI,WAAW,KAAK,IAAI,QAAQ,MAAM,QACpC,IAAI,QAAQ,IACZ,IAAI;CAEV,OAAO;EACL,MAAM;EACN,SAAS,SAAS,QAAQ,KAAK,OAAO,UAAU;GAC9C,IAAI,QAAQ,MAAM,SAAS,QAAQ,WAAW,OAAO;GACrD,OAAO;IACL,GAAG;IACH,MAAM,MAAM,WACR,aACA,iBAAiB,OAAO,IACtB,YACA;IACN;GACF;EACF,CAAC;CACH;AACF;AAEA,MAAM,oBACJ,SACA,YACmD;CACnD,QAAQ,aAAa,SAAS,GAAG,MAAM;CACvC,OAAO,aACL,SACA,QACA,QAAQ,QAAQ,KAAK,SAAS,MAAM,KAAK,KAAK,QAAQ,CAAC,CACzD;AACF;AAEA,MAAa,6BACX,UACA,WACA,qBACyD;CACzD,MAAM,SAAS,sBAAsB,QAAQ;CAC7C,MAAM,WAAW,sBAAsB,gBAAgB;CACvD,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,aAAa,KAAK,IACtB,GACA,KAAK,IAAI,MAAM,OAAO,OAAO,QAAQ,SAAS,CAAC,CACjD;CACA,MAAM,WAAW,KAAK,IACpB,YACA,KAAK,IAAI,IAAI,OAAO,OAAO,QAAQ,SAAS,CAAC,CAC/C;CACA,MAAM,aAAa,OAAO,QAAQ;CAClC,MAAM,WAAW,OAAO,QAAQ;CAChC,MAAM,cAAc,KAAK,IACvB,GACA,KAAK,IAAI,MAAM,QAAQ,eAAe,UAAU,CAAC,CACnD;CACA,MAAM,YAAY,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQ,eAAe,QAAQ,CAAC,CAAC;CAC5E,MAAM,SAAS,iBAAiB,WAAW,UAAU,WAAW,CAAC,CAAC;CAClE,MAAM,SAAS,iBAAiB,SAAS,UAAU,SAAS,CAAC,CAAC;CAC9D,MAAM,iBAAiB,SAAS,QAAQ,KAAK,WAAW;EACtD,GAAG;EACH,UAAU,MAAM,SAAS,KAAK,YAAY;GACxC,GAAG;GACH,GAAI,OAAO,QAAQ,EAAE,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC;EACrD,EAAE;CACJ,EAAE;CAEF,MAAM,eAAe,OAAO,SAAS,KAAK,cAAc;CACxD,MAAM,gBACJ,OAAO,SAAS,KAAK,YAAY,eAAe,QAAQ;CAC1D,MAAM,QAAQ,eAAe;CAC7B,MAAM,OAAO,eAAe,eAAe,SAAS;CACpD,MAAM,iBAAiB,gBAAgB,MAAM,SAAS;CACtD,MAAM,iBAAiB,iBAAiB,KAAK,SAAS;CACtD,MAAM,cAA2B,CAAC;CAElC,IAAI,gBACF,YAAY,KAAK;EACf,GAAG;EACH,UAAU;CACZ,CAAC;CAGH,IAAI,eAAe,WAAW,GAAG;EAC/B,IAAI,kBAAkB,gBAAgB;GACpC,YAAY,KAAK;IACf,GAAG;IACH,MAAM,kBAAkB,CAAC,eAAe,MAAM,OAAO,WAAW;IAChE,SACE,kBAAkB,CAAC,eAAe,MAAM,UAAU,WAAW;IAC/D,UAAU,iBACN,MAAM,WACN,iBAAiB,CAAC,GAAG,QAAQ,GAAG,MAAM,QAAQ,CAAC;GACrD,CAAC;GACD,IAAI,gBACF,YAAY,KAAK;IAAE,GAAG;IAAU,UAAU;GAAO,CAAC;QAC7C;IACL,MAAM,aAAa,YAAY,SAAS;IACxC,YAAY,cAAc;KACxB,GAAG,YAAY;KACf,UAAU,iBAAiB,CACzB,GAAG,YAAY,WAAW,CAAC,UAC3B,GAAG,MACL,CAAC;IACH;GACF;EACF,OAAO;GACL,MAAM,mBAAmB,CAAC,gBAAgB,CAAC;GAC3C,YAAY,KAAK;IACf,GAAI,mBAAmB,QAAQ;IAC/B,MAAM,mBAAmB,MAAM,OAAO,WAAW;IACjD,SAAS,mBAAmB,MAAM,UAAU,WAAW;IACvD,UAAU,iBAAiB;KAAC,GAAG;KAAQ,GAAG,MAAM;KAAU,GAAG;IAAM,CAAC;GACtE,CAAC;EACH;CACF,OAAO;EACL,YAAY,KAAK;GACf,GAAI,kBAAkB,CAAC,eAAe,QAAQ;GAC9C,MAAM,kBAAkB,CAAC,eAAe,MAAM,OAAO,WAAW;GAChE,SACE,kBAAkB,CAAC,eAAe,MAAM,UAAU,WAAW;GAC/D,UAAU,iBACN,MAAM,WACN,iBAAiB,CAAC,GAAG,QAAQ,GAAG,MAAM,QAAQ,CAAC;EACrD,CAAC;EAED,KAAK,IAAI,QAAQ,GAAG,QAAQ,eAAe,SAAS,GAAG,SAAS,GAC9D,YAAY,KAAK,eAAe,MAAM;EAGxC,IAAI,gBAAgB;GAClB,YAAY,KAAK,IAAI;GACrB,YAAY,KAAK;IAAE,GAAG;IAAU,UAAU;GAAO,CAAC;EACpD,OACE,YAAY,KAAK;GACf,GAAI,gBAAgB,WAAW;GAC/B,MAAM,gBAAgB,SAAS,OAAO,KAAK;GAC3C,SAAS,gBAAgB,SAAS,UAAU,KAAK;GACjD,UAAU,iBAAiB,CAAC,GAAG,KAAK,UAAU,GAAG,MAAM,CAAC;EAC1D,CAAC;CAEL;CAEA,MAAM,UAAU;EACd,GAAG,OAAO,QAAQ,MAAM,GAAG,UAAU;EACrC,GAAG;EACH,GAAG,OAAO,QAAQ,MAAM,WAAW,CAAC;CACtC;CACA,MAAM,wBAAwB,iBAC1B,YAAY,SAAS,IACrB,YAAY,SAAS;CACzB,MAAM,aAAa,YAAY,KAAK,IAAI,GAAG,qBAAqB;CAChE,MAAM,eAAe,OAAO,QACzB,OAAO,WAAW,QAAQ,OAAO,KAAK,QACvC,CACF;CACA,MAAM,cAAc,iBAChB,eAAe,UAAU,IACzB,KAAK,IAAI,GAAG,eAAe,UAAU,IAAI,YAAY;CACzD,MAAM,QAAQ;EACZ,OAAO,aAAa,KAAK,IAAI,GAAG,qBAAqB;EACrD,QAAQ;CACV;CAEA,OAAO;EACL,UAAU;GACR,MAAM;GACN,SAAS,QAAQ,SAAS,UAAU,mBAAmB,CAAC,CAAC;EAC3D;EACA,WAAW;GAAE,QAAQ;GAAO,OAAO;EAAM;CAC3C;AACF;AAEA,MAAa,yBACX,UACA,WACA,MACA,QAAoB,CAAC,MACoC;CACzD,MAAM,WAAyB;EAC7B,MAAM;EACN,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,UAAU;GACvC,MAAM;GACN,SAAS;GACT,UAAU,OACN,CAAC;IAAE,MAAM;IAAM,GAAI,MAAM,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC;GAAG,CAAC,IAC/D,CAAC;EACP,EAAE;CACJ;CACA,OAAO,0BAA0B,UAAU,WAAW,QAAQ;AAChE;;AAGA,MAAa,gBACX,UACA,WACA,UACiB;CACjB,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,qBAAqB,SAAS,IAC5C,MAAM,QACN,IAAI,WAAW,KAAK,IAAI,QAAQ,MAAM,QACpC,IAAI,QAAQ,IACZ,IAAI;CACV,OAAO;EACL,MAAM;EACN,SAAS,SAAS,QAAQ,KAAK,OAAO,UAAU;GAC9C,IAAI,QAAQ,MAAM,SAAS,QAAQ,WAAW,OAAO;GACrD,OAAO;IAAE,GAAG;IAAO;GAAM;EAC3B,CAAC;CACH;AACF;AAEA,MAAa,gBACX,UACA,cACqB;CACrB,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,qBAAqB,SAAS,IAC5C,MAAM,QACN,IAAI,WAAW,KAAK,IAAI,QAAQ,MAAM,QACpC,IAAI,QAAQ,IACZ,IAAI;CACV,MAAM,WAAW,SAAS,QAAQ,MAAM,MAAM,OAAO,YAAY,CAAC;CAClE,IAAI,SAAS,WAAW,GAAG,OAAO;CAClC,MAAM,QAAQ,SAAS,EAAE,CAAC,SAAS;CACnC,OAAO,SAAS,OAAO,WAAW,MAAM,SAAS,UAAU,KAAK,IAC5D,QACA;AACN;;AAGA,MAAa,eACX,UACA,WACA,aACiB;CACjB,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,qBAAqB,SAAS,IAC5C,MAAM,QACN,IAAI,WAAW,KAAK,IAAI,QAAQ,MAAM,QACpC,IAAI,QAAQ,IACZ,IAAI;CACV,MAAM,WAAW,SAAS,QAAQ,MAAM,MAAM,OAAO,YAAY,CAAC;CAClE,MAAM,SACJ,YAAY,QACZ,SAAS,SAAS,KAClB,SAAS,OAAO,UAAU,MAAM,aAAa,QAAQ;CACvD,OAAO;EACL,MAAM;EACN,SAAS,SAAS,QAAQ,KAAK,OAAO,UAAU;GAC9C,IAAI,QAAQ,MAAM,SAAS,QAAQ,WAAW,OAAO;GACrD,IAAI,UAAU,YAAY,MAAM;IAC9B,MAAM,EAAE,UAAU,WAAW,GAAG,SAAS;IACzC,OAAO;KACL,GAAG;KACH,MAAM,MAAM,SAAS,aAAa,cAAc,MAAM;IACxD;GACF;GACA,OAAO;IAAE,GAAG;IAAO,MAAM;IAAY;GAAS;EAChD,CAAC;CACH;AACF;AAEA,MAAa,eACX,UACA,WACA,aACY;CACZ,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,qBAAqB,SAAS,IAC5C,MAAM,QACN,IAAI,WAAW,KAAK,IAAI,QAAQ,MAAM,QACpC,IAAI,QAAQ,IACZ,IAAI;CACV,MAAM,WAAW,SAAS,QAAQ,MAAM,MAAM,OAAO,YAAY,CAAC;CAClE,OACE,SAAS,SAAS,KAClB,SAAS,OAAO,UAAU,MAAM,aAAa,QAAQ;AAEzD"}
@@ -0,0 +1,391 @@
1
+ // src/components/editors/text-editor/text-document.ts
2
+ const HEADING_VARIANTS = /* @__PURE__ */ new Set([
3
+ "display1",
4
+ "display2",
5
+ "headline1",
6
+ "headline2",
7
+ "headline3",
8
+ "headline4"
9
+ ]);
10
+ const MARK_ORDER = [
11
+ "bold",
12
+ "italic",
13
+ "underline",
14
+ "strike"
15
+ ];
16
+ const isHeadingVariant = (variant) => HEADING_VARIANTS.has(variant);
17
+ const createTextDocument = (text = "") => ({
18
+ type: "doc",
19
+ content: [{
20
+ type: "paragraph",
21
+ variant: "body1",
22
+ children: text ? [{ text }] : []
23
+ }]
24
+ });
25
+ const createTextSelection = (block = 0, offset = 0) => ({
26
+ anchor: {
27
+ block,
28
+ offset
29
+ },
30
+ focus: {
31
+ block,
32
+ offset
33
+ }
34
+ });
35
+ const getBlockLength = (block) => block.children.reduce((length, child) => length + child.text.length, 0);
36
+ const isCollapsedSelection = (selection) => selection.anchor.block === selection.focus.block && selection.anchor.offset === selection.focus.offset;
37
+ const getOrderedSelection = (selection) => {
38
+ const { anchor, focus } = selection;
39
+ if (anchor.block < focus.block || anchor.block === focus.block && anchor.offset <= focus.offset) return {
40
+ start: anchor,
41
+ end: focus
42
+ };
43
+ return {
44
+ start: focus,
45
+ end: anchor
46
+ };
47
+ };
48
+ const normalizeMarks = (marks = []) => MARK_ORDER.filter((mark) => marks.includes(mark));
49
+ const sameMarks = (left = [], right = []) => {
50
+ const a = normalizeMarks(left);
51
+ const b = normalizeMarks(right);
52
+ return a.length === b.length && a.every((mark, index) => mark === b[index]);
53
+ };
54
+ const normalizeInlines = (inlines) => {
55
+ const result = [];
56
+ for (const inline of inlines) {
57
+ if (!inline.text) continue;
58
+ const marks = normalizeMarks(inline.marks);
59
+ const previous = result[result.length - 1];
60
+ if (previous && sameMarks(previous.marks, marks)) {
61
+ previous.text += inline.text;
62
+ continue;
63
+ }
64
+ result.push({
65
+ text: inline.text,
66
+ ...marks.length ? { marks } : {}
67
+ });
68
+ }
69
+ return result;
70
+ };
71
+ const isTextMark = (value) => value === "bold" || value === "italic" || value === "underline" || value === "strike";
72
+ const isTextVariant = (value) => value === "display1" || value === "display2" || value === "headline1" || value === "headline2" || value === "headline3" || value === "headline4" || value === "subtitle1" || value === "subtitle2" || value === "body1" || value === "body2" || value === "button" || value === "caption" || value === "overline";
73
+ const normalizeTextDocument = (input) => {
74
+ const content = Array.isArray(input?.content) ? input.content.flatMap((candidate) => {
75
+ if (!candidate || !Array.isArray(candidate.children)) return [];
76
+ const variant = isTextVariant(candidate.variant) ? candidate.variant : "body1";
77
+ const children = normalizeInlines(candidate.children.flatMap((inline) => {
78
+ if (!inline || typeof inline.text !== "string") return [];
79
+ const marks = Array.isArray(inline.marks) ? inline.marks.filter(isTextMark) : [];
80
+ return [{
81
+ text: inline.text,
82
+ marks
83
+ }];
84
+ }));
85
+ const listType = candidate.listType === "bullet" || candidate.listType === "ordered" ? candidate.listType : void 0;
86
+ const align = candidate.align === "left" || candidate.align === "center" || candidate.align === "right" || candidate.align === "justify" ? candidate.align : void 0;
87
+ const headingLevel = (listType ? "listItem" : candidate.type === "heading" && isHeadingVariant(variant) ? "heading" : "paragraph") === "heading" && Number.isInteger(candidate.headingLevel) && candidate.headingLevel >= 1 && candidate.headingLevel <= 6 ? candidate.headingLevel : void 0;
88
+ return [{
89
+ type: listType ? "listItem" : candidate.type === "heading" && isHeadingVariant(variant) ? "heading" : "paragraph",
90
+ variant,
91
+ children,
92
+ ...listType ? { listType } : {},
93
+ ...align ? { align } : {},
94
+ ...headingLevel ? { headingLevel } : {}
95
+ }];
96
+ }) : [];
97
+ return {
98
+ type: "doc",
99
+ content: content.length ? content : [{
100
+ type: "paragraph",
101
+ variant: "body1",
102
+ children: []
103
+ }]
104
+ };
105
+ };
106
+ const sliceInlines = (inlines, from, to) => {
107
+ if (to <= from) return [];
108
+ const result = [];
109
+ let position = 0;
110
+ for (const inline of inlines) {
111
+ const start = position;
112
+ const end = position + inline.text.length;
113
+ const overlapStart = Math.max(start, from);
114
+ const overlapEnd = Math.min(end, to);
115
+ if (overlapStart < overlapEnd) result.push({
116
+ text: inline.text.slice(overlapStart - start, overlapEnd - start),
117
+ ...inline.marks?.length ? { marks: [...inline.marks] } : {}
118
+ });
119
+ position = end;
120
+ if (position >= to) break;
121
+ }
122
+ return normalizeInlines(result);
123
+ };
124
+ const transformInlineRange = (inlines, from, to, transform) => {
125
+ if (to <= from) return inlines.map((inline) => ({ ...inline }));
126
+ const result = [];
127
+ let position = 0;
128
+ for (const inline of inlines) {
129
+ const start = position;
130
+ const end = start + inline.text.length;
131
+ if (end <= from || start >= to) result.push({
132
+ ...inline,
133
+ ...inline.marks ? { marks: [...inline.marks] } : {}
134
+ });
135
+ else {
136
+ const leftLength = Math.max(0, from - start);
137
+ const rightStart = Math.max(0, to - start);
138
+ const marks = inline.marks ?? [];
139
+ if (leftLength > 0) result.push({
140
+ text: inline.text.slice(0, leftLength),
141
+ ...marks.length ? { marks: [...marks] } : {}
142
+ });
143
+ const middleEnd = Math.min(inline.text.length, to - start);
144
+ if (middleEnd > leftLength) result.push({
145
+ text: inline.text.slice(leftLength, middleEnd),
146
+ marks: transform([...marks])
147
+ });
148
+ if (rightStart < inline.text.length) result.push({
149
+ text: inline.text.slice(Math.max(0, rightStart)),
150
+ ...marks.length ? { marks: [...marks] } : {}
151
+ });
152
+ }
153
+ position = end;
154
+ }
155
+ return normalizeInlines(result);
156
+ };
157
+ const applyMark = (document, selection, mark, force) => {
158
+ if (isCollapsedSelection(selection)) return document;
159
+ const { start, end } = getOrderedSelection(selection);
160
+ const allMarked = document.content.every((block, index) => {
161
+ if (index < start.block || index > end.block) return true;
162
+ const from = index === start.block ? start.offset : 0;
163
+ const to = index === end.block ? end.offset : getBlockLength(block);
164
+ if (to <= from) return true;
165
+ let position = 0;
166
+ for (const inline of block.children) {
167
+ const inlineStart = position;
168
+ const inlineEnd = position + inline.text.length;
169
+ position = inlineEnd;
170
+ if (inlineEnd <= from || inlineStart >= to) continue;
171
+ if (!inline.marks?.includes(mark)) return false;
172
+ }
173
+ return true;
174
+ });
175
+ const addMark = force ?? !allMarked;
176
+ return {
177
+ type: "doc",
178
+ content: document.content.map((block, index) => {
179
+ if (index < start.block || index > end.block) return block;
180
+ const from = index === start.block ? start.offset : 0;
181
+ const to = index === end.block ? end.offset : getBlockLength(block);
182
+ if (to <= from) return block;
183
+ return {
184
+ ...block,
185
+ children: transformInlineRange(block.children, from, to, (marks) => {
186
+ const next = new Set(marks);
187
+ if (addMark) next.add(mark);
188
+ else next.delete(mark);
189
+ return MARK_ORDER.filter((item) => next.has(item));
190
+ })
191
+ };
192
+ })
193
+ };
194
+ };
195
+ const setTextVariant = (document, selection, variant) => {
196
+ const { start, end } = getOrderedSelection(selection);
197
+ const lastBlock = isCollapsedSelection(selection) ? start.block : end.offset === 0 && end.block > start.block ? end.block - 1 : end.block;
198
+ return {
199
+ type: "doc",
200
+ content: document.content.map((block, index) => {
201
+ if (index < start.block || index > lastBlock) return block;
202
+ return {
203
+ ...block,
204
+ type: block.listType ? "listItem" : isHeadingVariant(variant) ? "heading" : "paragraph",
205
+ variant
206
+ };
207
+ })
208
+ };
209
+ };
210
+ const inlineWithOffset = (inlines, offset) => ({
211
+ before: sliceInlines(inlines, 0, offset),
212
+ after: sliceInlines(inlines, offset, inlines.reduce((sum, item) => sum + item.text.length, 0))
213
+ });
214
+ const insertDocumentAtSelection = (document, selection, insertedDocument) => {
215
+ const source = normalizeTextDocument(document);
216
+ const inserted = normalizeTextDocument(insertedDocument);
217
+ const { start, end } = getOrderedSelection(selection);
218
+ const startIndex = Math.max(0, Math.min(start.block, source.content.length - 1));
219
+ const endIndex = Math.max(startIndex, Math.min(end.block, source.content.length - 1));
220
+ const startBlock = source.content[startIndex];
221
+ const endBlock = source.content[endIndex];
222
+ const startOffset = Math.max(0, Math.min(start.offset, getBlockLength(startBlock)));
223
+ const endOffset = Math.max(0, Math.min(end.offset, getBlockLength(endBlock)));
224
+ const prefix = inlineWithOffset(startBlock.children, startOffset).before;
225
+ const suffix = inlineWithOffset(endBlock.children, endOffset).after;
226
+ const insertedBlocks = inserted.content.map((block) => ({
227
+ ...block,
228
+ children: block.children.map((inline) => ({
229
+ ...inline,
230
+ ...inline.marks ? { marks: [...inline.marks] } : {}
231
+ }))
232
+ }));
233
+ const leftSurvives = prefix.length > 0 || startOffset > 0;
234
+ const rightSurvives = suffix.length > 0 || endOffset < getBlockLength(endBlock);
235
+ const first = insertedBlocks[0];
236
+ const last = insertedBlocks[insertedBlocks.length - 1];
237
+ const separatePrefix = leftSurvives && first.type === "heading";
238
+ const separateSuffix = rightSurvives && last.type === "heading";
239
+ const replacement = [];
240
+ if (separatePrefix) replacement.push({
241
+ ...startBlock,
242
+ children: prefix
243
+ });
244
+ if (insertedBlocks.length === 1) {
245
+ if (separatePrefix || separateSuffix) {
246
+ replacement.push({
247
+ ...first,
248
+ type: separatePrefix || !leftSurvives ? first.type : startBlock.type,
249
+ variant: separatePrefix || !leftSurvives ? first.variant : startBlock.variant,
250
+ children: separatePrefix ? first.children : normalizeInlines([...prefix, ...first.children])
251
+ });
252
+ if (separateSuffix) replacement.push({
253
+ ...endBlock,
254
+ children: suffix
255
+ });
256
+ else {
257
+ const finalIndex = replacement.length - 1;
258
+ replacement[finalIndex] = {
259
+ ...replacement[finalIndex],
260
+ children: normalizeInlines([...replacement[finalIndex].children, ...suffix])
261
+ };
262
+ }
263
+ } else {
264
+ const useInsertedStyle = !leftSurvives && !rightSurvives;
265
+ replacement.push({
266
+ ...useInsertedStyle ? first : startBlock,
267
+ type: useInsertedStyle ? first.type : startBlock.type,
268
+ variant: useInsertedStyle ? first.variant : startBlock.variant,
269
+ children: normalizeInlines([
270
+ ...prefix,
271
+ ...first.children,
272
+ ...suffix
273
+ ])
274
+ });
275
+ }
276
+ } else {
277
+ replacement.push({
278
+ ...separatePrefix || !leftSurvives ? first : startBlock,
279
+ type: separatePrefix || !leftSurvives ? first.type : startBlock.type,
280
+ variant: separatePrefix || !leftSurvives ? first.variant : startBlock.variant,
281
+ children: separatePrefix ? first.children : normalizeInlines([...prefix, ...first.children])
282
+ });
283
+ for (let index = 1; index < insertedBlocks.length - 1; index += 1) replacement.push(insertedBlocks[index]);
284
+ if (separateSuffix) {
285
+ replacement.push(last);
286
+ replacement.push({
287
+ ...endBlock,
288
+ children: suffix
289
+ });
290
+ } else replacement.push({
291
+ ...rightSurvives ? endBlock : last,
292
+ type: rightSurvives ? endBlock.type : last.type,
293
+ variant: rightSurvives ? endBlock.variant : last.variant,
294
+ children: normalizeInlines([...last.children, ...suffix])
295
+ });
296
+ }
297
+ const content = [
298
+ ...source.content.slice(0, startIndex),
299
+ ...replacement,
300
+ ...source.content.slice(endIndex + 1)
301
+ ];
302
+ const caretReplacementIndex = separateSuffix ? replacement.length - 2 : replacement.length - 1;
303
+ const caretBlock = replacement[Math.max(0, caretReplacementIndex)];
304
+ const suffixLength = suffix.reduce((total, inline) => total + inline.text.length, 0);
305
+ const caretOffset = separateSuffix ? getBlockLength(caretBlock) : Math.max(0, getBlockLength(caretBlock) - suffixLength);
306
+ const caret = {
307
+ block: startIndex + Math.max(0, caretReplacementIndex),
308
+ offset: caretOffset
309
+ };
310
+ return {
311
+ document: {
312
+ type: "doc",
313
+ content: content.length ? content : createTextDocument().content
314
+ },
315
+ selection: {
316
+ anchor: caret,
317
+ focus: caret
318
+ }
319
+ };
320
+ };
321
+ const insertTextAtSelection = (document, selection, text, marks = []) => {
322
+ const inserted = {
323
+ type: "doc",
324
+ content: text.split("\n").map((line) => ({
325
+ type: "paragraph",
326
+ variant: "body1",
327
+ children: line ? [{
328
+ text: line,
329
+ ...marks.length ? { marks: [...marks] } : {}
330
+ }] : []
331
+ }))
332
+ };
333
+ return insertDocumentAtSelection(document, selection, inserted);
334
+ };
335
+ /** Apply text alignment to every block touched by the current selection. */
336
+ const setTextAlign = (document, selection, align) => {
337
+ const { start, end } = getOrderedSelection(selection);
338
+ const lastBlock = isCollapsedSelection(selection) ? start.block : end.offset === 0 && end.block > start.block ? end.block - 1 : end.block;
339
+ return {
340
+ type: "doc",
341
+ content: document.content.map((block, index) => {
342
+ if (index < start.block || index > lastBlock) return block;
343
+ return {
344
+ ...block,
345
+ align
346
+ };
347
+ })
348
+ };
349
+ };
350
+ const getTextAlign = (document, selection) => {
351
+ const { start, end } = getOrderedSelection(selection);
352
+ const lastBlock = isCollapsedSelection(selection) ? start.block : end.offset === 0 && end.block > start.block ? end.block - 1 : end.block;
353
+ const selected = document.content.slice(start.block, lastBlock + 1);
354
+ if (selected.length === 0) return null;
355
+ const align = selected[0].align ?? null;
356
+ return selected.every((block) => (block.align ?? null) === align) ? align : null;
357
+ };
358
+ /** Toggle a list type for the selected blocks; null removes list formatting. */
359
+ const setListType = (document, selection, listType) => {
360
+ const { start, end } = getOrderedSelection(selection);
361
+ const lastBlock = isCollapsedSelection(selection) ? start.block : end.offset === 0 && end.block > start.block ? end.block - 1 : end.block;
362
+ const selected = document.content.slice(start.block, lastBlock + 1);
363
+ const remove = listType != null && selected.length > 0 && selected.every((block) => block.listType === listType);
364
+ return {
365
+ type: "doc",
366
+ content: document.content.map((block, index) => {
367
+ if (index < start.block || index > lastBlock) return block;
368
+ if (remove || listType == null) {
369
+ const { listType: _listType, ...rest } = block;
370
+ return {
371
+ ...rest,
372
+ type: block.type === "listItem" ? "paragraph" : block.type
373
+ };
374
+ }
375
+ return {
376
+ ...block,
377
+ type: "listItem",
378
+ listType
379
+ };
380
+ })
381
+ };
382
+ };
383
+ const getListType = (document, selection, listType) => {
384
+ const { start, end } = getOrderedSelection(selection);
385
+ const lastBlock = isCollapsedSelection(selection) ? start.block : end.offset === 0 && end.block > start.block ? end.block - 1 : end.block;
386
+ const selected = document.content.slice(start.block, lastBlock + 1);
387
+ return selected.length > 0 && selected.every((block) => block.listType === listType);
388
+ };
389
+ export { applyMark, createTextDocument, createTextSelection, getBlockLength, getListType, getOrderedSelection, getTextAlign, insertDocumentAtSelection, insertTextAtSelection, isCollapsedSelection, isHeadingVariant, normalizeInlines, normalizeTextDocument, setListType, setTextAlign, setTextVariant };
390
+
391
+ //# sourceMappingURL=text-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-document.js","names":[],"sources":["../../../../src/components/editors/text-editor/text-document.ts"],"sourcesContent":["import type {\n TextBlock,\n TextDocument,\n TextInline,\n TextMark,\n TextPoint,\n TextSelection,\n TextBlockVariant,\n TextAlign,\n TextListType,\n} from \"./text-editor.types\";\n\nconst HEADING_VARIANTS = new Set<TextBlockVariant>([\n \"display1\",\n \"display2\",\n \"headline1\",\n \"headline2\",\n \"headline3\",\n \"headline4\",\n]);\n\nconst MARK_ORDER: TextMark[] = [\"bold\", \"italic\", \"underline\", \"strike\"];\n\nexport const isHeadingVariant = (variant: TextBlockVariant): boolean =>\n HEADING_VARIANTS.has(variant);\n\nexport const createTextDocument = (text = \"\"): TextDocument => ({\n type: \"doc\",\n content: [\n {\n type: \"paragraph\",\n variant: \"body1\",\n children: text ? [{ text }] : [],\n },\n ],\n});\n\nexport const createTextSelection = (block = 0, offset = 0): TextSelection => ({\n anchor: { block, offset },\n focus: { block, offset },\n});\n\nexport const getBlockText = (block: TextBlock): string =>\n block.children.map((child) => child.text).join(\"\");\n\nexport const getBlockLength = (block: TextBlock): number =>\n block.children.reduce((length, child) => length + child.text.length, 0);\n\nexport const isCollapsedSelection = (selection: TextSelection): boolean =>\n selection.anchor.block === selection.focus.block &&\n selection.anchor.offset === selection.focus.offset;\n\nexport const getOrderedSelection = (\n selection: TextSelection,\n): { start: TextPoint; end: TextPoint } => {\n const { anchor, focus } = selection;\n if (\n anchor.block < focus.block ||\n (anchor.block === focus.block && anchor.offset <= focus.offset)\n ) {\n return { start: anchor, end: focus };\n }\n\n return { start: focus, end: anchor };\n};\n\nconst normalizeMarks = (marks: TextMark[] = []): TextMark[] =>\n MARK_ORDER.filter((mark) => marks.includes(mark));\n\nconst sameMarks = (left: TextMark[] = [], right: TextMark[] = []): boolean => {\n const a = normalizeMarks(left);\n const b = normalizeMarks(right);\n return a.length === b.length && a.every((mark, index) => mark === b[index]);\n};\n\nexport const normalizeInlines = (inlines: TextInline[]): TextInline[] => {\n const result: TextInline[] = [];\n\n for (const inline of inlines) {\n if (!inline.text) continue;\n\n const marks = normalizeMarks(inline.marks);\n const previous = result[result.length - 1];\n\n if (previous && sameMarks(previous.marks, marks)) {\n previous.text += inline.text;\n continue;\n }\n\n result.push({\n text: inline.text,\n ...(marks.length ? { marks } : {}),\n });\n }\n\n return result;\n};\n\nconst isTextMark = (value: unknown): value is TextMark =>\n value === \"bold\" ||\n value === \"italic\" ||\n value === \"underline\" ||\n value === \"strike\";\n\nconst isTextVariant = (value: unknown): value is TextBlockVariant =>\n value === \"display1\" ||\n value === \"display2\" ||\n value === \"headline1\" ||\n value === \"headline2\" ||\n value === \"headline3\" ||\n value === \"headline4\" ||\n value === \"subtitle1\" ||\n value === \"subtitle2\" ||\n value === \"body1\" ||\n value === \"body2\" ||\n value === \"button\" ||\n value === \"caption\" ||\n value === \"overline\";\n\nexport const normalizeTextDocument = (input: TextDocument): TextDocument => {\n const content = Array.isArray(input?.content)\n ? input.content.flatMap((candidate) => {\n if (!candidate || !Array.isArray(candidate.children)) return [];\n\n const variant = isTextVariant(candidate.variant)\n ? candidate.variant\n : \"body1\";\n\n const children = normalizeInlines(\n candidate.children.flatMap((inline) => {\n if (!inline || typeof inline.text !== \"string\") return [];\n const marks = Array.isArray(inline.marks)\n ? inline.marks.filter(isTextMark)\n : [];\n return [{ text: inline.text, marks }];\n }),\n );\n\n const listType =\n candidate.listType === \"bullet\" || candidate.listType === \"ordered\"\n ? candidate.listType\n : undefined;\n const align =\n candidate.align === \"left\" ||\n candidate.align === \"center\" ||\n candidate.align === \"right\" ||\n candidate.align === \"justify\"\n ? (candidate.align as TextAlign)\n : undefined;\n\n const type = listType\n ? \"listItem\"\n : candidate.type === \"heading\" && isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\";\n const headingLevel =\n type === \"heading\" &&\n Number.isInteger(candidate.headingLevel) &&\n candidate.headingLevel! >= 1 &&\n candidate.headingLevel! <= 6\n ? candidate.headingLevel\n : undefined;\n\n return [\n {\n type: listType\n ? \"listItem\"\n : candidate.type === \"heading\" && isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\",\n variant,\n children,\n ...(listType ? { listType } : {}),\n ...(align ? { align } : {}),\n ...(headingLevel ? { headingLevel } : {}),\n } satisfies TextBlock,\n ];\n })\n : [];\n\n return {\n type: \"doc\",\n content: content.length\n ? content\n : [{ type: \"paragraph\", variant: \"body1\", children: [] }],\n };\n};\n\nconst sliceInlines = (\n inlines: TextInline[],\n from: number,\n to: number,\n): TextInline[] => {\n if (to <= from) return [];\n\n const result: TextInline[] = [];\n let position = 0;\n\n for (const inline of inlines) {\n const start = position;\n const end = position + inline.text.length;\n const overlapStart = Math.max(start, from);\n const overlapEnd = Math.min(end, to);\n\n if (overlapStart < overlapEnd) {\n result.push({\n text: inline.text.slice(overlapStart - start, overlapEnd - start),\n ...(inline.marks?.length ? { marks: [...inline.marks] } : {}),\n });\n }\n\n position = end;\n if (position >= to) break;\n }\n\n return normalizeInlines(result);\n};\n\nconst transformInlineRange = (\n inlines: TextInline[],\n from: number,\n to: number,\n transform: (marks: TextMark[]) => TextMark[],\n): TextInline[] => {\n if (to <= from) return inlines.map((inline) => ({ ...inline }));\n\n const result: TextInline[] = [];\n let position = 0;\n\n for (const inline of inlines) {\n const start = position;\n const end = start + inline.text.length;\n\n if (end <= from || start >= to) {\n result.push({\n ...inline,\n ...(inline.marks ? { marks: [...inline.marks] } : {}),\n });\n } else {\n const leftLength = Math.max(0, from - start);\n const rightStart = Math.max(0, to - start);\n const marks = inline.marks ?? [];\n\n if (leftLength > 0) {\n result.push({\n text: inline.text.slice(0, leftLength),\n ...(marks.length ? { marks: [...marks] } : {}),\n });\n }\n\n const middleEnd = Math.min(inline.text.length, to - start);\n if (middleEnd > leftLength) {\n result.push({\n text: inline.text.slice(leftLength, middleEnd),\n marks: transform([...marks]),\n });\n }\n\n if (rightStart < inline.text.length) {\n result.push({\n text: inline.text.slice(Math.max(0, rightStart)),\n ...(marks.length ? { marks: [...marks] } : {}),\n });\n }\n }\n\n position = end;\n }\n\n return normalizeInlines(result);\n};\n\nexport const applyMark = (\n document: TextDocument,\n selection: TextSelection,\n mark: TextMark,\n force?: boolean,\n): TextDocument => {\n if (isCollapsedSelection(selection)) return document;\n\n const { start, end } = getOrderedSelection(selection);\n const allMarked = document.content.every((block, index) => {\n if (index < start.block || index > end.block) return true;\n const from = index === start.block ? start.offset : 0;\n const to = index === end.block ? end.offset : getBlockLength(block);\n if (to <= from) return true;\n\n let position = 0;\n for (const inline of block.children) {\n const inlineStart = position;\n const inlineEnd = position + inline.text.length;\n position = inlineEnd;\n if (inlineEnd <= from || inlineStart >= to) continue;\n if (!inline.marks?.includes(mark)) return false;\n }\n return true;\n });\n\n const addMark = force ?? !allMarked;\n const content = document.content.map((block, index) => {\n if (index < start.block || index > end.block) return block;\n const from = index === start.block ? start.offset : 0;\n const to = index === end.block ? end.offset : getBlockLength(block);\n if (to <= from) return block;\n\n return {\n ...block,\n children: transformInlineRange(block.children, from, to, (marks) => {\n const next = new Set(marks);\n if (addMark) next.add(mark);\n else next.delete(mark);\n return MARK_ORDER.filter((item) => next.has(item));\n }),\n };\n });\n\n return { type: \"doc\", content };\n};\n\nexport const setTextVariant = (\n document: TextDocument,\n selection: TextSelection,\n variant: TextBlockVariant,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n return {\n ...block,\n type: block.listType\n ? \"listItem\"\n : isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\",\n variant,\n };\n }),\n };\n};\n\nconst inlineWithOffset = (\n inlines: TextInline[],\n offset: number,\n): { before: TextInline[]; after: TextInline[] } => ({\n before: sliceInlines(inlines, 0, offset),\n after: sliceInlines(\n inlines,\n offset,\n inlines.reduce((sum, item) => sum + item.text.length, 0),\n ),\n});\n\nexport const insertDocumentAtSelection = (\n document: TextDocument,\n selection: TextSelection,\n insertedDocument: TextDocument,\n): { document: TextDocument; selection: TextSelection } => {\n const source = normalizeTextDocument(document);\n const inserted = normalizeTextDocument(insertedDocument);\n const { start, end } = getOrderedSelection(selection);\n const startIndex = Math.max(\n 0,\n Math.min(start.block, source.content.length - 1),\n );\n const endIndex = Math.max(\n startIndex,\n Math.min(end.block, source.content.length - 1),\n );\n const startBlock = source.content[startIndex];\n const endBlock = source.content[endIndex];\n const startOffset = Math.max(\n 0,\n Math.min(start.offset, getBlockLength(startBlock)),\n );\n const endOffset = Math.max(0, Math.min(end.offset, getBlockLength(endBlock)));\n const prefix = inlineWithOffset(startBlock.children, startOffset).before;\n const suffix = inlineWithOffset(endBlock.children, endOffset).after;\n const insertedBlocks = inserted.content.map((block) => ({\n ...block,\n children: block.children.map((inline) => ({\n ...inline,\n ...(inline.marks ? { marks: [...inline.marks] } : {}),\n })),\n }));\n\n const leftSurvives = prefix.length > 0 || startOffset > 0;\n const rightSurvives =\n suffix.length > 0 || endOffset < getBlockLength(endBlock);\n const first = insertedBlocks[0];\n const last = insertedBlocks[insertedBlocks.length - 1];\n const separatePrefix = leftSurvives && first.type === \"heading\";\n const separateSuffix = rightSurvives && last.type === \"heading\";\n const replacement: TextBlock[] = [];\n\n if (separatePrefix) {\n replacement.push({\n ...startBlock,\n children: prefix,\n });\n }\n\n if (insertedBlocks.length === 1) {\n if (separatePrefix || separateSuffix) {\n replacement.push({\n ...first,\n type: separatePrefix || !leftSurvives ? first.type : startBlock.type,\n variant:\n separatePrefix || !leftSurvives ? first.variant : startBlock.variant,\n children: separatePrefix\n ? first.children\n : normalizeInlines([...prefix, ...first.children]),\n });\n if (separateSuffix) {\n replacement.push({ ...endBlock, children: suffix });\n } else {\n const finalIndex = replacement.length - 1;\n replacement[finalIndex] = {\n ...replacement[finalIndex],\n children: normalizeInlines([\n ...replacement[finalIndex].children,\n ...suffix,\n ]),\n };\n }\n } else {\n const useInsertedStyle = !leftSurvives && !rightSurvives;\n replacement.push({\n ...(useInsertedStyle ? first : startBlock),\n type: useInsertedStyle ? first.type : startBlock.type,\n variant: useInsertedStyle ? first.variant : startBlock.variant,\n children: normalizeInlines([...prefix, ...first.children, ...suffix]),\n });\n }\n } else {\n replacement.push({\n ...(separatePrefix || !leftSurvives ? first : startBlock),\n type: separatePrefix || !leftSurvives ? first.type : startBlock.type,\n variant:\n separatePrefix || !leftSurvives ? first.variant : startBlock.variant,\n children: separatePrefix\n ? first.children\n : normalizeInlines([...prefix, ...first.children]),\n });\n\n for (let index = 1; index < insertedBlocks.length - 1; index += 1) {\n replacement.push(insertedBlocks[index]);\n }\n\n if (separateSuffix) {\n replacement.push(last);\n replacement.push({ ...endBlock, children: suffix });\n } else {\n replacement.push({\n ...(rightSurvives ? endBlock : last),\n type: rightSurvives ? endBlock.type : last.type,\n variant: rightSurvives ? endBlock.variant : last.variant,\n children: normalizeInlines([...last.children, ...suffix]),\n });\n }\n }\n\n const content = [\n ...source.content.slice(0, startIndex),\n ...replacement,\n ...source.content.slice(endIndex + 1),\n ];\n const caretReplacementIndex = separateSuffix\n ? replacement.length - 2\n : replacement.length - 1;\n const caretBlock = replacement[Math.max(0, caretReplacementIndex)];\n const suffixLength = suffix.reduce(\n (total, inline) => total + inline.text.length,\n 0,\n );\n const caretOffset = separateSuffix\n ? getBlockLength(caretBlock)\n : Math.max(0, getBlockLength(caretBlock) - suffixLength);\n const caret = {\n block: startIndex + Math.max(0, caretReplacementIndex),\n offset: caretOffset,\n };\n\n return {\n document: {\n type: \"doc\",\n content: content.length ? content : createTextDocument().content,\n },\n selection: { anchor: caret, focus: caret },\n };\n};\n\nexport const insertTextAtSelection = (\n document: TextDocument,\n selection: TextSelection,\n text: string,\n marks: TextMark[] = [],\n): { document: TextDocument; selection: TextSelection } => {\n const inserted: TextDocument = {\n type: \"doc\",\n content: text.split(\"\\n\").map((line) => ({\n type: \"paragraph\",\n variant: \"body1\",\n children: line\n ? [{ text: line, ...(marks.length ? { marks: [...marks] } : {}) }]\n : [],\n })),\n };\n return insertDocumentAtSelection(document, selection, inserted);\n};\n\n/** Apply text alignment to every block touched by the current selection. */\nexport const setTextAlign = (\n document: TextDocument,\n selection: TextSelection,\n align: TextAlign,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n return { ...block, align };\n }),\n };\n};\n\nexport const getTextAlign = (\n document: TextDocument,\n selection: TextSelection,\n): TextAlign | null => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n if (selected.length === 0) return null;\n const align = selected[0].align ?? null;\n return selected.every((block) => (block.align ?? null) === align)\n ? align\n : null;\n};\n\n/** Toggle a list type for the selected blocks; null removes list formatting. */\nexport const setListType = (\n document: TextDocument,\n selection: TextSelection,\n listType: TextListType | null,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n const remove =\n listType != null &&\n selected.length > 0 &&\n selected.every((block) => block.listType === listType);\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n if (remove || listType == null) {\n const { listType: _listType, ...rest } = block;\n return {\n ...rest,\n type: block.type === \"listItem\" ? \"paragraph\" : block.type,\n };\n }\n return { ...block, type: \"listItem\", listType };\n }),\n };\n};\n\nexport const getListType = (\n document: TextDocument,\n selection: TextSelection,\n listType: TextListType,\n): boolean => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n return (\n selected.length > 0 &&\n selected.every((block) => block.listType === listType)\n );\n};\n"],"mappings":"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"}