@eocrm/design-system 0.6.23 → 0.7.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 (1929) hide show
  1. package/AI-PRIMER.md +2 -1
  2. package/README.md +65 -26
  3. package/dist/app/AppProvider.d.ts +53 -0
  4. package/dist/app/AppProvider.js +32 -0
  5. package/dist/app/index.d.ts +3 -0
  6. package/dist/app/themeTokens.d.ts +18 -0
  7. package/dist/app/themeTokens.js +61 -0
  8. package/dist/calendar/dateMath.d.ts +45 -0
  9. package/dist/calendar/dateMath.js +92 -0
  10. package/dist/calendar/formatters.d.ts +30 -0
  11. package/dist/calendar/formatters.js +73 -0
  12. package/dist/calendar/index.d.ts +12 -0
  13. package/dist/calendar/types.d.ts +34 -0
  14. package/dist/calendar/useAgenda.d.ts +23 -0
  15. package/dist/calendar/useAgenda.js +48 -0
  16. package/dist/calendar/useDay.d.ts +19 -0
  17. package/dist/calendar/useDay.js +34 -0
  18. package/dist/calendar/useMonth.d.ts +17 -0
  19. package/dist/calendar/useMonth.js +60 -0
  20. package/dist/calendar/useWeek.d.ts +22 -0
  21. package/dist/calendar/useWeek.js +44 -0
  22. package/dist/calendar/weekInfo.d.ts +18 -0
  23. package/dist/calendar/weekInfo.js +67 -0
  24. package/dist/components/Accordion/Accordion.css +266 -0
  25. package/dist/components/Accordion/Accordion.d.ts +92 -0
  26. package/dist/components/Accordion/Accordion.js +111 -0
  27. package/dist/components/Accordion/Accordion.module.js +29 -0
  28. package/dist/components/Accordion/AccordionContent.d.ts +9 -0
  29. package/dist/components/Accordion/AccordionContent.js +31 -0
  30. package/dist/components/Accordion/AccordionItem.d.ts +19 -0
  31. package/dist/components/Accordion/AccordionItem.js +45 -0
  32. package/dist/components/Accordion/AccordionTrigger.d.ts +21 -0
  33. package/dist/components/Accordion/AccordionTrigger.js +74 -0
  34. package/dist/components/Accordion/context.d.ts +28 -0
  35. package/dist/components/Accordion/context.js +20 -0
  36. package/dist/components/Accordion/index.d.ts +5 -0
  37. package/dist/components/Alert/Alert.css +116 -0
  38. package/dist/components/Alert/Alert.d.ts +79 -0
  39. package/dist/components/Alert/Alert.js +78 -0
  40. package/dist/components/Alert/Alert.module.js +17 -0
  41. package/dist/components/Alert/index.d.ts +2 -0
  42. package/dist/components/AppLayout/AppLayout.css +72 -0
  43. package/dist/components/AppLayout/AppLayout.d.ts +111 -0
  44. package/dist/components/AppLayout/AppLayout.js +81 -0
  45. package/dist/components/AppLayout/AppLayout.module.js +27 -0
  46. package/dist/components/AppLayout/index.d.ts +2 -0
  47. package/dist/components/Avatar/AgentAvatar.css +185 -0
  48. package/dist/components/Avatar/AgentAvatar.d.ts +39 -0
  49. package/dist/components/Avatar/AgentAvatar.js +78 -0
  50. package/dist/components/Avatar/AgentAvatar.module.js +25 -0
  51. package/dist/components/Avatar/Avatar.css +195 -0
  52. package/dist/components/Avatar/Avatar.d.ts +77 -0
  53. package/dist/components/Avatar/Avatar.js +102 -0
  54. package/dist/components/Avatar/Avatar.module.js +23 -0
  55. package/dist/components/Avatar/AvatarGroup.css +165 -0
  56. package/dist/components/Avatar/AvatarGroup.d.ts +44 -0
  57. package/dist/components/Avatar/AvatarGroup.js +54 -0
  58. package/dist/components/Avatar/AvatarGroup.module.js +21 -0
  59. package/dist/components/Avatar/AvatarGroupContext.d.ts +14 -0
  60. package/dist/components/Avatar/AvatarGroupContext.js +13 -0
  61. package/dist/components/Avatar/index.d.ts +6 -0
  62. package/dist/components/Badge/Badge.css +170 -0
  63. package/dist/components/Badge/Badge.d.ts +85 -0
  64. package/dist/components/Badge/Badge.js +54 -0
  65. package/dist/components/Badge/Badge.module.js +29 -0
  66. package/dist/components/Badge/index.d.ts +2 -0
  67. package/dist/components/Banner/Banner.css +147 -0
  68. package/dist/components/Banner/Banner.d.ts +71 -0
  69. package/dist/components/Banner/Banner.js +82 -0
  70. package/dist/components/Banner/Banner.module.js +15 -0
  71. package/dist/components/Banner/index.d.ts +2 -0
  72. package/dist/components/BrandIcon/BrandIcon.css +5 -0
  73. package/dist/components/BrandIcon/BrandIcon.d.ts +20 -0
  74. package/dist/components/BrandIcon/BrandIcon.js +68 -0
  75. package/dist/components/BrandIcon/BrandIcon.module.js +5 -0
  76. package/dist/components/BrandIcon/index.d.ts +2 -0
  77. package/dist/components/Breadcrumb/Breadcrumb.css +37 -0
  78. package/dist/components/Breadcrumb/Breadcrumb.d.ts +61 -0
  79. package/dist/components/Breadcrumb/Breadcrumb.js +59 -0
  80. package/dist/components/Breadcrumb/Breadcrumb.module.js +15 -0
  81. package/dist/components/Breadcrumb/index.d.ts +2 -0
  82. package/dist/components/Button/Button.css +194 -0
  83. package/dist/components/Button/Button.d.ts +129 -0
  84. package/dist/components/Button/Button.js +28 -0
  85. package/dist/components/Button/Button.module.js +32 -0
  86. package/dist/components/Button/index.d.ts +2 -0
  87. package/dist/components/ButtonGroup/ButtonGroup.css +117 -0
  88. package/dist/components/ButtonGroup/ButtonGroup.d.ts +68 -0
  89. package/dist/components/ButtonGroup/ButtonGroup.js +126 -0
  90. package/dist/components/ButtonGroup/ButtonGroup.module.js +17 -0
  91. package/dist/components/ButtonGroup/ButtonGroupItem.d.ts +24 -0
  92. package/dist/components/ButtonGroup/ButtonGroupItem.js +42 -0
  93. package/dist/components/ButtonGroup/context.d.ts +35 -0
  94. package/dist/components/ButtonGroup/context.js +10 -0
  95. package/dist/components/ButtonGroup/index.d.ts +2 -0
  96. package/dist/components/Calendar/AgendaView.css +334 -0
  97. package/dist/components/Calendar/AgendaView.d.ts +32 -0
  98. package/dist/components/Calendar/AgendaView.js +149 -0
  99. package/dist/components/Calendar/AgendaView.module.js +43 -0
  100. package/dist/components/Calendar/AllDayBand.css +188 -0
  101. package/dist/components/Calendar/AllDayBand.d.ts +26 -0
  102. package/dist/components/Calendar/AllDayBand.js +48 -0
  103. package/dist/components/Calendar/AllDayBand.module.js +11 -0
  104. package/dist/components/Calendar/Calendar.css +193 -0
  105. package/dist/components/Calendar/Calendar.d.ts +143 -0
  106. package/dist/components/Calendar/Calendar.js +173 -0
  107. package/dist/components/Calendar/Calendar.module.js +11 -0
  108. package/dist/components/Calendar/DayCell.css +197 -0
  109. package/dist/components/Calendar/DayCell.d.ts +26 -0
  110. package/dist/components/Calendar/DayCell.js +36 -0
  111. package/dist/components/Calendar/DayCell.module.js +13 -0
  112. package/dist/components/Calendar/DayView.css +180 -0
  113. package/dist/components/Calendar/DayView.d.ts +45 -0
  114. package/dist/components/Calendar/DayView.js +106 -0
  115. package/dist/components/Calendar/DayView.module.js +5 -0
  116. package/dist/components/Calendar/EventChip.css +298 -0
  117. package/dist/components/Calendar/EventChip.d.ts +34 -0
  118. package/dist/components/Calendar/EventChip.js +87 -0
  119. package/dist/components/Calendar/EventChip.module.js +37 -0
  120. package/dist/components/Calendar/HourGrid.css +281 -0
  121. package/dist/components/Calendar/HourGrid.d.ts +60 -0
  122. package/dist/components/Calendar/HourGrid.js +201 -0
  123. package/dist/components/Calendar/HourGrid.module.js +39 -0
  124. package/dist/components/Calendar/MonthView.css +260 -0
  125. package/dist/components/Calendar/MonthView.d.ts +48 -0
  126. package/dist/components/Calendar/MonthView.js +227 -0
  127. package/dist/components/Calendar/MonthView.module.js +27 -0
  128. package/dist/components/Calendar/TimedEvent.css +309 -0
  129. package/dist/components/Calendar/TimedEvent.d.ts +32 -0
  130. package/dist/components/Calendar/TimedEvent.js +157 -0
  131. package/dist/components/Calendar/TimedEvent.module.js +41 -0
  132. package/dist/components/Calendar/ViewSwitcher.css +3 -0
  133. package/dist/components/Calendar/ViewSwitcher.d.ts +19 -0
  134. package/dist/components/Calendar/ViewSwitcher.js +49 -0
  135. package/dist/components/Calendar/ViewSwitcher.module.js +5 -0
  136. package/dist/components/Calendar/WeekView.css +180 -0
  137. package/dist/components/Calendar/WeekView.d.ts +47 -0
  138. package/dist/components/Calendar/WeekView.js +77 -0
  139. package/dist/components/Calendar/WeekView.module.js +5 -0
  140. package/dist/components/Calendar/eventColor.d.ts +34 -0
  141. package/dist/components/Calendar/eventColor.js +23 -0
  142. package/dist/components/Calendar/index.d.ts +3 -0
  143. package/dist/components/Calendar/types.d.ts +430 -0
  144. package/dist/components/Calendar/useEventDrag.d.ts +112 -0
  145. package/dist/components/Calendar/useEventDrag.js +414 -0
  146. package/dist/components/Calendar/utils.d.ts +92 -0
  147. package/dist/components/Calendar/utils.js +434 -0
  148. package/dist/components/Card/Card.css +220 -0
  149. package/dist/components/Card/Card.d.ts +78 -0
  150. package/dist/components/Card/Card.js +63 -0
  151. package/dist/components/Card/Card.module.js +49 -0
  152. package/dist/components/Card/CardBody.d.ts +16 -0
  153. package/dist/components/Card/CardBody.js +19 -0
  154. package/dist/components/Card/CardHeader.d.ts +58 -0
  155. package/dist/components/Card/CardHeader.js +54 -0
  156. package/dist/components/Card/CardList.d.ts +10 -0
  157. package/dist/components/Card/CardList.js +19 -0
  158. package/dist/components/Card/CardListRow.d.ts +10 -0
  159. package/dist/components/Card/CardListRow.js +19 -0
  160. package/dist/components/Card/index.d.ts +7 -0
  161. package/dist/components/CatalogPicker/CatalogPicker.css +205 -0
  162. package/dist/components/CatalogPicker/CatalogPicker.d.ts +46 -0
  163. package/dist/components/CatalogPicker/CatalogPicker.js +281 -0
  164. package/dist/components/CatalogPicker/CatalogPicker.module.js +45 -0
  165. package/dist/components/CatalogPicker/index.d.ts +2 -0
  166. package/dist/components/Chart/Chart.css +324 -0
  167. package/dist/components/Chart/Chart.d.ts +52 -0
  168. package/dist/components/Chart/Chart.js +370 -0
  169. package/dist/components/Chart/Chart.module.js +63 -0
  170. package/dist/components/Chart/ChartLegend.d.ts +21 -0
  171. package/dist/components/Chart/ChartLegend.js +64 -0
  172. package/dist/components/Chart/ChartTable.d.ts +17 -0
  173. package/dist/components/Chart/ChartTable.js +41 -0
  174. package/dist/components/Chart/ChartTooltip.d.ts +26 -0
  175. package/dist/components/Chart/ChartTooltip.js +88 -0
  176. package/dist/components/Chart/chartModel.d.ts +188 -0
  177. package/dist/components/Chart/chartModel.js +449 -0
  178. package/dist/components/Chart/index.d.ts +2 -0
  179. package/dist/components/ChatBubble/ChatBubble.css +98 -0
  180. package/dist/components/ChatBubble/ChatBubble.d.ts +24 -0
  181. package/dist/components/ChatBubble/ChatBubble.js +38 -0
  182. package/dist/components/ChatBubble/ChatBubble.module.js +22 -0
  183. package/dist/components/ChatBubble/ChatBubbleList.d.ts +10 -0
  184. package/dist/components/ChatBubble/ChatBubbleList.js +20 -0
  185. package/dist/components/ChatBubble/index.d.ts +3 -0
  186. package/dist/components/ChatLauncher/ChatLauncher.css +83 -0
  187. package/dist/components/ChatLauncher/ChatLauncher.d.ts +27 -0
  188. package/dist/components/ChatLauncher/ChatLauncher.js +144 -0
  189. package/dist/components/ChatLauncher/ChatLauncher.module.js +17 -0
  190. package/dist/components/ChatLauncher/index.d.ts +2 -0
  191. package/dist/components/ChatLauncher/isAtBottom.d.ts +5 -0
  192. package/dist/components/ChatLauncher/isAtBottom.js +9 -0
  193. package/dist/components/Checkbox/Checkbox.css +143 -0
  194. package/dist/components/Checkbox/Checkbox.d.ts +64 -0
  195. package/dist/components/Checkbox/Checkbox.js +70 -0
  196. package/dist/components/Checkbox/Checkbox.module.js +20 -0
  197. package/dist/components/Checkbox/index.d.ts +2 -0
  198. package/dist/components/CircularProgress/CircularProgress.css +115 -0
  199. package/dist/components/CircularProgress/CircularProgress.d.ts +61 -0
  200. package/dist/components/CircularProgress/CircularProgress.js +64 -0
  201. package/dist/components/CircularProgress/CircularProgress.module.js +32 -0
  202. package/dist/components/CircularProgress/index.d.ts +2 -0
  203. package/dist/components/Cluster/Cluster.css +107 -0
  204. package/dist/components/Cluster/Cluster.d.ts +143 -0
  205. package/dist/components/Cluster/Cluster.js +38 -0
  206. package/dist/components/Cluster/Cluster.module.js +45 -0
  207. package/dist/components/Cluster/index.d.ts +2 -0
  208. package/dist/components/Code/Code.css +36 -0
  209. package/dist/components/Code/Code.d.ts +21 -0
  210. package/dist/components/Code/Code.js +25 -0
  211. package/dist/components/Code/Code.module.js +15 -0
  212. package/dist/components/Code/index.d.ts +2 -0
  213. package/dist/components/CodeBlock/CodeBlock.css +153 -0
  214. package/dist/components/CodeBlock/CodeBlock.d.ts +64 -0
  215. package/dist/components/CodeBlock/CodeBlock.js +147 -0
  216. package/dist/components/CodeBlock/CodeBlock.module.js +46 -0
  217. package/dist/components/CodeBlock/highlight.d.ts +11 -0
  218. package/dist/components/CodeBlock/highlight.js +159 -0
  219. package/dist/components/CodeBlock/index.d.ts +2 -0
  220. package/dist/components/CodeBlock/sampleSync.d.ts +10 -0
  221. package/dist/components/CodeBlock/sampleSync.js +35 -0
  222. package/dist/components/ColorPicker/ColorPicker.css +227 -0
  223. package/dist/components/ColorPicker/ColorPicker.d.ts +116 -0
  224. package/dist/components/ColorPicker/ColorPicker.js +171 -0
  225. package/dist/components/ColorPicker/ColorPicker.module.js +37 -0
  226. package/dist/components/ColorPicker/ColorPickerPanel.d.ts +39 -0
  227. package/dist/components/ColorPicker/ColorPickerPanel.js +169 -0
  228. package/dist/components/ColorPicker/SVSquare.d.ts +30 -0
  229. package/dist/components/ColorPicker/SVSquare.js +127 -0
  230. package/dist/components/ColorPicker/colorMath.d.ts +53 -0
  231. package/dist/components/ColorPicker/colorMath.js +102 -0
  232. package/dist/components/ColorPicker/index.d.ts +6 -0
  233. package/dist/components/ConfirmationPopover/ConfirmationPopover.css +52 -0
  234. package/dist/components/ConfirmationPopover/ConfirmationPopover.d.ts +118 -0
  235. package/dist/components/ConfirmationPopover/ConfirmationPopover.js +186 -0
  236. package/dist/components/ConfirmationPopover/ConfirmationPopover.module.js +12 -0
  237. package/dist/components/ConfirmationPopover/index.d.ts +2 -0
  238. package/dist/components/Constrain/Constrain.css +190 -0
  239. package/dist/components/Constrain/Constrain.d.ts +47 -0
  240. package/dist/components/Constrain/Constrain.js +19 -0
  241. package/dist/components/Constrain/Constrain.module.js +51 -0
  242. package/dist/components/Constrain/index.d.ts +2 -0
  243. package/dist/components/CurrencySelect/CurrencySelect.css +6 -0
  244. package/dist/components/CurrencySelect/CurrencySelect.d.ts +44 -0
  245. package/dist/components/CurrencySelect/CurrencySelect.js +68 -0
  246. package/dist/components/CurrencySelect/CurrencySelect.module.js +5 -0
  247. package/dist/components/CurrencySelect/index.d.ts +3 -0
  248. package/dist/components/CursorPagination/CursorPagination.css +82 -0
  249. package/dist/components/CursorPagination/CursorPagination.d.ts +52 -0
  250. package/dist/components/CursorPagination/CursorPagination.js +41 -0
  251. package/dist/components/CursorPagination/CursorPagination.module.js +12 -0
  252. package/dist/components/CursorPagination/index.d.ts +2 -0
  253. package/dist/components/DashboardCanvas/DashboardCanvas.css +220 -0
  254. package/dist/components/DashboardCanvas/DashboardCanvas.d.ts +92 -0
  255. package/dist/components/DashboardCanvas/DashboardCanvas.js +649 -0
  256. package/dist/components/DashboardCanvas/DashboardCanvas.module.js +35 -0
  257. package/dist/components/DashboardCanvas/DashboardCanvasItem.d.ts +51 -0
  258. package/dist/components/DashboardCanvas/DashboardCanvasItem.js +71 -0
  259. package/dist/components/DashboardCanvas/DashboardCanvasSection.d.ts +53 -0
  260. package/dist/components/DashboardCanvas/DashboardCanvasSection.js +102 -0
  261. package/dist/components/DashboardCanvas/engine.d.ts +131 -0
  262. package/dist/components/DashboardCanvas/engine.js +232 -0
  263. package/dist/components/DashboardCanvas/index.d.ts +4 -0
  264. package/dist/components/DashboardWidget/DashboardWidget.css +104 -0
  265. package/dist/components/DashboardWidget/DashboardWidget.d.ts +69 -0
  266. package/dist/components/DashboardWidget/DashboardWidget.js +84 -0
  267. package/dist/components/DashboardWidget/DashboardWidget.module.js +26 -0
  268. package/dist/components/DashboardWidget/index.d.ts +2 -0
  269. package/dist/components/DataTable/BodyRow.d.ts +29 -0
  270. package/dist/components/DataTable/BodyRow.js +138 -0
  271. package/dist/components/DataTable/ColumnVisibilityTrigger.d.ts +34 -0
  272. package/dist/components/DataTable/ColumnVisibilityTrigger.js +43 -0
  273. package/dist/components/DataTable/DataTable.css +726 -0
  274. package/dist/components/DataTable/DataTable.d.ts +95 -0
  275. package/dist/components/DataTable/DataTable.js +303 -0
  276. package/dist/components/DataTable/DataTable.module.js +53 -0
  277. package/dist/components/DataTable/HeaderCell.css +203 -0
  278. package/dist/components/DataTable/HeaderCell.d.ts +12 -0
  279. package/dist/components/DataTable/HeaderCell.js +190 -0
  280. package/dist/components/DataTable/HeaderCell.module.js +39 -0
  281. package/dist/components/DataTable/columnShift.d.ts +66 -0
  282. package/dist/components/DataTable/columnShift.js +46 -0
  283. package/dist/components/DataTable/index.d.ts +6 -0
  284. package/dist/components/DataTable/pinStyle.d.ts +27 -0
  285. package/dist/components/DataTable/pinStyle.js +28 -0
  286. package/dist/components/DataTable/reorderColumns.d.ts +29 -0
  287. package/dist/components/DataTable/reorderColumns.js +42 -0
  288. package/dist/components/DataTable/types.d.ts +254 -0
  289. package/dist/components/DataTable/useColumnDragShift.d.ts +85 -0
  290. package/dist/components/DataTable/useColumnDragShift.js +114 -0
  291. package/dist/components/DataTable/useDataTable.d.ts +60 -0
  292. package/dist/components/DataTable/useDataTable.js +305 -0
  293. package/dist/components/DataTable/useResizeHandle.d.ts +34 -0
  294. package/dist/components/DataTable/useResizeHandle.js +76 -0
  295. package/dist/components/DatePicker/DatePicker.css +251 -0
  296. package/dist/components/DatePicker/DatePicker.d.ts +72 -0
  297. package/dist/components/DatePicker/DatePicker.js +374 -0
  298. package/dist/components/DatePicker/DatePicker.module.js +26 -0
  299. package/dist/components/DatePicker/DatePickerGrid.css +253 -0
  300. package/dist/components/DatePicker/DatePickerGrid.d.ts +58 -0
  301. package/dist/components/DatePicker/DatePickerGrid.js +234 -0
  302. package/dist/components/DatePicker/DatePickerGrid.module.js +39 -0
  303. package/dist/components/DatePicker/InlineDatePicker.css +129 -0
  304. package/dist/components/DatePicker/InlineDatePicker.d.ts +59 -0
  305. package/dist/components/DatePicker/InlineDatePicker.js +98 -0
  306. package/dist/components/DatePicker/InlineDatePicker.module.js +11 -0
  307. package/dist/components/DatePicker/index.d.ts +4 -0
  308. package/dist/components/DatePicker/utils.d.ts +165 -0
  309. package/dist/components/DatePicker/utils.js +301 -0
  310. package/dist/components/DateRangePicker/DateRangePicker.css +363 -0
  311. package/dist/components/DateRangePicker/DateRangePicker.d.ts +79 -0
  312. package/dist/components/DateRangePicker/DateRangePicker.js +438 -0
  313. package/dist/components/DateRangePicker/DateRangePicker.module.js +36 -0
  314. package/dist/components/DateRangePicker/InlineDateRangePicker.css +241 -0
  315. package/dist/components/DateRangePicker/InlineDateRangePicker.d.ts +67 -0
  316. package/dist/components/DateRangePicker/InlineDateRangePicker.js +222 -0
  317. package/dist/components/DateRangePicker/InlineDateRangePicker.module.js +21 -0
  318. package/dist/components/DateRangePicker/index.d.ts +5 -0
  319. package/dist/components/DateRangePicker/utils.d.ts +62 -0
  320. package/dist/components/DateRangePicker/utils.js +128 -0
  321. package/dist/components/DateStrip/DateStrip.css +181 -0
  322. package/dist/components/DateStrip/DateStrip.d.ts +42 -0
  323. package/dist/components/DateStrip/DateStrip.js +144 -0
  324. package/dist/components/DateStrip/DateStrip.module.js +23 -0
  325. package/dist/components/DateStrip/index.d.ts +2 -0
  326. package/dist/components/DefinitionList/DefinitionList.css +89 -0
  327. package/dist/components/DefinitionList/DefinitionList.d.ts +74 -0
  328. package/dist/components/DefinitionList/DefinitionList.js +93 -0
  329. package/dist/components/DefinitionList/DefinitionList.module.js +15 -0
  330. package/dist/components/DefinitionList/index.d.ts +1 -0
  331. package/dist/components/Divider/Divider.css +136 -0
  332. package/dist/components/Divider/Divider.d.ts +36 -0
  333. package/dist/components/Divider/Divider.js +56 -0
  334. package/dist/components/Divider/Divider.module.js +23 -0
  335. package/dist/components/Divider/index.d.ts +2 -0
  336. package/dist/components/Dot/Dot.css +88 -0
  337. package/dist/components/Dot/Dot.d.ts +20 -0
  338. package/dist/components/Dot/Dot.js +25 -0
  339. package/dist/components/Dot/Dot.module.js +5 -0
  340. package/dist/components/Dot/index.d.ts +2 -0
  341. package/dist/components/Drawer/Body.d.ts +6 -0
  342. package/dist/components/Drawer/Body.js +15 -0
  343. package/dist/components/Drawer/Close.d.ts +13 -0
  344. package/dist/components/Drawer/Close.js +17 -0
  345. package/dist/components/Drawer/Content.d.ts +12 -0
  346. package/dist/components/Drawer/Content.js +77 -0
  347. package/dist/components/Drawer/Drawer.css +228 -0
  348. package/dist/components/Drawer/Drawer.d.ts +18 -0
  349. package/dist/components/Drawer/Drawer.js +18 -0
  350. package/dist/components/Drawer/Drawer.module.js +29 -0
  351. package/dist/components/Drawer/DrawerRoot.d.ts +37 -0
  352. package/dist/components/Drawer/DrawerRoot.js +89 -0
  353. package/dist/components/Drawer/Footer.d.ts +6 -0
  354. package/dist/components/Drawer/Footer.js +16 -0
  355. package/dist/components/Drawer/Header.d.ts +10 -0
  356. package/dist/components/Drawer/Header.js +54 -0
  357. package/dist/components/Drawer/Overlay.d.ts +13 -0
  358. package/dist/components/Drawer/Overlay.js +60 -0
  359. package/dist/components/Drawer/context.d.ts +34 -0
  360. package/dist/components/Drawer/context.js +10 -0
  361. package/dist/components/Drawer/index.d.ts +2 -0
  362. package/dist/components/Drawer/useDragToClose.d.ts +24 -0
  363. package/dist/components/Drawer/useDragToClose.js +108 -0
  364. package/dist/components/DropdownMenu/CheckboxItem.d.ts +58 -0
  365. package/dist/components/DropdownMenu/CheckboxItem.js +76 -0
  366. package/dist/components/DropdownMenu/Content.d.ts +32 -0
  367. package/dist/components/DropdownMenu/Content.js +227 -0
  368. package/dist/components/DropdownMenu/DropdownMenu.css +324 -0
  369. package/dist/components/DropdownMenu/DropdownMenu.d.ts +27 -0
  370. package/dist/components/DropdownMenu/DropdownMenu.js +27 -0
  371. package/dist/components/DropdownMenu/DropdownMenu.module.js +29 -0
  372. package/dist/components/DropdownMenu/Group.d.ts +33 -0
  373. package/dist/components/DropdownMenu/Group.js +43 -0
  374. package/dist/components/DropdownMenu/Item.d.ts +56 -0
  375. package/dist/components/DropdownMenu/Item.js +81 -0
  376. package/dist/components/DropdownMenu/ItemIndicator.d.ts +20 -0
  377. package/dist/components/DropdownMenu/ItemIndicator.js +16 -0
  378. package/dist/components/DropdownMenu/Radio.d.ts +77 -0
  379. package/dist/components/DropdownMenu/Radio.js +97 -0
  380. package/dist/components/DropdownMenu/Root.d.ts +20 -0
  381. package/dist/components/DropdownMenu/Root.js +62 -0
  382. package/dist/components/DropdownMenu/Sub.d.ts +58 -0
  383. package/dist/components/DropdownMenu/Sub.js +218 -0
  384. package/dist/components/DropdownMenu/Trigger.d.ts +16 -0
  385. package/dist/components/DropdownMenu/Trigger.js +38 -0
  386. package/dist/components/DropdownMenu/context.d.ts +43 -0
  387. package/dist/components/DropdownMenu/context.js +19 -0
  388. package/dist/components/DropdownMenu/index.d.ts +2 -0
  389. package/dist/components/EmojiPicker/EmojiPicker.css +85 -0
  390. package/dist/components/EmojiPicker/EmojiPicker.d.ts +59 -0
  391. package/dist/components/EmojiPicker/EmojiPicker.js +221 -0
  392. package/dist/components/EmojiPicker/EmojiPicker.module.js +25 -0
  393. package/dist/components/EmojiPicker/emojiData.d.ts +18 -0
  394. package/dist/components/EmojiPicker/emojiData.js +968 -0
  395. package/dist/components/EmojiPicker/index.d.ts +3 -0
  396. package/dist/components/EmptyState/EmptyState.css +99 -0
  397. package/dist/components/EmptyState/EmptyState.d.ts +57 -0
  398. package/dist/components/EmptyState/EmptyState.js +39 -0
  399. package/dist/components/EmptyState/EmptyState.module.js +20 -0
  400. package/dist/components/EmptyState/index.d.ts +2 -0
  401. package/dist/components/EntityChip/EntityChip.css +220 -0
  402. package/dist/components/EntityChip/EntityChip.d.ts +279 -0
  403. package/dist/components/EntityChip/EntityChip.js +208 -0
  404. package/dist/components/EntityChip/EntityChip.module.js +47 -0
  405. package/dist/components/EntityChip/index.d.ts +3 -0
  406. package/dist/components/ErrorState/ErrorState.css +112 -0
  407. package/dist/components/ErrorState/ErrorState.d.ts +63 -0
  408. package/dist/components/ErrorState/ErrorState.js +44 -0
  409. package/dist/components/ErrorState/ErrorState.module.js +24 -0
  410. package/dist/components/ErrorState/index.d.ts +2 -0
  411. package/dist/components/Field/Field.css +43 -0
  412. package/dist/components/Field/Field.d.ts +58 -0
  413. package/dist/components/Field/Field.js +87 -0
  414. package/dist/components/Field/Field.module.js +21 -0
  415. package/dist/components/Field/index.d.ts +2 -0
  416. package/dist/components/FileUpload/FileUpload.css +181 -0
  417. package/dist/components/FileUpload/FileUpload.d.ts +136 -0
  418. package/dist/components/FileUpload/FileUpload.js +303 -0
  419. package/dist/components/FileUpload/FileUpload.module.js +43 -0
  420. package/dist/components/FileUpload/formatBytes.d.ts +21 -0
  421. package/dist/components/FileUpload/formatBytes.js +32 -0
  422. package/dist/components/FileUpload/iconForFile.d.ts +17 -0
  423. package/dist/components/FileUpload/iconForFile.js +28 -0
  424. package/dist/components/FileUpload/index.d.ts +2 -0
  425. package/dist/components/FilterChip/FilterChip.css +72 -0
  426. package/dist/components/FilterChip/FilterChip.d.ts +88 -0
  427. package/dist/components/FilterChip/FilterChip.js +84 -0
  428. package/dist/components/FilterChip/FilterChip.module.js +15 -0
  429. package/dist/components/FilterChip/index.d.ts +3 -0
  430. package/dist/components/FlowCanvas/FlowCanvas.css +287 -0
  431. package/dist/components/FlowCanvas/FlowCanvas.d.ts +118 -0
  432. package/dist/components/FlowCanvas/FlowCanvas.js +1151 -0
  433. package/dist/components/FlowCanvas/FlowCanvas.module.js +47 -0
  434. package/dist/components/FlowCanvas/FlowControls.d.ts +8 -0
  435. package/dist/components/FlowCanvas/FlowControls.js +51 -0
  436. package/dist/components/FlowCanvas/FlowEdge.d.ts +18 -0
  437. package/dist/components/FlowCanvas/FlowEdge.js +29 -0
  438. package/dist/components/FlowCanvas/FlowNode.d.ts +19 -0
  439. package/dist/components/FlowCanvas/FlowNode.js +48 -0
  440. package/dist/components/FlowCanvas/edgePath.d.ts +31 -0
  441. package/dist/components/FlowCanvas/edgePath.js +88 -0
  442. package/dist/components/FlowCanvas/index.d.ts +4 -0
  443. package/dist/components/FlowCanvas/layout.d.ts +35 -0
  444. package/dist/components/FlowCanvas/layout.js +119 -0
  445. package/dist/components/FlowCanvas/spatialNav.d.ts +12 -0
  446. package/dist/components/FlowCanvas/spatialNav.js +63 -0
  447. package/dist/components/FlowCanvas/types.d.ts +58 -0
  448. package/dist/components/FlowCanvas/useViewport.d.ts +35 -0
  449. package/dist/components/FlowCanvas/useViewport.js +90 -0
  450. package/dist/components/FormRow/FormRow.d.ts +17 -0
  451. package/dist/components/FormRow/FormRow.js +26 -0
  452. package/dist/components/FormRow/index.d.ts +2 -0
  453. package/dist/components/FormSection/FormSection.css +22 -0
  454. package/dist/components/FormSection/FormSection.d.ts +17 -0
  455. package/dist/components/FormSection/FormSection.js +37 -0
  456. package/dist/components/FormSection/FormSection.module.js +11 -0
  457. package/dist/components/FormSection/index.d.ts +2 -0
  458. package/dist/components/FunnelChart/FunnelChart.css +322 -0
  459. package/dist/components/FunnelChart/FunnelChart.d.ts +44 -0
  460. package/dist/components/FunnelChart/FunnelChart.js +462 -0
  461. package/dist/components/FunnelChart/FunnelChart.module.js +47 -0
  462. package/dist/components/FunnelChart/funnelModel.d.ts +64 -0
  463. package/dist/components/FunnelChart/funnelModel.js +69 -0
  464. package/dist/components/FunnelChart/index.d.ts +2 -0
  465. package/dist/components/Grid/Grid.css +122 -0
  466. package/dist/components/Grid/Grid.d.ts +99 -0
  467. package/dist/components/Grid/Grid.js +67 -0
  468. package/dist/components/Grid/Grid.module.js +53 -0
  469. package/dist/components/Grid/GridItem.d.ts +23 -0
  470. package/dist/components/Grid/GridItem.js +28 -0
  471. package/dist/components/Grid/index.d.ts +3 -0
  472. package/dist/components/Highlight/Highlight.css +68 -0
  473. package/dist/components/Highlight/Highlight.d.ts +56 -0
  474. package/dist/components/Highlight/Highlight.js +82 -0
  475. package/dist/components/Highlight/Highlight.module.js +8 -0
  476. package/dist/components/Highlight/HighlightOverlay.d.ts +30 -0
  477. package/dist/components/Highlight/HighlightOverlay.js +82 -0
  478. package/dist/components/Highlight/index.d.ts +2 -0
  479. package/dist/components/HighlightedText/HighlightedText.css +12 -0
  480. package/dist/components/HighlightedText/HighlightedText.d.ts +22 -0
  481. package/dist/components/HighlightedText/HighlightedText.js +24 -0
  482. package/dist/components/HighlightedText/HighlightedText.module.js +5 -0
  483. package/dist/components/HighlightedText/highlightRanges.d.ts +18 -0
  484. package/dist/components/HighlightedText/highlightRanges.js +32 -0
  485. package/dist/components/HighlightedText/index.d.ts +2 -0
  486. package/dist/components/IconPicker/IconPicker.css +193 -0
  487. package/dist/components/IconPicker/IconPicker.d.ts +107 -0
  488. package/dist/components/IconPicker/IconPicker.js +392 -0
  489. package/dist/components/IconPicker/IconPicker.module.js +34 -0
  490. package/dist/components/IconPicker/index.d.ts +2 -0
  491. package/dist/components/IconTile/IconTile.css +55 -0
  492. package/dist/components/IconTile/IconTile.d.ts +52 -0
  493. package/dist/components/IconTile/IconTile.js +34 -0
  494. package/dist/components/IconTile/IconTile.module.js +14 -0
  495. package/dist/components/IconTile/index.d.ts +2 -0
  496. package/dist/components/Image/Image.css +245 -0
  497. package/dist/components/Image/Image.d.ts +102 -0
  498. package/dist/components/Image/Image.js +111 -0
  499. package/dist/components/Image/Image.module.js +43 -0
  500. package/dist/components/Image/index.d.ts +2 -0
  501. package/dist/components/ImageCrop/ImageCrop.css +222 -0
  502. package/dist/components/ImageCrop/ImageCrop.d.ts +64 -0
  503. package/dist/components/ImageCrop/ImageCrop.js +353 -0
  504. package/dist/components/ImageCrop/ImageCrop.module.js +45 -0
  505. package/dist/components/ImageCrop/cropGeometry.d.ts +25 -0
  506. package/dist/components/ImageCrop/cropGeometry.js +92 -0
  507. package/dist/components/ImageCrop/extractCropBlob.d.ts +72 -0
  508. package/dist/components/ImageCrop/extractCropBlob.js +74 -0
  509. package/dist/components/ImageCrop/index.d.ts +6 -0
  510. package/dist/components/ImageCrop/useCropPreview.d.ts +100 -0
  511. package/dist/components/ImageCrop/useCropPreview.js +122 -0
  512. package/dist/components/Indent/Indent.css +36 -0
  513. package/dist/components/Indent/Indent.d.ts +22 -0
  514. package/dist/components/Indent/Indent.js +24 -0
  515. package/dist/components/Indent/Indent.module.js +13 -0
  516. package/dist/components/Indent/index.d.ts +2 -0
  517. package/dist/components/Input/Input.css +120 -0
  518. package/dist/components/Input/Input.d.ts +59 -0
  519. package/dist/components/Input/Input.js +34 -0
  520. package/dist/components/Input/Input.module.js +18 -0
  521. package/dist/components/Input/Suggestions.d.ts +17 -0
  522. package/dist/components/Input/Suggestions.js +180 -0
  523. package/dist/components/Input/index.d.ts +2 -0
  524. package/dist/components/Kanban/Kanban.css +47 -0
  525. package/dist/components/Kanban/Kanban.d.ts +157 -0
  526. package/dist/components/Kanban/Kanban.js +494 -0
  527. package/dist/components/Kanban/Kanban.module.js +11 -0
  528. package/dist/components/Kanban/index.d.ts +1 -0
  529. package/dist/components/Kbd/Kbd.css +63 -0
  530. package/dist/components/Kbd/Kbd.d.ts +36 -0
  531. package/dist/components/Kbd/Kbd.js +35 -0
  532. package/dist/components/Kbd/Kbd.module.js +15 -0
  533. package/dist/components/Kbd/index.d.ts +2 -0
  534. package/dist/components/Lightbox/Lightbox.css +249 -0
  535. package/dist/components/Lightbox/Lightbox.d.ts +75 -0
  536. package/dist/components/Lightbox/Lightbox.js +313 -0
  537. package/dist/components/Lightbox/Lightbox.module.js +45 -0
  538. package/dist/components/Lightbox/index.d.ts +2 -0
  539. package/dist/components/Link/Link.css +71 -0
  540. package/dist/components/Link/Link.d.ts +65 -0
  541. package/dist/components/Link/Link.js +28 -0
  542. package/dist/components/Link/Link.module.js +16 -0
  543. package/dist/components/Link/index.d.ts +2 -0
  544. package/dist/components/LinkCard/LinkCard.css +101 -0
  545. package/dist/components/LinkCard/LinkCard.d.ts +28 -0
  546. package/dist/components/LinkCard/LinkCard.js +28 -0
  547. package/dist/components/LinkCard/LinkCard.module.js +15 -0
  548. package/dist/components/LinkCard/index.d.ts +2 -0
  549. package/dist/components/LiquidEditor/AutocompleteMenu.d.ts +24 -0
  550. package/dist/components/LiquidEditor/AutocompleteMenu.js +91 -0
  551. package/dist/components/LiquidEditor/HighlightLayer.d.ts +14 -0
  552. package/dist/components/LiquidEditor/HighlightLayer.js +38 -0
  553. package/dist/components/LiquidEditor/InsertVariableMenu.d.ts +17 -0
  554. package/dist/components/LiquidEditor/InsertVariableMenu.js +49 -0
  555. package/dist/components/LiquidEditor/LiquidEditor.css +298 -0
  556. package/dist/components/LiquidEditor/LiquidEditor.d.ts +6 -0
  557. package/dist/components/LiquidEditor/LiquidEditor.js +284 -0
  558. package/dist/components/LiquidEditor/LiquidEditor.module.js +73 -0
  559. package/dist/components/LiquidEditor/PreviewPane.d.ts +10 -0
  560. package/dist/components/LiquidEditor/PreviewPane.js +21 -0
  561. package/dist/components/LiquidEditor/caretCoordinates.d.ts +9 -0
  562. package/dist/components/LiquidEditor/caretCoordinates.js +68 -0
  563. package/dist/components/LiquidEditor/index.d.ts +2 -0
  564. package/dist/components/LiquidEditor/liquidFilters.d.ts +2 -0
  565. package/dist/components/LiquidEditor/liquidFilters.js +21 -0
  566. package/dist/components/LiquidEditor/liquidTokenizer.d.ts +27 -0
  567. package/dist/components/LiquidEditor/liquidTokenizer.js +163 -0
  568. package/dist/components/LiquidEditor/types.d.ts +97 -0
  569. package/dist/components/LiquidEditor/useLiquidAutocomplete.d.ts +78 -0
  570. package/dist/components/LiquidEditor/useLiquidAutocomplete.js +117 -0
  571. package/dist/components/List/List.css +120 -0
  572. package/dist/components/List/List.d.ts +47 -0
  573. package/dist/components/List/List.js +60 -0
  574. package/dist/components/List/List.module.js +19 -0
  575. package/dist/components/List/index.d.ts +1 -0
  576. package/dist/components/LiveRegion/LiveRegion.d.ts +41 -0
  577. package/dist/components/LiveRegion/LiveRegion.js +53 -0
  578. package/dist/components/LiveRegion/index.d.ts +2 -0
  579. package/dist/components/Logo/Logo.css +95 -0
  580. package/dist/components/Logo/Logo.d.ts +42 -0
  581. package/dist/components/Logo/Logo.js +72 -0
  582. package/dist/components/Logo/Logo.module.js +27 -0
  583. package/dist/components/Logo/index.d.ts +2 -0
  584. package/dist/components/Masonry/Masonry.css +49 -0
  585. package/dist/components/Masonry/Masonry.d.ts +25 -0
  586. package/dist/components/Masonry/Masonry.js +80 -0
  587. package/dist/components/Masonry/Masonry.module.js +23 -0
  588. package/dist/components/Masonry/index.d.ts +2 -0
  589. package/dist/components/Masonry/masonryUtils.d.ts +8 -0
  590. package/dist/components/Masonry/masonryUtils.js +36 -0
  591. package/dist/components/MediaTile/MediaTile.css +204 -0
  592. package/dist/components/MediaTile/MediaTile.d.ts +81 -0
  593. package/dist/components/MediaTile/MediaTile.js +81 -0
  594. package/dist/components/MediaTile/MediaTile.module.js +43 -0
  595. package/dist/components/MediaTile/index.d.ts +2 -0
  596. package/dist/components/Modal/Body.d.ts +10 -0
  597. package/dist/components/Modal/Body.js +19 -0
  598. package/dist/components/Modal/Close.d.ts +14 -0
  599. package/dist/components/Modal/Close.js +19 -0
  600. package/dist/components/Modal/Content.d.ts +15 -0
  601. package/dist/components/Modal/Content.js +79 -0
  602. package/dist/components/Modal/Footer.d.ts +10 -0
  603. package/dist/components/Modal/Footer.js +20 -0
  604. package/dist/components/Modal/Header.d.ts +10 -0
  605. package/dist/components/Modal/Header.js +46 -0
  606. package/dist/components/Modal/Modal.css +202 -0
  607. package/dist/components/Modal/Modal.d.ts +18 -0
  608. package/dist/components/Modal/Modal.js +18 -0
  609. package/dist/components/Modal/Modal.module.js +26 -0
  610. package/dist/components/Modal/ModalRoot.d.ts +111 -0
  611. package/dist/components/Modal/ModalRoot.js +95 -0
  612. package/dist/components/Modal/Overlay.d.ts +21 -0
  613. package/dist/components/Modal/Overlay.js +68 -0
  614. package/dist/components/Modal/context.d.ts +49 -0
  615. package/dist/components/Modal/context.js +10 -0
  616. package/dist/components/Modal/index.d.ts +2 -0
  617. package/dist/components/MoneyInput/MoneyInput.css +90 -0
  618. package/dist/components/MoneyInput/MoneyInput.d.ts +52 -0
  619. package/dist/components/MoneyInput/MoneyInput.js +298 -0
  620. package/dist/components/MoneyInput/MoneyInput.module.js +18 -0
  621. package/dist/components/MoneyInput/index.d.ts +2 -0
  622. package/dist/components/OptionsPicker/OptionsPicker.css +174 -0
  623. package/dist/components/OptionsPicker/OptionsPicker.d.ts +135 -0
  624. package/dist/components/OptionsPicker/OptionsPicker.js +557 -0
  625. package/dist/components/OptionsPicker/OptionsPicker.module.js +41 -0
  626. package/dist/components/OptionsPicker/index.d.ts +2 -0
  627. package/dist/components/OtpInput/OtpInput.css +121 -0
  628. package/dist/components/OtpInput/OtpInput.d.ts +92 -0
  629. package/dist/components/OtpInput/OtpInput.js +141 -0
  630. package/dist/components/OtpInput/OtpInput.module.js +15 -0
  631. package/dist/components/OtpInput/index.d.ts +2 -0
  632. package/dist/components/Page/Page.css +37 -0
  633. package/dist/components/Page/Page.d.ts +24 -0
  634. package/dist/components/Page/Page.js +27 -0
  635. package/dist/components/Page/Page.module.js +19 -0
  636. package/dist/components/Page/index.d.ts +2 -0
  637. package/dist/components/PageHeader/PageHeader.css +136 -0
  638. package/dist/components/PageHeader/PageHeader.d.ts +135 -0
  639. package/dist/components/PageHeader/PageHeader.js +185 -0
  640. package/dist/components/PageHeader/PageHeader.module.js +27 -0
  641. package/dist/components/PageHeader/index.d.ts +2 -0
  642. package/dist/components/Pagination/Pagination.css +133 -0
  643. package/dist/components/Pagination/Pagination.d.ts +53 -0
  644. package/dist/components/Pagination/Pagination.js +82 -0
  645. package/dist/components/Pagination/Pagination.module.js +20 -0
  646. package/dist/components/Pagination/index.d.ts +4 -0
  647. package/dist/components/Pagination/paginationRange.d.ts +27 -0
  648. package/dist/components/Pagination/paginationRange.js +40 -0
  649. package/dist/components/PasswordInput/PasswordInput.css +113 -0
  650. package/dist/components/PasswordInput/PasswordInput.d.ts +47 -0
  651. package/dist/components/PasswordInput/PasswordInput.js +116 -0
  652. package/dist/components/PasswordInput/PasswordInput.module.js +20 -0
  653. package/dist/components/PasswordInput/index.d.ts +2 -0
  654. package/dist/components/PasswordStrengthMeter/PasswordStrengthMeter.css +89 -0
  655. package/dist/components/PasswordStrengthMeter/PasswordStrengthMeter.d.ts +28 -0
  656. package/dist/components/PasswordStrengthMeter/PasswordStrengthMeter.js +68 -0
  657. package/dist/components/PasswordStrengthMeter/PasswordStrengthMeter.module.js +21 -0
  658. package/dist/components/PasswordStrengthMeter/index.d.ts +2 -0
  659. package/dist/components/PersonDisplay/PersonDisplay.css +92 -0
  660. package/dist/components/PersonDisplay/PersonDisplay.d.ts +99 -0
  661. package/dist/components/PersonDisplay/PersonDisplay.js +214 -0
  662. package/dist/components/PersonDisplay/PersonDisplay.module.js +23 -0
  663. package/dist/components/PersonDisplay/index.d.ts +2 -0
  664. package/dist/components/PhoneInput/PhoneInput.css +21 -0
  665. package/dist/components/PhoneInput/PhoneInput.d.ts +61 -0
  666. package/dist/components/PhoneInput/PhoneInput.js +124 -0
  667. package/dist/components/PhoneInput/PhoneInput.module.js +13 -0
  668. package/dist/components/PhoneInput/index.d.ts +4 -0
  669. package/dist/components/PhoneInput/phone.d.ts +50 -0
  670. package/dist/components/PhoneInput/phone.js +80 -0
  671. package/dist/components/PillMenu/PillMenu.css +210 -0
  672. package/dist/components/PillMenu/PillMenu.d.ts +116 -0
  673. package/dist/components/PillMenu/PillMenu.js +135 -0
  674. package/dist/components/PillMenu/PillMenu.module.js +23 -0
  675. package/dist/components/PillMenu/index.d.ts +2 -0
  676. package/dist/components/Popover/Anchor.d.ts +23 -0
  677. package/dist/components/Popover/Anchor.js +16 -0
  678. package/dist/components/Popover/Close.d.ts +14 -0
  679. package/dist/components/Popover/Close.js +19 -0
  680. package/dist/components/Popover/Content.d.ts +30 -0
  681. package/dist/components/Popover/Content.js +127 -0
  682. package/dist/components/Popover/Heading.d.ts +294 -0
  683. package/dist/components/Popover/Heading.js +23 -0
  684. package/dist/components/Popover/Popover.css +145 -0
  685. package/dist/components/Popover/Popover.d.ts +15 -0
  686. package/dist/components/Popover/Popover.js +15 -0
  687. package/dist/components/Popover/Popover.module.js +9 -0
  688. package/dist/components/Popover/PopoverRoot.d.ts +29 -0
  689. package/dist/components/Popover/PopoverRoot.js +42 -0
  690. package/dist/components/Popover/Trigger.d.ts +25 -0
  691. package/dist/components/Popover/Trigger.js +35 -0
  692. package/dist/components/Popover/context.d.ts +13 -0
  693. package/dist/components/Popover/context.js +10 -0
  694. package/dist/components/Popover/index.d.ts +7 -0
  695. package/dist/components/Progress/Progress.css +103 -0
  696. package/dist/components/Progress/Progress.d.ts +64 -0
  697. package/dist/components/Progress/Progress.js +51 -0
  698. package/dist/components/Progress/Progress.module.js +30 -0
  699. package/dist/components/Progress/index.d.ts +2 -0
  700. package/dist/components/QrCode/QrCode.css +79 -0
  701. package/dist/components/QrCode/QrCode.d.ts +36 -0
  702. package/dist/components/QrCode/QrCode.js +141 -0
  703. package/dist/components/QrCode/QrCode.module.js +21 -0
  704. package/dist/components/QrCode/index.d.ts +2 -0
  705. package/dist/components/QrCode/qr.d.ts +59 -0
  706. package/dist/components/QrCode/qr.js +113 -0
  707. package/dist/components/Radio/Radio.css +176 -0
  708. package/dist/components/Radio/Radio.d.ts +48 -0
  709. package/dist/components/Radio/Radio.js +53 -0
  710. package/dist/components/Radio/Radio.module.js +22 -0
  711. package/dist/components/Radio/RadioGroup.css +69 -0
  712. package/dist/components/Radio/RadioGroup.d.ts +34 -0
  713. package/dist/components/Radio/RadioGroup.js +54 -0
  714. package/dist/components/Radio/RadioGroup.module.js +15 -0
  715. package/dist/components/Radio/RadioGroupContext.d.ts +25 -0
  716. package/dist/components/Radio/RadioGroupContext.js +13 -0
  717. package/dist/components/Radio/index.d.ts +4 -0
  718. package/dist/components/Rail/Rail.css +423 -0
  719. package/dist/components/Rail/Rail.d.ts +134 -0
  720. package/dist/components/Rail/Rail.js +116 -0
  721. package/dist/components/Rail/Rail.module.js +57 -0
  722. package/dist/components/Rail/RailCollapseToggle.d.ts +14 -0
  723. package/dist/components/Rail/RailCollapseToggle.js +40 -0
  724. package/dist/components/Rail/RailFooter.d.ts +7 -0
  725. package/dist/components/Rail/RailFooter.js +18 -0
  726. package/dist/components/Rail/RailGroup.d.ts +60 -0
  727. package/dist/components/Rail/RailGroup.js +445 -0
  728. package/dist/components/Rail/RailGroupContext.d.ts +2 -0
  729. package/dist/components/Rail/RailGroupContext.js +6 -0
  730. package/dist/components/Rail/RailHeader.d.ts +7 -0
  731. package/dist/components/Rail/RailHeader.js +22 -0
  732. package/dist/components/Rail/RailItem.d.ts +50 -0
  733. package/dist/components/Rail/RailItem.js +47 -0
  734. package/dist/components/Rail/RailSection.d.ts +18 -0
  735. package/dist/components/Rail/RailSection.js +24 -0
  736. package/dist/components/Rail/RailSpacer.d.ts +7 -0
  737. package/dist/components/Rail/RailSpacer.js +19 -0
  738. package/dist/components/Rail/index.d.ts +9 -0
  739. package/dist/components/RelativeDateInput/RelativeDateInput.css +15 -0
  740. package/dist/components/RelativeDateInput/RelativeDateInput.d.ts +39 -0
  741. package/dist/components/RelativeDateInput/RelativeDateInput.js +397 -0
  742. package/dist/components/RelativeDateInput/RelativeDateInput.module.js +11 -0
  743. package/dist/components/RelativeDateInput/index.d.ts +4 -0
  744. package/dist/components/RelativeDateInput/relativeDate.d.ts +46 -0
  745. package/dist/components/RelativeDateInput/relativeDate.js +110 -0
  746. package/dist/components/RichText/RichText.css +61 -0
  747. package/dist/components/RichText/RichText.d.ts +48 -0
  748. package/dist/components/RichText/RichText.js +25 -0
  749. package/dist/components/RichText/RichText.module.js +5 -0
  750. package/dist/components/RichText/RichTextAttachment.css +51 -0
  751. package/dist/components/RichText/RichTextAttachment.d.ts +5 -0
  752. package/dist/components/RichText/RichTextAttachment.js +104 -0
  753. package/dist/components/RichText/RichTextAttachment.module.js +19 -0
  754. package/dist/components/RichText/attachmentIcon.d.ts +1 -0
  755. package/dist/components/RichText/attachmentIcon.js +21 -0
  756. package/dist/components/RichText/engine/attachment.d.ts +67 -0
  757. package/dist/components/RichText/engine/attachment.js +127 -0
  758. package/dist/components/RichText/engine/autolink.d.ts +10 -0
  759. package/dist/components/RichText/engine/autolink.js +77 -0
  760. package/dist/components/RichText/engine/blockUnit.d.ts +53 -0
  761. package/dist/components/RichText/engine/blockUnit.js +223 -0
  762. package/dist/components/RichText/engine/colorMarks.d.ts +18 -0
  763. package/dist/components/RichText/engine/colorMarks.js +59 -0
  764. package/dist/components/RichText/engine/escape.d.ts +4 -0
  765. package/dist/components/RichText/engine/escape.js +16 -0
  766. package/dist/components/RichText/engine/fromHtml.d.ts +11 -0
  767. package/dist/components/RichText/engine/fromHtml.js +346 -0
  768. package/dist/components/RichText/engine/fromMarkdown.d.ts +11 -0
  769. package/dist/components/RichText/engine/fromMarkdown.js +16 -0
  770. package/dist/components/RichText/engine/inlines.d.ts +22 -0
  771. package/dist/components/RichText/engine/inlines.js +88 -0
  772. package/dist/components/RichText/engine/listDepths.d.ts +11 -0
  773. package/dist/components/RichText/engine/listDepths.js +28 -0
  774. package/dist/components/RichText/engine/marks.d.ts +31 -0
  775. package/dist/components/RichText/engine/marks.js +60 -0
  776. package/dist/components/RichText/engine/mdToHtml.d.ts +2 -0
  777. package/dist/components/RichText/engine/mdToHtml.js +156 -0
  778. package/dist/components/RichText/engine/model.d.ts +124 -0
  779. package/dist/components/RichText/engine/model.js +39 -0
  780. package/dist/components/RichText/engine/position.d.ts +55 -0
  781. package/dist/components/RichText/engine/position.js +125 -0
  782. package/dist/components/RichText/engine/renderDoc.d.ts +41 -0
  783. package/dist/components/RichText/engine/renderDoc.js +257 -0
  784. package/dist/components/RichText/engine/renderLink.d.ts +13 -0
  785. package/dist/components/RichText/engine/renderMention.d.ts +14 -0
  786. package/dist/components/RichText/engine/safeHref.d.ts +1 -0
  787. package/dist/components/RichText/engine/safeHref.js +9 -0
  788. package/dist/components/RichText/engine/toHtml.d.ts +15 -0
  789. package/dist/components/RichText/engine/toHtml.js +117 -0
  790. package/dist/components/RichText/engine/toMarkdown.d.ts +13 -0
  791. package/dist/components/RichText/engine/toMarkdown.js +84 -0
  792. package/dist/components/RichText/engine/transforms.d.ts +120 -0
  793. package/dist/components/RichText/engine/transforms.js +516 -0
  794. package/dist/components/RichText/imageMaxHeightStyle.d.ts +3 -0
  795. package/dist/components/RichText/imageMaxHeightStyle.js +10 -0
  796. package/dist/components/RichText/index.d.ts +9 -0
  797. package/dist/components/RichTextEditor/RichTextAttachmentConfig.d.ts +34 -0
  798. package/dist/components/RichTextEditor/RichTextAttachmentConfig.js +207 -0
  799. package/dist/components/RichTextEditor/RichTextBlockControls.d.ts +62 -0
  800. package/dist/components/RichTextEditor/RichTextBlockControls.js +211 -0
  801. package/dist/components/RichTextEditor/RichTextBlockMenu.d.ts +28 -0
  802. package/dist/components/RichTextEditor/RichTextBlockMenu.js +137 -0
  803. package/dist/components/RichTextEditor/RichTextColorMenu.d.ts +23 -0
  804. package/dist/components/RichTextEditor/RichTextColorMenu.js +99 -0
  805. package/dist/components/RichTextEditor/RichTextEditor.css +280 -0
  806. package/dist/components/RichTextEditor/RichTextEditor.d.ts +127 -0
  807. package/dist/components/RichTextEditor/RichTextEditor.js +1156 -0
  808. package/dist/components/RichTextEditor/RichTextEditor.module.js +55 -0
  809. package/dist/components/RichTextEditor/RichTextImageResizer.d.ts +36 -0
  810. package/dist/components/RichTextEditor/RichTextImageResizer.js +69 -0
  811. package/dist/components/RichTextEditor/RichTextLinkEditor.d.ts +28 -0
  812. package/dist/components/RichTextEditor/RichTextLinkEditor.js +97 -0
  813. package/dist/components/RichTextEditor/RichTextMentionMenu.d.ts +23 -0
  814. package/dist/components/RichTextEditor/RichTextMentionMenu.js +56 -0
  815. package/dist/components/RichTextEditor/RichTextToolbar.d.ts +73 -0
  816. package/dist/components/RichTextEditor/RichTextToolbar.js +275 -0
  817. package/dist/components/RichTextEditor/autolinkInput.d.ts +20 -0
  818. package/dist/components/RichTextEditor/autolinkInput.js +69 -0
  819. package/dist/components/RichTextEditor/blockDrop.d.ts +4 -0
  820. package/dist/components/RichTextEditor/blockDrop.js +6 -0
  821. package/dist/components/RichTextEditor/blockReflow.d.ts +26 -0
  822. package/dist/components/RichTextEditor/blockReflow.js +32 -0
  823. package/dist/components/RichTextEditor/commands.d.ts +105 -0
  824. package/dist/components/RichTextEditor/commands.js +255 -0
  825. package/dist/components/RichTextEditor/history.d.ts +35 -0
  826. package/dist/components/RichTextEditor/history.js +62 -0
  827. package/dist/components/RichTextEditor/icons.d.ts +15 -0
  828. package/dist/components/RichTextEditor/icons.js +298 -0
  829. package/dist/components/RichTextEditor/imageSize.d.ts +30 -0
  830. package/dist/components/RichTextEditor/imageSize.js +51 -0
  831. package/dist/components/RichTextEditor/index.d.ts +5 -0
  832. package/dist/components/RichTextEditor/input.d.ts +38 -0
  833. package/dist/components/RichTextEditor/input.js +166 -0
  834. package/dist/components/RichTextEditor/inputRules.d.ts +27 -0
  835. package/dist/components/RichTextEditor/inputRules.js +63 -0
  836. package/dist/components/RichTextEditor/links.d.ts +32 -0
  837. package/dist/components/RichTextEditor/links.js +87 -0
  838. package/dist/components/RichTextEditor/mentionContext.d.ts +17 -0
  839. package/dist/components/RichTextEditor/mentionContext.js +27 -0
  840. package/dist/components/RichTextEditor/mentions.d.ts +25 -0
  841. package/dist/components/RichTextEditor/preventSelectionLoss.d.ts +10 -0
  842. package/dist/components/RichTextEditor/preventSelectionLoss.js +13 -0
  843. package/dist/components/RichTextEditor/selection.d.ts +86 -0
  844. package/dist/components/RichTextEditor/selection.js +371 -0
  845. package/dist/components/RichTextEditor/shortcuts.d.ts +30 -0
  846. package/dist/components/RichTextEditor/shortcuts.js +28 -0
  847. package/dist/components/RichTextEditor/useAnchoredFloating.d.ts +33 -0
  848. package/dist/components/RichTextEditor/useAnchoredFloating.js +42 -0
  849. package/dist/components/RichTextEditor/useAttachmentConfig.d.ts +52 -0
  850. package/dist/components/RichTextEditor/useAttachmentConfig.js +57 -0
  851. package/dist/components/RichTextEditor/useDismissOnOutsidePointerDown.d.ts +8 -0
  852. package/dist/components/RichTextEditor/useDismissOnOutsidePointerDown.js +19 -0
  853. package/dist/components/RichTextEditor/useLinkEditor.d.ts +48 -0
  854. package/dist/components/RichTextEditor/useLinkEditor.js +86 -0
  855. package/dist/components/RichTextEditor/useMention.d.ts +44 -0
  856. package/dist/components/RichTextEditor/useMention.js +147 -0
  857. package/dist/components/RichTextEditor/useOverlayRect.d.ts +25 -0
  858. package/dist/components/RichTextEditor/useOverlayRect.js +56 -0
  859. package/dist/components/RichTextEditor/useUpload.d.ts +73 -0
  860. package/dist/components/RichTextEditor/useUpload.js +135 -0
  861. package/dist/components/Screen/Screen.css +54 -0
  862. package/dist/components/Screen/Screen.d.ts +39 -0
  863. package/dist/components/Screen/Screen.js +46 -0
  864. package/dist/components/Screen/Screen.module.js +23 -0
  865. package/dist/components/Screen/index.d.ts +2 -0
  866. package/dist/components/ScrollArea/ScrollArea.css +32 -0
  867. package/dist/components/ScrollArea/ScrollArea.d.ts +25 -0
  868. package/dist/components/ScrollArea/ScrollArea.js +89 -0
  869. package/dist/components/ScrollArea/ScrollArea.module.js +10 -0
  870. package/dist/components/ScrollArea/index.d.ts +2 -0
  871. package/dist/components/Select/Chip.d.ts +18 -0
  872. package/dist/components/Select/Chip.js +38 -0
  873. package/dist/components/Select/Empty.d.ts +25 -0
  874. package/dist/components/Select/Empty.js +28 -0
  875. package/dist/components/Select/Error.d.ts +28 -0
  876. package/dist/components/Select/Error.js +34 -0
  877. package/dist/components/Select/HiddenInputs.d.ts +15 -0
  878. package/dist/components/Select/HiddenInputs.js +38 -0
  879. package/dist/components/Select/Listbox.d.ts +11 -0
  880. package/dist/components/Select/Listbox.js +371 -0
  881. package/dist/components/Select/Loading.d.ts +19 -0
  882. package/dist/components/Select/Loading.js +35 -0
  883. package/dist/components/Select/Select.css +537 -0
  884. package/dist/components/Select/Select.d.ts +274 -0
  885. package/dist/components/Select/Select.js +215 -0
  886. package/dist/components/Select/Select.module.js +78 -0
  887. package/dist/components/Select/Trigger.d.ts +24 -0
  888. package/dist/components/Select/Trigger.js +652 -0
  889. package/dist/components/Select/context.d.ts +76 -0
  890. package/dist/components/Select/context.js +14 -0
  891. package/dist/components/Select/emptyStateText.d.ts +11 -0
  892. package/dist/components/Select/emptyStateText.js +14 -0
  893. package/dist/components/Select/index.d.ts +2 -0
  894. package/dist/components/Select/useSelectState.d.ts +60 -0
  895. package/dist/components/Select/useSelectState.js +59 -0
  896. package/dist/components/Select/utils-types.d.ts +2 -0
  897. package/dist/components/Select/utils.d.ts +64 -0
  898. package/dist/components/Select/utils.js +98 -0
  899. package/dist/components/SettingRow/SettingRow.css +129 -0
  900. package/dist/components/SettingRow/SettingRow.d.ts +99 -0
  901. package/dist/components/SettingRow/SettingRow.js +104 -0
  902. package/dist/components/SettingRow/SettingRow.module.js +33 -0
  903. package/dist/components/SettingRow/index.d.ts +2 -0
  904. package/dist/components/Skeleton/Skeleton.css +49 -0
  905. package/dist/components/Skeleton/Skeleton.d.ts +56 -0
  906. package/dist/components/Skeleton/Skeleton.js +41 -0
  907. package/dist/components/Skeleton/Skeleton.module.js +13 -0
  908. package/dist/components/Skeleton/index.d.ts +4 -0
  909. package/dist/components/Skeleton/useSkeletonVisibility.d.ts +35 -0
  910. package/dist/components/Skeleton/useSkeletonVisibility.js +73 -0
  911. package/dist/components/Slider/Slider.css +282 -0
  912. package/dist/components/Slider/Slider.d.ts +120 -0
  913. package/dist/components/Slider/Slider.js +344 -0
  914. package/dist/components/Slider/Slider.module.js +34 -0
  915. package/dist/components/Slider/index.d.ts +2 -0
  916. package/dist/components/SlotGrid/SlotGrid.css +162 -0
  917. package/dist/components/SlotGrid/SlotGrid.d.ts +43 -0
  918. package/dist/components/SlotGrid/SlotGrid.js +55 -0
  919. package/dist/components/SlotGrid/SlotGrid.module.js +17 -0
  920. package/dist/components/SlotGrid/index.d.ts +2 -0
  921. package/dist/components/SocialButton/SocialButton.d.ts +23 -0
  922. package/dist/components/SocialButton/SocialButton.js +29 -0
  923. package/dist/components/SocialButton/index.d.ts +2 -0
  924. package/dist/components/Sortable/Sortable.css +127 -0
  925. package/dist/components/Sortable/Sortable.d.ts +146 -0
  926. package/dist/components/Sortable/Sortable.js +262 -0
  927. package/dist/components/Sortable/Sortable.module.js +31 -0
  928. package/dist/components/Sortable/containerAwareCollision.d.ts +56 -0
  929. package/dist/components/Sortable/containerAwareCollision.js +105 -0
  930. package/dist/components/Sortable/index.d.ts +2 -0
  931. package/dist/components/SortableGroup/SortableGroup.css +31 -0
  932. package/dist/components/SortableGroup/SortableGroup.d.ts +27 -0
  933. package/dist/components/SortableGroup/SortableGroup.js +227 -0
  934. package/dist/components/SortableGroup/SortableGroup.module.js +11 -0
  935. package/dist/components/SortableGroup/index.d.ts +4 -0
  936. package/dist/components/SortableGroup/moveSortableItem.d.ts +25 -0
  937. package/dist/components/SortableGroup/moveSortableItem.js +26 -0
  938. package/dist/components/Sparkline/Sparkline.css +33 -0
  939. package/dist/components/Sparkline/Sparkline.d.ts +30 -0
  940. package/dist/components/Sparkline/Sparkline.js +96 -0
  941. package/dist/components/Sparkline/Sparkline.module.js +17 -0
  942. package/dist/components/Sparkline/index.d.ts +2 -0
  943. package/dist/components/Sparkline/sparklineModel.d.ts +34 -0
  944. package/dist/components/Sparkline/sparklineModel.js +58 -0
  945. package/dist/components/Split/Split.css +114 -0
  946. package/dist/components/Split/Split.d.ts +96 -0
  947. package/dist/components/Split/Split.js +90 -0
  948. package/dist/components/Split/Split.module.js +43 -0
  949. package/dist/components/Split/index.d.ts +2 -0
  950. package/dist/components/Stack/Stack.css +57 -0
  951. package/dist/components/Stack/Stack.d.ts +61 -0
  952. package/dist/components/Stack/Stack.js +32 -0
  953. package/dist/components/Stack/Stack.module.js +29 -0
  954. package/dist/components/Stack/index.d.ts +2 -0
  955. package/dist/components/StagePath/StagePath.css +220 -0
  956. package/dist/components/StagePath/StagePath.d.ts +38 -0
  957. package/dist/components/StagePath/StagePath.js +86 -0
  958. package/dist/components/StagePath/StagePath.module.js +21 -0
  959. package/dist/components/StagePath/index.d.ts +2 -0
  960. package/dist/components/StatGroup/StatGroup.css +5 -0
  961. package/dist/components/StatGroup/StatGroup.d.ts +35 -0
  962. package/dist/components/StatGroup/StatGroup.js +32 -0
  963. package/dist/components/StatGroup/StatGroup.module.js +5 -0
  964. package/dist/components/StatGroup/StatGroupContext.d.ts +7 -0
  965. package/dist/components/StatGroup/StatGroupContext.js +9 -0
  966. package/dist/components/StatGroup/StatTile.css +141 -0
  967. package/dist/components/StatGroup/StatTile.d.ts +54 -0
  968. package/dist/components/StatGroup/StatTile.js +100 -0
  969. package/dist/components/StatGroup/StatTile.module.js +23 -0
  970. package/dist/components/StatGroup/index.d.ts +4 -0
  971. package/dist/components/Sticky/Sticky.css +61 -0
  972. package/dist/components/Sticky/Sticky.d.ts +51 -0
  973. package/dist/components/Sticky/Sticky.js +39 -0
  974. package/dist/components/Sticky/Sticky.module.js +20 -0
  975. package/dist/components/Sticky/index.d.ts +2 -0
  976. package/dist/components/Switch/Switch.css +211 -0
  977. package/dist/components/Switch/Switch.d.ts +86 -0
  978. package/dist/components/Switch/Switch.js +86 -0
  979. package/dist/components/Switch/Switch.module.js +31 -0
  980. package/dist/components/Switch/index.d.ts +2 -0
  981. package/dist/components/Table/Table.css +245 -0
  982. package/dist/components/Table/Table.d.ts +149 -0
  983. package/dist/components/Table/Table.js +136 -0
  984. package/dist/components/Table/Table.module.js +52 -0
  985. package/dist/components/Table/index.d.ts +2 -0
  986. package/dist/components/TableOfContents/TableOfContents.css +70 -0
  987. package/dist/components/TableOfContents/TableOfContents.d.ts +25 -0
  988. package/dist/components/TableOfContents/TableOfContents.js +133 -0
  989. package/dist/components/TableOfContents/TableOfContents.module.js +19 -0
  990. package/dist/components/TableOfContents/activeSection.d.ts +9 -0
  991. package/dist/components/TableOfContents/activeSection.js +14 -0
  992. package/dist/components/TableOfContents/index.d.ts +2 -0
  993. package/dist/components/Tabs/Tabs.css +273 -0
  994. package/dist/components/Tabs/Tabs.d.ts +152 -0
  995. package/dist/components/Tabs/Tabs.js +250 -0
  996. package/dist/components/Tabs/Tabs.module.js +43 -0
  997. package/dist/components/Tabs/index.d.ts +2 -0
  998. package/dist/components/Text/Text.css +123 -0
  999. package/dist/components/Text/Text.d.ts +94 -0
  1000. package/dist/components/Text/Text.js +55 -0
  1001. package/dist/components/Text/Text.module.js +51 -0
  1002. package/dist/components/Text/index.d.ts +2 -0
  1003. package/dist/components/Textarea/Textarea.css +107 -0
  1004. package/dist/components/Textarea/Textarea.d.ts +81 -0
  1005. package/dist/components/Textarea/Textarea.js +95 -0
  1006. package/dist/components/Textarea/Textarea.module.js +25 -0
  1007. package/dist/components/Textarea/index.d.ts +2 -0
  1008. package/dist/components/Thread/Thread.css +124 -0
  1009. package/dist/components/Thread/Thread.d.ts +50 -0
  1010. package/dist/components/Thread/Thread.js +90 -0
  1011. package/dist/components/Thread/Thread.module.js +25 -0
  1012. package/dist/components/Thread/index.d.ts +2 -0
  1013. package/dist/components/TimeField/TimeField.css +287 -0
  1014. package/dist/components/TimeField/TimeField.d.ts +94 -0
  1015. package/dist/components/TimeField/TimeField.js +543 -0
  1016. package/dist/components/TimeField/TimeField.module.js +35 -0
  1017. package/dist/components/TimeField/index.d.ts +2 -0
  1018. package/dist/components/Timeline/Timeline.css +66 -0
  1019. package/dist/components/Timeline/Timeline.d.ts +19 -0
  1020. package/dist/components/Timeline/Timeline.js +41 -0
  1021. package/dist/components/Timeline/Timeline.module.js +19 -0
  1022. package/dist/components/Timeline/index.d.ts +2 -0
  1023. package/dist/components/Title/Title.css +100 -0
  1024. package/dist/components/Title/Title.d.ts +66 -0
  1025. package/dist/components/Title/Title.js +56 -0
  1026. package/dist/components/Title/Title.module.js +41 -0
  1027. package/dist/components/Title/index.d.ts +2 -0
  1028. package/dist/components/Toast/Toast.css +299 -0
  1029. package/dist/components/Toast/Toast.d.ts +14 -0
  1030. package/dist/components/Toast/Toast.js +103 -0
  1031. package/dist/components/Toast/Toast.module.js +53 -0
  1032. package/dist/components/Toast/ToastViewport.d.ts +22 -0
  1033. package/dist/components/Toast/ToastViewport.js +102 -0
  1034. package/dist/components/Toast/api.d.ts +116 -0
  1035. package/dist/components/Toast/api.js +127 -0
  1036. package/dist/components/Toast/index.d.ts +5 -0
  1037. package/dist/components/Toast/store.d.ts +44 -0
  1038. package/dist/components/Toast/store.js +82 -0
  1039. package/dist/components/Toast/useToastTimer.d.ts +25 -0
  1040. package/dist/components/Toast/useToastTimer.js +65 -0
  1041. package/dist/components/Tooltip/Tooltip.css +89 -0
  1042. package/dist/components/Tooltip/Tooltip.d.ts +46 -0
  1043. package/dist/components/Tooltip/Tooltip.js +178 -0
  1044. package/dist/components/Tooltip/Tooltip.module.js +9 -0
  1045. package/dist/components/Tooltip/index.d.ts +2 -0
  1046. package/dist/components/TopBar/TopBar.css +233 -0
  1047. package/dist/components/TopBar/TopBar.d.ts +49 -0
  1048. package/dist/components/TopBar/TopBar.js +36 -0
  1049. package/dist/components/TopBar/TopBar.module.js +47 -0
  1050. package/dist/components/TopBar/TopBarEnd.d.ts +11 -0
  1051. package/dist/components/TopBar/TopBarEnd.js +18 -0
  1052. package/dist/components/TopBar/TopBarIconButton.d.ts +47 -0
  1053. package/dist/components/TopBar/TopBarIconButton.js +33 -0
  1054. package/dist/components/TopBar/TopBarSearch.d.ts +96 -0
  1055. package/dist/components/TopBar/TopBarSearch.js +171 -0
  1056. package/dist/components/TopBar/TopBarSearchPanel.d.ts +57 -0
  1057. package/dist/components/TopBar/TopBarSearchPanel.js +171 -0
  1058. package/dist/components/TopBar/TopBarStart.d.ts +11 -0
  1059. package/dist/components/TopBar/TopBarStart.js +18 -0
  1060. package/dist/components/TopBar/index.d.ts +6 -0
  1061. package/dist/components/Tour/Spotlight.d.ts +27 -0
  1062. package/dist/components/Tour/Spotlight.js +111 -0
  1063. package/dist/components/Tour/Tour.css +234 -0
  1064. package/dist/components/Tour/Tour.d.ts +103 -0
  1065. package/dist/components/Tour/Tour.js +400 -0
  1066. package/dist/components/Tour/Tour.module.js +28 -0
  1067. package/dist/components/Tour/index.d.ts +2 -0
  1068. package/dist/components/Tour/useTourTarget.d.ts +18 -0
  1069. package/dist/components/Tour/useTourTarget.js +101 -0
  1070. package/dist/components/TreeView/TreeView.css +263 -0
  1071. package/dist/components/TreeView/TreeView.d.ts +43 -0
  1072. package/dist/components/TreeView/TreeView.js +349 -0
  1073. package/dist/components/TreeView/TreeView.module.js +23 -0
  1074. package/dist/components/TreeView/index.d.ts +3 -0
  1075. package/dist/components/TreeView/treeModel.d.ts +84 -0
  1076. package/dist/components/TreeView/treeModel.js +139 -0
  1077. package/dist/components/VisuallyHidden/VisuallyHidden.css +11 -0
  1078. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +17 -0
  1079. package/dist/components/VisuallyHidden/VisuallyHidden.js +18 -0
  1080. package/dist/components/VisuallyHidden/VisuallyHidden.module.js +5 -0
  1081. package/dist/components/VisuallyHidden/index.d.ts +2 -0
  1082. package/dist/components/WidgetPreview/WidgetPreview.css +26 -0
  1083. package/dist/components/WidgetPreview/WidgetPreview.d.ts +20 -0
  1084. package/dist/components/WidgetPreview/WidgetPreview.js +24 -0
  1085. package/dist/components/WidgetPreview/WidgetPreview.module.js +5 -0
  1086. package/dist/components/WidgetPreview/WidgetShape.css +153 -0
  1087. package/dist/components/WidgetPreview/WidgetShape.d.ts +12 -0
  1088. package/dist/components/WidgetPreview/WidgetShape.js +122 -0
  1089. package/dist/components/WidgetPreview/WidgetShape.module.js +53 -0
  1090. package/dist/components/WidgetPreview/index.d.ts +2 -0
  1091. package/dist/components/_internal/Trend.d.ts +9 -0
  1092. package/dist/components/_internal/Trend.js +42 -0
  1093. package/dist/components/_internal/collapse.d.ts +45 -0
  1094. package/dist/components/_internal/collapse.js +33 -0
  1095. package/dist/components/_internal/currency.d.ts +46 -0
  1096. package/dist/components/_internal/currency.js +198 -0
  1097. package/dist/components/_internal/dragAnnouncements.d.ts +83 -0
  1098. package/dist/components/_internal/dragAnnouncements.js +123 -0
  1099. package/dist/components/_internal/fieldWiring.d.ts +84 -0
  1100. package/dist/components/_internal/fieldWiring.js +102 -0
  1101. package/dist/components/_internal/gridSpan.d.ts +29 -0
  1102. package/dist/components/_internal/gridSpan.js +35 -0
  1103. package/dist/components/_internal/isoDay.d.ts +6 -0
  1104. package/dist/components/_internal/isoDay.js +29 -0
  1105. package/dist/components/_internal/letterKey.d.ts +22 -0
  1106. package/dist/components/_internal/letterKey.js +24 -0
  1107. package/dist/components/_internal/overlay/focusRestore.d.ts +11 -0
  1108. package/dist/components/_internal/overlay/focusRestore.js +22 -0
  1109. package/dist/components/_internal/overlay/index.d.ts +6 -0
  1110. package/dist/components/_internal/overlay/tourHold.d.ts +14 -0
  1111. package/dist/components/_internal/overlay/tourHold.js +20 -0
  1112. package/dist/components/_internal/overlay/useFocusTrap.d.ts +18 -0
  1113. package/dist/components/_internal/overlay/useFocusTrap.js +96 -0
  1114. package/dist/components/_internal/overlay/useInOverlay.d.ts +37 -0
  1115. package/dist/components/_internal/overlay/useInOverlay.js +51 -0
  1116. package/dist/components/_internal/overlay/useOverlayStack.d.ts +75 -0
  1117. package/dist/components/_internal/overlay/useOverlayStack.js +184 -0
  1118. package/dist/components/_internal/overlay/useScrollLock.d.ts +13 -0
  1119. package/dist/components/_internal/overlay/useScrollLock.js +83 -0
  1120. package/dist/components/_internal/refs.d.ts +25 -0
  1121. package/dist/components/_internal/refs.js +45 -0
  1122. package/dist/components/_internal/statusColor.d.ts +14 -0
  1123. package/dist/components/_internal/statusColor.js +15 -0
  1124. package/dist/components/_internal/timeUtils.d.ts +16 -0
  1125. package/dist/components/_internal/useAsyncOptions.d.ts +58 -0
  1126. package/dist/components/_internal/useAsyncOptions.js +86 -0
  1127. package/dist/components/_internal/useClippedTooltip.d.ts +33 -0
  1128. package/dist/components/_internal/useClippedTooltip.js +42 -0
  1129. package/dist/components/_internal/useControllableState.d.ts +21 -0
  1130. package/dist/components/_internal/useControllableState.js +34 -0
  1131. package/dist/components/_internal/useSize.d.ts +5 -0
  1132. package/dist/components/_internal/useSize.js +31 -0
  1133. package/dist/hooks/useBelowBreakpoint.d.ts +26 -0
  1134. package/dist/hooks/useBelowBreakpoint.js +45 -0
  1135. package/dist/i18n/I18nProvider.d.ts +35 -0
  1136. package/dist/i18n/I18nProvider.js +41 -0
  1137. package/dist/i18n/LocaleProvider.d.ts +12 -0
  1138. package/dist/i18n/LocaleProvider.js +16 -0
  1139. package/dist/i18n/en.d.ts +7 -0
  1140. package/dist/i18n/en.js +623 -0
  1141. package/dist/i18n/format.d.ts +33 -0
  1142. package/dist/i18n/format.js +53 -0
  1143. package/dist/i18n/index.d.ts +10 -0
  1144. package/dist/i18n/messages.d.ts +1458 -0
  1145. package/dist/i18n/ru.d.ts +7 -0
  1146. package/dist/i18n/ru.js +694 -0
  1147. package/dist/i18n/useLocale.d.ts +11 -0
  1148. package/dist/i18n/useLocale.js +21 -0
  1149. package/dist/i18n/useTranslation.d.ts +25 -0
  1150. package/dist/i18n/useTranslation.js +52 -0
  1151. package/dist/index.d.ts +270 -0
  1152. package/dist/index.js +168 -0
  1153. package/dist/palette/index.d.ts +2 -0
  1154. package/dist/palette/palette.d.ts +40 -0
  1155. package/dist/palette/palette.js +61 -0
  1156. package/dist/styles/global.css +1033 -0
  1157. package/dist/styles/tokens.css +935 -0
  1158. package/dist/styles.css +22283 -0
  1159. package/docs/components/Calendar.md +1 -1
  1160. package/docs/components/Chart.md +1 -0
  1161. package/docs/components/FunnelChart.md +96 -0
  1162. package/docs/components/Sticky.md +1 -1
  1163. package/docs/components/index.json +5 -0
  1164. package/docs/i18n.md +10 -5
  1165. package/docs/setup.md +30 -4
  1166. package/docs/theming.md +2 -2
  1167. package/docs/tokens.md +5 -2
  1168. package/docs/typescript.md +2 -1
  1169. package/package.json +25 -27
  1170. package/src/_meta/manifest.ts +0 -293
  1171. package/src/app/AppProvider.tsx +0 -78
  1172. package/src/app/index.ts +0 -3
  1173. package/src/app/themeTokens.ts +0 -95
  1174. package/src/calendar/dateMath.ts +0 -114
  1175. package/src/calendar/formatters.ts +0 -75
  1176. package/src/calendar/index.ts +0 -39
  1177. package/src/calendar/types.ts +0 -36
  1178. package/src/calendar/useAgenda.ts +0 -70
  1179. package/src/calendar/useDay.ts +0 -51
  1180. package/src/calendar/useMonth.ts +0 -82
  1181. package/src/calendar/useWeek.ts +0 -62
  1182. package/src/calendar/weekInfo.ts +0 -83
  1183. package/src/components/Accordion/Accordion.module.scss +0 -304
  1184. package/src/components/Accordion/Accordion.tokens.scss +0 -64
  1185. package/src/components/Accordion/Accordion.tsx +0 -272
  1186. package/src/components/Accordion/AccordionContent.tsx +0 -36
  1187. package/src/components/Accordion/AccordionItem.tsx +0 -66
  1188. package/src/components/Accordion/AccordionTrigger.tsx +0 -121
  1189. package/src/components/Accordion/context.ts +0 -47
  1190. package/src/components/Accordion/index.ts +0 -14
  1191. package/src/components/Alert/Alert.module.scss +0 -92
  1192. package/src/components/Alert/Alert.tokens.scss +0 -60
  1193. package/src/components/Alert/Alert.tsx +0 -136
  1194. package/src/components/Alert/index.ts +0 -2
  1195. package/src/components/AppLayout/AppLayout.module.scss +0 -130
  1196. package/src/components/AppLayout/AppLayout.tokens.scss +0 -27
  1197. package/src/components/AppLayout/AppLayout.tsx +0 -211
  1198. package/src/components/AppLayout/index.ts +0 -2
  1199. package/src/components/Avatar/AgentAvatar.module.scss +0 -117
  1200. package/src/components/Avatar/AgentAvatar.tsx +0 -122
  1201. package/src/components/Avatar/Avatar.module.scss +0 -181
  1202. package/src/components/Avatar/Avatar.tokens.scss +0 -107
  1203. package/src/components/Avatar/Avatar.tsx +0 -210
  1204. package/src/components/Avatar/AvatarGroup.module.scss +0 -128
  1205. package/src/components/Avatar/AvatarGroup.tsx +0 -119
  1206. package/src/components/Avatar/AvatarGroupContext.tsx +0 -20
  1207. package/src/components/Avatar/index.ts +0 -6
  1208. package/src/components/Badge/Badge.module.scss +0 -124
  1209. package/src/components/Badge/Badge.tokens.scss +0 -74
  1210. package/src/components/Badge/Badge.tsx +0 -164
  1211. package/src/components/Badge/index.ts +0 -2
  1212. package/src/components/Banner/Banner.module.scss +0 -73
  1213. package/src/components/Banner/Banner.tokens.scss +0 -51
  1214. package/src/components/Banner/Banner.tsx +0 -138
  1215. package/src/components/Banner/index.ts +0 -2
  1216. package/src/components/BrandIcon/BrandIcon.module.scss +0 -5
  1217. package/src/components/BrandIcon/BrandIcon.tsx +0 -99
  1218. package/src/components/BrandIcon/index.ts +0 -2
  1219. package/src/components/Breadcrumb/Breadcrumb.module.scss +0 -32
  1220. package/src/components/Breadcrumb/Breadcrumb.tokens.scss +0 -9
  1221. package/src/components/Breadcrumb/Breadcrumb.tsx +0 -146
  1222. package/src/components/Breadcrumb/index.ts +0 -2
  1223. package/src/components/Button/Button.module.scss +0 -167
  1224. package/src/components/Button/Button.tokens.scss +0 -90
  1225. package/src/components/Button/Button.tsx +0 -205
  1226. package/src/components/Button/index.ts +0 -2
  1227. package/src/components/ButtonGroup/ButtonGroup.module.scss +0 -134
  1228. package/src/components/ButtonGroup/ButtonGroup.tokens.scss +0 -42
  1229. package/src/components/ButtonGroup/ButtonGroup.tsx +0 -278
  1230. package/src/components/ButtonGroup/ButtonGroupItem.tsx +0 -74
  1231. package/src/components/ButtonGroup/context.ts +0 -45
  1232. package/src/components/ButtonGroup/index.ts +0 -2
  1233. package/src/components/Calendar/AgendaView.module.scss +0 -231
  1234. package/src/components/Calendar/AgendaView.tsx +0 -214
  1235. package/src/components/Calendar/AllDayBand.module.scss +0 -18
  1236. package/src/components/Calendar/AllDayBand.tsx +0 -75
  1237. package/src/components/Calendar/Calendar.module.scss +0 -23
  1238. package/src/components/Calendar/Calendar.tokens.scss +0 -262
  1239. package/src/components/Calendar/Calendar.tsx +0 -370
  1240. package/src/components/Calendar/DayCell.module.scss +0 -30
  1241. package/src/components/Calendar/DayCell.tsx +0 -50
  1242. package/src/components/Calendar/DayView.module.scss +0 -10
  1243. package/src/components/Calendar/DayView.tsx +0 -163
  1244. package/src/components/Calendar/EventChip.module.scss +0 -171
  1245. package/src/components/Calendar/EventChip.tsx +0 -115
  1246. package/src/components/Calendar/HourGrid.module.scss +0 -123
  1247. package/src/components/Calendar/HourGrid.tsx +0 -381
  1248. package/src/components/Calendar/MonthView.module.scss +0 -99
  1249. package/src/components/Calendar/MonthView.tsx +0 -296
  1250. package/src/components/Calendar/TimedEvent.module.scss +0 -205
  1251. package/src/components/Calendar/TimedEvent.tsx +0 -247
  1252. package/src/components/Calendar/ViewSwitcher.module.scss +0 -3
  1253. package/src/components/Calendar/ViewSwitcher.tsx +0 -47
  1254. package/src/components/Calendar/WeekView.module.scss +0 -10
  1255. package/src/components/Calendar/WeekView.tsx +0 -137
  1256. package/src/components/Calendar/eventColor.ts +0 -60
  1257. package/src/components/Calendar/index.ts +0 -18
  1258. package/src/components/Calendar/types.ts +0 -451
  1259. package/src/components/Calendar/useEventDrag.ts +0 -783
  1260. package/src/components/Calendar/utils.ts +0 -622
  1261. package/src/components/Card/Card.module.scss +0 -264
  1262. package/src/components/Card/Card.tokens.scss +0 -55
  1263. package/src/components/Card/Card.tsx +0 -170
  1264. package/src/components/Card/CardBody.tsx +0 -45
  1265. package/src/components/Card/CardHeader.tsx +0 -113
  1266. package/src/components/Card/CardList.tsx +0 -24
  1267. package/src/components/Card/CardListRow.tsx +0 -24
  1268. package/src/components/Card/index.ts +0 -7
  1269. package/src/components/CatalogPicker/CatalogPicker.module.scss +0 -193
  1270. package/src/components/CatalogPicker/CatalogPicker.tokens.scss +0 -26
  1271. package/src/components/CatalogPicker/CatalogPicker.tsx +0 -339
  1272. package/src/components/CatalogPicker/index.ts +0 -2
  1273. package/src/components/Chart/Chart.module.scss +0 -287
  1274. package/src/components/Chart/Chart.tokens.scss +0 -63
  1275. package/src/components/Chart/Chart.tsx +0 -607
  1276. package/src/components/Chart/ChartLegend.tsx +0 -99
  1277. package/src/components/Chart/ChartTable.tsx +0 -62
  1278. package/src/components/Chart/ChartTooltip.tsx +0 -91
  1279. package/src/components/Chart/chartModel.ts +0 -689
  1280. package/src/components/Chart/index.ts +0 -2
  1281. package/src/components/ChatBubble/ChatBubble.module.scss +0 -93
  1282. package/src/components/ChatBubble/ChatBubble.tokens.scss +0 -17
  1283. package/src/components/ChatBubble/ChatBubble.tsx +0 -61
  1284. package/src/components/ChatBubble/ChatBubbleList.tsx +0 -27
  1285. package/src/components/ChatBubble/index.ts +0 -3
  1286. package/src/components/ChatLauncher/ChatLauncher.module.scss +0 -68
  1287. package/src/components/ChatLauncher/ChatLauncher.tokens.scss +0 -27
  1288. package/src/components/ChatLauncher/ChatLauncher.tsx +0 -202
  1289. package/src/components/ChatLauncher/index.ts +0 -2
  1290. package/src/components/ChatLauncher/isAtBottom.ts +0 -12
  1291. package/src/components/Checkbox/Checkbox.module.scss +0 -147
  1292. package/src/components/Checkbox/Checkbox.tokens.scss +0 -44
  1293. package/src/components/Checkbox/Checkbox.tsx +0 -188
  1294. package/src/components/Checkbox/index.ts +0 -2
  1295. package/src/components/CircularProgress/CircularProgress.module.scss +0 -133
  1296. package/src/components/CircularProgress/CircularProgress.tokens.scss +0 -40
  1297. package/src/components/CircularProgress/CircularProgress.tsx +0 -139
  1298. package/src/components/CircularProgress/index.ts +0 -7
  1299. package/src/components/Cluster/Cluster.module.scss +0 -145
  1300. package/src/components/Cluster/Cluster.tokens.scss +0 -11
  1301. package/src/components/Cluster/Cluster.tsx +0 -215
  1302. package/src/components/Cluster/index.ts +0 -2
  1303. package/src/components/Code/Code.module.scss +0 -28
  1304. package/src/components/Code/Code.tokens.scss +0 -15
  1305. package/src/components/Code/Code.tsx +0 -44
  1306. package/src/components/Code/index.ts +0 -2
  1307. package/src/components/CodeBlock/CodeBlock.module.scss +0 -146
  1308. package/src/components/CodeBlock/CodeBlock.tokens.scss +0 -27
  1309. package/src/components/CodeBlock/CodeBlock.tsx +0 -274
  1310. package/src/components/CodeBlock/highlight.ts +0 -179
  1311. package/src/components/CodeBlock/index.ts +0 -8
  1312. package/src/components/CodeBlock/sampleSync.ts +0 -42
  1313. package/src/components/ColorPicker/ColorPicker.module.scss +0 -286
  1314. package/src/components/ColorPicker/ColorPicker.tokens.scss +0 -60
  1315. package/src/components/ColorPicker/ColorPicker.tsx +0 -367
  1316. package/src/components/ColorPicker/ColorPickerPanel.tsx +0 -265
  1317. package/src/components/ColorPicker/SVSquare.tsx +0 -189
  1318. package/src/components/ColorPicker/colorMath.ts +0 -141
  1319. package/src/components/ColorPicker/index.ts +0 -6
  1320. package/src/components/ConfirmationPopover/ConfirmationPopover.module.scss +0 -39
  1321. package/src/components/ConfirmationPopover/ConfirmationPopover.tokens.scss +0 -13
  1322. package/src/components/ConfirmationPopover/ConfirmationPopover.tsx +0 -395
  1323. package/src/components/ConfirmationPopover/index.ts +0 -2
  1324. package/src/components/Constrain/Constrain.module.scss +0 -99
  1325. package/src/components/Constrain/Constrain.tsx +0 -79
  1326. package/src/components/Constrain/index.ts +0 -2
  1327. package/src/components/CurrencySelect/CurrencySelect.module.scss +0 -7
  1328. package/src/components/CurrencySelect/CurrencySelect.tsx +0 -167
  1329. package/src/components/CurrencySelect/index.ts +0 -3
  1330. package/src/components/CursorPagination/CursorPagination.module.scss +0 -69
  1331. package/src/components/CursorPagination/CursorPagination.tokens.scss +0 -32
  1332. package/src/components/CursorPagination/CursorPagination.tsx +0 -121
  1333. package/src/components/CursorPagination/index.ts +0 -2
  1334. package/src/components/DashboardCanvas/DashboardCanvas.module.scss +0 -360
  1335. package/src/components/DashboardCanvas/DashboardCanvas.tokens.scss +0 -48
  1336. package/src/components/DashboardCanvas/DashboardCanvas.tsx +0 -1270
  1337. package/src/components/DashboardCanvas/DashboardCanvasItem.tsx +0 -140
  1338. package/src/components/DashboardCanvas/DashboardCanvasSection.tsx +0 -174
  1339. package/src/components/DashboardCanvas/engine.ts +0 -363
  1340. package/src/components/DashboardCanvas/index.ts +0 -9
  1341. package/src/components/DashboardWidget/DashboardWidget.module.scss +0 -100
  1342. package/src/components/DashboardWidget/DashboardWidget.tokens.scss +0 -16
  1343. package/src/components/DashboardWidget/DashboardWidget.tsx +0 -188
  1344. package/src/components/DashboardWidget/index.ts +0 -7
  1345. package/src/components/DataTable/BodyRow.tsx +0 -197
  1346. package/src/components/DataTable/ColumnVisibilityTrigger.module.scss +0 -7
  1347. package/src/components/DataTable/ColumnVisibilityTrigger.tsx +0 -105
  1348. package/src/components/DataTable/DataTable.module.scss +0 -511
  1349. package/src/components/DataTable/DataTable.tokens.scss +0 -80
  1350. package/src/components/DataTable/DataTable.tsx +0 -749
  1351. package/src/components/DataTable/HeaderCell.module.scss +0 -215
  1352. package/src/components/DataTable/HeaderCell.tsx +0 -440
  1353. package/src/components/DataTable/columnShift.ts +0 -117
  1354. package/src/components/DataTable/index.ts +0 -23
  1355. package/src/components/DataTable/pinStyle.ts +0 -50
  1356. package/src/components/DataTable/reorderColumns.ts +0 -66
  1357. package/src/components/DataTable/types.ts +0 -289
  1358. package/src/components/DataTable/useColumnDragShift.ts +0 -217
  1359. package/src/components/DataTable/useDataTable.ts +0 -371
  1360. package/src/components/DataTable/useResizeHandle.ts +0 -97
  1361. package/src/components/DatePicker/DatePicker.module.scss +0 -180
  1362. package/src/components/DatePicker/DatePicker.tokens.scss +0 -152
  1363. package/src/components/DatePicker/DatePicker.tsx +0 -664
  1364. package/src/components/DatePicker/DatePickerGrid.module.scss +0 -172
  1365. package/src/components/DatePicker/DatePickerGrid.tsx +0 -341
  1366. package/src/components/DatePicker/InlineDatePicker.module.scss +0 -32
  1367. package/src/components/DatePicker/InlineDatePicker.tsx +0 -201
  1368. package/src/components/DatePicker/index.ts +0 -4
  1369. package/src/components/DatePicker/utils.ts +0 -364
  1370. package/src/components/DateRangePicker/DateRangePicker.module.scss +0 -237
  1371. package/src/components/DateRangePicker/DateRangePicker.tokens.scss +0 -78
  1372. package/src/components/DateRangePicker/DateRangePicker.tsx +0 -720
  1373. package/src/components/DateRangePicker/InlineDateRangePicker.module.scss +0 -94
  1374. package/src/components/DateRangePicker/InlineDateRangePicker.tsx +0 -376
  1375. package/src/components/DateRangePicker/index.ts +0 -5
  1376. package/src/components/DateRangePicker/utils.ts +0 -151
  1377. package/src/components/DateStrip/DateStrip.module.scss +0 -78
  1378. package/src/components/DateStrip/DateStrip.tokens.scss +0 -23
  1379. package/src/components/DateStrip/DateStrip.tsx +0 -205
  1380. package/src/components/DateStrip/index.ts +0 -2
  1381. package/src/components/DefinitionList/DefinitionList.module.scss +0 -102
  1382. package/src/components/DefinitionList/DefinitionList.tokens.scss +0 -29
  1383. package/src/components/DefinitionList/DefinitionList.tsx +0 -198
  1384. package/src/components/DefinitionList/index.ts +0 -9
  1385. package/src/components/Divider/Divider.module.scss +0 -144
  1386. package/src/components/Divider/Divider.tokens.scss +0 -21
  1387. package/src/components/Divider/Divider.tsx +0 -103
  1388. package/src/components/Divider/index.ts +0 -2
  1389. package/src/components/Dot/Dot.module.scss +0 -40
  1390. package/src/components/Dot/Dot.tokens.scss +0 -4
  1391. package/src/components/Dot/Dot.tsx +0 -45
  1392. package/src/components/Dot/index.ts +0 -2
  1393. package/src/components/Drawer/Body.tsx +0 -23
  1394. package/src/components/Drawer/Close.tsx +0 -35
  1395. package/src/components/Drawer/Content.tsx +0 -93
  1396. package/src/components/Drawer/Drawer.module.scss +0 -232
  1397. package/src/components/Drawer/Drawer.tokens.scss +0 -38
  1398. package/src/components/Drawer/Drawer.tsx +0 -23
  1399. package/src/components/Drawer/DrawerRoot.tsx +0 -190
  1400. package/src/components/Drawer/Footer.tsx +0 -24
  1401. package/src/components/Drawer/Header.tsx +0 -64
  1402. package/src/components/Drawer/Overlay.tsx +0 -82
  1403. package/src/components/Drawer/context.ts +0 -44
  1404. package/src/components/Drawer/index.ts +0 -12
  1405. package/src/components/Drawer/useDragToClose.ts +0 -149
  1406. package/src/components/DropdownMenu/CheckboxItem.tsx +0 -144
  1407. package/src/components/DropdownMenu/Content.tsx +0 -419
  1408. package/src/components/DropdownMenu/DropdownMenu.module.scss +0 -280
  1409. package/src/components/DropdownMenu/DropdownMenu.tokens.scss +0 -88
  1410. package/src/components/DropdownMenu/DropdownMenu.tsx +0 -43
  1411. package/src/components/DropdownMenu/Group.tsx +0 -76
  1412. package/src/components/DropdownMenu/Item.tsx +0 -148
  1413. package/src/components/DropdownMenu/ItemIndicator.tsx +0 -30
  1414. package/src/components/DropdownMenu/Radio.tsx +0 -178
  1415. package/src/components/DropdownMenu/Root.tsx +0 -100
  1416. package/src/components/DropdownMenu/Sub.tsx +0 -332
  1417. package/src/components/DropdownMenu/Trigger.tsx +0 -76
  1418. package/src/components/DropdownMenu/context.ts +0 -65
  1419. package/src/components/DropdownMenu/index.ts +0 -20
  1420. package/src/components/EmojiPicker/EmojiPicker.module.scss +0 -84
  1421. package/src/components/EmojiPicker/EmojiPicker.tokens.scss +0 -24
  1422. package/src/components/EmojiPicker/EmojiPicker.tsx +0 -341
  1423. package/src/components/EmojiPicker/emojiData.ts +0 -245
  1424. package/src/components/EmojiPicker/index.ts +0 -3
  1425. package/src/components/EmptyState/EmptyState.module.scss +0 -102
  1426. package/src/components/EmptyState/EmptyState.tokens.scss +0 -28
  1427. package/src/components/EmptyState/EmptyState.tsx +0 -112
  1428. package/src/components/EmptyState/index.ts +0 -7
  1429. package/src/components/EntityChip/EntityChip.module.scss +0 -275
  1430. package/src/components/EntityChip/EntityChip.tokens.scss +0 -66
  1431. package/src/components/EntityChip/EntityChip.tsx +0 -649
  1432. package/src/components/EntityChip/index.ts +0 -10
  1433. package/src/components/ErrorState/ErrorState.module.scss +0 -105
  1434. package/src/components/ErrorState/ErrorState.tokens.scss +0 -32
  1435. package/src/components/ErrorState/ErrorState.tsx +0 -125
  1436. package/src/components/ErrorState/index.ts +0 -8
  1437. package/src/components/Field/Field.module.scss +0 -46
  1438. package/src/components/Field/Field.tsx +0 -185
  1439. package/src/components/Field/index.ts +0 -2
  1440. package/src/components/FileUpload/FileUpload.module.scss +0 -187
  1441. package/src/components/FileUpload/FileUpload.tokens.scss +0 -81
  1442. package/src/components/FileUpload/FileUpload.tsx +0 -569
  1443. package/src/components/FileUpload/formatBytes.ts +0 -34
  1444. package/src/components/FileUpload/iconForFile.ts +0 -40
  1445. package/src/components/FileUpload/index.ts +0 -2
  1446. package/src/components/FilterChip/FilterChip.module.scss +0 -61
  1447. package/src/components/FilterChip/FilterChip.tokens.scss +0 -25
  1448. package/src/components/FilterChip/FilterChip.tsx +0 -208
  1449. package/src/components/FilterChip/index.ts +0 -5
  1450. package/src/components/FlowCanvas/FlowCanvas.module.scss +0 -329
  1451. package/src/components/FlowCanvas/FlowCanvas.tokens.scss +0 -45
  1452. package/src/components/FlowCanvas/FlowCanvas.tsx +0 -1867
  1453. package/src/components/FlowCanvas/FlowControls.tsx +0 -46
  1454. package/src/components/FlowCanvas/FlowEdge.tsx +0 -58
  1455. package/src/components/FlowCanvas/FlowNode.tsx +0 -76
  1456. package/src/components/FlowCanvas/edgePath.ts +0 -85
  1457. package/src/components/FlowCanvas/index.ts +0 -4
  1458. package/src/components/FlowCanvas/layout.ts +0 -148
  1459. package/src/components/FlowCanvas/spatialNav.ts +0 -76
  1460. package/src/components/FlowCanvas/types.ts +0 -59
  1461. package/src/components/FlowCanvas/useViewport.ts +0 -122
  1462. package/src/components/FormRow/FormRow.module.scss +0 -2
  1463. package/src/components/FormRow/FormRow.tsx +0 -37
  1464. package/src/components/FormRow/index.ts +0 -2
  1465. package/src/components/FormSection/FormSection.module.scss +0 -24
  1466. package/src/components/FormSection/FormSection.tsx +0 -46
  1467. package/src/components/FormSection/index.ts +0 -2
  1468. package/src/components/Grid/Grid.module.scss +0 -162
  1469. package/src/components/Grid/Grid.tokens.scss +0 -13
  1470. package/src/components/Grid/Grid.tsx +0 -226
  1471. package/src/components/Grid/GridItem.tsx +0 -77
  1472. package/src/components/Grid/index.ts +0 -11
  1473. package/src/components/Highlight/Highlight.module.scss +0 -43
  1474. package/src/components/Highlight/Highlight.tokens.scss +0 -35
  1475. package/src/components/Highlight/Highlight.tsx +0 -164
  1476. package/src/components/Highlight/HighlightOverlay.tsx +0 -100
  1477. package/src/components/Highlight/index.ts +0 -2
  1478. package/src/components/HighlightedText/HighlightedText.module.scss +0 -11
  1479. package/src/components/HighlightedText/HighlightedText.tokens.scss +0 -9
  1480. package/src/components/HighlightedText/HighlightedText.tsx +0 -50
  1481. package/src/components/HighlightedText/highlightRanges.ts +0 -44
  1482. package/src/components/HighlightedText/index.ts +0 -2
  1483. package/src/components/IconPicker/IconPicker.module.scss +0 -175
  1484. package/src/components/IconPicker/IconPicker.tokens.scss +0 -40
  1485. package/src/components/IconPicker/IconPicker.tsx +0 -629
  1486. package/src/components/IconPicker/index.ts +0 -9
  1487. package/src/components/IconTile/IconTile.module.scss +0 -57
  1488. package/src/components/IconTile/IconTile.tokens.scss +0 -16
  1489. package/src/components/IconTile/IconTile.tsx +0 -91
  1490. package/src/components/IconTile/index.ts +0 -2
  1491. package/src/components/Image/Image.module.scss +0 -266
  1492. package/src/components/Image/Image.tokens.scss +0 -55
  1493. package/src/components/Image/Image.tsx +0 -342
  1494. package/src/components/Image/index.ts +0 -2
  1495. package/src/components/ImageCrop/ImageCrop.module.scss +0 -274
  1496. package/src/components/ImageCrop/ImageCrop.tokens.scss +0 -33
  1497. package/src/components/ImageCrop/ImageCrop.tsx +0 -542
  1498. package/src/components/ImageCrop/cropGeometry.ts +0 -120
  1499. package/src/components/ImageCrop/extractCropBlob.ts +0 -140
  1500. package/src/components/ImageCrop/index.ts +0 -11
  1501. package/src/components/ImageCrop/useCropPreview.ts +0 -161
  1502. package/src/components/Indent/Indent.module.scss +0 -33
  1503. package/src/components/Indent/Indent.tokens.scss +0 -10
  1504. package/src/components/Indent/Indent.tsx +0 -46
  1505. package/src/components/Indent/index.ts +0 -2
  1506. package/src/components/Input/Input.module.scss +0 -99
  1507. package/src/components/Input/Input.tokens.scss +0 -54
  1508. package/src/components/Input/Input.tsx +0 -105
  1509. package/src/components/Input/Suggestions.tsx +0 -260
  1510. package/src/components/Input/index.ts +0 -2
  1511. package/src/components/Kanban/Kanban.module.scss +0 -39
  1512. package/src/components/Kanban/Kanban.tokens.scss +0 -15
  1513. package/src/components/Kanban/Kanban.tsx +0 -951
  1514. package/src/components/Kanban/index.ts +0 -7
  1515. package/src/components/Kbd/Kbd.module.scss +0 -47
  1516. package/src/components/Kbd/Kbd.tokens.scss +0 -26
  1517. package/src/components/Kbd/Kbd.tsx +0 -73
  1518. package/src/components/Kbd/index.ts +0 -2
  1519. package/src/components/Lightbox/Lightbox.module.scss +0 -283
  1520. package/src/components/Lightbox/Lightbox.tokens.scss +0 -36
  1521. package/src/components/Lightbox/Lightbox.tsx +0 -506
  1522. package/src/components/Lightbox/index.ts +0 -2
  1523. package/src/components/Link/Link.module.scss +0 -78
  1524. package/src/components/Link/Link.tokens.scss +0 -29
  1525. package/src/components/Link/Link.tsx +0 -114
  1526. package/src/components/Link/index.ts +0 -2
  1527. package/src/components/LinkCard/LinkCard.module.scss +0 -92
  1528. package/src/components/LinkCard/LinkCard.tokens.scss +0 -9
  1529. package/src/components/LinkCard/LinkCard.tsx +0 -72
  1530. package/src/components/LinkCard/index.ts +0 -2
  1531. package/src/components/LiquidEditor/AutocompleteMenu.tsx +0 -133
  1532. package/src/components/LiquidEditor/HighlightLayer.tsx +0 -53
  1533. package/src/components/LiquidEditor/InsertVariableMenu.tsx +0 -81
  1534. package/src/components/LiquidEditor/LiquidEditor.module.scss +0 -339
  1535. package/src/components/LiquidEditor/LiquidEditor.tokens.scss +0 -81
  1536. package/src/components/LiquidEditor/LiquidEditor.tsx +0 -412
  1537. package/src/components/LiquidEditor/PreviewPane.tsx +0 -29
  1538. package/src/components/LiquidEditor/caretCoordinates.ts +0 -97
  1539. package/src/components/LiquidEditor/index.ts +0 -7
  1540. package/src/components/LiquidEditor/liquidFilters.ts +0 -23
  1541. package/src/components/LiquidEditor/liquidTokenizer.ts +0 -235
  1542. package/src/components/LiquidEditor/types.ts +0 -101
  1543. package/src/components/LiquidEditor/useLiquidAutocomplete.ts +0 -178
  1544. package/src/components/List/List.module.scss +0 -105
  1545. package/src/components/List/List.tokens.scss +0 -42
  1546. package/src/components/List/List.tsx +0 -124
  1547. package/src/components/List/index.ts +0 -9
  1548. package/src/components/LiveRegion/LiveRegion.module.scss +0 -3
  1549. package/src/components/LiveRegion/LiveRegion.tsx +0 -116
  1550. package/src/components/LiveRegion/index.ts +0 -2
  1551. package/src/components/Logo/Logo.module.scss +0 -139
  1552. package/src/components/Logo/Logo.tokens.scss +0 -14
  1553. package/src/components/Logo/Logo.tsx +0 -126
  1554. package/src/components/Logo/index.ts +0 -2
  1555. package/src/components/Masonry/Masonry.module.scss +0 -42
  1556. package/src/components/Masonry/Masonry.tokens.scss +0 -8
  1557. package/src/components/Masonry/Masonry.tsx +0 -136
  1558. package/src/components/Masonry/index.ts +0 -2
  1559. package/src/components/Masonry/masonryUtils.ts +0 -42
  1560. package/src/components/MediaTile/MediaTile.module.scss +0 -183
  1561. package/src/components/MediaTile/MediaTile.tokens.scss +0 -60
  1562. package/src/components/MediaTile/MediaTile.tsx +0 -208
  1563. package/src/components/MediaTile/index.ts +0 -8
  1564. package/src/components/Modal/Body.tsx +0 -27
  1565. package/src/components/Modal/Close.tsx +0 -45
  1566. package/src/components/Modal/Content.tsx +0 -98
  1567. package/src/components/Modal/Footer.tsx +0 -28
  1568. package/src/components/Modal/Header.tsx +0 -51
  1569. package/src/components/Modal/Modal.module.scss +0 -262
  1570. package/src/components/Modal/Modal.tokens.scss +0 -50
  1571. package/src/components/Modal/Modal.tsx +0 -23
  1572. package/src/components/Modal/ModalRoot.tsx +0 -299
  1573. package/src/components/Modal/Overlay.tsx +0 -101
  1574. package/src/components/Modal/context.ts +0 -60
  1575. package/src/components/Modal/index.ts +0 -11
  1576. package/src/components/MoneyInput/MoneyInput.module.scss +0 -57
  1577. package/src/components/MoneyInput/MoneyInput.tsx +0 -433
  1578. package/src/components/MoneyInput/index.ts +0 -2
  1579. package/src/components/OptionsPicker/OptionsPicker.module.scss +0 -216
  1580. package/src/components/OptionsPicker/OptionsPicker.tokens.scss +0 -68
  1581. package/src/components/OptionsPicker/OptionsPicker.tsx +0 -936
  1582. package/src/components/OptionsPicker/index.ts +0 -9
  1583. package/src/components/OtpInput/OtpInput.module.scss +0 -69
  1584. package/src/components/OtpInput/OtpInput.tokens.scss +0 -45
  1585. package/src/components/OtpInput/OtpInput.tsx +0 -368
  1586. package/src/components/OtpInput/index.ts +0 -2
  1587. package/src/components/Page/Page.module.scss +0 -30
  1588. package/src/components/Page/Page.tokens.scss +0 -11
  1589. package/src/components/Page/Page.tsx +0 -53
  1590. package/src/components/Page/index.ts +0 -2
  1591. package/src/components/PageHeader/PageHeader.module.scss +0 -197
  1592. package/src/components/PageHeader/PageHeader.tokens.scss +0 -41
  1593. package/src/components/PageHeader/PageHeader.tsx +0 -310
  1594. package/src/components/PageHeader/index.ts +0 -20
  1595. package/src/components/Pagination/Pagination.module.scss +0 -117
  1596. package/src/components/Pagination/Pagination.tokens.scss +0 -54
  1597. package/src/components/Pagination/Pagination.tsx +0 -165
  1598. package/src/components/Pagination/index.ts +0 -4
  1599. package/src/components/Pagination/paginationRange.ts +0 -72
  1600. package/src/components/PasswordInput/PasswordInput.module.scss +0 -120
  1601. package/src/components/PasswordInput/PasswordInput.tokens.scss +0 -44
  1602. package/src/components/PasswordInput/PasswordInput.tsx +0 -210
  1603. package/src/components/PasswordInput/index.ts +0 -2
  1604. package/src/components/PasswordStrengthMeter/PasswordStrengthMeter.module.scss +0 -80
  1605. package/src/components/PasswordStrengthMeter/PasswordStrengthMeter.tokens.scss +0 -40
  1606. package/src/components/PasswordStrengthMeter/PasswordStrengthMeter.tsx +0 -96
  1607. package/src/components/PasswordStrengthMeter/index.ts +0 -2
  1608. package/src/components/PersonDisplay/PersonDisplay.module.scss +0 -180
  1609. package/src/components/PersonDisplay/PersonDisplay.tokens.scss +0 -35
  1610. package/src/components/PersonDisplay/PersonDisplay.tsx +0 -420
  1611. package/src/components/PersonDisplay/index.ts +0 -10
  1612. package/src/components/PhoneInput/PhoneInput.module.scss +0 -23
  1613. package/src/components/PhoneInput/PhoneInput.tsx +0 -271
  1614. package/src/components/PhoneInput/index.ts +0 -4
  1615. package/src/components/PhoneInput/phone.ts +0 -128
  1616. package/src/components/PillMenu/PillMenu.module.scss +0 -117
  1617. package/src/components/PillMenu/PillMenu.tokens.scss +0 -22
  1618. package/src/components/PillMenu/PillMenu.tsx +0 -324
  1619. package/src/components/PillMenu/index.ts +0 -2
  1620. package/src/components/Popover/Anchor.tsx +0 -37
  1621. package/src/components/Popover/Close.tsx +0 -45
  1622. package/src/components/Popover/Content.tsx +0 -213
  1623. package/src/components/Popover/Heading.tsx +0 -33
  1624. package/src/components/Popover/Popover.module.scss +0 -177
  1625. package/src/components/Popover/Popover.tokens.scss +0 -22
  1626. package/src/components/Popover/Popover.tsx +0 -23
  1627. package/src/components/Popover/PopoverRoot.tsx +0 -75
  1628. package/src/components/Popover/Trigger.tsx +0 -86
  1629. package/src/components/Popover/context.ts +0 -22
  1630. package/src/components/Popover/index.ts +0 -7
  1631. package/src/components/Progress/Progress.module.scss +0 -110
  1632. package/src/components/Progress/Progress.tokens.scss +0 -44
  1633. package/src/components/Progress/Progress.tsx +0 -129
  1634. package/src/components/Progress/index.ts +0 -2
  1635. package/src/components/QrCode/QrCode.module.scss +0 -97
  1636. package/src/components/QrCode/QrCode.tokens.scss +0 -17
  1637. package/src/components/QrCode/QrCode.tsx +0 -233
  1638. package/src/components/QrCode/index.ts +0 -2
  1639. package/src/components/QrCode/qr.ts +0 -161
  1640. package/src/components/Radio/Radio.module.scss +0 -175
  1641. package/src/components/Radio/Radio.tokens.scss +0 -59
  1642. package/src/components/Radio/Radio.tsx +0 -127
  1643. package/src/components/Radio/RadioGroup.module.scss +0 -42
  1644. package/src/components/Radio/RadioGroup.tsx +0 -120
  1645. package/src/components/Radio/RadioGroupContext.tsx +0 -30
  1646. package/src/components/Radio/index.ts +0 -4
  1647. package/src/components/Rail/Rail.module.scss +0 -510
  1648. package/src/components/Rail/Rail.tokens.scss +0 -92
  1649. package/src/components/Rail/Rail.tsx +0 -287
  1650. package/src/components/Rail/RailCollapseToggle.tsx +0 -57
  1651. package/src/components/Rail/RailFooter.tsx +0 -17
  1652. package/src/components/Rail/RailGroup.tsx +0 -728
  1653. package/src/components/Rail/RailGroupContext.ts +0 -9
  1654. package/src/components/Rail/RailHeader.tsx +0 -23
  1655. package/src/components/Rail/RailItem.tsx +0 -119
  1656. package/src/components/Rail/RailSection.tsx +0 -39
  1657. package/src/components/Rail/RailSpacer.tsx +0 -19
  1658. package/src/components/Rail/index.ts +0 -9
  1659. package/src/components/RelativeDateInput/RelativeDateInput.module.scss +0 -15
  1660. package/src/components/RelativeDateInput/RelativeDateInput.tokens.scss +0 -6
  1661. package/src/components/RelativeDateInput/RelativeDateInput.tsx +0 -474
  1662. package/src/components/RelativeDateInput/index.ts +0 -10
  1663. package/src/components/RelativeDateInput/relativeDate.ts +0 -127
  1664. package/src/components/RichText/RichText.module.scss +0 -5
  1665. package/src/components/RichText/RichText.tsx +0 -70
  1666. package/src/components/RichText/RichTextAttachment.module.scss +0 -82
  1667. package/src/components/RichText/RichTextAttachment.tsx +0 -122
  1668. package/src/components/RichText/_prose.scss +0 -79
  1669. package/src/components/RichText/attachmentIcon.tsx +0 -24
  1670. package/src/components/RichText/engine/attachment.ts +0 -154
  1671. package/src/components/RichText/engine/autolink.ts +0 -64
  1672. package/src/components/RichText/engine/blockUnit.ts +0 -174
  1673. package/src/components/RichText/engine/colorMarks.ts +0 -85
  1674. package/src/components/RichText/engine/escape.ts +0 -11
  1675. package/src/components/RichText/engine/fromHtml.ts +0 -353
  1676. package/src/components/RichText/engine/fromMarkdown.ts +0 -20
  1677. package/src/components/RichText/engine/inlines.ts +0 -82
  1678. package/src/components/RichText/engine/listDepths.ts +0 -32
  1679. package/src/components/RichText/engine/marks.ts +0 -80
  1680. package/src/components/RichText/engine/mdToHtml.ts +0 -178
  1681. package/src/components/RichText/engine/model.ts +0 -157
  1682. package/src/components/RichText/engine/position.ts +0 -118
  1683. package/src/components/RichText/engine/renderDoc.tsx +0 -395
  1684. package/src/components/RichText/engine/renderLink.ts +0 -15
  1685. package/src/components/RichText/engine/renderMention.ts +0 -16
  1686. package/src/components/RichText/engine/safeHref.ts +0 -22
  1687. package/src/components/RichText/engine/toHtml.ts +0 -154
  1688. package/src/components/RichText/engine/toMarkdown.ts +0 -97
  1689. package/src/components/RichText/engine/transforms.ts +0 -434
  1690. package/src/components/RichText/imageMaxHeightStyle.ts +0 -10
  1691. package/src/components/RichText/index.ts +0 -31
  1692. package/src/components/RichTextEditor/RichTextAttachmentConfig.tsx +0 -264
  1693. package/src/components/RichTextEditor/RichTextBlockControls.tsx +0 -365
  1694. package/src/components/RichTextEditor/RichTextBlockMenu.tsx +0 -162
  1695. package/src/components/RichTextEditor/RichTextColorMenu.tsx +0 -115
  1696. package/src/components/RichTextEditor/RichTextEditor.module.scss +0 -298
  1697. package/src/components/RichTextEditor/RichTextEditor.tsx +0 -1910
  1698. package/src/components/RichTextEditor/RichTextImageResizer.tsx +0 -131
  1699. package/src/components/RichTextEditor/RichTextLinkEditor.tsx +0 -151
  1700. package/src/components/RichTextEditor/RichTextMentionMenu.tsx +0 -99
  1701. package/src/components/RichTextEditor/RichTextToolbar.tsx +0 -379
  1702. package/src/components/RichTextEditor/autolinkInput.ts +0 -65
  1703. package/src/components/RichTextEditor/blockDrop.ts +0 -9
  1704. package/src/components/RichTextEditor/blockReflow.ts +0 -62
  1705. package/src/components/RichTextEditor/commands.ts +0 -300
  1706. package/src/components/RichTextEditor/history.ts +0 -93
  1707. package/src/components/RichTextEditor/icons.tsx +0 -152
  1708. package/src/components/RichTextEditor/imageSize.ts +0 -70
  1709. package/src/components/RichTextEditor/index.ts +0 -5
  1710. package/src/components/RichTextEditor/input.ts +0 -209
  1711. package/src/components/RichTextEditor/inputRules.ts +0 -71
  1712. package/src/components/RichTextEditor/links.ts +0 -103
  1713. package/src/components/RichTextEditor/mentionContext.ts +0 -37
  1714. package/src/components/RichTextEditor/mentions.ts +0 -28
  1715. package/src/components/RichTextEditor/preventSelectionLoss.ts +0 -15
  1716. package/src/components/RichTextEditor/selection.ts +0 -415
  1717. package/src/components/RichTextEditor/shortcuts.ts +0 -44
  1718. package/src/components/RichTextEditor/useAnchoredFloating.ts +0 -50
  1719. package/src/components/RichTextEditor/useAttachmentConfig.ts +0 -134
  1720. package/src/components/RichTextEditor/useDismissOnOutsidePointerDown.ts +0 -26
  1721. package/src/components/RichTextEditor/useLinkEditor.ts +0 -107
  1722. package/src/components/RichTextEditor/useMention.ts +0 -226
  1723. package/src/components/RichTextEditor/useOverlayRect.ts +0 -73
  1724. package/src/components/RichTextEditor/useUpload.ts +0 -246
  1725. package/src/components/Screen/Screen.module.scss +0 -46
  1726. package/src/components/Screen/Screen.tokens.scss +0 -20
  1727. package/src/components/Screen/Screen.tsx +0 -97
  1728. package/src/components/Screen/index.ts +0 -2
  1729. package/src/components/ScrollArea/ScrollArea.module.scss +0 -39
  1730. package/src/components/ScrollArea/ScrollArea.tokens.scss +0 -15
  1731. package/src/components/ScrollArea/ScrollArea.tsx +0 -154
  1732. package/src/components/ScrollArea/index.ts +0 -2
  1733. package/src/components/Select/Chip.tsx +0 -45
  1734. package/src/components/Select/Empty.tsx +0 -39
  1735. package/src/components/Select/Error.tsx +0 -51
  1736. package/src/components/Select/HiddenInputs.tsx +0 -44
  1737. package/src/components/Select/Listbox.tsx +0 -557
  1738. package/src/components/Select/Loading.tsx +0 -30
  1739. package/src/components/Select/Select.module.scss +0 -512
  1740. package/src/components/Select/Select.tokens.scss +0 -140
  1741. package/src/components/Select/Select.tsx +0 -685
  1742. package/src/components/Select/Trigger.tsx +0 -952
  1743. package/src/components/Select/context.ts +0 -101
  1744. package/src/components/Select/emptyStateText.ts +0 -19
  1745. package/src/components/Select/index.ts +0 -9
  1746. package/src/components/Select/useSelectState.ts +0 -157
  1747. package/src/components/Select/utils-types.ts +0 -7
  1748. package/src/components/Select/utils.ts +0 -122
  1749. package/src/components/SettingRow/SettingRow.module.scss +0 -166
  1750. package/src/components/SettingRow/SettingRow.tokens.scss +0 -37
  1751. package/src/components/SettingRow/SettingRow.tsx +0 -242
  1752. package/src/components/SettingRow/index.ts +0 -7
  1753. package/src/components/Skeleton/Skeleton.module.scss +0 -55
  1754. package/src/components/Skeleton/Skeleton.tokens.scss +0 -17
  1755. package/src/components/Skeleton/Skeleton.tsx +0 -131
  1756. package/src/components/Skeleton/index.ts +0 -4
  1757. package/src/components/Skeleton/useSkeletonVisibility.ts +0 -95
  1758. package/src/components/Slider/Slider.module.scss +0 -293
  1759. package/src/components/Slider/Slider.tokens.scss +0 -98
  1760. package/src/components/Slider/Slider.tsx +0 -624
  1761. package/src/components/Slider/index.ts +0 -9
  1762. package/src/components/SlotGrid/SlotGrid.module.scss +0 -61
  1763. package/src/components/SlotGrid/SlotGrid.tokens.scss +0 -21
  1764. package/src/components/SlotGrid/SlotGrid.tsx +0 -111
  1765. package/src/components/SlotGrid/index.ts +0 -2
  1766. package/src/components/SocialButton/SocialButton.module.scss +0 -4
  1767. package/src/components/SocialButton/SocialButton.tsx +0 -40
  1768. package/src/components/SocialButton/index.ts +0 -2
  1769. package/src/components/Sortable/Sortable.module.scss +0 -177
  1770. package/src/components/Sortable/Sortable.tokens.scss +0 -27
  1771. package/src/components/Sortable/Sortable.tsx +0 -572
  1772. package/src/components/Sortable/containerAwareCollision.ts +0 -125
  1773. package/src/components/Sortable/index.ts +0 -13
  1774. package/src/components/SortableGroup/SortableGroup.module.scss +0 -23
  1775. package/src/components/SortableGroup/SortableGroup.tsx +0 -315
  1776. package/src/components/SortableGroup/index.ts +0 -4
  1777. package/src/components/SortableGroup/moveSortableItem.ts +0 -39
  1778. package/src/components/Sparkline/Sparkline.module.scss +0 -28
  1779. package/src/components/Sparkline/Sparkline.tokens.scss +0 -7
  1780. package/src/components/Sparkline/Sparkline.tsx +0 -133
  1781. package/src/components/Sparkline/index.ts +0 -2
  1782. package/src/components/Sparkline/sparklineModel.ts +0 -119
  1783. package/src/components/Split/Split.module.scss +0 -158
  1784. package/src/components/Split/Split.tokens.scss +0 -10
  1785. package/src/components/Split/Split.tsx +0 -231
  1786. package/src/components/Split/index.ts +0 -2
  1787. package/src/components/Stack/Stack.module.scss +0 -67
  1788. package/src/components/Stack/Stack.tokens.scss +0 -11
  1789. package/src/components/Stack/Stack.tsx +0 -100
  1790. package/src/components/Stack/index.ts +0 -2
  1791. package/src/components/StagePath/StagePath.module.scss +0 -255
  1792. package/src/components/StagePath/StagePath.tokens.scss +0 -43
  1793. package/src/components/StagePath/StagePath.tsx +0 -176
  1794. package/src/components/StagePath/index.ts +0 -2
  1795. package/src/components/StatGroup/StatGroup.module.scss +0 -6
  1796. package/src/components/StatGroup/StatGroup.tsx +0 -70
  1797. package/src/components/StatGroup/StatGroupContext.ts +0 -10
  1798. package/src/components/StatGroup/StatTile.module.scss +0 -99
  1799. package/src/components/StatGroup/StatTile.tokens.scss +0 -35
  1800. package/src/components/StatGroup/StatTile.tsx +0 -143
  1801. package/src/components/StatGroup/index.ts +0 -4
  1802. package/src/components/Sticky/Sticky.module.scss +0 -98
  1803. package/src/components/Sticky/Sticky.tokens.scss +0 -17
  1804. package/src/components/Sticky/Sticky.tsx +0 -103
  1805. package/src/components/Sticky/index.ts +0 -2
  1806. package/src/components/Switch/Switch.module.scss +0 -182
  1807. package/src/components/Switch/Switch.tokens.scss +0 -59
  1808. package/src/components/Switch/Switch.tsx +0 -214
  1809. package/src/components/Switch/index.ts +0 -2
  1810. package/src/components/Table/Table.module.scss +0 -308
  1811. package/src/components/Table/Table.tokens.scss +0 -79
  1812. package/src/components/Table/Table.tsx +0 -381
  1813. package/src/components/Table/index.ts +0 -15
  1814. package/src/components/TableOfContents/TableOfContents.module.scss +0 -83
  1815. package/src/components/TableOfContents/TableOfContents.tokens.scss +0 -26
  1816. package/src/components/TableOfContents/TableOfContents.tsx +0 -192
  1817. package/src/components/TableOfContents/activeSection.ts +0 -18
  1818. package/src/components/TableOfContents/index.ts +0 -2
  1819. package/src/components/Tabs/Tabs.module.scss +0 -359
  1820. package/src/components/Tabs/Tabs.tokens.scss +0 -50
  1821. package/src/components/Tabs/Tabs.tsx +0 -538
  1822. package/src/components/Tabs/index.ts +0 -2
  1823. package/src/components/Text/Text.module.scss +0 -115
  1824. package/src/components/Text/Text.tokens.scss +0 -55
  1825. package/src/components/Text/Text.tsx +0 -197
  1826. package/src/components/Text/index.ts +0 -2
  1827. package/src/components/Textarea/Textarea.module.scss +0 -94
  1828. package/src/components/Textarea/Textarea.tokens.scss +0 -48
  1829. package/src/components/Textarea/Textarea.tsx +0 -246
  1830. package/src/components/Textarea/index.ts +0 -2
  1831. package/src/components/Thread/Thread.module.scss +0 -161
  1832. package/src/components/Thread/Thread.tokens.scss +0 -32
  1833. package/src/components/Thread/Thread.tsx +0 -176
  1834. package/src/components/Thread/index.ts +0 -2
  1835. package/src/components/TimeField/TimeField.module.scss +0 -232
  1836. package/src/components/TimeField/TimeField.tsx +0 -793
  1837. package/src/components/TimeField/index.ts +0 -2
  1838. package/src/components/Timeline/Timeline.module.scss +0 -58
  1839. package/src/components/Timeline/Timeline.tokens.scss +0 -13
  1840. package/src/components/Timeline/Timeline.tsx +0 -53
  1841. package/src/components/Timeline/index.ts +0 -2
  1842. package/src/components/Title/Title.module.scss +0 -84
  1843. package/src/components/Title/Title.tokens.scss +0 -37
  1844. package/src/components/Title/Title.tsx +0 -150
  1845. package/src/components/Title/index.ts +0 -2
  1846. package/src/components/Toast/Toast.module.scss +0 -299
  1847. package/src/components/Toast/Toast.tokens.scss +0 -65
  1848. package/src/components/Toast/Toast.tsx +0 -122
  1849. package/src/components/Toast/ToastViewport.tsx +0 -166
  1850. package/src/components/Toast/api.ts +0 -175
  1851. package/src/components/Toast/index.ts +0 -5
  1852. package/src/components/Toast/store.ts +0 -133
  1853. package/src/components/Toast/useToastTimer.ts +0 -94
  1854. package/src/components/Tooltip/Tooltip.module.scss +0 -99
  1855. package/src/components/Tooltip/Tooltip.tokens.scss +0 -23
  1856. package/src/components/Tooltip/Tooltip.tsx +0 -341
  1857. package/src/components/Tooltip/index.ts +0 -2
  1858. package/src/components/TopBar/TopBar.module.scss +0 -235
  1859. package/src/components/TopBar/TopBar.tokens.scss +0 -79
  1860. package/src/components/TopBar/TopBar.tsx +0 -87
  1861. package/src/components/TopBar/TopBarEnd.tsx +0 -20
  1862. package/src/components/TopBar/TopBarIconButton.tsx +0 -86
  1863. package/src/components/TopBar/TopBarSearch.tsx +0 -319
  1864. package/src/components/TopBar/TopBarSearchPanel.tsx +0 -268
  1865. package/src/components/TopBar/TopBarStart.tsx +0 -20
  1866. package/src/components/TopBar/index.ts +0 -11
  1867. package/src/components/Tour/Spotlight.tsx +0 -121
  1868. package/src/components/Tour/Tour.module.scss +0 -210
  1869. package/src/components/Tour/Tour.tokens.scss +0 -58
  1870. package/src/components/Tour/Tour.tsx +0 -617
  1871. package/src/components/Tour/index.ts +0 -2
  1872. package/src/components/Tour/useTourTarget.ts +0 -115
  1873. package/src/components/TreeView/TreeView.module.scss +0 -268
  1874. package/src/components/TreeView/TreeView.tokens.scss +0 -36
  1875. package/src/components/TreeView/TreeView.tsx +0 -536
  1876. package/src/components/TreeView/index.ts +0 -3
  1877. package/src/components/TreeView/treeModel.ts +0 -224
  1878. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +0 -7
  1879. package/src/components/VisuallyHidden/VisuallyHidden.tsx +0 -29
  1880. package/src/components/VisuallyHidden/index.ts +0 -2
  1881. package/src/components/WidgetPreview/WidgetPreview.module.scss +0 -11
  1882. package/src/components/WidgetPreview/WidgetPreview.tokens.scss +0 -26
  1883. package/src/components/WidgetPreview/WidgetPreview.tsx +0 -36
  1884. package/src/components/WidgetPreview/WidgetShape.module.scss +0 -140
  1885. package/src/components/WidgetPreview/WidgetShape.tsx +0 -159
  1886. package/src/components/WidgetPreview/index.ts +0 -2
  1887. package/src/components/_internal/Trend.tsx +0 -27
  1888. package/src/components/_internal/choiceTile.scss +0 -74
  1889. package/src/components/_internal/collapse.scss +0 -10
  1890. package/src/components/_internal/collapse.ts +0 -58
  1891. package/src/components/_internal/currency.ts +0 -257
  1892. package/src/components/_internal/dragAnnouncements.ts +0 -200
  1893. package/src/components/_internal/fieldWiring.ts +0 -225
  1894. package/src/components/_internal/gridSpan.ts +0 -54
  1895. package/src/components/_internal/isoDay.ts +0 -35
  1896. package/src/components/_internal/letterKey.ts +0 -26
  1897. package/src/components/_internal/overlay/focusRestore.ts +0 -21
  1898. package/src/components/_internal/overlay/index.ts +0 -12
  1899. package/src/components/_internal/overlay/tourHold.ts +0 -23
  1900. package/src/components/_internal/overlay/useFocusTrap.ts +0 -120
  1901. package/src/components/_internal/overlay/useInOverlay.ts +0 -81
  1902. package/src/components/_internal/overlay/useOverlayStack.ts +0 -232
  1903. package/src/components/_internal/overlay/useScrollLock.ts +0 -112
  1904. package/src/components/_internal/refs.ts +0 -48
  1905. package/src/components/_internal/statusColor.ts +0 -26
  1906. package/src/components/_internal/timeUtils.ts +0 -23
  1907. package/src/components/_internal/useAsyncOptions.ts +0 -145
  1908. package/src/components/_internal/useClippedTooltip.ts +0 -50
  1909. package/src/components/_internal/useControllableState.ts +0 -50
  1910. package/src/components.manifest.json +0 -1141
  1911. package/src/hooks/useBelowBreakpoint.ts +0 -58
  1912. package/src/i18n/I18nProvider.tsx +0 -52
  1913. package/src/i18n/LocaleProvider.tsx +0 -17
  1914. package/src/i18n/en.ts +0 -648
  1915. package/src/i18n/format.ts +0 -71
  1916. package/src/i18n/index.ts +0 -13
  1917. package/src/i18n/messages.ts +0 -1275
  1918. package/src/i18n/ru.ts +0 -677
  1919. package/src/i18n/useLocale.ts +0 -19
  1920. package/src/i18n/useTranslation.ts +0 -58
  1921. package/src/index.ts +0 -913
  1922. package/src/palette/index.ts +0 -2
  1923. package/src/palette/palette.ts +0 -108
  1924. package/src/styles/dark.scss +0 -4
  1925. package/src/styles/global.scss +0 -7
  1926. package/src/styles/mixins.scss +0 -143
  1927. package/src/styles/reset.scss +0 -78
  1928. package/src/styles/tokens.scss +0 -18
  1929. package/src/styles/typography.scss +0 -44
