@botiverse/raft-ui 0.50.0 → 0.52.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 (585) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/components/activity-inbox/activity-inbox-shell.d.mts +12 -0
  3. package/dist/components/activity-inbox/activity-inbox-shell.mjs +39 -0
  4. package/dist/components/activity-inbox/activity-inbox-shell.recipe.mjs +14 -0
  5. package/dist/components/activity-inbox/activity-inbox-sidebar.d.mts +6 -0
  6. package/dist/components/activity-inbox/activity-inbox-sidebar.mjs +22 -0
  7. package/dist/components/activity-inbox/activity-inbox-sidebar.recipe.mjs +22 -0
  8. package/dist/components/activity-inbox/activity-inbox-toolbar.d.mts +9 -0
  9. package/dist/components/activity-inbox/activity-inbox-toolbar.mjs +29 -0
  10. package/dist/components/activity-inbox/activity-inbox-toolbar.recipe.mjs +14 -0
  11. package/dist/components/activity-inbox/index.d.mts +4 -0
  12. package/dist/components/alert-dialog/alert-dialog.d.mts +41 -0
  13. package/dist/components/alert-dialog/alert-dialog.mjs +163 -0
  14. package/dist/components/alert-dialog/index.d.mts +2 -0
  15. package/dist/components/announcement-dialog/announcement-dialog.d.mts +18 -0
  16. package/dist/components/announcement-dialog/announcement-dialog.mjs +121 -0
  17. package/dist/components/announcement-dialog/index.d.mts +3 -0
  18. package/dist/components/app-rail/app-rail.d.mts +31 -0
  19. package/dist/components/app-rail/app-rail.mjs +126 -0
  20. package/dist/components/app-rail/app-rail.recipe.mjs +47 -0
  21. package/dist/components/app-rail/index.d.mts +2 -0
  22. package/dist/components/app-shell/app-shell.d.mts +27 -0
  23. package/dist/components/app-shell/app-shell.mjs +217 -0
  24. package/dist/components/app-shell/index.d.mts +2 -0
  25. package/dist/components/avatar/avatar.d.mts +169 -0
  26. package/dist/components/avatar/avatar.mjs +298 -0
  27. package/dist/components/avatar/index.d.mts +2 -0
  28. package/dist/components/badge/badge.d.mts +89 -0
  29. package/dist/components/badge/badge.mjs +203 -0
  30. package/dist/components/badge/index.d.mts +2 -0
  31. package/dist/components/banner/banner.d.mts +141 -0
  32. package/dist/components/banner/banner.mjs +228 -0
  33. package/dist/components/banner/index.d.mts +2 -0
  34. package/dist/components/button/button.d.mts +257 -0
  35. package/dist/components/button/button.mjs +177 -0
  36. package/dist/components/button/index.d.mts +2 -0
  37. package/dist/components/card/card.d.mts +21 -0
  38. package/dist/components/card/card.mjs +114 -0
  39. package/dist/components/card/card.recipe.d.mts +105 -0
  40. package/dist/components/card/card.recipe.mjs +67 -0
  41. package/dist/components/card/index.d.mts +2 -0
  42. package/dist/components/checkbox/checkbox-indicator.d.mts +92 -0
  43. package/dist/components/checkbox/checkbox-indicator.mjs +61 -0
  44. package/dist/components/checkbox/checkbox.d.mts +9 -0
  45. package/dist/components/checkbox/checkbox.mjs +40 -0
  46. package/dist/components/checkbox/index.d.mts +3 -0
  47. package/dist/components/choice-list/choice-list.d.mts +103 -0
  48. package/dist/components/choice-list/choice-list.mjs +301 -0
  49. package/dist/components/choice-list/choice-list.recipe.mjs +44 -0
  50. package/dist/components/choice-list/index.d.mts +2 -0
  51. package/dist/components/code-block/code-block.d.mts +30 -0
  52. package/dist/components/code-block/code-block.mjs +151 -0
  53. package/dist/components/code-block/code-block.recipe.mjs +47 -0
  54. package/dist/components/code-block/index.d.mts +2 -0
  55. package/dist/components/combobox/combobox.d.mts +69 -0
  56. package/dist/components/combobox/combobox.mjs +438 -0
  57. package/dist/components/combobox/index.d.mts +2 -0
  58. package/dist/components/combobox-select/combobox-select.d.mts +4 -0
  59. package/dist/components/combobox-select/combobox-select.list-side.mjs +16 -0
  60. package/dist/components/combobox-select/combobox-select.mjs +473 -0
  61. package/dist/components/combobox-select/combobox-select.options.mjs +21 -0
  62. package/dist/components/combobox-select/combobox-select.types.d.mts +83 -0
  63. package/dist/components/combobox-select/index.d.mts +3 -0
  64. package/dist/components/comment/comment-card.d.mts +40 -0
  65. package/dist/components/comment/comment-card.mjs +83 -0
  66. package/dist/components/comment/comment-entry.d.mts +24 -0
  67. package/dist/components/comment/comment-entry.mjs +75 -0
  68. package/dist/components/comment/comment-highlight.d.mts +18 -0
  69. package/dist/components/comment/comment-highlight.mjs +33 -0
  70. package/dist/components/comment/comment-margin-layout.d.mts +32 -0
  71. package/dist/components/comment/comment-margin-layout.mjs +44 -0
  72. package/dist/components/comment/comment-margin.d.mts +29 -0
  73. package/dist/components/comment/comment-margin.mjs +164 -0
  74. package/dist/components/comment/comment-marker.d.mts +16 -0
  75. package/dist/components/comment/comment-marker.mjs +24 -0
  76. package/dist/components/comment/comment.recipe.mjs +58 -0
  77. package/dist/components/comment/index.d.mts +8 -0
  78. package/dist/components/comment/use-comment-margin-fits.d.mts +16 -0
  79. package/dist/components/comment/use-comment-margin-fits.mjs +34 -0
  80. package/dist/components/composer/composer-attachment.recipe.mjs +85 -0
  81. package/dist/components/composer/composer-attachments-scroll-area.d.mts +5 -0
  82. package/dist/components/composer/composer-attachments-scroll-area.mjs +93 -0
  83. package/dist/components/composer/composer-attachments.d.mts +27 -0
  84. package/dist/components/composer/composer-attachments.mjs +147 -0
  85. package/dist/components/composer/composer-drop-overlay.d.mts +9 -0
  86. package/dist/components/composer/composer-drop-overlay.mjs +60 -0
  87. package/dist/components/composer/composer-drop-overlay.recipe.mjs +23 -0
  88. package/dist/components/composer/composer-root.d.mts +5 -0
  89. package/dist/components/composer/composer-root.mjs +18 -0
  90. package/dist/components/composer/composer-suggestion-list.d.mts +139 -0
  91. package/dist/components/composer/composer-suggestion-list.mjs +160 -0
  92. package/dist/components/composer/composer-toolbar-label.d.mts +5 -0
  93. package/dist/components/composer/composer-toolbar-label.mjs +24 -0
  94. package/dist/components/composer/composer.d.mts +20 -0
  95. package/dist/components/composer/composer.mjs +88 -0
  96. package/dist/components/composer/composer.recipe.mjs +29 -0
  97. package/dist/components/composer/index.d.mts +10 -0
  98. package/dist/components/composer/sortable-composer-attachments.d.mts +37 -0
  99. package/dist/components/composer/sortable-composer-attachments.mjs +247 -0
  100. package/dist/components/composer/use-composer-suggestions.d.mts +83 -0
  101. package/dist/components/composer/use-composer-suggestions.mjs +207 -0
  102. package/dist/components/context-menu/context-menu.d.mts +53 -0
  103. package/dist/components/context-menu/context-menu.mjs +275 -0
  104. package/dist/components/context-menu/index.d.mts +2 -0
  105. package/dist/components/conversation-panel/conversation-panel-empty-state.d.mts +9 -0
  106. package/dist/components/conversation-panel/conversation-panel-empty-state.mjs +57 -0
  107. package/dist/components/conversation-panel/conversation-panel.d.mts +20 -0
  108. package/dist/components/conversation-panel/conversation-panel.mjs +63 -0
  109. package/dist/components/conversation-panel/conversation-panel.recipe.mjs +15 -0
  110. package/dist/components/conversation-panel/index.d.mts +3 -0
  111. package/dist/components/copyable-code/copyable-code.d.mts +72 -0
  112. package/dist/components/copyable-code/copyable-code.mjs +153 -0
  113. package/dist/components/copyable-code/index.d.mts +2 -0
  114. package/dist/components/description-list/description-list.d.mts +59 -0
  115. package/dist/components/description-list/description-list.mjs +96 -0
  116. package/dist/components/description-list/index.d.mts +2 -0
  117. package/dist/components/dialog/dialog-sheet-context.mjs +58 -0
  118. package/dist/components/dialog/dialog-sheet.d.mts +31 -0
  119. package/dist/components/dialog/dialog-sheet.mjs +194 -0
  120. package/dist/components/dialog/dialog.d.mts +85 -0
  121. package/dist/components/dialog/dialog.mjs +371 -0
  122. package/dist/components/dialog/index.d.mts +3 -0
  123. package/dist/components/drag/drag-announcements.d.mts +72 -0
  124. package/dist/components/drag/drag-announcements.mjs +115 -0
  125. package/dist/components/drag/drag-lift.d.mts +100 -0
  126. package/dist/components/drag/drag-lift.mjs +276 -0
  127. package/dist/components/drag/drag-lists.d.mts +98 -0
  128. package/dist/components/drag/drag-lists.mjs +258 -0
  129. package/dist/components/drag/drag-sensors.d.mts +87 -0
  130. package/dist/components/drag/drag-sensors.mjs +169 -0
  131. package/dist/components/drag/drag.recipe.d.mts +7 -0
  132. package/dist/components/drag/drag.recipe.mjs +30 -0
  133. package/dist/components/drag/drop-placeholder.d.mts +41 -0
  134. package/dist/components/drag/drop-placeholder.mjs +161 -0
  135. package/dist/components/drag/index.d.mts +8 -0
  136. package/dist/components/drawer/drawer.d.mts +34 -0
  137. package/dist/components/drawer/drawer.mjs +202 -0
  138. package/dist/components/drawer/drawer.recipe.mjs +175 -0
  139. package/dist/components/drawer/index.d.mts +2 -0
  140. package/dist/components/dropdown-menu/dropdown-menu.d.mts +62 -0
  141. package/dist/components/dropdown-menu/dropdown-menu.mjs +319 -0
  142. package/dist/components/dropdown-menu/index.d.mts +2 -0
  143. package/dist/components/ellipsis/ellipsis.d.mts +55 -0
  144. package/dist/components/ellipsis/ellipsis.mjs +320 -0
  145. package/dist/components/ellipsis/index.d.mts +3 -0
  146. package/dist/components/empty-state/empty-state.d.mts +15 -0
  147. package/dist/components/empty-state/empty-state.mjs +102 -0
  148. package/dist/components/empty-state/index.d.mts +2 -0
  149. package/dist/components/field/field.d.mts +79 -0
  150. package/dist/components/field/field.mjs +100 -0
  151. package/dist/components/field/index.d.mts +2 -0
  152. package/dist/components/file-preview/file-preview.d.mts +17 -0
  153. package/dist/components/file-preview/file-preview.mjs +210 -0
  154. package/dist/components/file-preview/file-preview.recipe.d.mts +99 -0
  155. package/dist/components/file-preview/file-preview.recipe.mjs +39 -0
  156. package/dist/components/file-preview/index.d.mts +2 -0
  157. package/dist/components/files/files.d.mts +35 -0
  158. package/dist/components/files/files.mjs +69 -0
  159. package/dist/components/files/files.recipe.mjs +40 -0
  160. package/dist/components/files/index.d.mts +2 -0
  161. package/dist/components/filter-chip/filter-chip.d.mts +25 -0
  162. package/dist/components/filter-chip/filter-chip.mjs +59 -0
  163. package/dist/components/filter-chip/index.d.mts +2 -0
  164. package/dist/components/float-button/float-button.d.mts +36 -0
  165. package/dist/components/float-button/float-button.mjs +116 -0
  166. package/dist/components/float-button/float-button.position.d.mts +6 -0
  167. package/dist/components/float-button/float-button.position.mjs +41 -0
  168. package/dist/components/float-button/index.d.mts +3 -0
  169. package/dist/components/form-section/form-section.d.mts +16 -0
  170. package/dist/components/form-section/form-section.mjs +53 -0
  171. package/dist/components/form-section/index.d.mts +2 -0
  172. package/dist/components/icon-tile/icon-tile.d.mts +97 -0
  173. package/dist/components/icon-tile/icon-tile.mjs +49 -0
  174. package/dist/components/icon-tile/index.d.mts +2 -0
  175. package/dist/components/icons/action-icons.d.mts +34 -0
  176. package/dist/components/icons/action-icons.mjs +383 -0
  177. package/dist/components/icons/conversation-icons.d.mts +12 -0
  178. package/dist/components/icons/conversation-icons.mjs +147 -0
  179. package/dist/components/icons/index.d.mts +4 -0
  180. package/dist/components/icons/object-icons.d.mts +6 -0
  181. package/dist/components/icons/object-icons.mjs +27 -0
  182. package/dist/components/inbox-item/inbox-item-leading-badge.d.mts +13 -0
  183. package/dist/components/inbox-item/inbox-item-leading-badge.mjs +27 -0
  184. package/dist/components/inbox-item/inbox-item-skeleton.d.mts +46 -0
  185. package/dist/components/inbox-item/inbox-item-skeleton.mjs +89 -0
  186. package/dist/components/inbox-item/inbox-item-skeleton.recipe.mjs +20 -0
  187. package/dist/components/inbox-item/inbox-item.d.mts +71 -0
  188. package/dist/components/inbox-item/inbox-item.mjs +276 -0
  189. package/dist/components/inbox-item/inbox-item.recipe.mjs +137 -0
  190. package/dist/components/inbox-item/index.d.mts +2 -0
  191. package/dist/components/inline-code/index.d.mts +2 -0
  192. package/dist/components/inline-code/inline-code.d.mts +8 -0
  193. package/dist/components/inline-code/inline-code.mjs +30 -0
  194. package/dist/components/input/index.d.mts +2 -0
  195. package/dist/components/input/input.d.mts +16 -0
  196. package/dist/components/input/input.mjs +20 -0
  197. package/dist/components/input/input.recipe.mjs +12 -0
  198. package/dist/components/input-group/index.d.mts +2 -0
  199. package/dist/components/input-group/input-group.d.mts +93 -0
  200. package/dist/components/input-group/input-group.mjs +178 -0
  201. package/dist/components/kbd/index.d.mts +2 -0
  202. package/dist/components/kbd/kbd.d.mts +7 -0
  203. package/dist/components/kbd/kbd.mjs +34 -0
  204. package/dist/components/label/index.d.mts +2 -0
  205. package/dist/components/label/label.d.mts +60 -0
  206. package/dist/components/label/label.mjs +75 -0
  207. package/dist/components/legacy-task-panel/index.d.mts +2 -0
  208. package/dist/components/legacy-task-panel/legacy-task-panel.d.mts +57 -0
  209. package/dist/components/legacy-task-panel/legacy-task-panel.mjs +234 -0
  210. package/dist/components/legacy-task-panel/legacy-task-panel.recipe.mjs +30 -0
  211. package/dist/components/lightbox/index.d.mts +2 -0
  212. package/dist/components/lightbox/lightbox.d.mts +55 -0
  213. package/dist/components/lightbox/lightbox.mjs +336 -0
  214. package/dist/components/list-row/index.d.mts +2 -0
  215. package/dist/components/list-row/list-row-skeleton.d.mts +21 -0
  216. package/dist/components/list-row/list-row-skeleton.mjs +43 -0
  217. package/dist/components/list-row/list-row.d.mts +66 -0
  218. package/dist/components/list-row/list-row.mjs +167 -0
  219. package/dist/components/list-row/list-row.recipe.d.mts +126 -0
  220. package/dist/components/list-row/list-row.recipe.mjs +94 -0
  221. package/dist/components/live-agent-activity-bar/index.d.mts +2 -0
  222. package/dist/components/live-agent-activity-bar/live-agent-activity-bar.d.mts +25 -0
  223. package/dist/components/live-agent-activity-bar/live-agent-activity-bar.mjs +107 -0
  224. package/dist/components/logo/index.d.mts +2 -0
  225. package/dist/components/logo/raft-logo.d.mts +9 -0
  226. package/dist/components/logo/raft-logo.mjs +63 -0
  227. package/dist/components/markdown/index.d.mts +2 -0
  228. package/dist/components/markdown/markdown-parts.d.mts +54 -0
  229. package/dist/components/markdown/markdown-parts.mjs +153 -0
  230. package/dist/components/markdown/markdown.recipe.mjs +77 -0
  231. package/dist/components/message-action-card/index.d.mts +2 -0
  232. package/dist/components/message-action-card/message-action-card-content.recipe.mjs +50 -0
  233. package/dist/components/message-action-card/message-action-card.d.mts +95 -0
  234. package/dist/components/message-action-card/message-action-card.mjs +298 -0
  235. package/dist/components/message-action-card/message-action-card.recipe.mjs +47 -0
  236. package/dist/components/message-attachment/index.d.mts +5 -0
  237. package/dist/components/message-attachment/message-attachment.d.mts +27 -0
  238. package/dist/components/message-attachment/message-attachment.mjs +129 -0
  239. package/dist/components/message-attachment/message-attachment.recipe.mjs +36 -0
  240. package/dist/components/message-attachment/message-image-gallery-rows.d.mts +47 -0
  241. package/dist/components/message-attachment/message-image-gallery-rows.mjs +55 -0
  242. package/dist/components/message-attachment/message-image-gallery.d.mts +32 -0
  243. package/dist/components/message-attachment/message-image-gallery.mjs +105 -0
  244. package/dist/components/message-attachment/message-image-gallery.recipe.mjs +61 -0
  245. package/dist/components/message-attachment/message-video-preview.d.mts +19 -0
  246. package/dist/components/message-attachment/message-video-preview.mjs +92 -0
  247. package/dist/components/message-attachment/message-video-preview.recipe.mjs +33 -0
  248. package/dist/components/message-embed/index.d.mts +2 -0
  249. package/dist/components/message-embed/message-embed.d.mts +12 -0
  250. package/dist/components/message-embed/message-embed.mjs +42 -0
  251. package/dist/components/message-embed/message-embed.recipe.mjs +14 -0
  252. package/dist/components/message-forwarded-bundle/index.d.mts +2 -0
  253. package/dist/components/message-forwarded-bundle/message-forwarded-bundle.d.mts +92 -0
  254. package/dist/components/message-forwarded-bundle/message-forwarded-bundle.mjs +324 -0
  255. package/dist/components/message-forwarded-bundle/message-forwarded-bundle.recipe.mjs +81 -0
  256. package/dist/components/message-item/index.d.mts +13 -0
  257. package/dist/components/message-item/message-footer.d.mts +20 -0
  258. package/dist/components/message-item/message-footer.mjs +54 -0
  259. package/dist/components/message-item/message-footer.recipe.mjs +46 -0
  260. package/dist/components/message-item/message-item-content.d.mts +22 -0
  261. package/dist/components/message-item/message-item-content.mjs +81 -0
  262. package/dist/components/message-item/message-item-delegated.d.mts +38 -0
  263. package/dist/components/message-item/message-item-delegated.mjs +72 -0
  264. package/dist/components/message-item/message-item-gutter.d.mts +10 -0
  265. package/dist/components/message-item/message-item-gutter.mjs +41 -0
  266. package/dist/components/message-item/message-item-header.d.mts +29 -0
  267. package/dist/components/message-item/message-item-header.mjs +107 -0
  268. package/dist/components/message-item/message-item-label.mjs +113 -0
  269. package/dist/components/message-item/message-item-root.d.mts +25 -0
  270. package/dist/components/message-item/message-item-root.mjs +39 -0
  271. package/dist/components/message-item/message-item-toolbar.d.mts +9 -0
  272. package/dist/components/message-item/message-item-toolbar.mjs +131 -0
  273. package/dist/components/message-item/message-item.recipe.d.mts +101 -0
  274. package/dist/components/message-item/message-item.recipe.mjs +114 -0
  275. package/dist/components/message-item/message-multi-select.d.mts +15 -0
  276. package/dist/components/message-item/message-multi-select.mjs +49 -0
  277. package/dist/components/message-item/message-multi-select.recipe.mjs +23 -0
  278. package/dist/components/message-item/message-reaction.d.mts +39 -0
  279. package/dist/components/message-item/message-reaction.mjs +188 -0
  280. package/dist/components/message-item/message-reaction.recipe.mjs +76 -0
  281. package/dist/components/message-item/message-reference.d.mts +50 -0
  282. package/dist/components/message-item/message-reference.mjs +111 -0
  283. package/dist/components/message-item/message-reference.recipe.d.mts +6 -0
  284. package/dist/components/message-item/message-reference.recipe.mjs +63 -0
  285. package/dist/components/message-item/message-text-selection-toolbar.d.mts +24 -0
  286. package/dist/components/message-item/message-text-selection-toolbar.mjs +13 -0
  287. package/dist/components/message-list/index.d.mts +4 -0
  288. package/dist/components/message-list/message-list-jump.d.mts +21 -0
  289. package/dist/components/message-list/message-list-jump.mjs +73 -0
  290. package/dist/components/message-list/message-list-markers.d.mts +13 -0
  291. package/dist/components/message-list/message-list-markers.mjs +70 -0
  292. package/dist/components/message-list/message-list.d.mts +7 -0
  293. package/dist/components/message-list/message-list.mjs +52 -0
  294. package/dist/components/message-list/message-list.recipe.mjs +54 -0
  295. package/dist/components/message-quoted-preview/index.d.mts +2 -0
  296. package/dist/components/message-quoted-preview/message-quoted-preview.d.mts +40 -0
  297. package/dist/components/message-quoted-preview/message-quoted-preview.mjs +144 -0
  298. package/dist/components/message-quoted-preview/message-quoted-preview.recipe.mjs +38 -0
  299. package/dist/components/message-replies/index.d.mts +2 -0
  300. package/dist/components/message-replies/message-replies.d.mts +17 -0
  301. package/dist/components/message-replies/message-replies.mjs +79 -0
  302. package/dist/components/message-replies/message-replies.recipe.mjs +25 -0
  303. package/dist/components/message-translation/index.d.mts +2 -0
  304. package/dist/components/message-translation/message-translation.d.mts +20 -0
  305. package/dist/components/message-translation/message-translation.mjs +64 -0
  306. package/dist/components/message-translation/message-translation.recipe.mjs +27 -0
  307. package/dist/components/meter/index.d.mts +2 -0
  308. package/dist/components/meter/meter.d.mts +107 -0
  309. package/dist/components/meter/meter.mjs +118 -0
  310. package/dist/components/mobile-nav/index.d.mts +3 -0
  311. package/dist/components/mobile-nav/mobile-nav-server.d.mts +71 -0
  312. package/dist/components/mobile-nav/mobile-nav-server.mjs +287 -0
  313. package/dist/components/mobile-nav/mobile-nav.d.mts +12 -0
  314. package/dist/components/mobile-nav/mobile-nav.mjs +73 -0
  315. package/dist/components/mode-bar/index.d.mts +2 -0
  316. package/dist/components/mode-bar/mode-bar.d.mts +33 -0
  317. package/dist/components/mode-bar/mode-bar.mjs +115 -0
  318. package/dist/components/notification-center/index.d.mts +2 -0
  319. package/dist/components/notification-center/notification-center.d.mts +225 -0
  320. package/dist/components/notification-center/notification-center.mjs +340 -0
  321. package/dist/components/panel/index.d.mts +7 -0
  322. package/dist/components/panel/panel-action.d.mts +15 -0
  323. package/dist/components/panel/panel-action.mjs +23 -0
  324. package/dist/components/panel/panel-action.recipe.mjs +40 -0
  325. package/dist/components/panel/panel-header.d.mts +34 -0
  326. package/dist/components/panel/panel-header.mjs +135 -0
  327. package/dist/components/panel/panel-header.recipe.mjs +78 -0
  328. package/dist/components/panel/panel-notice.d.mts +16 -0
  329. package/dist/components/panel/panel-notice.mjs +77 -0
  330. package/dist/components/panel/panel-split-action.d.mts +34 -0
  331. package/dist/components/panel/panel-split-action.mjs +69 -0
  332. package/dist/components/panel/panel-split-action.recipe.mjs +53 -0
  333. package/dist/components/panel/panel-toggle-action.d.mts +6 -0
  334. package/dist/components/panel/panel-toggle-action.mjs +15 -0
  335. package/dist/components/panel/panel.d.mts +25 -0
  336. package/dist/components/panel/panel.mjs +96 -0
  337. package/dist/components/panel/panel.recipe.mjs +24 -0
  338. package/dist/components/picker-trigger-button/index.d.mts +2 -0
  339. package/dist/components/picker-trigger-button/picker-trigger-button.d.mts +7 -0
  340. package/dist/components/picker-trigger-button/picker-trigger-button.mjs +36 -0
  341. package/dist/components/popover/index.d.mts +2 -0
  342. package/dist/components/popover/popover.d.mts +41 -0
  343. package/dist/components/popover/popover.mjs +184 -0
  344. package/dist/components/preview-card/index.d.mts +2 -0
  345. package/dist/components/preview-card/preview-card.d.mts +43 -0
  346. package/dist/components/preview-card/preview-card.mjs +197 -0
  347. package/dist/components/profile-panel/index.d.mts +2 -0
  348. package/dist/components/profile-panel/profile-panel.d.mts +14 -0
  349. package/dist/components/profile-panel/profile-panel.mjs +46 -0
  350. package/dist/components/profile-panel/profile-panel.recipe.mjs +14 -0
  351. package/dist/components/progress/index.d.mts +2 -0
  352. package/dist/components/progress/progress.d.mts +119 -0
  353. package/dist/components/progress/progress.mjs +139 -0
  354. package/dist/components/pull-to-refresh/index.d.mts +4 -0
  355. package/dist/components/pull-to-refresh/pull-to-refresh-gesture.d.mts +30 -0
  356. package/dist/components/pull-to-refresh/pull-to-refresh-gesture.mjs +134 -0
  357. package/dist/components/pull-to-refresh/pull-to-refresh-indicator.d.mts +21 -0
  358. package/dist/components/pull-to-refresh/pull-to-refresh-indicator.mjs +153 -0
  359. package/dist/components/pull-to-refresh/pull-to-refresh-material-progress.mjs +150 -0
  360. package/dist/components/pull-to-refresh/use-pull-to-refresh.d.mts +55 -0
  361. package/dist/components/pull-to-refresh/use-pull-to-refresh.mjs +156 -0
  362. package/dist/components/radio-group/index.d.mts +2 -0
  363. package/dist/components/radio-group/radio-group.d.mts +14 -0
  364. package/dist/components/radio-group/radio-group.mjs +59 -0
  365. package/dist/components/resizable/index.d.mts +2 -0
  366. package/dist/components/resizable/resizable.d.mts +15 -0
  367. package/dist/components/resizable/resizable.mjs +39 -0
  368. package/dist/components/resizable/resizable.recipe.mjs +24 -0
  369. package/dist/components/scroll-area/index.d.mts +2 -0
  370. package/dist/components/scroll-area/scroll-area.d.mts +17 -0
  371. package/dist/components/scroll-area/scroll-area.mjs +55 -0
  372. package/dist/components/scroll-area/scroll-area.recipe.mjs +23 -0
  373. package/dist/components/search/index.d.mts +6 -0
  374. package/dist/components/search/search-entity.d.mts +24 -0
  375. package/dist/components/search/search-entity.mjs +106 -0
  376. package/dist/components/search/search-entity.recipe.mjs +41 -0
  377. package/dist/components/search/search-message.d.mts +25 -0
  378. package/dist/components/search/search-message.mjs +115 -0
  379. package/dist/components/search/search-message.recipe.mjs +32 -0
  380. package/dist/components/search/search-thread.d.mts +17 -0
  381. package/dist/components/search/search-thread.mjs +79 -0
  382. package/dist/components/search/search-thread.recipe.mjs +16 -0
  383. package/dist/components/search/search-trigger.d.mts +15 -0
  384. package/dist/components/search/search-trigger.mjs +59 -0
  385. package/dist/components/search/search.d.mts +23 -0
  386. package/dist/components/search/search.mjs +88 -0
  387. package/dist/components/search/search.recipe.mjs +22 -0
  388. package/dist/components/segmented-control/index.d.mts +2 -0
  389. package/dist/components/segmented-control/segmented-control.d.mts +38 -0
  390. package/dist/components/segmented-control/segmented-control.mjs +306 -0
  391. package/dist/components/select/index.d.mts +2 -0
  392. package/dist/components/select/select.d.mts +95 -0
  393. package/dist/components/select/select.mjs +483 -0
  394. package/dist/components/separator/index.d.mts +2 -0
  395. package/dist/components/separator/separator.d.mts +10 -0
  396. package/dist/components/separator/separator.mjs +49 -0
  397. package/dist/components/sidebar/index.d.mts +5 -0
  398. package/dist/components/sidebar/sidebar-item.d.mts +64 -0
  399. package/dist/components/sidebar/sidebar-item.mjs +201 -0
  400. package/dist/components/sidebar/sidebar-item.recipe.mjs +100 -0
  401. package/dist/components/sidebar/sidebar-menu.d.mts +13 -0
  402. package/dist/components/sidebar/sidebar-menu.mjs +67 -0
  403. package/dist/components/sidebar/sidebar-menu.recipe.mjs +22 -0
  404. package/dist/components/sidebar/sidebar-section.d.mts +41 -0
  405. package/dist/components/sidebar/sidebar-section.mjs +164 -0
  406. package/dist/components/sidebar/sidebar-section.recipe.mjs +45 -0
  407. package/dist/components/sidebar/sidebar.d.mts +17 -0
  408. package/dist/components/sidebar/sidebar.mjs +149 -0
  409. package/dist/components/sidebar/sidebar.recipe.mjs +37 -0
  410. package/dist/components/skeleton/index.d.mts +2 -0
  411. package/dist/components/skeleton/skeleton.d.mts +50 -0
  412. package/dist/components/skeleton/skeleton.mjs +29 -0
  413. package/dist/components/spinner/index.d.mts +2 -0
  414. package/dist/components/spinner/spinner.d.mts +77 -0
  415. package/dist/components/spinner/spinner.mjs +118 -0
  416. package/dist/components/status/index.d.mts +2 -0
  417. package/dist/components/status/status.d.mts +143 -0
  418. package/dist/components/status/status.mjs +56 -0
  419. package/dist/components/steps/index.d.mts +3 -0
  420. package/dist/components/steps/otter-indicator.d.mts +17 -0
  421. package/dist/components/steps/otter-indicator.mjs +331 -0
  422. package/dist/components/steps/steps.d.mts +50 -0
  423. package/dist/components/steps/steps.mjs +174 -0
  424. package/dist/components/switch/index.d.mts +2 -0
  425. package/dist/components/switch/switch.d.mts +9 -0
  426. package/dist/components/switch/switch.mjs +50 -0
  427. package/dist/components/system-message/index.d.mts +2 -0
  428. package/dist/components/system-message/system-message.d.mts +27 -0
  429. package/dist/components/system-message/system-message.mjs +113 -0
  430. package/dist/components/system-message/system-message.recipe.mjs +34 -0
  431. package/dist/components/table/index.d.mts +2 -0
  432. package/dist/components/table/table.d.mts +35 -0
  433. package/dist/components/table/table.mjs +102 -0
  434. package/dist/components/table/table.recipe.mjs +31 -0
  435. package/dist/components/tabs/index.d.mts +2 -0
  436. package/dist/components/tabs/tabs.d.mts +185 -0
  437. package/dist/components/tabs/tabs.mjs +528 -0
  438. package/dist/components/task-board/index.d.mts +2 -0
  439. package/dist/components/task-board/task-board-column.recipe.mjs +46 -0
  440. package/dist/components/task-board/task-board.d.mts +40 -0
  441. package/dist/components/task-board/task-board.mjs +155 -0
  442. package/dist/components/task-card/index.d.mts +2 -0
  443. package/dist/components/task-card/task-card-status.recipe.mjs +17 -0
  444. package/dist/components/task-card/task-card.d.mts +30 -0
  445. package/dist/components/task-card/task-card.mjs +141 -0
  446. package/dist/components/task-card/task-card.recipe.mjs +39 -0
  447. package/dist/components/task-dnd/index.d.mts +2 -0
  448. package/dist/components/task-dnd/task-dnd.d.mts +75 -0
  449. package/dist/components/task-dnd/task-dnd.mjs +341 -0
  450. package/dist/components/task-dnd/task-dnd.recipe.mjs +20 -0
  451. package/dist/components/task-list/index.d.mts +2 -0
  452. package/dist/components/task-list/task-list-section.recipe.mjs +37 -0
  453. package/dist/components/task-list/task-list.d.mts +34 -0
  454. package/dist/components/task-list/task-list.mjs +119 -0
  455. package/dist/components/tasks/index.d.mts +7 -0
  456. package/dist/components/tasks/task-chip.d.mts +14 -0
  457. package/dist/components/tasks/task-chip.mjs +81 -0
  458. package/dist/components/tasks/task-loading.d.mts +7 -0
  459. package/dist/components/tasks/task-loading.mjs +32 -0
  460. package/dist/components/tasks/task-loading.recipe.mjs +8 -0
  461. package/dist/components/tasks/task-status-badge.d.mts +24 -0
  462. package/dist/components/tasks/task-status-badge.mjs +24 -0
  463. package/dist/components/tasks/task-status-icon.d.mts +13 -0
  464. package/dist/components/tasks/task-status-icon.mjs +90 -0
  465. package/dist/components/tasks/task-status.recipe.d.mts +62 -0
  466. package/dist/components/tasks/task-status.recipe.mjs +33 -0
  467. package/dist/components/tasks/tasks-panel.d.mts +22 -0
  468. package/dist/components/tasks/tasks-panel.mjs +114 -0
  469. package/dist/components/tasks/tasks-panel.recipe.mjs +36 -0
  470. package/dist/components/text/index.d.mts +2 -0
  471. package/dist/components/text/text.d.mts +186 -0
  472. package/dist/components/text/text.mjs +114 -0
  473. package/dist/components/text-link/index.d.mts +2 -0
  474. package/dist/components/text-link/text-link.d.mts +36 -0
  475. package/dist/components/text-link/text-link.mjs +60 -0
  476. package/dist/components/text-selection-toolbar/index.d.mts +3 -0
  477. package/dist/components/text-selection-toolbar/text-selection-anchor.d.mts +22 -0
  478. package/dist/components/text-selection-toolbar/text-selection-anchor.mjs +106 -0
  479. package/dist/components/text-selection-toolbar/text-selection-toolbar.d.mts +20 -0
  480. package/dist/components/text-selection-toolbar/text-selection-toolbar.mjs +41 -0
  481. package/dist/components/text-selection-toolbar/text-selection-toolbar.recipe.mjs +19 -0
  482. package/dist/components/textarea/index.d.mts +2 -0
  483. package/dist/components/textarea/textarea.d.mts +16 -0
  484. package/dist/components/textarea/textarea.mjs +62 -0
  485. package/dist/components/thread-panel/index.d.mts +2 -0
  486. package/dist/components/thread-panel/thread-panel.d.mts +31 -0
  487. package/dist/components/thread-panel/thread-panel.mjs +162 -0
  488. package/dist/components/thread-panel/thread-panel.recipe.mjs +36 -0
  489. package/dist/components/timeline/index.d.mts +2 -0
  490. package/dist/components/timeline/timeline.d.mts +44 -0
  491. package/dist/components/timeline/timeline.mjs +81 -0
  492. package/dist/components/toast/index.d.mts +2 -0
  493. package/dist/components/toast/toast.d.mts +263 -0
  494. package/dist/components/toast/toast.mjs +556 -0
  495. package/dist/components/toggle-group/index.d.mts +2 -0
  496. package/dist/components/toggle-group/toggle-group.d.mts +15 -0
  497. package/dist/components/toggle-group/toggle-group.mjs +64 -0
  498. package/dist/components/tooltip/index.d.mts +2 -0
  499. package/dist/components/tooltip/tooltip.d.mts +18 -0
  500. package/dist/components/tooltip/tooltip.mjs +197 -0
  501. package/dist/components/virtual-list/ItemColumns.mjs +37 -0
  502. package/dist/components/virtual-list/VirtualList.d.mts +4 -0
  503. package/dist/components/virtual-list/VirtualList.mjs +1401 -0
  504. package/dist/components/virtual-list/VirtualListContext.mjs +5 -0
  505. package/dist/components/virtual-list/hooks/use-event-callback.mjs +10 -0
  506. package/dist/components/virtual-list/hooks/use-ios-momentum-compensation.mjs +148 -0
  507. package/dist/components/virtual-list/hooks/use-keyboard-scroll.mjs +42 -0
  508. package/dist/components/virtual-list/hooks/use-latest-ref.mjs +10 -0
  509. package/dist/components/virtual-list/hooks/use-layout-effect-with-previous.mjs +16 -0
  510. package/dist/components/virtual-list/hooks/use-memo-with-previous.mjs +22 -0
  511. package/dist/components/virtual-list/hooks/use-non-passive-wheel.mjs +23 -0
  512. package/dist/components/virtual-list/hooks/use-non-virtual-content-resize.mjs +28 -0
  513. package/dist/components/virtual-list/hooks/use-scroll-anchor.mjs +55 -0
  514. package/dist/components/virtual-list/index.d.mts +5 -0
  515. package/dist/components/virtual-list/public-types.d.mts +341 -0
  516. package/dist/components/virtual-list/resize-observer/ResizeObserverWrapper.d.mts +5 -0
  517. package/dist/components/virtual-list/resize-observer/ResizeObserverWrapper.mjs +70 -0
  518. package/dist/components/virtual-list/resize-observer/resize-observer-delegate.d.mts +6 -0
  519. package/dist/components/virtual-list/resize-observer/resize-observer-delegate.mjs +54 -0
  520. package/dist/components/virtual-list/utils/align.mjs +19 -0
  521. package/dist/components/virtual-list/utils/constants.mjs +30 -0
  522. package/dist/components/virtual-list/utils/fenwick-tree.mjs +66 -0
  523. package/dist/components/virtual-list/utils/items-anchor.mjs +49 -0
  524. package/dist/components/virtual-list/utils/measure.mjs +77 -0
  525. package/dist/components/virtual-list/utils/platform.mjs +39 -0
  526. package/dist/components/virtual-list/utils/range.mjs +103 -0
  527. package/dist/components/virtual-list/utils/size-cache.mjs +35 -0
  528. package/dist/components/workspace-button/index.d.mts +2 -0
  529. package/dist/components/workspace-button/workspace-button.d.mts +9 -0
  530. package/dist/components/workspace-button/workspace-button.mjs +28 -0
  531. package/dist/index.d.mts +239 -4864
  532. package/dist/index.mjs +142 -17053
  533. package/dist/lib/chip-remove.mjs +17 -0
  534. package/dist/lib/data-attributes.d.mts +5 -0
  535. package/dist/lib/decision-width.mjs +9 -0
  536. package/dist/lib/default-native-button.mjs +8 -0
  537. package/dist/lib/desktop-media.mjs +10 -0
  538. package/dist/lib/drag-escape.mjs +37 -0
  539. package/dist/lib/frame-insets.mjs +127 -0
  540. package/dist/lib/head-edges.mjs +44 -0
  541. package/dist/lib/hud-text-action.mjs +10 -0
  542. package/dist/lib/inline-chip.mjs +30 -0
  543. package/dist/lib/input-modality.d.mts +36 -0
  544. package/dist/lib/input-modality.mjs +186 -0
  545. package/dist/lib/list-cell.mjs +21 -0
  546. package/dist/lib/located.d.mts +25 -0
  547. package/dist/lib/located.mjs +28 -0
  548. package/dist/lib/overlay-depth.d.mts +42 -0
  549. package/dist/lib/overlay-depth.mjs +59 -0
  550. package/dist/lib/phone-media.mjs +24 -0
  551. package/dist/lib/presence.d.mts +16 -0
  552. package/dist/lib/presence.mjs +16 -0
  553. package/dist/lib/row-tone.d.mts +8 -0
  554. package/dist/lib/search-hit.mjs +18 -0
  555. package/dist/lib/stacked-actions.mjs +112 -0
  556. package/dist/lib/styled-props.d.mts +15 -0
  557. package/dist/lib/tap-activation.mjs +133 -0
  558. package/dist/lib/theme/theme-context.d.mts +10 -0
  559. package/dist/lib/theme/theme-context.mjs +9 -0
  560. package/dist/lib/theme/theme-provider.d.mts +23 -0
  561. package/dist/lib/theme/theme-provider.mjs +61 -0
  562. package/dist/lib/theme/theme-scope.mjs +19 -0
  563. package/dist/lib/theme/use-theme.d.mts +5 -0
  564. package/dist/lib/theme/use-theme.mjs +9 -0
  565. package/dist/lib/touch-drag.d.mts +55 -0
  566. package/dist/lib/touch-drag.mjs +151 -0
  567. package/dist/lib/truncation.d.mts +26 -0
  568. package/dist/lib/truncation.mjs +153 -0
  569. package/dist/lib/tv.d.mts +2 -0
  570. package/dist/lib/tv.mjs +14 -0
  571. package/dist/lib/use-copy-to-clipboard.mjs +58 -0
  572. package/dist/lib/use-merged-ref.mjs +60 -0
  573. package/dist/lib/use-mobile-viewport.mjs +17 -0
  574. package/dist/lib/use-overflow-title.mjs +49 -0
  575. package/dist/lib/use-scrollbar-size.d.mts +16 -0
  576. package/dist/lib/use-scrollbar-size.mjs +46 -0
  577. package/dist/lib/use-truncated.d.mts +20 -0
  578. package/dist/lib/use-truncated.mjs +34 -0
  579. package/dist/lib/without-children.d.mts +8 -0
  580. package/dist/wip.d.mts +61 -1222
  581. package/dist/wip.mjs +43 -3079
  582. package/package.json +8 -1
  583. package/dist/inbox-item-B4nNvpp1.d.mts +0 -1784
  584. package/dist/inbox-item-DHJOrxB8.mjs +0 -7454
  585. package/dist/style.css +0 -1395