@@ -1,1910 +0,0 @@
1
- import {
2
- forwardRef,
3
- useCallback,
4
- useEffect,
5
- useLayoutEffect,
6
- useMemo,
7
- useRef,
8
- useState,
9
- type HTMLAttributes,
10
- } from 'react';
11
- import { flushSync } from 'react-dom';
12
- import clsx from 'clsx';
13
- import type { RichDoc, Range, Mark, MarkType, Point } from '../RichText/engine/model';
14
- import { nextId } from '../RichText/engine/model';
15
- import { renderDoc } from '../RichText/engine/renderDoc';
16
- import type { RenderLink } from '../RichText/engine/renderLink';
17
- import type { RenderMention } from '../RichText/engine/renderMention';
18
- import {
19
- blockLength,
20
- isCollapsed,
21
- wholeBlockRange,
22
- marksForTypedText,
23
- } from '../RichText/engine/position';
24
- import { linkAt, setLink } from './links';
25
- import { applyTypeAutolink, atomicLinkDeleteRange } from './autolinkInput';
26
- import { RichTextLinkEditor } from './RichTextLinkEditor';
27
- import { useLinkEditor } from './useLinkEditor';
28
- import {
29
- insertText,
30
- insertFragment,
31
- insertMention,
32
- deleteRange,
33
- setColorMark,
34
- } from '../RichText/engine/transforms';
35
- import { linkifyRuns, findUrl } from '../RichText/engine/autolink';
36
- import { useMention } from './useMention';
37
- import { RichTextMentionMenu } from './RichTextMentionMenu';
38
- import type { MentionItem, MentionsConfig } from './mentions';
39
- import { fromHtml } from '../RichText/engine/fromHtml';
40
- import { hasMark, withMark, withoutMark } from '../RichText/engine/marks';
41
- import { useTranslation } from '../../i18n';
42
- import { readSelection, writeSelection, rangeRect, voidCaretSide, blockOwnText } from './selection';
43
- import { applyInput, voidDelete } from './input';
44
- import { matchBlockRule, applyBlockRule } from './inputRules';
45
- import { runsText } from '../RichText/engine/inlines';
46
- import { isLetterKey } from '../_internal/letterKey';
47
- import { shortcutMark } from './shortcuts';
48
- import {
49
- activeMarks as deriveActiveMarks,
50
- activeColors as deriveActiveColors,
51
- currentBlock as deriveCurrentBlock,
52
- runToggleMark,
53
- runSetBlock,
54
- runToggleList,
55
- runIndent,
56
- applyExactMarks,
57
- } from './commands';
58
- import { RichTextToolbar, type BlockChoice } from './RichTextToolbar';
59
- import {
60
- moveBlockUnit,
61
- moveBlockUnitToIndex,
62
- duplicateBlockUnit,
63
- removeBlockUnit,
64
- insertEmptyBlockBelow,
65
- } from '../RichText/engine/blockUnit';
66
- import { RichTextBlockControls } from './RichTextBlockControls';
67
- import { RichTextAttachmentConfig } from './RichTextAttachmentConfig';
68
- import { useAttachmentConfig } from './useAttachmentConfig';
69
- import { RichTextImageResizer } from './RichTextImageResizer';
70
- import { LiveRegion } from '../LiveRegion';
71
- import { capWidthToHeight } from './imageSize';
72
- import { imageMaxHeightStyle } from '../RichText/imageMaxHeightStyle';
73
- import { attachmentIsImage, isAttachmentSettled } from '../RichText/engine/attachment';
74
- import { safeHref } from '../RichText/engine/safeHref';
75
- import type { BlockAction } from './RichTextBlockMenu';
76
- import { useUpload, type UploadConfig } from './useUpload';
77
- import {
78
- reset as historyReset,
79
- record as historyRecord,
80
- undo as historyUndo,
81
- redo as historyRedo,
82
- canUndo as historyCanUndo,
83
- canRedo as historyCanRedo,
84
- } from './history';
85
- import type { History, EditKind } from './history';
86
- import styles from './RichTextEditor.module.scss';
87
-
88
- // Stable sentinel ReactNode passed as `renderLink`'s `defaultNode` when probing
89
- // whether a link is "resolved" (the consumer returns a custom chip) vs. declined
90
- // (returns the fallback). A custom return is `!== FALLBACK_SENTINEL` by identity;
91
- // declining returns the exact sentinel back. A frozen one-off element keeps a
92
- // stable reference across calls.
93
- const FALLBACK_SENTINEL: React.ReactNode = Object.freeze(<span key="rt-fallback-sentinel" />);
94
-
95
- export interface RichTextEditorProps extends Omit<
96
- HTMLAttributes<HTMLDivElement>,
97
- 'onChange' | 'children'
98
- > {
99
- /** Controlled document. Render the doc returned by `onChange` back into `value` as-is, right away — a cloned/normalized copy reads as an outside replacement and resets undo history; one stored only after a later edit (debounced, or a deferred render the next keystroke beats) is treated as rejected. Defer expensive consumers (preview, save), not `value`. */
100
- value: RichDoc;
101
- /** `aria-invalid` on the textbox. Field / SettingRow inject it (#568). @default false */
102
- invalid?: boolean;
103
- /** `aria-required` on the textbox. Field / SettingRow inject it (#568). @default false */
104
- required?: boolean;
105
- /** Fires with the new document after every edit. */
106
- onChange: (doc: RichDoc) => void;
107
- /** Non-editable: renders the content read-only (prefer `<RichText>` for pure display). */
108
- readOnly?: boolean;
109
- /** Shown when the document is empty. */
110
- placeholder?: string;
111
- /** Focus the editor on mount. */
112
- autoFocus?: boolean;
113
- /**
114
- * Render the built-in formatting toolbar above the editor — Undo/Redo buttons,
115
- * mark toggle buttons (bold/italic/underline/strike), a block-type dropdown
116
- * (paragraph/headings/quote/code), and bullet/numbered list toggles. The
117
- * toolbar dispatches through the same commit path the keyboard uses and
118
- * reflects the active marks + current block of the live selection. Default
119
- * `false` (keyboard-only). When `readOnly`, the toolbar renders disabled.
120
- *
121
- * `'auto'` shows the toolbar only when the editor is **focused or non-empty**,
122
- * and keeps it shown while the editor's own overlays (the link editor / mention
123
- * menu) are open — so opening the link editor on a focused-but-empty composer
124
- * doesn't collapse the bar. The editable is NOT remounted as the bar appears or
125
- * hides (the bar toggles in a stable shell), so there's no focus/selection loss.
126
- * Use it for a compact, focus-gated composer (e.g. a comment box) instead of
127
- * hand-rolling the show-on-focus logic and working around overlay focus theft.
128
- */
129
- toolbar?: boolean | 'auto';
130
- /**
131
- * Enable `@`-mention autocomplete. Supply `onQuery` to resolve candidates for
132
- * the text typed after the trigger (default `@`); the editor renders a floating
133
- * combobox and inserts a styled mention chip carrying the chosen item's `id`.
134
- * Omit to disable mentions. See {@link MentionsConfig}.
135
- */
136
- mentions?: MentionsConfig;
137
- /**
138
- * Turn typed and pasted URLs into links automatically. While typing, a URL is
139
- * linked when you type a space after it; on paste, plain-text URLs are linked
140
- * (a single bare URL pasted over a selection links the selection). Default
141
- * `true`. Set `false` to disable both the type rule and paste autolinking (the
142
- * ⌘/Ctrl+K link tool still works). The href is sanitized — only safe schemes
143
- * (http/https/`www.`) become links.
144
- */
145
- autolink?: boolean;
146
- /**
147
- * Substitute how a link renders. Called per link with `{ href, text }` and the
148
- * default `<a>`; return your own node (e.g. a task/member chip) or the
149
- * `defaultNode` to keep the standard anchor. A custom node renders as a
150
- * non-editable **atomic chip** — the caret steps over it and a single Backspace/
151
- * Delete removes the whole link.
152
- *
153
- * @remarks Render-time only — the model is unchanged, so `toHtml`/`toMarkdown`
154
- * still serialize a plain link. Keep it cheap (it runs on every render): don't
155
- * do heavy synchronous work or block on the network inside `renderLink`; return
156
- * a component that fetches/caches the lookup itself (falling back to
157
- * `defaultNode` while loading). Because the chip is atomic and not editable
158
- * text, only links your `renderLink` actually replaces become chips — links you
159
- * return `defaultNode` for stay plain, editable anchors.
160
- */
161
- renderLink?: RenderLink;
162
- /**
163
- * Substitute how an `@`-mention renders. Called per mention with `{ id, label }`
164
- * and the default mention span; return your own node (e.g. an interactive member
165
- * chip / popover trigger) or the `defaultNode` to keep the standard
166
- * non-interactive span. A custom node renders as a non-editable **atomic chip** —
167
- * the caret steps over it as a single unit. Composes with `renderLink` (both
168
- * usable together).
169
- *
170
- * @remarks Render-time only — the model is unchanged, so `toHtml`/`toMarkdown`
171
- * still serialize the mention mark. Keep it cheap (it runs on every render):
172
- * don't do heavy synchronous work or block on the network inside `renderMention`;
173
- * return a component that fetches/caches the lookup itself (falling back to
174
- * `defaultNode` while loading).
175
- */
176
- renderMention?: RenderMention;
177
- /**
178
- * Maximum DISPLAYED height of image attachments, in px. Default: the
179
- * `--size-rich-text-image-max-height` token (480px). A taller image shrinks
180
- * (width follows, aspect preserved); the resize handle and width slider stop
181
- * where the image hits the cap. Render-time only — stored `width`/`height` are
182
- * unchanged. Pass the same value to the read-only `<RichText>` so both agree.
183
- */
184
- imageMaxHeight?: number;
185
- /**
186
- * Show Notion-style per-block controls: a left gutter that appears on the
187
- * hovered/focused block with an insert button (`+`, adds an empty paragraph
188
- * below) and a drag handle (`⠿`) that opens a block menu (Turn into ▸,
189
- * Duplicate, Move up/down, Delete). Reordering is subtree-aware for nested
190
- * lists. Keyboard: Shift+F10 / the ContextMenu key opens the focused block's
191
- * menu; ⌘/Ctrl+⇧↑ / ⌘/Ctrl+⇧↓ move the block; ⌘/Ctrl+D duplicates. Default
192
- * `false`. Ignored when `readOnly`. Independent of `toolbar`.
193
- */
194
- blockControls?: boolean;
195
- /**
196
- * Enable file upload: a toolbar button (when `toolbar`) and clipboard-file paste.
197
- * `onUpload(file)` resolves with where the file landed; images render inline as a
198
- * preview, other files as a download chip. Reject `onUpload` to show a retry/remove
199
- * error; reject with `new UploadError(message)` to also show that (user-facing,
200
- * localized) reason on the block — any other rejection shows only "Upload
201
- * failed". `onUploadingChange` fires while any upload is in flight — wire it to your
202
- * submit button's disabled state. Validation (size/type) belongs in `onUpload`
203
- * (`accept` is only a native-picker hint and is bypassed by paste). Omit to
204
- * disable. Ignored when `readOnly`.
205
- * When `blockControls` is also on, a ready image attachment can be configured
206
- * (alt text, alignment, replace, open/download) via the block menu's
207
- * "Configure" item. The width slider appears only for an image that renders as
208
- * a preview (a safe, fetchable src — an embed); an uploaded image whose
209
- * object-URL src renders as a download chip isn't resizable here. Alignment +
210
- * width round-trip through HTML but not Markdown.
211
- */
212
- upload?: UploadConfig;
213
- }
214
-
215
- function isEmptyDoc(doc: RichDoc): boolean {
216
- return doc.blocks.length === 1 && blockLength(doc.blocks[0]) === 0;
217
- }
218
-
219
- /** Toggle `mark` within a `Mark[]` (used to fold a shortcut into pending marks). */
220
- function toggleInList(marks: Mark[], mark: Mark): Mark[] {
221
- return hasMark(marks, mark.type) ? withoutMark(marks, mark.type) : withMark(marks, mark);
222
- }
223
-
224
- /**
225
- * Insert `text` at `point` carrying exactly `marks` (staged pending marks). The
226
- * span comes from the insert's resulting caret, not `point`: beside a void block
227
- * the text lands in a NEW paragraph after it.
228
- */
229
- function insertWithMarks(
230
- doc: RichDoc,
231
- point: Point,
232
- text: string,
233
- marks: Mark[],
234
- ): { doc: RichDoc; selection: Range } {
235
- const inserted = insertText(doc, point, text);
236
- const end = inserted.selection.focus;
237
- const span: Range = {
238
- anchor: { blockId: end.blockId, offset: end.offset - text.length },
239
- focus: end,
240
- };
241
- return { doc: applyExactMarks(inserted.doc, span, marks), selection: inserted.selection };
242
- }
243
-
244
- /**
245
- * Controlled rich-text editor: a contentEditable surface over the in-house engine with marks, lists, links, mentions, uploads and undo/redo.
246
- * @see docs/components/RichTextEditor.md
247
- */
248
- export const RichTextEditor = forwardRef<HTMLDivElement, RichTextEditorProps>(
249
- function RichTextEditor(
250
- {
251
- value,
252
- onChange,
253
- readOnly = false,
254
- placeholder,
255
- autoFocus,
256
- toolbar = false,
257
- blockControls = false,
258
- mentions,
259
- autolink = true,
260
- renderLink,
261
- renderMention,
262
- imageMaxHeight,
263
- upload,
264
- invalid = false,
265
- required = false,
266
- className,
267
- style,
268
- ...rest
269
- },
270
- ref,
271
- ) {
272
- const t = useTranslation();
273
- const rootRef = useRef<HTMLDivElement | null>(null);
274
- const isComposingRef = useRef(false);
275
- // Selection to restore after the next model-driven re-render.
276
- // `afterVoid`: a void block whose DOM caret goes AFTER its figure (voidDelete's
277
- // caretAfterVoid — a spot the model's single void point can't name). Bundled
278
- // with the selection so every path that places a caret replaces both at once:
279
- // a stale marker can never fire with someone else's selection. A block id, so
280
- // it survives a parent that copies the doc in onChange.
281
- const pendingSelectionRef = useRef<{ range: Range; afterVoid: string | null } | null>(null);
282
- // Which committed docs had their caret after a void — keyed by the exact doc
283
- // object history keeps, so undo/redo restore the same side.
284
- const caretAfterVoidDocs = useRef(new WeakMap<RichDoc, string>());
285
- // Latest props for the native beforeinput listener (avoids stale closures).
286
- const latest = useRef({
287
- value,
288
- onChange,
289
- readOnly,
290
- autolink,
291
- renderLink,
292
- upload,
293
- });
294
- latest.current = {
295
- value,
296
- onChange,
297
- readOnly,
298
- autolink,
299
- renderLink,
300
- upload,
301
- };
302
- // The synchronous "live" doc — the doc the parent has taken, possibly ahead of
303
- // the last render's `value`, so several async upload settles chain off each
304
- // other's result instead of all reading a stale `value` (which would make the
305
- // last settle clobber the earlier ones). Never an edit the parent hasn't taken
306
- // yet (see unconfirmedRef). Re-synced to `value` each render so external
307
- // replacements flow in.
308
- const liveDocRef = useRef(value);
309
- liveDocRef.current = value;
310
-
311
- // Stable getters for the synchronously-latest doc/flags — passed to the
312
- // feature hooks so their handlers read current values without re-subscribing
313
- // or depending on `latest`'s shape (keeps the handlers' identity stable).
314
- const getValue = useCallback(() => latest.current.value, []);
315
- const getLiveDoc = useCallback(() => liveDocRef.current, []);
316
- const getReadOnly = useCallback(() => latest.current.readOnly, []);
317
-
318
- // Focus state — only consulted by `toolbar="auto"` to gate the bar's visibility.
319
- // Focus moving to an editor overlay (the link editor / mention menu, portaled to
320
- // <body>) fires a blur, so `focused` flips false there; the `showToolbar`
321
- // formula keeps the bar up via the overlay-open term instead.
322
- const [focused, setFocused] = useState(false);
323
- // True while any toolbar popover is open — it blurs the editable by opening,
324
- // which would otherwise unmount the bar and the popover with it.
325
- const [toolbarOverlayOpen, setToolbarOverlayOpen] = useState(false);
326
- const autoToolbar = toolbar === 'auto';
327
-
328
- // Toolbar state: the live selection (tracked via `selectionchange`) and any
329
- // marks staged at a collapsed caret to apply to the next typed character.
330
- const [selection, setSelection] = useState<Range | null>(null);
331
- const [pendingMarks, setPendingMarks] = useState<Mark[] | null>(null);
332
- // Mirror pending marks into a ref so the native beforeinput listener reads
333
- // the current value without re-subscribing.
334
- const pendingMarksRef = useRef<Mark[] | null>(null);
335
- pendingMarksRef.current = pendingMarks;
336
- // The collapsed caret where pending marks were staged. Used to clear them
337
- // when the caret moves to a different spot (vs. typing at the same point).
338
- const pendingAtRef = useRef<Point | null>(null);
339
- // The most recent NON-null editor selection. Survives focus moving into a toolbar
340
- // popover (e.g. the emoji/search box), where the live selection reads null. Used by
341
- // popover-driven inserts so they target where the caret actually was.
342
- const lastSelectionRef = useRef<Range | null>(null);
343
-
344
- const setRefs = useCallback(
345
- (node: HTMLDivElement | null) => {
346
- rootRef.current = node;
347
- if (typeof ref === 'function') ref(node);
348
- else if (ref) ref.current = node;
349
- },
350
- [ref],
351
- );
352
-
353
- const controlsOn = blockControls && !readOnly;
354
- // Whether the stable `.shell` wrapper is rendered (a toolbar mode is active or
355
- // block controls need the anchor). The image resize handle anchors into the
356
- // shell, so its hover tracking + element are gated on this. Declared up here
357
- // (vs. near the shell render) so the image-hover effect below can depend on it.
358
- const usesShell = toolbar === true || autoToolbar || controlsOn;
359
- // The same gate the mention menu uses — drives both `useMention`'s `enabled`
360
- // and the consolidated selectionchange listener's mention fan-out below.
361
- const mentionsEnabled = !!mentions && !readOnly;
362
- const shellRef = useRef<HTMLDivElement | null>(null);
363
- // Active block = hover wins, else the caret block (keyboard / after the mouse
364
- // leaves). Split so clearing hover on editor-leave never wipes the caret target.
365
- const [hoverBlockId, setHoverBlockId] = useState<string | null>(null);
366
- const [caretBlockId, setCaretBlockId] = useState<string | null>(null);
367
- const activeBlockId = hoverBlockId ?? caretBlockId;
368
- const [blockMenuOpen, setBlockMenuOpen] = useState(false);
369
- // Mirror the open state into a ref so the hover listener can read it without
370
- // re-subscribing: while the menu is open, hovering another block must NOT move
371
- // the active block (the menu's actions are bound to it — moving it would make
372
- // a click act on the wrong block).
373
- const blockMenuOpenRef = useRef(false);
374
- blockMenuOpenRef.current = blockMenuOpen;
375
- // Set by RichTextBlockControls' onDraggingChange. While a block drag is in
376
- // progress the active block must not change (it IS the block being dragged), so
377
- // the hover handlers below read this ref and bail — mirroring blockMenuOpenRef.
378
- const draggingRef = useRef(false);
379
- // Stable setter for draggingRef — passed to the image resizer so its memoized
380
- // shell doesn't re-render every keystroke on a fresh inline lambda. Used by the
381
- // resizer's OWN drag: it sets draggingRef only (NOT blockDragging), so a resize
382
- // never hides the handle mid-drag.
383
- const setDragging = useCallback((d: boolean) => {
384
- draggingRef.current = d;
385
- }, []);
386
- // The previewable image currently under the pointer → the resize-handle target.
387
- // Tracked independently of blockControls/upload/active-block so the handle shows
388
- // for ANY previewable image on hover (see the image-hover effect below).
389
- const [hoveredImageId, setHoveredImageId] = useState<string | null>(null);
390
- // True while a blockControls reorder drag is in flight. Hides the image resize
391
- // handle (it can't follow the block's in-place reflow); it reappears at the drop.
392
- const [blockDragging, setBlockDragging] = useState(false);
393
- // Block-drag report (passed to RichTextBlockControls): set draggingRef so the
394
- // hover/caret tracking bails AND set blockDragging so the image handle hides.
395
- // Separate from setDragging (which the resizer's own drag uses) on purpose.
396
- const onBlockDraggingChange = useCallback((d: boolean) => {
397
- draggingRef.current = d;
398
- setBlockDragging(d);
399
- }, []);
400
-
401
- // Resolve the [data-block-id] of the block element containing a DOM node.
402
- const blockIdFromNode = useCallback((node: Node | null): string | null => {
403
- let el: HTMLElement | null =
404
- node instanceof HTMLElement ? node : (node?.parentElement ?? null);
405
- while (el && el !== rootRef.current) {
406
- if (el.hasAttribute('data-block-id')) return el.getAttribute('data-block-id');
407
- el = el.parentElement;
408
- }
409
- return null; // reached the root (or ran out of ancestors) — no block
410
- }, []);
411
-
412
- // Resolve the [data-block-id] of the previewable-image FIGURE containing a DOM
413
- // node, or null. A previewable image renders `<figure data-block-id><img></figure>`;
414
- // a non-preview file chip renders `<figure data-block-id><a></figure>` — so a
415
- // figure that contains an <img> = a previewable image. DOM-based (no `value`
416
- // dep), so it stays stable; the editor re-validates the id against the model.
417
- const imageFigureIdAt = useCallback((node: Node | null): string | null => {
418
- let el: HTMLElement | null =
419
- node instanceof HTMLElement ? node : (node?.parentElement ?? null);
420
- while (el && el !== rootRef.current) {
421
- if (
422
- el.tagName === 'FIGURE' &&
423
- el.hasAttribute('data-block-id') &&
424
- el.querySelector('img')
425
- ) {
426
- return el.getAttribute('data-block-id');
427
- }
428
- el = el.parentElement;
429
- }
430
- return null;
431
- }, []);
432
-
433
- // The block whose vertical band contains viewport-y `clientY`, or null. Used to
434
- // resolve a hover over the gutter/padding column (where there is no block element
435
- // under the pointer) to the row beside it. Block elements are in document order =
436
- // top-to-bottom, so we can stop once a block starts below the pointer; among the
437
- // blocks that contain the pointer the LAST in document order is the deepest (a
438
- // nested list item comes after — and sits inside — its parent), matching how a
439
- // direct hover resolves to the innermost block. Reads a layout rect per block up
440
- // to the pointer's row — an accepted cost: the caller only invokes this for the
441
- // narrow no-block-under-pointer case (the gutter/padding column), never the hot
442
- // text-hover path, so there's no need to cache rects or rAF-throttle.
443
- const blockAtPointerY = useCallback((root: HTMLElement, clientY: number): string | null => {
444
- let found: string | null = null;
445
- for (const el of root.querySelectorAll<HTMLElement>('[data-block-id]')) {
446
- const box = el.getBoundingClientRect();
447
- if (box.top > clientY) break;
448
- if (clientY <= box.bottom) found = el.getAttribute('data-block-id');
449
- }
450
- return found;
451
- }, []);
452
-
453
- const historyRef = useRef<History>(historyReset({ doc: value, selection: null }));
454
- // Timestamp of the last ⌘Z/⌘⇧Z/⌘Y keydown — lets the beforeinput net skip the
455
- // historyUndo/historyRedo event that a keydown ALSO emits (already handled),
456
- // while still honoring a menu/trackpad undo that emits no keydown.
457
- const historyKeyAtRef = useRef(0);
458
- const [canUndo, setCanUndo] = useState(false);
459
- const [canRedo, setCanRedo] = useState(false);
460
- const syncHistoryFlags = useCallback(() => {
461
- setCanUndo(historyCanUndo(historyRef.current));
462
- setCanRedo(historyCanRedo(historyRef.current));
463
- }, []);
464
-
465
- // The last doc handed to onChange that `value` hasn't become yet, with the
466
- // history to restore if it never does. flushSync renders a synchronously-
467
- // accepting parent before onChange returns, so most edits never land here;
468
- // one that does was either REJECTED or is still on its way (a parent storing
469
- // it in startTransition / useDeferredValue — tolerated for a single edit,
470
- // discouraged; see the docs). Resolved by whichever comes
471
- // first: that doc arriving as `value` (accepted late — keep everything), a
472
- // different `value` arriving (rejected — the layout effect drops its pending
473
- // caret), or the next edit / undo / settle (reconcile() rolls its history
474
- // entry back). Meanwhile the live doc stays the SHOWN one, so async upload
475
- // settles never build on an edit the parent may have refused.
476
- const unconfirmedRef = useRef<{ doc: RichDoc; prevHistory: History } | null>(null);
477
-
478
- // Every commit path calls this FIRST — before writing pendingSelectionRef —
479
- // since a rollback also drops the refused edit's pending caret.
480
- const reconcile = useCallback(() => {
481
- const u = unconfirmedRef.current;
482
- unconfirmedRef.current = null;
483
- if (u && latest.current.value !== u.doc) {
484
- historyRef.current = u.prevHistory;
485
- syncHistoryFlags();
486
- // Its caret too — a caller that returns early (an empty undo/redo) would
487
- // otherwise leave it for some unrelated re-render to write.
488
- pendingSelectionRef.current = null;
489
- }
490
- }, [syncHistoryFlags]);
491
-
492
- const emit = useCallback((doc: RichDoc, prevHistory: History) => {
493
- const before = latest.current.value;
494
- liveDocRef.current = doc;
495
- try {
496
- flushSync(() => latest.current.onChange(doc));
497
- } finally {
498
- // `finally`: an onChange that throws counts as not (yet) accepted too.
499
- if (latest.current.value === before) {
500
- unconfirmedRef.current = { doc, prevHistory };
501
- liveDocRef.current = before;
502
- }
503
- }
504
- }, []);
505
-
506
- const commit = useCallback(
507
- (
508
- result: { doc: RichDoc; selection: Range },
509
- kind: EditKind = 'other',
510
- options?: {
511
- /**
512
- * Keep the DOM selection as-is — do NOT writeSelection on the re-render.
513
- * Used by edits applied from a floating UI that owns focus (e.g. the ⠿
514
- * block-color submenu): writing `result.selection` would both yank focus
515
- * out of the open menu and visibly select the whole block. `result.selection`
516
- * is still recorded in history so undo lands somewhere sensible.
517
- */
518
- keepSelection?: boolean;
519
- /** Place the DOM caret AFTER this void block's figure on the re-render. */
520
- caretAfterVoid?: string;
521
- },
522
- ) => {
523
- // No-op transforms (e.g. Backspace at the very start of the document)
524
- // return the SAME doc reference — skip so we don't fire onChange or leave a
525
- // stale pending selection that React would never consume (no re-render).
526
- if (result.doc === latest.current.value) return;
527
- if (options?.caretAfterVoid)
528
- caretAfterVoidDocs.current.set(result.doc, options.caretAfterVoid);
529
- reconcile();
530
- const prevHistory = historyRef.current;
531
- historyRef.current = historyRecord(
532
- historyRef.current,
533
- { doc: result.doc, selection: result.selection },
534
- kind,
535
- Date.now(),
536
- );
537
- syncHistoryFlags();
538
- // Every commit path writes pendingSelectionRef (null = "place no caret on
539
- // this render"), so a pending selection left by a commit the parent
540
- // rejected can never fire on a later, unrelated render.
541
- pendingSelectionRef.current = options?.keepSelection
542
- ? null
543
- : { range: result.selection, afterVoid: options?.caretAfterVoid ?? null };
544
- emit(result.doc, prevHistory);
545
- },
546
- [syncHistoryFlags, emit, reconcile],
547
- );
548
-
549
- // Live-resize commit path for attachment width drags (used by
550
- // useAttachmentConfig's onConfigWidth and the image resizer). Records ONE
551
- // coalescing 'resize' history entry per drag (whole drag = one undo step),
552
- // clears the pending selection so no caret is placed (the slider/handle keeps
553
- // focus mid-drag — a writeSelection into the editable would yank it), and chains off
554
- // `liveDocRef` so rapid moves before a re-render stack on each other. The
555
- // no-op guard skips an unchanged doc (same width). This stays in the editor
556
- // so the history coupling is isolated from the hook.
557
- const commitResizeLive = useCallback(
558
- (doc: RichDoc) => {
559
- if (doc === liveDocRef.current) return;
560
- reconcile();
561
- pendingSelectionRef.current = null; // the slider/handle keeps focus
562
- const prevHistory = historyRef.current;
563
- historyRef.current = historyRecord(
564
- historyRef.current,
565
- { doc, selection: historyRef.current.present.selection },
566
- 'resize',
567
- Date.now(),
568
- );
569
- syncHistoryFlags();
570
- emit(doc, prevHistory);
571
- },
572
- [syncHistoryFlags, emit, reconcile],
573
- );
574
-
575
- // Like commit, but records NO history entry — used for async upload settles so
576
- // Undo never steps through an upload resolving. Preserves the caret across the
577
- // model-driven re-render by re-pinning the current selection (or placing none
578
- // when the selection is outside the editor), and keeps the
579
- // history's `present` snapshot in sync with the new doc (without pushing a
580
- // past/future entry) so the layout effect's `value !== present.doc` external-
581
- // replacement heuristic doesn't mistake a settle for a doc swap and reset undo.
582
- const commitSilent = useCallback(
583
- (doc: RichDoc) => {
584
- if (doc === latest.current.value) return;
585
- reconcile();
586
- const root = rootRef.current;
587
- const sel = root ? readSelection(root) : null;
588
- pendingSelectionRef.current = sel ? { range: sel, afterVoid: null } : null;
589
- const prevHistory = historyRef.current;
590
- historyRef.current = {
591
- ...historyRef.current,
592
- present: { doc, selection: sel ?? historyRef.current.present.selection },
593
- };
594
- emit(doc, prevHistory);
595
- },
596
- [emit, reconcile],
597
- );
598
-
599
- const uploadOn = !!upload && !readOnly;
600
- // A failure usually lands while the user keeps typing elsewhere in the doc,
601
- // so the block's visible text alone is never heard: announce it (Hard rule 10).
602
- const [uploadFailure, setUploadFailure] = useState<{ name: string; reason?: string } | null>(
603
- null,
604
- );
605
- const uploader = useUpload({
606
- config: upload ?? { onUpload: async () => ({ url: '' }) },
607
- getValue: () => liveDocRef.current,
608
- applyInsert: (doc) => {
609
- const root = rootRef.current;
610
- const sel = (root ? readSelection(root) : null) ?? {
611
- anchor: { blockId: liveDocRef.current.blocks[0].id, offset: 0 },
612
- focus: { blockId: liveDocRef.current.blocks[0].id, offset: 0 },
613
- };
614
- commit({ doc, selection: sel }, 'other');
615
- },
616
- applySettle: commitSilent,
617
- getCaret: () =>
618
- (rootRef.current ? readSelection(rootRef.current)?.anchor : undefined) ?? {
619
- blockId: liveDocRef.current.blocks[0].id,
620
- offset: 0,
621
- },
622
- // Cap a freshly-uploaded image's initial width to the editor content width
623
- // (mirrors the resizer's maxWidth measurement). `0` when unmounted → no cap.
624
- getContentWidth: () => rootRef.current?.getBoundingClientRect().width ?? 0,
625
- onFailureChange: setUploadFailure,
626
- });
627
- // The paste/click handlers close over a stale `uploader`; mirror it in a ref so
628
- // we read the current one without re-subscribing the native paste listener.
629
- const uploaderRef = useRef(uploader);
630
- uploaderRef.current = uploader;
631
- // The toolbar's Add-file button clicks this; the input is rendered by the shell.
632
- const uploadInputRef = useRef<HTMLInputElement>(null);
633
-
634
- // Drop any caret-staged pending mark — the doc + caret are about to change,
635
- // so a mark staged at the old caret must not bleed into the next typed text.
636
- const clearPendingMarks = useCallback(() => {
637
- setPendingMarks(null);
638
- pendingMarksRef.current = null; // ahead of the re-render, for same-tick events
639
- pendingAtRef.current = null;
640
- }, []);
641
-
642
- // Consume the staged pending marks if they were staged at `point`; marks staged
643
- // anywhere else are dropped. The selectionchange cleanup runs only with a
644
- // toolbar, so a keyboard-only editor relies on this to keep a ⌘B staged
645
- // elsewhere from leaking into text typed here.
646
- const takePendingAt = useCallback(
647
- (point: Point): Mark[] | null => {
648
- const pend = pendingMarksRef.current;
649
- const at = pendingAtRef.current;
650
- if (!pend) return null;
651
- clearPendingMarks();
652
- return at && at.blockId === point.blockId && at.offset === point.offset ? pend : null;
653
- },
654
- [clearPendingMarks],
655
- );
656
-
657
- // A voidDelete result that only moves the caret returns the SAME doc, which
658
- // commit() skips as a no-op — apply its selection directly instead.
659
- const applyVoidDelete = useCallback(
660
- (result: ReturnType<typeof voidDelete>) => {
661
- if (!result) return;
662
- if (result.doc === latest.current.value) {
663
- if (rootRef.current) writeSelection(rootRef.current, result.selection);
664
- return;
665
- }
666
- commit(result, 'delete', {
667
- caretAfterVoid: result.caretAfterVoid ? result.selection.anchor.blockId : undefined,
668
- });
669
- },
670
- [commit],
671
- );
672
-
673
- const onUndo = useCallback(() => {
674
- reconcile();
675
- const h = historyRef.current;
676
- if (!historyCanUndo(h)) return;
677
- const next = historyUndo(h);
678
- historyRef.current = next;
679
- syncHistoryFlags();
680
- clearPendingMarks();
681
- pendingSelectionRef.current = next.present.selection && {
682
- range: next.present.selection,
683
- afterVoid: caretAfterVoidDocs.current.get(next.present.doc) ?? null,
684
- };
685
- emit(next.present.doc, h);
686
- }, [syncHistoryFlags, clearPendingMarks, emit, reconcile]);
687
-
688
- const onRedo = useCallback(() => {
689
- reconcile();
690
- const h = historyRef.current;
691
- if (!historyCanRedo(h)) return;
692
- const next = historyRedo(h);
693
- historyRef.current = next;
694
- syncHistoryFlags();
695
- clearPendingMarks();
696
- pendingSelectionRef.current = next.present.selection && {
697
- range: next.present.selection,
698
- afterVoid: caretAfterVoidDocs.current.get(next.present.doc) ?? null,
699
- };
700
- emit(next.present.doc, h);
701
- }, [syncHistoryFlags, clearPendingMarks, emit, reconcile]);
702
-
703
- const insertMentionItem = useCallback(
704
- (
705
- blockId: string,
706
- range: { from: number; to: number },
707
- trigger: string,
708
- item: MentionItem,
709
- ) => {
710
- commit(insertMention(latest.current.value, blockId, range, trigger, item), 'other');
711
- clearPendingMarks();
712
- },
713
- [commit, clearPendingMarks],
714
- );
715
-
716
- const mention = useMention({
717
- enabled: mentionsEnabled,
718
- rootRef,
719
- doc: value,
720
- trigger: mentions?.trigger ?? '@',
721
- onQuery: mentions?.onQuery,
722
- onInsert: insertMentionItem,
723
- });
724
- const recomputeMention = mention.recompute;
725
-
726
- // Shared by the keyboard shortcut and the toolbar: with a collapsed caret,
727
- // stage a pending mark for the next typed text (remembering where); with a
728
- // selection, toggle the mark over it now.
729
- const stageOrToggleMark = useCallback(
730
- (range: Range, mark: Mark) => {
731
- if (isCollapsed(range)) {
732
- pendingAtRef.current = range.anchor;
733
- setPendingMarks((prev) =>
734
- toggleInList(prev ?? marksForTypedText(latest.current.value, range.anchor), mark),
735
- );
736
- } else {
737
- commit(runToggleMark(latest.current.value, range, mark));
738
- }
739
- },
740
- [commit],
741
- );
742
-
743
- // Color sibling of stageOrToggleMark: with a collapsed caret, stage the color
744
- // as a pending mark for the next typed text (replacing any pending color of the
745
- // same type, or clearing it when `key` is null); with a selection, set it now.
746
- const stageOrSetColor = useCallback(
747
- (range: Range, type: 'textColor' | 'bgColor', key: string | null) => {
748
- if (isCollapsed(range)) {
749
- pendingAtRef.current = range.anchor;
750
- setPendingMarks((prev) => {
751
- const base = (prev ?? marksForTypedText(latest.current.value, range.anchor)).filter(
752
- (m) => m.type !== type,
753
- );
754
- return key ? [...base, { type, color: key }] : base;
755
- });
756
- } else {
757
- // setColorMark returns a bare RichDoc (a color change never moves the
758
- // caret), so wrap it for commit and keep the existing selection.
759
- commit({ doc: setColorMark(latest.current.value, range, type, key), selection: range });
760
- }
761
- },
762
- [commit],
763
- );
764
-
765
- // Toolbar color dispatch — read the live selection (falling back to the most
766
- // recent one, which survives the Popover stealing focus) and route through the
767
- // shared color path, then restore focus so typing continues after the pick.
768
- const onSetColor = useCallback(
769
- (type: 'textColor' | 'bgColor', key: string | null) => {
770
- const root = rootRef.current;
771
- const range = (root ? readSelection(root) : null) ?? lastSelectionRef.current;
772
- if (range) {
773
- stageOrSetColor(range, type, key);
774
- root?.focus();
775
- }
776
- },
777
- [stageOrSetColor],
778
- );
779
-
780
- // Link editor: open-state + apply/remove/cancel handlers (see useLinkEditor).
781
- // The toolbar's `linkActive` derivation and the `<RichTextLinkEditor>` render
782
- // stay in this file — they need the live selection / render scope.
783
- const { linkEditor, openLinkEditor, onLinkApply, onLinkRemove, onLinkCancel } = useLinkEditor({
784
- rootRef,
785
- commit,
786
- getValue,
787
- getReadOnly,
788
- });
789
-
790
- // Restore the caret/selection after a model-driven re-render.
791
- // The `value` the layout effect last saw — it also re-runs on mentions/readOnly
792
- // changes, which must not be mistaken for a new value arriving.
793
- const seenValueRef = useRef(value);
794
- useLayoutEffect(() => {
795
- const valueChanged = value !== seenValueRef.current;
796
- seenValueRef.current = value;
797
- // External value replacement (parent sets a wholly different doc) — reset
798
- // history so Undo can't travel back into the old document's timeline. Only
799
- // when `value` actually changed: during a pending (unconfirmed) edit,
800
- // present.doc runs ahead of an unchanged value.
801
- if (valueChanged && value !== historyRef.current.present.doc) {
802
- historyRef.current = historyReset({ doc: value, selection: null });
803
- syncHistoryFlags();
804
- // A programmatic value swap fires no user `selectionchange`, so the
805
- // consolidated listener below never re-runs the mention menu for it.
806
- // Recompute here so an external swap updates/closes the menu. Internal
807
- // commits keep `present.doc === value`, so they DON'T reach this branch —
808
- // no per-keystroke double-recompute is reintroduced.
809
- if (mentionsEnabled) {
810
- const r = rootRef.current;
811
- recomputeMention(r ? readSelection(r) : null);
812
- }
813
- }
814
- const root = rootRef.current;
815
- // A pending edit's doc arriving late = accepted (keep its caret); any OTHER
816
- // value arriving first = it was rejected, so its caret must not fire here.
817
- const unconfirmed = unconfirmedRef.current;
818
- if (unconfirmed && valueChanged) {
819
- if (value !== unconfirmed.doc) pendingSelectionRef.current = null;
820
- unconfirmedRef.current = null;
821
- }
822
- const pending = pendingSelectionRef.current;
823
- // Not while an edit is still awaiting acceptance: its caret belongs to a doc
824
- // the DOM doesn't show yet (written once that value arrives, or dropped).
825
- if (root && pending && !unconfirmedRef.current) {
826
- writeSelection(root, pending.range);
827
- pendingSelectionRef.current = null;
828
- // Only with the selection it was bundled with (a commit / undo / redo) —
829
- // never on an unrelated re-run such as a readOnly toggle.
830
- const afterVoid = pending.afterVoid;
831
- const fig = afterVoid
832
- ? root.querySelector(`[data-block-id="${CSS.escape(afterVoid)}"]`)
833
- : null;
834
- if (fig) {
835
- // At the END of the figure's content — where Chrome's own Ctrl+End puts
836
- // it. A root-level caret after a trailing contentEditable=false figure
837
- // has no visible position: Chrome snaps it to the start of the editor.
838
- const r = fig.ownerDocument.createRange();
839
- r.setStart(fig, fig.childNodes.length);
840
- r.collapse(true);
841
- const sel = fig.ownerDocument.getSelection();
842
- sel?.removeAllRanges();
843
- sel?.addRange(r);
844
- }
845
- }
846
- }, [value, syncHistoryFlags, mentionsEnabled, recomputeMention]);
847
-
848
- // Native beforeinput (React's onBeforeInput is NOT the modern beforeinput —
849
- // it's a legacy textInput polyfill that carries no `inputType`).
850
- useEffect(() => {
851
- const root = rootRef.current;
852
- if (!root) return;
853
- const onBeforeInput = (e: InputEvent) => {
854
- const { value: doc, readOnly: ro, autolink: autolinkOn, renderLink: rl } = latest.current;
855
- if (ro || isComposingRef.current) return;
856
- // Undo/redo via beforeinput. Always preventDefault so the browser's native
857
- // contentEditable undo never mutates the DOM under the controlled model.
858
- // A ⌘Z/⌘⇧Z/⌘Y keydown ALSO emits a paired historyUndo/historyRedo here —
859
- // the keydown handler already ran onUndo/onRedo, so skip that one (within a
860
- // short window of the keydown). A menu/trackpad undo emits no keydown, so it
861
- // falls through and is honored here.
862
- if (e.inputType === 'historyUndo' || e.inputType === 'historyRedo') {
863
- e.preventDefault();
864
- if (Date.now() - historyKeyAtRef.current < 100) return;
865
- if (e.inputType === 'historyUndo') onUndo();
866
- else onRedo();
867
- return;
868
- }
869
- const range = readSelection(root);
870
- if (!range) {
871
- // Unmappable selection: never cede an editing input to the browser —
872
- // an un-prevented default insert/delete mutates the contentEditable
873
- // DOM outside the model (permanent DOM/model divergence, #321). A
874
- // dropped keystroke is recoverable; a future resolver bug surfaces
875
- // as dropped keystrokes instead of DOM corruption — acceptable.
876
- if (e.inputType.startsWith('insert') || e.inputType.startsWith('delete'))
877
- e.preventDefault();
878
- return;
879
- }
880
- // Markdown block input rules: a marker + space at the start of a paragraph
881
- // converts the block (e.g. "# " → heading, "- " → bullet). The space is
882
- // consumed; one commit → one undo step (⌘Z reverts the conversion).
883
- if (e.inputType === 'insertText' && e.data === ' ' && isCollapsed(range)) {
884
- const block = doc.blocks.find((b) => b.id === range.anchor.blockId);
885
- if (block) {
886
- const before = runsText(block.inlines).slice(0, range.anchor.offset);
887
- const match = matchBlockRule(block.type, before, ' ');
888
- if (match) {
889
- e.preventDefault();
890
- clearPendingMarks();
891
- commit(applyBlockRule(doc, block.id, match), 'other');
892
- return;
893
- }
894
- }
895
- }
896
- // Autolink on type: typing a space after a URL links the URL AND inserts the
897
- // space — both in one commit (one undo step). `applyTypeAutolink` inserts the
898
- // boundary first (so it stays OUTSIDE the link) and links only the URL. Skips
899
- // when the caret is already inside a link.
900
- if (
901
- autolinkOn !== false &&
902
- e.inputType === 'insertText' &&
903
- e.data === ' ' &&
904
- isCollapsed(range)
905
- ) {
906
- const linked = applyTypeAutolink(doc, range.anchor, e.data);
907
- if (linked) {
908
- e.preventDefault();
909
- clearPendingMarks();
910
- commit(linked, 'type');
911
- return;
912
- }
913
- }
914
- // Atomic delete: a Backspace just after (or Delete just before) a link that
915
- // `renderLink` resolves to a custom chip removes the whole link in one step.
916
- // `isResolved` probes `renderLink` with a stable fallback sentinel: a custom
917
- // return (chip) is `!== FALLBACK_SENTINEL`; declining returns the sentinel.
918
- if (
919
- rl &&
920
- (e.inputType === 'deleteContentBackward' || e.inputType === 'deleteContentForward') &&
921
- isCollapsed(range)
922
- ) {
923
- const dir = e.inputType === 'deleteContentBackward' ? 'backward' : 'forward';
924
- const isResolved = (href: string) =>
925
- rl({ href, text: href }, FALLBACK_SENTINEL) !== FALLBACK_SENTINEL;
926
- const delRange = atomicLinkDeleteRange(doc, range.anchor, dir, isResolved);
927
- if (delRange) {
928
- e.preventDefault();
929
- clearPendingMarks();
930
- commit(deleteRange(doc, delRange), 'delete');
931
- return;
932
- }
933
- }
934
- // Delete/Backspace beside a void: the model has one position per void, so
935
- // the DOM side decides (see voidDelete) — never delete it from the wrong side.
936
- if (/^delete.*(Backward|Forward)$/.test(e.inputType) && isCollapsed(range)) {
937
- const vside = voidCaretSide(root, range.anchor.blockId);
938
- if (vside) {
939
- e.preventDefault();
940
- const dir = /Backward$/.test(e.inputType) ? 'backward' : 'forward';
941
- applyVoidDelete(voidDelete(doc, range.anchor.blockId, vside.side, dir));
942
- return;
943
- }
944
- }
945
- // Pending marks: a mark toggled at a collapsed caret applies to the next
946
- // text typed at that same caret (takePendingAt drops it anywhere else).
947
- const pend = takePendingAt(range.anchor);
948
- if (pend && e.inputType === 'insertText' && isCollapsed(range) && e.data) {
949
- e.preventDefault();
950
- commit(insertWithMarks(doc, range.anchor, e.data, pend), 'type');
951
- return;
952
- }
953
- const data = e.data ?? e.dataTransfer?.getData('text/plain') ?? null;
954
- const result = applyInput(doc, range, e.inputType, data);
955
- if (result === null) {
956
- // Unsupported (incl. format* from ⌘B) — stop the browser editing, no
957
- // model change. Marks are handled in onKeyDown to avoid a double-toggle.
958
- if (e.inputType.startsWith('format')) e.preventDefault();
959
- return;
960
- }
961
- e.preventDefault();
962
- const kind: EditKind =
963
- e.inputType === 'insertText' ||
964
- e.inputType === 'insertCompositionText' ||
965
- e.inputType === 'insertReplacementText'
966
- ? 'type'
967
- : e.inputType.startsWith('delete')
968
- ? 'delete'
969
- : 'other';
970
- commit(result, kind);
971
- };
972
- root.addEventListener('beforeinput', onBeforeInput);
973
- return () => root.removeEventListener('beforeinput', onBeforeInput);
974
- }, [commit, onUndo, onRedo, takePendingAt, clearPendingMarks, applyVoidDelete]);
975
-
976
- // Rich paste: when the clipboard carries HTML, parse it into the model and
977
- // splice it at the selection. No usable HTML → if autolink is on and the
978
- // plain text carries a URL, linkify it; otherwise don't preventDefault, so the
979
- // native beforeinput path inserts text/plain (unchanged behavior).
980
- useEffect(() => {
981
- const root = rootRef.current;
982
- if (!root) return;
983
- const onPaste = (e: ClipboardEvent) => {
984
- if (latest.current.readOnly) return;
985
- // File paste (images/files from the clipboard) → upload. Takes priority
986
- // over HTML/URL paste. Gated on `upload` being configured.
987
- if (latest.current.upload && !latest.current.readOnly) {
988
- const files = Array.from(e.clipboardData?.files ?? []);
989
- if (files.length > 0) {
990
- e.preventDefault();
991
- uploaderRef.current.uploadFiles(files);
992
- return;
993
- }
994
- }
995
- const html = e.clipboardData?.getData('text/html');
996
- if (html && html.trim()) {
997
- const range = readSelection(root);
998
- if (!range) return;
999
- const fragment = fromHtml(html);
1000
- if (isEmptyDoc(fragment)) return;
1001
- e.preventDefault();
1002
- commit(insertFragment(latest.current.value, range, fragment));
1003
- return;
1004
- }
1005
- // No usable HTML — autolink plain-text URLs.
1006
- if (latest.current.autolink === false) return;
1007
- const plain = e.clipboardData?.getData('text/plain');
1008
- if (!plain || !plain.trim()) return;
1009
- const runs = linkifyRuns(plain);
1010
- const hasLink = runs.some((r) => r.marks.some((m) => m.type === 'link'));
1011
- if (!hasLink) return; // no URL → let the native path insert the text
1012
- const range = readSelection(root);
1013
- if (!range) return;
1014
- const trimmed = plain.trim();
1015
- const whole = findUrl(trimmed);
1016
- // A single bare URL pasted over a selection → link the selection in place.
1017
- if (!isCollapsed(range) && whole && whole.start === 0 && whole.end === trimmed.length) {
1018
- e.preventDefault();
1019
- commit(setLink(latest.current.value, range, trimmed));
1020
- return;
1021
- }
1022
- // Otherwise splice a one-paragraph fragment of linkified runs.
1023
- const fragment: RichDoc = {
1024
- blocks: [{ id: nextId(), type: 'paragraph', inlines: runs }],
1025
- };
1026
- e.preventDefault();
1027
- commit(insertFragment(latest.current.value, range, fragment));
1028
- };
1029
- root.addEventListener('paste', onPaste);
1030
- return () => root.removeEventListener('paste', onPaste);
1031
- }, [commit]);
1032
-
1033
- useEffect(() => {
1034
- if (autoFocus) rootRef.current?.focus();
1035
- }, [autoFocus]);
1036
-
1037
- // ONE selectionchange subscription shared by the toolbar, block-controls caret
1038
- // tracking, and the mention menu. A caret move (incl. every keystroke, which
1039
- // moves the caret) reads the model selection ONCE here and fans it out, instead
1040
- // of three independent listeners each re-walking the DOM via their own
1041
- // readSelection. Only subscribed when at least one consumer needs it.
1042
- useEffect(() => {
1043
- const toolbarOn = toolbar && !readOnly;
1044
- if (!toolbarOn && !controlsOn && !mentionsEnabled) return;
1045
- const onSelChange = () => {
1046
- const root = rootRef.current;
1047
- const sel = root ? readSelection(root) : null;
1048
- if (toolbarOn) {
1049
- setSelection(sel);
1050
- if (sel != null) lastSelectionRef.current = sel;
1051
- // Abandon pending marks if the caret left its staged point (the user
1052
- // moved the caret or made a selection instead of typing there).
1053
- const pend = pendingMarksRef.current;
1054
- const stagedAt = pendingAtRef.current;
1055
- const sameSpot =
1056
- sel != null &&
1057
- isCollapsed(sel) &&
1058
- stagedAt != null &&
1059
- sel.anchor.blockId === stagedAt.blockId &&
1060
- sel.anchor.offset === stagedAt.offset;
1061
- if (pend && !sameSpot) {
1062
- clearPendingMarks();
1063
- }
1064
- }
1065
- if (controlsOn) {
1066
- // Caret → active block (keyboard users get a gutter target too). Reads the
1067
- // NATIVE selection's anchorNode directly (not the model `sel` above): a
1068
- // root-level caret beside a void block resolves to no data-block-id here,
1069
- // leaving the active block unchanged — the original behavior, preserved.
1070
- const domSel = root?.ownerDocument.getSelection();
1071
- if (domSel && root && domSel.anchorNode && root.contains(domSel.anchorNode)) {
1072
- const id = blockIdFromNode(domSel.anchorNode);
1073
- if (id) setCaretBlockId(id);
1074
- }
1075
- }
1076
- if (mentionsEnabled) recomputeMention(sel);
1077
- };
1078
- document.addEventListener('selectionchange', onSelChange);
1079
- return () => document.removeEventListener('selectionchange', onSelChange);
1080
- }, [
1081
- toolbar,
1082
- readOnly,
1083
- controlsOn,
1084
- mentionsEnabled,
1085
- blockIdFromNode,
1086
- recomputeMention,
1087
- clearPendingMarks,
1088
- ]);
1089
-
1090
- // Initial mention computation: on mount, when mentions toggle on, or when the
1091
- // trigger changes. The selectionchange listener above covers caret moves AND
1092
- // typing (a typed char commits → writeSelection re-sets the DOM selection →
1093
- // selectionchange fires), so this deliberately omits `value` from its deps —
1094
- // depending on it would recompute a second time per keystroke, the very
1095
- // redundancy this consolidation removes.
1096
- useEffect(() => {
1097
- if (!mentionsEnabled) return;
1098
- const root = rootRef.current;
1099
- recomputeMention(root ? readSelection(root) : null);
1100
- }, [mentionsEnabled, mentions?.trigger, recomputeMention]);
1101
-
1102
- // Hover tracking (mouse). Listens on the SHELL (which wraps both the editable and
1103
- // the gutter) so reaching from a block onto its controls keeps them alive:
1104
- // `mouseover` over the gutter finds no `data-block-id` on the walk up (the gutter
1105
- // isn't inside the editable), so blockIdFromNode returns null and hoverBlockId is
1106
- // left unchanged — keeping the controls alive as you reach for them. `mouseleave`
1107
- // on the shell fires only when the pointer truly leaves the editor → clear hover.
1108
- useEffect(() => {
1109
- if (!controlsOn) return;
1110
- const shell = shellRef.current;
1111
- if (!shell) return;
1112
- const onOver = (e: MouseEvent) => {
1113
- // Don't let hover steal the active block while the menu is open (its actions
1114
- // are bound to the active block) or while a drag is in progress.
1115
- if (blockMenuOpenRef.current || draggingRef.current) return;
1116
- const id = blockIdFromNode(e.target as Node);
1117
- if (id) setHoverBlockId(id);
1118
- };
1119
- // The gutter (+ / ⠿) and the reserved left column are NOT inside the editable,
1120
- // so `mouseover` there resolves to no block id and would leave the controls
1121
- // stranded on whichever row was last hovered. Track the pointer's height while
1122
- // it's over that controls column and activate the row at that height — so
1123
- // hovering the controls area reveals/follows the adjacent row's controls.
1124
- // Scoped to the no-block case so block-targeted hovers stay on the cheap
1125
- // `mouseover` path; `mousemove` (not `mouseover`) is needed because sliding
1126
- // within the column fires no new `mouseover`.
1127
- // blockAtPointerY is an O(blocks) getBoundingClientRect scan, so resolve the
1128
- // gutter-column hover at most once per animation frame: capture the latest move
1129
- // on every event, but coalesce the actual resolution into a single rAF.
1130
- let moveRaf = 0;
1131
- let lastMove: { clientY: number; target: EventTarget | null } | null = null;
1132
- const onMove = (e: MouseEvent) => {
1133
- if (blockMenuOpenRef.current || draggingRef.current) return;
1134
- // capture the latest move; resolve at most once per frame
1135
- lastMove = { clientY: e.clientY, target: e.target };
1136
- if (moveRaf) return;
1137
- moveRaf = requestAnimationFrame(() => {
1138
- moveRaf = 0;
1139
- const m = lastMove;
1140
- if (!m) return;
1141
- const root = rootRef.current;
1142
- if (!root) return;
1143
- // Only the editable's OWN area (its reserved left column / padding). The gutter
1144
- // overlay is a sibling of the editable, not a descendant, so this skips it —
1145
- // its buttons stay alive via onOver's leave-unchanged path, and we never fight
1146
- // the controls the pointer is aiming for.
1147
- if (!root.contains(m.target as Node)) return;
1148
- if (blockIdFromNode(m.target as Node)) return; // a real block hover — onOver has it
1149
- const id = blockAtPointerY(root, m.clientY);
1150
- if (id) setHoverBlockId(id);
1151
- });
1152
- };
1153
- const onLeave = () => {
1154
- // Keep the active block while the menu is open or a drag is mid-flight.
1155
- if (blockMenuOpenRef.current || draggingRef.current) return;
1156
- setHoverBlockId(null);
1157
- };
1158
- shell.addEventListener('mouseover', onOver);
1159
- shell.addEventListener('mousemove', onMove);
1160
- shell.addEventListener('mouseleave', onLeave);
1161
- return () => {
1162
- shell.removeEventListener('mouseover', onOver);
1163
- shell.removeEventListener('mousemove', onMove);
1164
- shell.removeEventListener('mouseleave', onLeave);
1165
- if (moveRaf) cancelAnimationFrame(moveRaf);
1166
- };
1167
- }, [controlsOn, blockIdFromNode, blockAtPointerY]);
1168
-
1169
- // Image-hover tracking (mouse) → drives the resize handle. Independent of the
1170
- // blockControls hover/caret tracking above so the handle shows for ANY
1171
- // previewable image, even in a toolbar-only composer (no blockControls/upload).
1172
- // Gated on `usesShell` because the handle anchors into the shell — without a
1173
- // shell there's nowhere to position it. Listens on the SHELL so reaching from
1174
- // the image onto the handle (a shell child, outside the editable) keeps it alive.
1175
- useEffect(() => {
1176
- if (readOnly || !usesShell) return;
1177
- const shell = shellRef.current;
1178
- if (!shell) return;
1179
- const onOver = (e: MouseEvent) => {
1180
- if (draggingRef.current) return; // don't retarget mid-drag (block OR resize)
1181
- const t = e.target as HTMLElement;
1182
- const id = imageFigureIdAt(t);
1183
- if (id) {
1184
- setHoveredImageId(id);
1185
- return;
1186
- }
1187
- // Over the handle itself → keep it alive (it sits at the image's corner,
1188
- // just outside the figure, so it wouldn't match imageFigureIdAt).
1189
- if (t.closest?.('[data-rte-resize-handle]')) return;
1190
- setHoveredImageId(null); // over text/other content → clear
1191
- };
1192
- const onLeave = () => {
1193
- if (!draggingRef.current) setHoveredImageId(null);
1194
- };
1195
- shell.addEventListener('mouseover', onOver);
1196
- shell.addEventListener('mouseleave', onLeave);
1197
- return () => {
1198
- shell.removeEventListener('mouseover', onOver);
1199
- shell.removeEventListener('mouseleave', onLeave);
1200
- };
1201
- }, [readOnly, usesShell, imageFigureIdAt]);
1202
-
1203
- const onKeyDown = useCallback(
1204
- (e: React.KeyboardEvent<HTMLDivElement>) => {
1205
- if (readOnly) return;
1206
- const root = rootRef.current;
1207
- if (!root) return;
1208
- // Undo/redo don't need a live selection — check them BEFORE the
1209
- // readSelection guard so ⌘Z still works if the caret was lost. stopPropagation
1210
- // keeps the shortcut from triggering a host app's undo. preventDefault
1211
- // suppresses the browser's native contentEditable undo. We stamp the time so
1212
- // the paired historyUndo/historyRedo beforeinput (emitted by this same
1213
- // keydown) is skipped there rather than double-applied.
1214
- const mod = e.metaKey || e.ctrlKey;
1215
- if (mod && isLetterKey(e, 'z') && !e.shiftKey) {
1216
- e.preventDefault();
1217
- e.stopPropagation();
1218
- historyKeyAtRef.current = Date.now();
1219
- onUndo();
1220
- return;
1221
- }
1222
- if (mod && (isLetterKey(e, 'y') || (isLetterKey(e, 'z') && e.shiftKey))) {
1223
- e.preventDefault();
1224
- e.stopPropagation();
1225
- historyKeyAtRef.current = Date.now();
1226
- onRedo();
1227
- return;
1228
- }
1229
- const range = readSelection(root);
1230
- if (!range) return;
1231
- if (controlsOn) {
1232
- const caretBlock = range.anchor.blockId;
1233
- if (mod && e.shiftKey && (e.key === 'ArrowUp' || e.key === 'ArrowDown')) {
1234
- e.preventDefault();
1235
- e.stopPropagation();
1236
- commit(moveBlockUnit(value, caretBlock, e.key === 'ArrowUp' ? -1 : 1), 'other');
1237
- return;
1238
- }
1239
- if (mod && !e.shiftKey && isLetterKey(e, 'd')) {
1240
- e.preventDefault();
1241
- e.stopPropagation();
1242
- commit(duplicateBlockUnit(value, caretBlock), 'other');
1243
- return;
1244
- }
1245
- if ((e.shiftKey && e.key === 'F10') || e.key === 'ContextMenu') {
1246
- e.preventDefault();
1247
- // Clear hover so the menu binds to the caret block, not a stale hovered one.
1248
- setHoverBlockId(null);
1249
- setCaretBlockId(caretBlock);
1250
- setBlockMenuOpen(true);
1251
- return;
1252
- }
1253
- }
1254
- // Caret INSIDE a void block's contentEditable=false figure (e.g. after a
1255
- // doc-final image): browsers fire NO beforeinput there, only keydown, so
1256
- // route the editing keys ourselves. Only for keys aimed at the editable —
1257
- // an attachment's own Retry/Remove buttons keep theirs.
1258
- const vcaret =
1259
- e.target === root && isCollapsed(range) && !e.nativeEvent.isComposing
1260
- ? voidCaretSide(root, range.anchor.blockId)
1261
- : null;
1262
- if (vcaret?.inside) {
1263
- // A single character, not a shortcut. Ctrl+Alt is AltGr on Windows
1264
- // (e.g. "@" on a German layout), so that still counts as typing.
1265
- const printable = [...e.key].length === 1 && !e.metaKey && (!e.ctrlKey || e.altKey);
1266
- if (printable) {
1267
- e.preventDefault();
1268
- const pend = takePendingAt(range.anchor);
1269
- commit(
1270
- pend
1271
- ? insertWithMarks(value, range.anchor, e.key, pend)
1272
- : insertText(value, range.anchor, e.key),
1273
- 'type',
1274
- );
1275
- return;
1276
- }
1277
- if (!mod && e.key === 'Enter') {
1278
- e.preventDefault();
1279
- commit(applyInput(value, range, 'insertParagraph', null)!, 'other');
1280
- return;
1281
- }
1282
- if (!mod && (e.key === 'Backspace' || e.key === 'Delete')) {
1283
- e.preventDefault();
1284
- const dir = e.key === 'Backspace' ? 'backward' : 'forward';
1285
- applyVoidDelete(voidDelete(value, range.anchor.blockId, vcaret.side, dir));
1286
- return;
1287
- }
1288
- }
1289
- // Mention menu navigation takes priority over editor keys when open.
1290
- if (mention.open && mention.items.length > 0) {
1291
- if (e.key === 'ArrowDown') {
1292
- e.preventDefault();
1293
- mention.move(1);
1294
- return;
1295
- }
1296
- if (e.key === 'ArrowUp') {
1297
- e.preventDefault();
1298
- mention.move(-1);
1299
- return;
1300
- }
1301
- if (e.key === 'Enter' || e.key === 'Tab') {
1302
- e.preventDefault();
1303
- mention.commitActive();
1304
- return;
1305
- }
1306
- }
1307
- if (mention.open && e.key === 'Escape') {
1308
- e.preventDefault();
1309
- e.stopPropagation();
1310
- mention.close();
1311
- return;
1312
- }
1313
- // ⌘/Ctrl+K opens the link editor (create or edit a link). Stop
1314
- // propagation so the shortcut doesn't ALSO trigger a host app's global
1315
- // ⌘K (command palette / search) while the editor is focused.
1316
- if ((e.metaKey || e.ctrlKey) && !e.shiftKey && isLetterKey(e, 'k')) {
1317
- e.preventDefault();
1318
- e.stopPropagation();
1319
- openLinkEditor();
1320
- return;
1321
- }
1322
-
1323
- const blockType = deriveCurrentBlock(value, range)?.type;
1324
- const inList = blockType === 'bullet_item' || blockType === 'ordered_item';
1325
-
1326
- // Tab / Shift+Tab indent/outdent — only inside a list, so Tab still
1327
- // moves focus out of the editor everywhere else (keyboard a11y).
1328
- if (e.key === 'Tab' && inList) {
1329
- e.preventDefault();
1330
- commit(runIndent(value, range, e.shiftKey ? 'out' : 'in'));
1331
- return;
1332
- }
1333
-
1334
- // Enter in an EMPTY list item exits the list (→ paragraph).
1335
- if (e.key === 'Enter' && inList && isCollapsed(range)) {
1336
- const idx = value.blocks.findIndex((b) => b.id === range.anchor.blockId);
1337
- if (idx !== -1 && blockLength(value.blocks[idx]) === 0) {
1338
- e.preventDefault();
1339
- commit(runSetBlock(value, range, { type: 'paragraph' }));
1340
- return;
1341
- }
1342
- }
1343
-
1344
- // Mark shortcut: with a collapsed caret, stage a pending mark for the
1345
- // next typed text instead of a no-op toggle; with a selection, toggle it.
1346
- const mark = shortcutMark(e);
1347
- if (mark) {
1348
- e.preventDefault();
1349
- stageOrToggleMark(range, mark);
1350
- return;
1351
- }
1352
- },
1353
- [
1354
- value,
1355
- readOnly,
1356
- commit,
1357
- stageOrToggleMark,
1358
- openLinkEditor,
1359
- onUndo,
1360
- onRedo,
1361
- mention,
1362
- controlsOn,
1363
- takePendingAt,
1364
- applyVoidDelete,
1365
- ],
1366
- );
1367
-
1368
- // Snapshot at compositionstart — the last moment the DOM and the model agree:
1369
- // the selection, and the anchor block's own DOM text (in model offsets).
1370
- const compositionRef = useRef<{ range: Range; before: string } | null>(null);
1371
- const onCompositionStart = useCallback(() => {
1372
- isComposingRef.current = true;
1373
- const root = rootRef.current;
1374
- const range = root ? readSelection(root) : null;
1375
- const before = range && root ? blockOwnText(root, range.anchor.blockId) : null;
1376
- compositionRef.current = range && before != null ? { range, before } : null;
1377
- }, []);
1378
-
1379
- const onCompositionEnd = useCallback(
1380
- (e: React.CompositionEvent<HTMLDivElement>) => {
1381
- isComposingRef.current = false;
1382
- const snap = compositionRef.current;
1383
- compositionRef.current = null;
1384
- const root = rootRef.current;
1385
- if (readOnly || !root || !snap) return;
1386
- const { range, before } = snap;
1387
- // A selection across blocks: the browser merged them in the DOM, so a text
1388
- // diff of one block can't see it — replace the captured range instead.
1389
- if (range.anchor.blockId !== range.focus.blockId) {
1390
- const result = applyInput(value, range, 'insertText', e.data);
1391
- if (result) commit(result, 'type');
1392
- return;
1393
- }
1394
- // The browser composed into the DOM ahead of the model. Diff the block's
1395
- // own text before vs after (common prefix + suffix) to find exactly what
1396
- // changed — no caret math, so an IME that recomposes an existing word
1397
- // (Android Gboard), leaves the caret mid-word, or commits unchanged is
1398
- // handled. The re-render then snaps the DOM back to the model.
1399
- const blockId = range.anchor.blockId;
1400
- const after = blockOwnText(root, blockId);
1401
- if (after == null || after === before) return;
1402
- // Cap the prefix at the composition start: in a repeated run ("ab" + "b")
1403
- // the change can't begin after the caret it started from.
1404
- const startCap = Math.min(range.anchor.offset, range.focus.offset);
1405
- let pre = 0;
1406
- while (pre < startCap && pre < after.length && before[pre] === after[pre]) pre += 1;
1407
- // ...and the suffix at the end of the snapshot selection (it was replaced).
1408
- const endCap = before.length - Math.max(range.anchor.offset, range.focus.offset);
1409
- let suf = 0;
1410
- while (
1411
- suf < Math.min(endCap, before.length - pre) &&
1412
- suf < after.length - pre &&
1413
- before[before.length - 1 - suf] === after[after.length - 1 - suf]
1414
- )
1415
- suf += 1;
1416
- const replaced: Range = {
1417
- anchor: { blockId, offset: pre },
1418
- focus: { blockId, offset: before.length - suf },
1419
- };
1420
- const inserted = after.slice(pre, after.length - suf);
1421
- const result = inserted
1422
- ? applyInput(value, replaced, 'insertText', inserted)
1423
- : applyInput(value, replaced, 'deleteContentBackward', null);
1424
- if (result) commit(result, 'type');
1425
- },
1426
- [value, readOnly, commit],
1427
- );
1428
-
1429
- // Active marks + current block derived from the live selection for the toolbar.
1430
- const toolbarMarks = useMemo<MarkType[]>(
1431
- () => (selection ? deriveActiveMarks(value, selection, pendingMarks) : []),
1432
- [value, selection, pendingMarks],
1433
- );
1434
- const toolbarColors = useMemo(
1435
- () => (selection ? deriveActiveColors(value, selection, pendingMarks) : {}),
1436
- [value, selection, pendingMarks],
1437
- );
1438
- const toolbarBlock = useMemo<BlockChoice | null>(
1439
- () => (selection ? deriveCurrentBlock(value, selection) : null),
1440
- [value, selection],
1441
- );
1442
- const toolbarLinkActive = useMemo<boolean>(
1443
- () => (selection ? linkAt(value, selection.focus) != null : false),
1444
- [value, selection],
1445
- );
1446
-
1447
- // Toolbar dispatch — read the live selection (falling back to tracked state)
1448
- // and route through the same commit path the keyboard uses. A mark at a
1449
- // collapsed caret stages a pending mark, mirroring the keyboard shortcut.
1450
- const onInsertEmoji = useCallback(
1451
- (emoji: string) => {
1452
- const root = rootRef.current;
1453
- const range = (root ? readSelection(root) : null) ?? lastSelectionRef.current;
1454
- if (!range) return;
1455
- const result = applyInput(latest.current.value, range, 'insertText', emoji);
1456
- if (result) {
1457
- commit(result);
1458
- root?.focus(); // keep the editor focused so typing continues after the pick
1459
- }
1460
- },
1461
- [commit],
1462
- );
1463
-
1464
- const onToolbarMark = useCallback(
1465
- (type: MarkType) => {
1466
- // Value-carrying marks aren't plain toggles: link needs an href, mention an
1467
- // id+label, textColor/bgColor a palette key — this toolbar path fires none.
1468
- if (type === 'link' || type === 'mention' || type === 'textColor' || type === 'bgColor')
1469
- return;
1470
- const root = rootRef.current;
1471
- // lastSelectionRef = last non-null selection; survives a toolbar popover taking focus
1472
- const range = (root ? readSelection(root) : null) ?? lastSelectionRef.current;
1473
- if (range) stageOrToggleMark(range, { type });
1474
- },
1475
- [stageOrToggleMark],
1476
- );
1477
- const onToolbarSetBlock = useCallback(
1478
- (choice: BlockChoice) => {
1479
- const root = rootRef.current;
1480
- const range = (root ? readSelection(root) : null) ?? lastSelectionRef.current;
1481
- if (range) commit(runSetBlock(latest.current.value, range, choice));
1482
- },
1483
- [commit],
1484
- );
1485
- const onToolbarToggleList = useCallback(
1486
- (listType: 'bullet_item' | 'ordered_item') => {
1487
- const root = rootRef.current;
1488
- const range = (root ? readSelection(root) : null) ?? lastSelectionRef.current;
1489
- if (range) commit(runToggleList(latest.current.value, range, listType));
1490
- },
1491
- [commit],
1492
- );
1493
-
1494
- const onPickFiles = useCallback(() => uploadInputRef.current?.click(), []);
1495
-
1496
- const onBlockInsertBelow = useCallback(
1497
- (id: string) => commit(insertEmptyBlockBelow(latest.current.value, id), 'other'),
1498
- [commit],
1499
- );
1500
- const onBlockAction = useCallback(
1501
- (id: string, action: BlockAction) => {
1502
- const v = latest.current.value;
1503
- switch (action) {
1504
- case 'duplicate':
1505
- commit(duplicateBlockUnit(v, id), 'other');
1506
- break;
1507
- case 'moveUp':
1508
- commit(moveBlockUnit(v, id, -1), 'other');
1509
- break;
1510
- case 'moveDown':
1511
- commit(moveBlockUnit(v, id, 1), 'other');
1512
- break;
1513
- case 'delete':
1514
- commit(removeBlockUnit(v, id), 'other');
1515
- break;
1516
- default: {
1517
- // Exhaustiveness: a new BlockAction must be handled above.
1518
- const _never: never = action;
1519
- return _never;
1520
- }
1521
- }
1522
- setBlockMenuOpen(false);
1523
- },
1524
- [commit],
1525
- );
1526
- const onBlockTurnInto = useCallback(
1527
- (id: string, choice: BlockChoice) => {
1528
- const v = latest.current.value;
1529
- const range = { anchor: { blockId: id, offset: 0 }, focus: { blockId: id, offset: 0 } };
1530
- // "Turn into X" is an idempotent SET (not a toggle) on the single anchor
1531
- // block — choosing the block's current type is a no-op, never a revert.
1532
- // List types carry depth 0; runSetBlock routes both through setBlockType.
1533
- const patch =
1534
- choice.type === 'bullet_item' || choice.type === 'ordered_item'
1535
- ? { type: choice.type, depth: 0 }
1536
- : choice;
1537
- commit(runSetBlock(v, range, patch), 'other');
1538
- setBlockMenuOpen(false);
1539
- },
1540
- [commit],
1541
- );
1542
- const onBlockReorder = useCallback(
1543
- (id: string, targetIndex: number) =>
1544
- commit(moveBlockUnitToIndex(latest.current.value, id, targetIndex), 'other'),
1545
- [commit],
1546
- );
1547
- // Whole-block color from the ⠿ menu's Color submenu. Colors the block's full
1548
- // range via the shared setColorMark path, but commits with `keepSelection` so it
1549
- // does NOT writeSelection: the block menu owns focus and stays open, and the block
1550
- // isn't left visibly fully-selected after the pick.
1551
- const onBlockColor = useCallback(
1552
- (id: string, type: 'textColor' | 'bgColor', key: string | null) => {
1553
- const r = wholeBlockRange(latest.current.value, id);
1554
- if (r)
1555
- commit({ doc: setColorMark(latest.current.value, r, type, key), selection: r }, 'other', {
1556
- keepSelection: true,
1557
- });
1558
- },
1559
- [commit],
1560
- );
1561
-
1562
- // Attachment config popover: open-state + alt/align/width/reset/replace
1563
- // handlers (see useAttachmentConfig). The live-resize history coupling stays
1564
- // in this file via `commitResizeLive`; the popover JSX (which derives the
1565
- // configured block + anchor from render scope) is rendered below.
1566
- const {
1567
- configBlockId,
1568
- onConfigOpen,
1569
- onConfigClose,
1570
- onConfigAlt,
1571
- onConfigAlign,
1572
- onConfigWidth,
1573
- onConfigWidthReset,
1574
- onConfigReplace,
1575
- } = useAttachmentConfig({
1576
- rootRef,
1577
- commit,
1578
- commitResizeLive,
1579
- getValue,
1580
- getLiveDoc,
1581
- uploaderRef,
1582
- });
1583
- // Stable resize handler for the image resizer — keeps the memoized resizer from
1584
- // re-rendering every keystroke on a fresh inline lambda. Targets the hovered
1585
- // image; guards hoveredImageId so a late move after the hover clears is a no-op.
1586
- const onImageResize = useCallback(
1587
- (w: number) => {
1588
- if (hoveredImageId) onConfigWidth(hoveredImageId, w);
1589
- },
1590
- [onConfigWidth, hoveredImageId],
1591
- );
1592
-
1593
- // Delegate clicks on the error-state attachment Retry/Remove buttons (they
1594
- // carry data-attachment-action + data-block-id). On the editable so it works
1595
- // in every return branch, including the toolbar-less bare-fragment path.
1596
- const onEditableClick = useCallback((e: React.MouseEvent) => {
1597
- if (latest.current.readOnly) return; // never mutate a read-only doc
1598
- const el = (e.target as HTMLElement).closest?.('[data-attachment-action]');
1599
- if (!el) return;
1600
- const id = el.getAttribute('data-block-id');
1601
- const action = el.getAttribute('data-attachment-action');
1602
- if (!id) return;
1603
- if (action === 'retry') uploaderRef.current.retry(id);
1604
- else if (action === 'remove') uploaderRef.current.remove(id);
1605
- }, []);
1606
-
1607
- // The rendered doc tree is a pure fn of (value, renderLink, renderMention) — it
1608
- // does NOT depend on selection/hover/focus. Memoize so the whole element tree is
1609
- // not rebuilt on selection/hover/focus re-renders that leave the doc unchanged.
1610
- const content = useMemo(
1611
- () => renderDoc(value, { editable: true, renderLink, renderMention }),
1612
- [value, renderLink, renderMention],
1613
- );
1614
- // Signature of block order. `value.blocks` is a new array on every edit, so this
1615
- // recomputes per keystroke (a cheap join) — but the STRING is unchanged while
1616
- // typing within a block, so the gutter (blockOrderKey) and the image resizer's
1617
- // layoutKey keep their memoized shells stable.
1618
- const blockOrderKey = useMemo(() => value.blocks.map((b) => b.id).join('|'), [value.blocks]);
1619
-
1620
- const editable = (
1621
- <div
1622
- // {...rest} FIRST so the component's own role/aria/contentEditable/handlers
1623
- // below win — the textbox contract must be preserved (Rule 7, Pattern B).
1624
- // A consumer aria-label still flows in via the spread AND is read above to
1625
- // decide whether to fall back to the i18n default.
1626
- {...rest}
1627
- ref={setRefs}
1628
- style={imageMaxHeightStyle(imageMaxHeight, style)}
1629
- className={clsx(
1630
- styles.root,
1631
- readOnly && styles.readOnly,
1632
- controlsOn && styles.withGutter,
1633
- className,
1634
- )}
1635
- contentEditable={!readOnly}
1636
- suppressContentEditableWarning
1637
- role="textbox"
1638
- aria-multiline="true"
1639
- aria-readonly={readOnly || undefined}
1640
- aria-invalid={invalid || undefined}
1641
- aria-required={required || undefined}
1642
- // Mentions makes the textbox an editable combobox. role stays "textbox"
1643
- // (ARIA combobox is single-line only; this editor is multiline), with
1644
- // aria-autocomplete + aria-controls + aria-activedescendant describing the
1645
- // popup. Gated so a readOnly or mention-less editor advertises no popup.
1646
- aria-haspopup={mentions && !readOnly ? 'listbox' : undefined}
1647
- aria-autocomplete={mentions && !readOnly ? 'list' : undefined}
1648
- aria-expanded={mentions && !readOnly ? mention.open : undefined}
1649
- aria-controls={mention.open ? mention.listboxId : undefined}
1650
- aria-activedescendant={mention.open ? mention.activeOptionId : undefined}
1651
- aria-label={
1652
- rest['aria-label'] ||
1653
- (rest['aria-labelledby'] ? undefined : t('richTextEditor.editorLabel'))
1654
- }
1655
- data-empty={isEmptyDoc(value) ? '' : undefined}
1656
- data-placeholder={placeholder}
1657
- spellCheck
1658
- onKeyDown={onKeyDown}
1659
- onClick={onEditableClick}
1660
- onCompositionStart={onCompositionStart}
1661
- onCompositionEnd={onCompositionEnd}
1662
- // Only tracked for `toolbar="auto"` (gates the bar's visibility); omitted
1663
- // otherwise so other modes never re-render on focus changes.
1664
- onFocus={autoToolbar ? () => setFocused(true) : undefined}
1665
- onBlur={autoToolbar ? () => setFocused(false) : undefined}
1666
- >
1667
- {content}
1668
- </div>
1669
- );
1670
-
1671
- const linkBubble =
1672
- linkEditor && !readOnly ? (
1673
- <RichTextLinkEditor
1674
- key={linkEditor.key}
1675
- href={linkEditor.href}
1676
- editing={linkEditor.editing}
1677
- anchorRect={linkEditor.anchorRect}
1678
- // Re-derive the anchor from the captured model range on each reposition so
1679
- // the bubble tracks the line on scroll (the editor's live selection is
1680
- // gone once the URL input takes focus, so re-measure the range, not it).
1681
- getAnchorRect={() =>
1682
- rootRef.current ? rangeRect(rootRef.current, linkEditor.range) : null
1683
- }
1684
- onApply={onLinkApply}
1685
- onRemove={onLinkRemove}
1686
- onCancel={onLinkCancel}
1687
- />
1688
- ) : null;
1689
-
1690
- const mentionMenu =
1691
- mention.open && !readOnly && mention.anchorRect ? (
1692
- <RichTextMentionMenu
1693
- items={mention.items}
1694
- activeIndex={mention.activeIndex}
1695
- anchorRect={mention.anchorRect}
1696
- getAnchorRect={mention.getAnchorRect}
1697
- listboxId={mention.listboxId}
1698
- getOptionId={mention.getOptionId}
1699
- label={t('richTextEditor.mentionsLabel')}
1700
- emptyLabel={t('richTextEditor.mentionsEmpty')}
1701
- onSelect={mention.selectIndex}
1702
- onHover={mention.setActiveIndex}
1703
- />
1704
- ) : null;
1705
-
1706
- const activeBlock = activeBlockId
1707
- ? value.blocks.find((b) => b.id === activeBlockId)
1708
- : undefined;
1709
- const activeBlockType = activeBlock?.type;
1710
- const canConfigure =
1711
- uploadOn && activeBlock?.type === 'attachment' && isAttachmentSettled(activeBlock);
1712
- const configBlock = configBlockId
1713
- ? value.blocks.find((b) => b.id === configBlockId)
1714
- : undefined;
1715
- const blockControlsEl = controlsOn ? (
1716
- <RichTextBlockControls
1717
- rootRef={shellRef}
1718
- activeBlockId={activeBlockId}
1719
- blockOrderKey={blockOrderKey}
1720
- activeBlockType={activeBlockType}
1721
- menuOpen={blockMenuOpen}
1722
- onMenuOpenChange={setBlockMenuOpen}
1723
- onInsertBelow={onBlockInsertBelow}
1724
- onAction={onBlockAction}
1725
- onTurnInto={onBlockTurnInto}
1726
- onReorder={onBlockReorder}
1727
- onConfigure={canConfigure ? onConfigOpen : undefined}
1728
- onColor={onBlockColor}
1729
- onDraggingChange={onBlockDraggingChange}
1730
- />
1731
- ) : null;
1732
-
1733
- // A bottom-right resize handle on the HOVERED previewable image — shown for any
1734
- // previewable image (a safe, fetchable src that renders as <img>) on hover, as
1735
- // long as the editor is editable and has a shell to anchor the handle in
1736
- // (`usesShell`). Independent of blockControls/upload/active-block: a pasted image
1737
- // in a toolbar-only composer gets a handle too. The keyboard-accessible Width
1738
- // slider remains the a11y path where blockControls+upload are configured (the
1739
- // Configure popover). The layoutKey carries the image's width so the handle
1740
- // re-measures as it resizes; `hidden` hides it during a block reorder (it can't
1741
- // track the in-place reflow), reappearing at the drop.
1742
- const resizableImage = hoveredImageId
1743
- ? value.blocks.find(
1744
- (b) =>
1745
- b.id === hoveredImageId &&
1746
- b.type === 'attachment' &&
1747
- // Settled = ready OR no status (a persisted/imported block drops its
1748
- // transient status); mirrors the renderer's "ready-or-absent" displayable
1749
- // rule so the handle can't drift from what's shown. See #263.
1750
- isAttachmentSettled(b) &&
1751
- attachmentIsImage(b) &&
1752
- !!safeHref(b.src ?? ''),
1753
- )
1754
- : undefined;
1755
- // Widest an image may be resized to: the content width, further limited so
1756
- // its height stays within the display cap (#644) — the handle/slider stop
1757
- // where the rendered image stops growing.
1758
- const imageWidthMax = (id: string) => {
1759
- const contentWidth = rootRef.current?.getBoundingClientRect().width ?? 600;
1760
- const img = rootRef.current?.querySelector<HTMLImageElement>(
1761
- `[data-block-id="${CSS.escape(id)}"] img`,
1762
- );
1763
- return img
1764
- ? capWidthToHeight(
1765
- contentWidth,
1766
- img.naturalWidth,
1767
- img.naturalHeight,
1768
- parseFloat(getComputedStyle(img).maxHeight),
1769
- )
1770
- : contentWidth;
1771
- };
1772
- const imageResizerEl =
1773
- !readOnly && usesShell && resizableImage ? (
1774
- <RichTextImageResizer
1775
- rootRef={shellRef}
1776
- blockId={hoveredImageId!}
1777
- layoutKey={`${blockOrderKey}:${resizableImage.width ?? ''}`}
1778
- maxWidth={imageWidthMax(hoveredImageId!)}
1779
- onResize={onImageResize}
1780
- onDraggingChange={setDragging}
1781
- hidden={blockDragging}
1782
- />
1783
- ) : null;
1784
-
1785
- const configEl =
1786
- configBlock &&
1787
- configBlock.type === 'attachment' &&
1788
- isAttachmentSettled(configBlock) &&
1789
- uploadOn
1790
- ? (() => {
1791
- const figEl = rootRef.current?.querySelector<HTMLElement>(
1792
- `[data-block-id="${CSS.escape(configBlock.id)}"]`,
1793
- );
1794
- const r = figEl?.getBoundingClientRect();
1795
- if (!r) return null;
1796
- return (
1797
- <RichTextAttachmentConfig
1798
- key={configBlock.id}
1799
- block={configBlock}
1800
- anchorRect={{ top: r.top, left: r.left, width: r.width, height: r.height }}
1801
- getAnchorRect={() => {
1802
- // Re-query the figure live so the popover tracks it on scroll.
1803
- const el = rootRef.current?.querySelector<HTMLElement>(
1804
- `[data-block-id="${CSS.escape(configBlock.id)}"]`,
1805
- );
1806
- if (!el) return null;
1807
- const b = el.getBoundingClientRect();
1808
- return { top: b.top, left: b.left, width: b.width, height: b.height };
1809
- }}
1810
- maxWidth={imageWidthMax(configBlock.id)}
1811
- accept={latest.current.upload?.accept}
1812
- onAltChange={(alt) => onConfigAlt(configBlock.id, alt)}
1813
- onAlignChange={(align) => onConfigAlign(configBlock.id, align)}
1814
- onWidthChange={(w) => onConfigWidth(configBlock.id, w)}
1815
- onWidthReset={() => onConfigWidthReset(configBlock.id)}
1816
- onReplace={(file) => onConfigReplace(configBlock.id, file)}
1817
- onClose={onConfigClose}
1818
- />
1819
- );
1820
- })()
1821
- : null;
1822
-
1823
- // Toolbar visibility. `true` → always; `'auto'` → focused, non-empty, or while
1824
- // one of the editor's own overlays is open (so opening the link editor on a
1825
- // focused-but-empty composer keeps the bar up rather than collapsing it). The
1826
- // overlay term is what survives the blur caused by the overlay stealing focus.
1827
- const overlayOpen = linkEditor != null || mention.open || toolbarOverlayOpen;
1828
- const showToolbar =
1829
- toolbar === true || (autoToolbar && (focused || !isEmptyDoc(value) || overlayOpen));
1830
- // `usesShell` (the stable `.shell` gate) is declared near the top so the
1831
- // image-hover effect can depend on it; it's reused here for the shell render.
1832
-
1833
- const toolbarBar = showToolbar ? (
1834
- <RichTextToolbar
1835
- activeMarks={toolbarMarks}
1836
- colors={toolbarColors}
1837
- onSetColor={onSetColor}
1838
- block={toolbarBlock}
1839
- disabled={readOnly}
1840
- onToggleMark={onToolbarMark}
1841
- onSetBlock={onToolbarSetBlock}
1842
- onToggleList={onToolbarToggleList}
1843
- linkActive={toolbarLinkActive}
1844
- onOpenLink={openLinkEditor}
1845
- canUndo={canUndo}
1846
- canRedo={canRedo}
1847
- onUndo={onUndo}
1848
- onRedo={onRedo}
1849
- onPickFiles={uploadOn ? onPickFiles : undefined}
1850
- onOverlayOpenChange={autoToolbar ? setToolbarOverlayOpen : undefined}
1851
- onInsertEmoji={onInsertEmoji}
1852
- />
1853
- ) : null;
1854
-
1855
- // The upload picker's input lives HERE, in the always-rendered shell, not in
1856
- // the toolbar: a native file dialog blurs the editable, and under
1857
- // `toolbar="auto"` on an empty doc that unmounts the bar — detaching the input
1858
- // mid-pick, so its `change` never reaches React and the file is silently lost.
1859
- const uploadInput = uploadOn ? (
1860
- <input
1861
- ref={uploadInputRef}
1862
- type="file"
1863
- multiple
1864
- accept={upload?.accept}
1865
- style={{ display: 'none' }}
1866
- onChange={(e) => {
1867
- const files = Array.from(e.target.files ?? []);
1868
- if (files.length) uploaderRef.current.uploadFiles(files);
1869
- e.target.value = ''; // allow re-picking the same file
1870
- }}
1871
- />
1872
- ) : null;
1873
-
1874
- // Always mounted while uploads are on, so only its text changes. Outside the
1875
- // editable: inside the textbox it would join the document's content.
1876
- const uploadStatus = uploadOn ? (
1877
- <LiveRegion>
1878
- {uploadFailure
1879
- ? [`${t('richTextEditor.uploadFailed')}: ${uploadFailure.name}`, uploadFailure.reason]
1880
- .filter(Boolean)
1881
- .join('. ')
1882
- : ''}
1883
- </LiveRegion>
1884
- ) : null;
1885
-
1886
- if (!usesShell) {
1887
- return (
1888
- <>
1889
- {uploadStatus}
1890
- {editable}
1891
- {linkBubble}
1892
- {mentionMenu}
1893
- </>
1894
- );
1895
- }
1896
- return (
1897
- <div className={styles.shell} ref={shellRef}>
1898
- {toolbarBar}
1899
- {uploadInput}
1900
- {uploadStatus}
1901
- {editable}
1902
- {linkBubble}
1903
- {mentionMenu}
1904
- {blockControlsEl}
1905
- {imageResizerEl}
1906
- {configEl}
1907
- </div>
1908
- );
1909
- },
1910
- );