@@ -0,0 +1,59 @@
1
+ import { createContext, useContext, useMemo } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/lib/overlay-depth.tsx
4
+ const OverlayStackContext = createContext([]);
5
+ /**
6
+ * Tells everything under it that a modal surface is open, so a raft-ui
7
+ * Dialog, AlertDialog or Drawer opened from inside draws the lighter nested
8
+ * scrim (design/foundations/elevation.md#stacked-overlays). raft-ui's own
9
+ * roots add one by themselves; an app's own modal (its own backdrop, Esc and
10
+ * focus) wraps its scrim and its content in one to join the stack, and reads
11
+ * `useParentOverlayKind` inside it to pick its own scrim. Modal overlays only:
12
+ * a non-modal one passes `modal={false}`, adds nothing, and must not call
13
+ * `useParentOverlayKind` (it would read the layer below as its own).
14
+ */
15
+ function OverlayLayerProvider({ kind, modal, children }) {
16
+ const stack = useContext(OverlayStackContext);
17
+ const value = useMemo(() => modal ? [...stack, kind] : stack, [
18
+ stack,
19
+ kind,
20
+ modal
21
+ ]);
22
+ return /* @__PURE__ */ jsx(OverlayStackContext.Provider, {
23
+ value,
24
+ children
25
+ });
26
+ }
27
+ /**
28
+ * The modal surface this overlay's own surface was opened from, or null when
29
+ * it is the first. Call it inside the surface's own `OverlayLayerProvider`
30
+ * (for raft-ui's overlays, inside their root): the last entry is the surface
31
+ * itself and the one before it is its parent. Not null means the surface is
32
+ * stacked over another and draws `layer-backdrop-nested` instead of
33
+ * `layer-backdrop`. Modal overlays only: under `modal={false}` nothing is
34
+ * added, so the last entry is the parent and this returns the wrong layer. It reads React context, so it sees the surfaces whose
35
+ * tree this one is rendered in, portals included; one opened from outside
36
+ * that tree is not stacked on it here.
37
+ */
38
+ function useParentOverlayKind() {
39
+ const stack = useContext(OverlayStackContext);
40
+ return stack.length >= 2 ? stack[stack.length - 2] : null;
41
+ }
42
+ /**
43
+ * Wraps a dialog or drawer root's children in its layer. Base UI lets those
44
+ * children be a render function (`({ payload }) => …`), so keep that shape.
45
+ */
46
+ function withOverlayLayer(kind, modal, children) {
47
+ if (typeof children === "function") return (...args) => /* @__PURE__ */ jsx(OverlayLayerProvider, {
48
+ kind,
49
+ modal,
50
+ children: children(...args)
51
+ });
52
+ return /* @__PURE__ */ jsx(OverlayLayerProvider, {
53
+ kind,
54
+ modal,
55
+ children
56
+ });
57
+ }
58
+ //#endregion
59
+ export { OverlayLayerProvider, useParentOverlayKind, withOverlayLayer };
@@ -0,0 +1,24 @@
1
+ import { useSyncExternalStore } from "react";
2
+ //#region src/lib/phone-media.ts
3
+ /**
4
+ * A phone: a touch screen narrower than the desktop layout. The complement, on
5
+ * both axes, of the desktop query `(width >= 48rem) and (pointer: fine)`
6
+ * (design/foundations/spacing.md): a narrow window with a mouse keeps the
7
+ * desktop behaviour, and so does a tablet used by touch, which is wide.
8
+ */
9
+ const PHONE_MEDIA_QUERY = "(width < 48rem) and (pointer: coarse)";
10
+ function subscribe(onStoreChange) {
11
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return () => void 0;
12
+ const media = window.matchMedia(PHONE_MEDIA_QUERY);
13
+ media.addEventListener("change", onStoreChange);
14
+ return () => media.removeEventListener("change", onStoreChange);
15
+ }
16
+ function getSnapshot() {
17
+ return typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(width < 48rem) and (pointer: coarse)").matches;
18
+ }
19
+ /** Whether `PHONE_MEDIA_QUERY` matches. `false` on the server and before hydration. */
20
+ function usePhoneMedia() {
21
+ return useSyncExternalStore(subscribe, getSnapshot, () => false);
22
+ }
23
+ //#endregion
24
+ export { PHONE_MEDIA_QUERY, usePhoneMedia };
@@ -0,0 +1,16 @@
1
+ //#region src/lib/presence.d.ts
2
+ /**
3
+ * The five status lights of the design system. Each colour is a fixed
4
+ * meaning: online green, busy (an agent at work) yellow, error orange,
5
+ * offline stone, an external agent cyan. One map, read by Status and by the
6
+ * avatar's dot through the same `--status-color`.
7
+ */
8
+ export declare const PRESENCE_COLOR: {
9
+ readonly online: "[--status-color:var(--presence-online)]";
10
+ readonly busy: "[--status-color:var(--presence-busy)]";
11
+ readonly error: "[--status-color:var(--presence-error)]";
12
+ readonly offline: "[--status-color:var(--presence-offline)]";
13
+ readonly external: "[--status-color:var(--presence-external)]";
14
+ };
15
+ export type Presence = keyof typeof PRESENCE_COLOR;
16
+ //#endregion
@@ -0,0 +1,16 @@
1
+ //#region src/lib/presence.ts
2
+ /**
3
+ * The five status lights of the design system. Each colour is a fixed
4
+ * meaning: online green, busy (an agent at work) yellow, error orange,
5
+ * offline stone, an external agent cyan. One map, read by Status and by the
6
+ * avatar's dot through the same `--status-color`.
7
+ */
8
+ const PRESENCE_COLOR = {
9
+ online: "[--status-color:var(--presence-online)]",
10
+ busy: "[--status-color:var(--presence-busy)]",
11
+ error: "[--status-color:var(--presence-error)]",
12
+ offline: "[--status-color:var(--presence-offline)]",
13
+ external: "[--status-color:var(--presence-external)]"
14
+ };
15
+ //#endregion
16
+ export { PRESENCE_COLOR };
@@ -0,0 +1,8 @@
1
+ //#region src/lib/row-tone.d.ts
2
+ /**
3
+ * What a place in a list is to you, shared by every row that lists places
4
+ * (ListRow, SidebarItem): something waits for you (`unread`), you muted it
5
+ * (`muted`), or you are not in it: offline or not joined (`away`).
6
+ */
7
+ export type RowTone = "default" | "unread" | "muted" | "away";
8
+ //#endregion
@@ -0,0 +1,18 @@
1
+ //#region src/lib/search-hit.ts
2
+ /**
3
+ * The DS search hit: what you looked for sits on a `you` fill, yellow in every
4
+ * theme, with ink type in the surrounding font and weight. No edge and no bold
5
+ * (stdrc, 2026-10-24): a ring made a hit look like one more badge beside a
6
+ * row's "DM" or "Channel" tag and cut the descenders, and it is the mention of
7
+ * you that keeps the ring. 1px of fill above and below (`py-px`) keeps
8
+ * the descenders inside it. Every place that marks a hit (message text,
9
+ * Markdown, search results) uses this; `[font:inherit]` drops the browser's
10
+ * mark styling.
11
+ */
12
+ const searchHit = [
13
+ "[font:inherit]",
14
+ "rounded-sticker bg-you px-[2px] py-px box-decoration-clone",
15
+ "text-sticker-ink"
16
+ ];
17
+ //#endregion
18
+ export { searchHit };
@@ -0,0 +1,112 @@
1
+ import { useCallback, useLayoutEffect, useState } from "react";
2
+ //#region src/lib/stacked-actions.ts
3
+ /**
4
+ * The row of buttons while `data-stacked` is set: a full-width column. A
5
+ * button alone in a wrapper (a tooltip's trigger) fills the width too.
6
+ *
7
+ * Until the row has been measured and painted once (`data-measured`), its
8
+ * buttons have no transition. The first measure lands after the buttons were
9
+ * styled as a row, so a stacked ghost Cancel would otherwise fade its frame in
10
+ * as the dialog opens; the first painted frame must already be the stack.
11
+ */
12
+ const stackedActions = [
13
+ "data-stacked:flex-col-reverse",
14
+ "data-stacked:items-stretch",
15
+ "data-stacked:*:data-[slot=button]:w-full data-stacked:[&>*>[data-slot=button]:only-child]:w-full",
16
+ "not-data-measured:**:data-[slot=button]:transition-none"
17
+ ];
18
+ function assignRef(ref, value) {
19
+ if (typeof ref === "function") ref(value);
20
+ else if (ref) ref.current = value;
21
+ }
22
+ function contentWidth(element) {
23
+ const style = getComputedStyle(element);
24
+ return element.getBoundingClientRect().width - (Number.parseFloat(style.paddingLeft) || 0) - (Number.parseFloat(style.paddingRight) || 0) - (Number.parseFloat(style.borderLeftWidth) || 0) - (Number.parseFloat(style.borderRightWidth) || 0);
25
+ }
26
+ /**
27
+ * Whether a row of buttons must stack: laid out as a row (`data-stacked` off
28
+ * for the measure and put back at once, inside one frame, so nothing is
29
+ * painted in between and the layouts never flip back and forth), its children
30
+ * run past the content box of `frame`. Children that may shrink (a label that
31
+ * truncates or wraps) shrink first, so only content that can't, the buttons,
32
+ * counts as not fitting. Undefined while the frame is hidden (a sheet hides
33
+ * its footer), so nothing is decided then.
34
+ */
35
+ function rowOverflows(row, frame) {
36
+ if (!(frame.getBoundingClientRect().width > 0)) return void 0;
37
+ const wasStacked = row.hasAttribute("data-stacked");
38
+ if (wasStacked) row.removeAttribute("data-stacked");
39
+ const available = contentWidth(frame);
40
+ let start = Number.POSITIVE_INFINITY;
41
+ let end = Number.NEGATIVE_INFINITY;
42
+ for (const child of row.children) {
43
+ const box = child.getBoundingClientRect();
44
+ if (box.width === 0 && box.height === 0) continue;
45
+ const style = getComputedStyle(child);
46
+ start = Math.min(start, box.left - (Number.parseFloat(style.marginLeft) || 0));
47
+ end = Math.max(end, box.right + (Number.parseFloat(style.marginRight) || 0));
48
+ }
49
+ if (wasStacked) row.setAttribute("data-stacked", "");
50
+ return end - start > available + .5;
51
+ }
52
+ /**
53
+ * Sets `data-stacked` on a footer's row of buttons when it doesn't fit on one
54
+ * line (rowOverflows). Pass the returned ref to the row. It must fit its own
55
+ * content box, or with `inParent` (the group of buttons beside a note) its
56
+ * parent's. As BannerAction's `data-wrap`, it measures again when the footer
57
+ * resizes, the buttons change or a web font arrives.
58
+ */
59
+ function useStackedActions(ref, inParent = false) {
60
+ const [row, setRow] = useState(null);
61
+ const [stacked, setStacked] = useState(false);
62
+ const callbackRef = useCallback((node) => {
63
+ setRow(node);
64
+ assignRef(ref, node);
65
+ }, [ref]);
66
+ useLayoutEffect(() => {
67
+ const frame = inParent ? row?.parentElement : row;
68
+ if (!row || !frame || typeof ResizeObserver === "undefined") return;
69
+ let raf = 0;
70
+ let settle = 0;
71
+ const measure = () => {
72
+ const overflows = rowOverflows(row, frame);
73
+ if (overflows === void 0) return;
74
+ setStacked(overflows);
75
+ if (!settle && !row.hasAttribute("data-measured")) settle = requestAnimationFrame(() => {
76
+ settle = requestAnimationFrame(() => row.setAttribute("data-measured", ""));
77
+ });
78
+ };
79
+ const schedule = () => {
80
+ cancelAnimationFrame(raf);
81
+ raf = requestAnimationFrame(measure);
82
+ };
83
+ measure();
84
+ const resize = new ResizeObserver(schedule);
85
+ resize.observe(frame);
86
+ resize.observe(row);
87
+ for (const child of row.children) resize.observe(child);
88
+ const mutation = new MutationObserver(schedule);
89
+ mutation.observe(row, {
90
+ childList: true,
91
+ characterData: true,
92
+ subtree: true
93
+ });
94
+ const fonts = typeof document.fonts === "undefined" ? void 0 : document.fonts;
95
+ let live = true;
96
+ fonts?.ready.then(() => {
97
+ if (live) schedule();
98
+ });
99
+ fonts?.addEventListener("loadingdone", schedule);
100
+ return () => {
101
+ live = false;
102
+ cancelAnimationFrame(raf);
103
+ cancelAnimationFrame(settle);
104
+ resize.disconnect();
105
+ mutation.disconnect();
106
+ fonts?.removeEventListener("loadingdone", schedule);
107
+ };
108
+ }, [row, inParent]);
109
+ return [stacked, callbackRef];
110
+ }
111
+ //#endregion
112
+ export { stackedActions, useStackedActions };
@@ -0,0 +1,15 @@
1
+ import { CSSProperties } from "react";
2
+ //#region src/lib/styled-props.d.ts
3
+ /**
4
+ * Base UI components type `className` as `string | ((state) => string)`, but our
5
+ * tv() recipes only accept a plain string. `StyledProps` narrows a Base UI
6
+ * component's props to a string `className` so they can flow into a recipe.
7
+ *
8
+ * The state-callback form is intentionally dropped: our components express every
9
+ * state through `data-*` variants in the recipe, so a caller never needs it.
10
+ */
11
+ export type StyledProps<P> = Omit<P, "className" | "style"> & {
12
+ className?: string;
13
+ style?: CSSProperties;
14
+ };
15
+ //#endregion
@@ -0,0 +1,133 @@
1
+ import { useCallback, useRef } from "react";
2
+ /** How long after a tap a click on the same control is the browser's echo of it. */
3
+ const ECHO_CLICK_MS = 800;
4
+ const DISABLED = ":disabled, [aria-disabled=\"true\"], [data-disabled]";
5
+ function findTouch(list, id) {
6
+ if (!list) return void 0;
7
+ for (let i = 0; i < list.length; i++) {
8
+ const touch = list[i];
9
+ if (touch && touch.identifier === id) return touch;
10
+ }
11
+ }
12
+ function isTextEntry(node) {
13
+ if (!node) return false;
14
+ if (node.isContentEditable || node.tagName === "TEXTAREA") return true;
15
+ return node.tagName === "INPUT" && !NON_TEXT_INPUTS.has(node.type);
16
+ }
17
+ const NON_TEXT_INPUTS = /* @__PURE__ */ new Set([
18
+ "button",
19
+ "checkbox",
20
+ "color",
21
+ "file",
22
+ "hidden",
23
+ "image",
24
+ "radio",
25
+ "range",
26
+ "reset",
27
+ "submit"
28
+ ]);
29
+ function isStylus(touch) {
30
+ return touch.touchType === "stylus";
31
+ }
32
+ /**
33
+ * Make `element` activate on a tap's `touchend`. Returns a function that
34
+ * removes the listeners. Does nothing outside a browser.
35
+ */
36
+ function attachTapActivation(element) {
37
+ const view = element.ownerDocument?.defaultView;
38
+ if (!view) return () => void 0;
39
+ const now = () => view.performance?.now() ?? Date.now();
40
+ let gesture = null;
41
+ let clicking = false;
42
+ let swallowClickUntil = -Infinity;
43
+ const onTouchStart = (event) => {
44
+ swallowClickUntil = -Infinity;
45
+ const touch = event.touches.length === 1 ? event.changedTouches[0] : void 0;
46
+ gesture = touch && !isStylus(touch) ? {
47
+ id: touch.identifier,
48
+ x: touch.clientX,
49
+ y: touch.clientY,
50
+ at: now(),
51
+ moved: false
52
+ } : null;
53
+ };
54
+ const onTouchMove = (event) => {
55
+ if (!gesture || gesture.moved) return;
56
+ const touch = findTouch(event.touches, gesture.id);
57
+ if (!touch) return;
58
+ if (Math.hypot(touch.clientX - gesture.x, touch.clientY - gesture.y) > 10) gesture.moved = true;
59
+ };
60
+ const onTouchCancel = () => {
61
+ gesture = null;
62
+ };
63
+ const onTouchEnd = (event) => {
64
+ const started = gesture;
65
+ gesture = null;
66
+ if (!started || started.moved || event.touches.length > 0) return;
67
+ const touch = findTouch(event.changedTouches, started.id);
68
+ if (!touch) return;
69
+ if (Math.hypot(touch.clientX - started.x, touch.clientY - started.y) > 10) return;
70
+ if (now() - started.at >= 500) return;
71
+ if (!event.cancelable) return;
72
+ if (element.matches(DISABLED)) return;
73
+ const box = element.getBoundingClientRect();
74
+ if (!(touch.clientX >= box.left && touch.clientX <= box.right && touch.clientY >= box.top && touch.clientY <= box.bottom)) return;
75
+ event.preventDefault();
76
+ swallowClickUntil = now() + ECHO_CLICK_MS;
77
+ const focusedBefore = element.ownerDocument.activeElement;
78
+ clicking = true;
79
+ try {
80
+ element.click();
81
+ } finally {
82
+ clicking = false;
83
+ }
84
+ const focusedAfter = element.ownerDocument.activeElement;
85
+ if (focusedAfter === focusedBefore && !isTextEntry(focusedAfter)) element.focus({
86
+ preventScroll: true,
87
+ focusVisible: false
88
+ });
89
+ };
90
+ const endEchoWindow = () => {
91
+ swallowClickUntil = -Infinity;
92
+ };
93
+ const onPointerDown = (event) => {
94
+ if (event.pointerType !== "touch") endEchoWindow();
95
+ };
96
+ const onClick = (event) => {
97
+ if (clicking || now() > swallowClickUntil) return;
98
+ swallowClickUntil = -Infinity;
99
+ event.preventDefault();
100
+ event.stopImmediatePropagation();
101
+ };
102
+ const passive = { passive: true };
103
+ element.addEventListener("touchstart", onTouchStart, passive);
104
+ element.addEventListener("touchmove", onTouchMove, passive);
105
+ element.addEventListener("touchcancel", onTouchCancel, passive);
106
+ element.addEventListener("pointerdown", onPointerDown, passive);
107
+ element.addEventListener("keydown", endEchoWindow, passive);
108
+ element.addEventListener("touchend", onTouchEnd, { passive: false });
109
+ element.addEventListener("click", onClick, { capture: true });
110
+ return () => {
111
+ element.removeEventListener("touchstart", onTouchStart);
112
+ element.removeEventListener("touchmove", onTouchMove);
113
+ element.removeEventListener("touchcancel", onTouchCancel);
114
+ element.removeEventListener("pointerdown", onPointerDown);
115
+ element.removeEventListener("keydown", endEchoWindow);
116
+ element.removeEventListener("touchend", onTouchEnd);
117
+ element.removeEventListener("click", onClick, { capture: true });
118
+ };
119
+ }
120
+ /**
121
+ * A ref callback that gives the element it is set to tap activation
122
+ * (`attachTapActivation`), and removes it when the element goes or
123
+ * `enabled` turns false. Merge it with the control's other refs.
124
+ */
125
+ function useTapActivation(enabled = true) {
126
+ const detachRef = useRef(null);
127
+ return useCallback((node) => {
128
+ detachRef.current?.();
129
+ detachRef.current = enabled && node ? attachTapActivation(node) : null;
130
+ }, [enabled]);
131
+ }
132
+ //#endregion
133
+ export { attachTapActivation, useTapActivation };
@@ -0,0 +1,10 @@
1
+ //#region src/lib/theme/theme-context.d.ts
2
+ /** Colour mode. Raft is the only visual family; "system" follows the OS. */
3
+ export type ThemeMode = "light" | "dark" | "system";
4
+ export type ResolvedThemeMode = Exclude<ThemeMode, "system">;
5
+ export type ThemeState = {
6
+ mode: ThemeMode;
7
+ resolvedMode: ResolvedThemeMode;
8
+ setMode: (mode: ThemeMode) => void;
9
+ };
10
+ //#endregion
@@ -0,0 +1,9 @@
1
+ import { createContext } from "react";
2
+ //#region src/lib/theme/theme-context.ts
3
+ const ThemeStateContext = createContext({
4
+ mode: "light",
5
+ resolvedMode: "light",
6
+ setMode: () => void 0
7
+ });
8
+ //#endregion
9
+ export { ThemeStateContext };
@@ -0,0 +1,23 @@
1
+ import { ThemeMode } from "./theme-context.mjs";
2
+ import { ReactNode } from "react";
3
+ //#region src/lib/theme/theme-provider.d.ts
4
+ export interface ThemeProviderProps {
5
+ /** Controlled colour mode. */
6
+ mode?: ThemeMode;
7
+ defaultMode?: ThemeMode;
8
+ onModeChange?: (mode: ThemeMode) => void;
9
+ /** Persist an uncontrolled mode under this localStorage key. */
10
+ storageKey?: string;
11
+ /**
12
+ * Put the resolved mode on `document.documentElement` (`.light` / `.dark`
13
+ * and `color-scheme`), and track the input modality there
14
+ * (`data-input-modality`, see `installInputModality`), which keeps focus
15
+ * rings to keyboard navigation. Defaults to true for the app-level provider;
16
+ * set it to false for nested previews and islands that must not touch the
17
+ * page root.
18
+ */
19
+ syncDom?: boolean;
20
+ children: ReactNode;
21
+ }
22
+ export declare function ThemeProvider({ mode, defaultMode, onModeChange, storageKey, syncDom, children }: ThemeProviderProps): import("react").JSX.Element;
23
+ //#endregion
@@ -0,0 +1,61 @@
1
+ "use client";
2
+ import { ThemeStateContext } from "./theme-context.mjs";
3
+ import { installInputModality } from "../input-modality.mjs";
4
+ import { useCallback, useEffect, useMemo, useState, useSyncExternalStore } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/lib/theme/theme-provider.tsx
7
+ function readStoredMode(storageKey, fallback) {
8
+ if (typeof window === "undefined" || !storageKey) return fallback;
9
+ const stored = window.localStorage.getItem(storageKey);
10
+ return stored === "light" || stored === "dark" || stored === "system" ? stored : fallback;
11
+ }
12
+ function subscribeSystemMode(onStoreChange) {
13
+ if (typeof window === "undefined") return () => void 0;
14
+ const media = window.matchMedia("(prefers-color-scheme: dark)");
15
+ media.addEventListener("change", onStoreChange);
16
+ return () => media.removeEventListener("change", onStoreChange);
17
+ }
18
+ function getSystemMode() {
19
+ if (typeof window === "undefined") return "light";
20
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
21
+ }
22
+ function ThemeProvider({ mode, defaultMode = "light", onModeChange, storageKey, syncDom = true, children }) {
23
+ const [uncontrolledMode, setUncontrolledMode] = useState(() => readStoredMode(storageKey, defaultMode));
24
+ const activeMode = mode ?? uncontrolledMode;
25
+ const systemMode = useSyncExternalStore(subscribeSystemMode, getSystemMode, () => "light");
26
+ const resolvedMode = activeMode === "system" ? systemMode : activeMode;
27
+ const setMode = useCallback((nextMode) => {
28
+ if (mode === void 0) {
29
+ setUncontrolledMode(nextMode);
30
+ if (typeof window !== "undefined" && storageKey) window.localStorage.setItem(storageKey, nextMode);
31
+ }
32
+ onModeChange?.(nextMode);
33
+ }, [
34
+ mode,
35
+ onModeChange,
36
+ storageKey
37
+ ]);
38
+ const themeState = useMemo(() => ({
39
+ mode: activeMode,
40
+ resolvedMode,
41
+ setMode
42
+ }), [
43
+ activeMode,
44
+ resolvedMode,
45
+ setMode
46
+ ]);
47
+ useEffect(() => syncDom ? installInputModality() : void 0, [syncDom]);
48
+ useEffect(() => {
49
+ if (!syncDom) return;
50
+ const root = document.documentElement;
51
+ root.classList.toggle("light", resolvedMode === "light");
52
+ root.classList.toggle("dark", resolvedMode === "dark");
53
+ root.style.colorScheme = resolvedMode;
54
+ }, [resolvedMode, syncDom]);
55
+ return /* @__PURE__ */ jsx(ThemeStateContext.Provider, {
56
+ value: themeState,
57
+ children
58
+ });
59
+ }
60
+ //#endregion
61
+ export { ThemeProvider };
@@ -0,0 +1,19 @@
1
+ import { cn } from "../../cn.mjs";
2
+ import { useTheme } from "./use-theme.mjs";
3
+ //#region src/lib/theme/theme-scope.ts
4
+ /**
5
+ * Carry the provider's resolved mode (`light` / `dark`) onto content that
6
+ * renders outside its subtree (a portal), so a dark island's popup stays dark.
7
+ */
8
+ function resolveThemeScopeProps({ className, ...props }, { resolvedMode }) {
9
+ const resolvedClassName = typeof className === "function" ? (state) => cn(className(state), resolvedMode) : typeof className === "string" ? cn(className, resolvedMode) : className ?? resolvedMode;
10
+ return {
11
+ ...props,
12
+ className: resolvedClassName
13
+ };
14
+ }
15
+ function useThemeScopeProps(props) {
16
+ return resolveThemeScopeProps(props, useTheme());
17
+ }
18
+ //#endregion
19
+ export { resolveThemeScopeProps, useThemeScopeProps };
@@ -0,0 +1,5 @@
1
+ import { ThemeState } from "./theme-context.mjs";
2
+ //#region src/lib/theme/use-theme.d.ts
3
+ /** Read and update the colour mode. */
4
+ export declare function useTheme(): ThemeState;
5
+ //#endregion
@@ -0,0 +1,9 @@
1
+ import { ThemeStateContext } from "./theme-context.mjs";
2
+ import { use } from "react";
3
+ //#region src/lib/theme/use-theme.ts
4
+ /** Read and update the colour mode. */
5
+ function useTheme() {
6
+ return use(ThemeStateContext);
7
+ }
8
+ //#endregion
9
+ export { useTheme };
@@ -0,0 +1,55 @@
1
+ import { PointerSensor, TouchSensor, TouchSensorOptions } from "@dnd-kit/core";
2
+ //#region src/lib/touch-drag.d.ts
3
+ /**
4
+ * How a finger picks up something that can be dragged
5
+ * (design/foundations/states.md#dragging-on-a-touch-screen):
6
+ *
7
+ * - hold still for `TOUCH_DRAG_HOLD_MS`: the item is armed, the same moment a
8
+ * long press opens a menu (raft-ui's ContextMenuTrigger, iOS: 500ms);
9
+ * - then move by `TOUCH_DRAG_DISTANCE_PX`: the drag starts, and whoever owns a
10
+ * menu that opened closes it in `onDragStart`;
11
+ * - move by more than `TOUCH_DRAG_TOLERANCE_PX` before the hold is up, or put a
12
+ * second finger down: it was a scroll or a pinch, and the item lets go.
13
+ *
14
+ * dnd-kit's delay constraint starts the drag the moment the hold is up, at the
15
+ * same time as the long press opens the menu, so the two fight. Starting on the
16
+ * first move after the hold lets holding still mean "menu" and holding then
17
+ * moving mean "drag", as on iOS.
18
+ *
19
+ * Pair it with `MouseOnlyPointerSensor`, not dnd-kit's PointerSensor: a phone
20
+ * sends `pointerdown` (pointerType "touch") before `touchstart`, and the sensor
21
+ * that takes the press first keeps it, so a PointerSensor would pick up every
22
+ * touch on its distance and this sensor would never run.
23
+ */
24
+ export declare const TOUCH_DRAG_HOLD_MS = 500;
25
+ export declare const TOUCH_DRAG_DISTANCE_PX = 10;
26
+ export declare const TOUCH_DRAG_TOLERANCE_PX = 10;
27
+ export type HoldThenMoveOptions = {
28
+ /** How long the finger stays still before a move can start the drag. */
29
+ holdMs?: number;
30
+ /** How far the finger moves after the hold to start the drag. */
31
+ distance?: number;
32
+ /** How far the finger may drift during the hold before it counts as a scroll. */
33
+ tolerance?: number;
34
+ };
35
+ /** A TouchSensor that starts a drag on the first move after a still hold (see above). */
36
+ export declare const HoldThenMoveTouchSensor: typeof TouchSensor;
37
+ /**
38
+ * dnd-kit's PointerSensor for a mouse and a pen only: a finger's pointerdown is
39
+ * left to `HoldThenMoveTouchSensor`. While it holds a drag, Escape puts the
40
+ * item back and reaches nothing else.
41
+ */
42
+ export declare const MouseOnlyPointerSensor: typeof PointerSensor;
43
+ /**
44
+ * `useSensor(HoldThenMoveTouchSensor, …)` with the activation the sensor relies
45
+ * on: no constraint dnd-kit would act on by itself, so only a move after the
46
+ * hold starts the drag.
47
+ */
48
+ export declare function useHoldThenMoveTouchSensor({ holdMs, distance, tolerance }?: HoldThenMoveOptions): import("@dnd-kit/core").SensorDescriptor<TouchSensorOptions>;
49
+ /** The mouse / pen sensor that goes with it: picks up after `distance` px. */
50
+ export declare function useMouseOnlyPointerSensor(distance: number): import("@dnd-kit/core").SensorDescriptor<{
51
+ activationConstraint: {
52
+ distance: number;
53
+ };
54
+ }>;
55
+ //#endregion