@botiverse/raft-ui 0.51.0 → 0.52.1

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 +26 -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 -17054
  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 -1190
  581. package/dist/wip.mjs +43 -2970
  582. package/package.json +8 -1
  583. package/dist/index-C3ymUW98.d.mts +0 -1816
  584. package/dist/mode-bar-tGnYByXp.mjs +0 -7564
  585. package/dist/style.css +0 -1395
@@ -0,0 +1,151 @@
1
+ import { eventWindow, holdEscape, releaseEscape } from "./drag-escape.mjs";
2
+ import { useMemo } from "react";
3
+ import { PointerSensor, TouchSensor, useSensor } from "@dnd-kit/core";
4
+ //#region src/lib/touch-drag.ts
5
+ /**
6
+ * How a finger picks up something that can be dragged
7
+ * (design/foundations/states.md#dragging-on-a-touch-screen):
8
+ *
9
+ * - hold still for `TOUCH_DRAG_HOLD_MS`: the item is armed, the same moment a
10
+ * long press opens a menu (raft-ui's ContextMenuTrigger, iOS: 500ms);
11
+ * - then move by `TOUCH_DRAG_DISTANCE_PX`: the drag starts, and whoever owns a
12
+ * menu that opened closes it in `onDragStart`;
13
+ * - move by more than `TOUCH_DRAG_TOLERANCE_PX` before the hold is up, or put a
14
+ * second finger down: it was a scroll or a pinch, and the item lets go.
15
+ *
16
+ * dnd-kit's delay constraint starts the drag the moment the hold is up, at the
17
+ * same time as the long press opens the menu, so the two fight. Starting on the
18
+ * first move after the hold lets holding still mean "menu" and holding then
19
+ * moving mean "drag", as on iOS.
20
+ *
21
+ * Pair it with `MouseOnlyPointerSensor`, not dnd-kit's PointerSensor: a phone
22
+ * sends `pointerdown` (pointerType "touch") before `touchstart`, and the sensor
23
+ * that takes the press first keeps it, so a PointerSensor would pick up every
24
+ * touch on its distance and this sensor would never run.
25
+ */
26
+ const TOUCH_DRAG_HOLD_MS = 500;
27
+ const TOUCH_DRAG_DISTANCE_PX = 10;
28
+ const TOUCH_DRAG_TOLERANCE_PX = 10;
29
+ const holds = /* @__PURE__ */ new WeakMap();
30
+ function touchPoint(event) {
31
+ const touch = event.touches?.[0] ?? event.changedTouches?.[0];
32
+ return touch ? {
33
+ x: touch.clientX,
34
+ y: touch.clientY
35
+ } : null;
36
+ }
37
+ function farther(from, to, limit) {
38
+ return Math.hypot(to.x - from.x, to.y - from.y) > limit;
39
+ }
40
+ /**
41
+ * Once a pointer sensor's drag has started, Escape cancels it and reaches
42
+ * nothing else (`drag-escape.ts`): no app handler on the window, the document
43
+ * or an element hears it.
44
+ */
45
+ function holdEscapeOnceActive(sensor) {
46
+ const self = sensor;
47
+ if (self.activated) holdEscape(eventWindow(self.props.event), sensor, () => self.handleCancel());
48
+ }
49
+ function releaseEscapeOf(sensor) {
50
+ releaseEscape(eventWindow(sensor.props.event), sensor);
51
+ }
52
+ var HoldThenMoveTouchSensorImpl = class extends TouchSensor {
53
+ static activators = TouchSensor.activators;
54
+ static setup() {
55
+ return TouchSensor.setup();
56
+ }
57
+ attach() {
58
+ super.attach();
59
+ const self = this;
60
+ const { holdMs = 500 } = self.props.options;
61
+ const state = {
62
+ heldAt: null,
63
+ last: null,
64
+ timer: setTimeout(() => {
65
+ state.heldAt = state.last ?? self.initialCoordinates;
66
+ }, holdMs)
67
+ };
68
+ holds.set(this, state);
69
+ }
70
+ handleStart() {
71
+ super.handleStart();
72
+ holdEscapeOnceActive(this);
73
+ }
74
+ handleMove(event) {
75
+ const self = this;
76
+ const state = holds.get(this);
77
+ if (self.activated || !state) {
78
+ super.handleMove(event);
79
+ return;
80
+ }
81
+ if ((event.touches?.length ?? 1) > 1) {
82
+ self.handleCancel();
83
+ return;
84
+ }
85
+ const point = touchPoint(event);
86
+ const start = self.initialCoordinates;
87
+ if (!point || !start) return;
88
+ state.last = point;
89
+ const { distance = 10, tolerance = 10 } = self.props.options;
90
+ if (!state.heldAt) {
91
+ if (farther(start, point, tolerance)) self.handleCancel();
92
+ return;
93
+ }
94
+ if (event.cancelable) event.preventDefault();
95
+ if (farther(state.heldAt, point, distance)) self.handleStart();
96
+ }
97
+ detach() {
98
+ const state = holds.get(this);
99
+ if (state) clearTimeout(state.timer);
100
+ holds.delete(this);
101
+ releaseEscapeOf(this);
102
+ super.detach();
103
+ }
104
+ };
105
+ /** A TouchSensor that starts a drag on the first move after a still hold (see above). */
106
+ const HoldThenMoveTouchSensor = HoldThenMoveTouchSensorImpl;
107
+ var MouseOnlyPointerSensorImpl = class extends PointerSensor {
108
+ static activators = [{
109
+ eventName: "onPointerDown",
110
+ handler: (event, options) => event.nativeEvent.pointerType === "touch" ? false : PointerSensor.activators[0].handler(event, options)
111
+ }];
112
+ handleStart() {
113
+ super.handleStart();
114
+ holdEscapeOnceActive(this);
115
+ }
116
+ detach() {
117
+ releaseEscapeOf(this);
118
+ super.detach();
119
+ }
120
+ };
121
+ /**
122
+ * dnd-kit's PointerSensor for a mouse and a pen only: a finger's pointerdown is
123
+ * left to `HoldThenMoveTouchSensor`. While it holds a drag, Escape puts the
124
+ * item back and reaches nothing else.
125
+ */
126
+ const MouseOnlyPointerSensor = MouseOnlyPointerSensorImpl;
127
+ /**
128
+ * `useSensor(HoldThenMoveTouchSensor, …)` with the activation the sensor relies
129
+ * on: no constraint dnd-kit would act on by itself, so only a move after the
130
+ * hold starts the drag.
131
+ */
132
+ function useHoldThenMoveTouchSensor({ holdMs = 500, distance = 10, tolerance = 10 } = {}) {
133
+ const options = useMemo(() => ({
134
+ holdMs,
135
+ distance,
136
+ tolerance,
137
+ activationConstraint: { distance: Number.POSITIVE_INFINITY }
138
+ }), [
139
+ holdMs,
140
+ distance,
141
+ tolerance
142
+ ]);
143
+ return useSensor(HoldThenMoveTouchSensor, options);
144
+ }
145
+ /** The mouse / pen sensor that goes with it: picks up after `distance` px. */
146
+ function useMouseOnlyPointerSensor(distance) {
147
+ const options = useMemo(() => ({ activationConstraint: { distance } }), [distance]);
148
+ return useSensor(MouseOnlyPointerSensor, options);
149
+ }
150
+ //#endregion
151
+ export { HoldThenMoveTouchSensor, MouseOnlyPointerSensor, TOUCH_DRAG_DISTANCE_PX, TOUCH_DRAG_HOLD_MS, TOUCH_DRAG_TOLERANCE_PX, useHoldThenMoveTouchSensor, useMouseOnlyPointerSensor };
@@ -0,0 +1,26 @@
1
+ //#region src/lib/truncation.d.ts
2
+ /**
3
+ * Whether a text is cut off, and when to look again: the one way raft-ui
4
+ * measures truncation (Ellipsis, `useTruncated`, and the `title` that
5
+ * fields give a cut value).
6
+ *
7
+ * The truncation itself is CSS (`text-overflow: ellipsis`, `line-clamp`);
8
+ * this module only answers "did it cut?".
9
+ *
10
+ * - It compares fractional geometry with a 0.5px tolerance. `scrollWidth` and
11
+ * `clientWidth` are whole pixels, so at some widths (and page zooms) a text
12
+ * that shows an ellipsis reports that it fits.
13
+ * - Every measured element on a page shares one ResizeObserver, one
14
+ * MutationObserver and one font-loading listener. A web font that finishes
15
+ * loading widens the text without resizing its box, which no
16
+ * ResizeObserver would notice.
17
+ * - Requests are batched into one animation frame, before paint: every
18
+ * target is isolated (an Ellipsis hides its `after` so the text is measured
19
+ * alone), then every target is read, then restored, then every result is
20
+ * committed in one synchronous React update. Reads never interleave with
21
+ * writes, and a result shows in the same frame it was measured in. A
22
+ * request made while a frame is handled is queued for the next one.
23
+ */
24
+ /** `undefined`: not known yet, or the element has no box (hidden, not laid out). */
25
+ export type Truncation = boolean | undefined;
26
+ //#endregion
@@ -0,0 +1,153 @@
1
+ import { flushSync } from "react-dom";
2
+ //#region src/lib/truncation.ts
3
+ /** Overflow smaller than this is rounding, not a cut. */
4
+ const TOLERANCE = .5;
5
+ function contentBox(element) {
6
+ const rect = element.getBoundingClientRect();
7
+ if (rect.width === 0 && rect.height === 0) return void 0;
8
+ const style = element.ownerDocument.defaultView?.getComputedStyle(element);
9
+ const px = (value) => Number.parseFloat(value ?? "") || 0;
10
+ return {
11
+ left: rect.left + px(style?.borderLeftWidth) + px(style?.paddingLeft),
12
+ right: rect.right - px(style?.borderRightWidth) - px(style?.paddingRight),
13
+ top: rect.top + px(style?.borderTopWidth) + px(style?.paddingTop),
14
+ bottom: rect.bottom - px(style?.borderBottomWidth) - px(style?.paddingBottom)
15
+ };
16
+ }
17
+ /**
18
+ * Whether laid-out text `rects` overflow `box`: past either inline edge, or
19
+ * on a line whose middle is below the bottom edge (a clamped line is still
20
+ * laid out, below the box; the middle, not the top, so a glyph box taller
21
+ * than a tight line-height does not count as a cut).
22
+ */
23
+ function overflows(rects, box) {
24
+ for (const rect of Array.from(rects)) {
25
+ if (rect.width === 0 && rect.height === 0) continue;
26
+ if (rect.right > box.right + .5 || rect.left < box.left - .5) return true;
27
+ if (rect.top + rect.height / 2 > box.bottom + .5) return true;
28
+ }
29
+ return false;
30
+ }
31
+ /** Whether the text inside `element` overflows its content box. */
32
+ function measureElement(element) {
33
+ if (!element.isConnected) return void 0;
34
+ const box = contentBox(element);
35
+ if (!box) return void 0;
36
+ const range = element.ownerDocument.createRange();
37
+ range.selectNodeContents(element);
38
+ return overflows(range.getClientRects(), box);
39
+ }
40
+ /**
41
+ * Whether the inline `content` overflows `text`, the box that clips it.
42
+ * Used where `text` holds more than the content (an Ellipsis's floats).
43
+ */
44
+ function measureContent(text, content) {
45
+ if (!text.isConnected) return void 0;
46
+ const box = contentBox(text);
47
+ if (!box) return void 0;
48
+ return overflows(content.getClientRects(), box);
49
+ }
50
+ /** Isolates, reads and restores one target now, outside the batch. */
51
+ function readNow(target) {
52
+ const restore = target.isolate?.();
53
+ try {
54
+ return target.read();
55
+ } finally {
56
+ restore?.();
57
+ }
58
+ }
59
+ const targets = /* @__PURE__ */ new Set();
60
+ const byElement = /* @__PURE__ */ new WeakMap();
61
+ const pending = /* @__PURE__ */ new Set();
62
+ let frame = 0;
63
+ let resizeObserver;
64
+ let mutationObserver;
65
+ let fontsListening = false;
66
+ function flush() {
67
+ frame = 0;
68
+ const batch = Array.from(pending).filter((target) => targets.has(target));
69
+ pending.clear();
70
+ const restores = batch.map((target) => target.isolate?.());
71
+ const results = batch.map((target) => target.read());
72
+ for (const restore of restores) restore?.();
73
+ flushSync(() => {
74
+ batch.forEach((target, index) => {
75
+ if (targets.has(target)) target.commit(results[index]);
76
+ });
77
+ });
78
+ }
79
+ /** Asks for `target` to be measured in the next frame, before it paints. */
80
+ function scheduleMeasure(target) {
81
+ if (!targets.has(target)) return;
82
+ pending.add(target);
83
+ if (frame === 0 && typeof requestAnimationFrame === "function") frame = requestAnimationFrame(flush);
84
+ }
85
+ function scheduleAll() {
86
+ for (const target of targets) scheduleMeasure(target);
87
+ }
88
+ function ownerOf(node) {
89
+ for (let current = node; current; current = current.parentNode) {
90
+ const target = byElement.get(current);
91
+ if (target) return target;
92
+ }
93
+ }
94
+ function observers(view) {
95
+ if (!resizeObserver && "ResizeObserver" in view) resizeObserver = new view.ResizeObserver((entries) => {
96
+ for (const entry of entries) {
97
+ const target = byElement.get(entry.target);
98
+ if (target) scheduleMeasure(target);
99
+ }
100
+ });
101
+ if (!mutationObserver && "MutationObserver" in view) mutationObserver = new view.MutationObserver((records) => {
102
+ for (const record of records) {
103
+ const target = ownerOf(record.target);
104
+ if (target) scheduleMeasure(target);
105
+ }
106
+ });
107
+ const fonts = view.document.fonts;
108
+ if (!fontsListening && fonts && typeof fonts.addEventListener === "function") {
109
+ fonts.addEventListener("loadingdone", scheduleAll);
110
+ fontsListening = true;
111
+ }
112
+ }
113
+ /**
114
+ * Starts watching `target`: the elements it names, the text under `watch`
115
+ * and the page's fonts. Measures it in the next frame. Returns the cleanup.
116
+ */
117
+ function observeTruncation(target) {
118
+ const observed = target.observe().filter((element) => element != null);
119
+ const first = observed[0];
120
+ const view = first?.ownerDocument.defaultView;
121
+ if (!first || !view) return () => void 0;
122
+ observers(view);
123
+ targets.add(target);
124
+ for (const element of observed) {
125
+ byElement.set(element, target);
126
+ resizeObserver?.observe(element);
127
+ }
128
+ const watched = target.watch();
129
+ if (watched) {
130
+ byElement.set(watched, target);
131
+ mutationObserver?.observe(watched, {
132
+ childList: true,
133
+ characterData: true,
134
+ subtree: true
135
+ });
136
+ }
137
+ scheduleMeasure(target);
138
+ return () => {
139
+ targets.delete(target);
140
+ pending.delete(target);
141
+ for (const element of observed) {
142
+ if (byElement.get(element) === target) byElement.delete(element);
143
+ resizeObserver?.unobserve(element);
144
+ }
145
+ if (watched && byElement.get(watched) === target) byElement.delete(watched);
146
+ if (targets.size === 0) {
147
+ mutationObserver?.disconnect();
148
+ mutationObserver = void 0;
149
+ }
150
+ };
151
+ }
152
+ //#endregion
153
+ export { TOLERANCE, measureContent, measureElement, observeTruncation, readNow, scheduleMeasure };
@@ -0,0 +1,2 @@
1
+ import { VariantProps } from "tailwind-variants/lite";
2
+ export type { VariantProps };
@@ -0,0 +1,14 @@
1
+ import { cn } from "../cn.mjs";
2
+ import { tv } from "tailwind-variants/lite";
3
+ //#region src/lib/tv.ts
4
+ const tv$1 = ((options) => {
5
+ const recipe = tv(options);
6
+ const wrappedRecipe = ((props) => {
7
+ const result = recipe(props);
8
+ if (result == null || typeof result === "string") return cn(result);
9
+ return Object.fromEntries(Object.entries(result).map(([slotName, slot]) => [slotName, (slotProps) => cn(slot(slotProps))]));
10
+ });
11
+ return Object.assign(wrappedRecipe, recipe);
12
+ });
13
+ //#endregion
14
+ export { tv$1 as tv };
@@ -0,0 +1,58 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ //#region src/lib/use-copy-to-clipboard.ts
3
+ function legacyCopy(value) {
4
+ try {
5
+ const area = document.createElement("textarea");
6
+ area.value = value;
7
+ area.setAttribute("readonly", "");
8
+ area.style.position = "fixed";
9
+ area.style.top = "0";
10
+ area.style.opacity = "0";
11
+ document.body.appendChild(area);
12
+ area.select();
13
+ const ok = document.execCommand("copy");
14
+ document.body.removeChild(area);
15
+ return ok;
16
+ } catch {
17
+ return false;
18
+ }
19
+ }
20
+ async function writeClipboard(value) {
21
+ try {
22
+ if (navigator.clipboard?.writeText) {
23
+ await navigator.clipboard.writeText(value);
24
+ return true;
25
+ }
26
+ } catch {}
27
+ return legacyCopy(value);
28
+ }
29
+ function useCopyToClipboard({ timeout = 1400 } = {}) {
30
+ const [copied, setCopied] = useState(false);
31
+ const timerRef = useRef(null);
32
+ const clear = useCallback(() => {
33
+ if (timerRef.current !== null) {
34
+ clearTimeout(timerRef.current);
35
+ timerRef.current = null;
36
+ }
37
+ }, []);
38
+ const reset = useCallback(() => {
39
+ clear();
40
+ setCopied(false);
41
+ }, [clear]);
42
+ useEffect(() => clear, [clear]);
43
+ return {
44
+ copied,
45
+ copyText: useCallback(async (value) => {
46
+ if (!await writeClipboard(value)) throw new Error("copy_failed");
47
+ setCopied(true);
48
+ clear();
49
+ timerRef.current = setTimeout(() => {
50
+ timerRef.current = null;
51
+ setCopied(false);
52
+ }, timeout);
53
+ }, [clear, timeout]),
54
+ reset
55
+ };
56
+ }
57
+ //#endregion
58
+ export { useCopyToClipboard };
@@ -0,0 +1,60 @@
1
+ import { useCallback, useMemo, useRef } from "react";
2
+ //#region src/lib/use-merged-ref.ts
3
+ /**
4
+ * Merges refs into one setter. Returns `[setRef, getRef]`: `setRef(el)` stores `el` and passes it to
5
+ * every ref; `getRef()` reads the stored element. When a ref changes between renders (checked while
6
+ * rendering), the old one is cleared and the new one gets the stored element at once. The setter
7
+ * calls ref callbacks itself, so what they return is ignored.
8
+ */
9
+ function useMergedRef(...refs) {
10
+ const entries = useMemo(() => [], []);
11
+ const elementRef = useRef(null);
12
+ const getRef = useCallback(() => elementRef.current, []);
13
+ const clearEntry = useCallback((entry) => {
14
+ if (entry != null) {
15
+ if (entry.type === "RefCallback") entry.ref(null);
16
+ else entry.ref.current = null;
17
+ }
18
+ }, []);
19
+ const applyStoredElement = useCallback((ref) => {
20
+ if (typeof ref == "function") ref(getRef());
21
+ else ref.current = getRef();
22
+ }, [getRef]);
23
+ const setRef = useCallback((el) => {
24
+ elementRef.current = el;
25
+ for (const entry of entries) if (entry == null) continue;
26
+ else if (entry.type === "RefObject") entry.ref.current = el;
27
+ else entry.ref(el);
28
+ }, [entries]);
29
+ for (let i = 0; i < refs.length; i++) {
30
+ const ref = refs[i];
31
+ const entry = entries[i];
32
+ if (ref == null) {
33
+ clearEntry(entry);
34
+ entries[i] = null;
35
+ } else {
36
+ if (entry && entry.ref === ref) continue;
37
+ if (typeof ref == "function") {
38
+ if (entry != null) clearEntry(entry);
39
+ entries[i] = {
40
+ type: "RefCallback",
41
+ ref
42
+ };
43
+ } else {
44
+ if (entry != null) clearEntry(entry);
45
+ entries[i] = {
46
+ type: "RefObject",
47
+ ref
48
+ };
49
+ }
50
+ applyStoredElement(ref);
51
+ }
52
+ }
53
+ for (let i = refs.length; i < entries.length; i++) {
54
+ clearEntry(entries[i]);
55
+ entries[i] = null;
56
+ }
57
+ return [setRef, getRef];
58
+ }
59
+ //#endregion
60
+ export { useMergedRef };
@@ -0,0 +1,17 @@
1
+ import { useSyncExternalStore } from "react";
2
+ //#region src/lib/use-mobile-viewport.ts
3
+ const MOBILE_QUERY = "(max-width: 767px)";
4
+ function subscribeMobileViewport(onStoreChange) {
5
+ if (typeof window === "undefined") return () => void 0;
6
+ const media = window.matchMedia(MOBILE_QUERY);
7
+ media.addEventListener("change", onStoreChange);
8
+ return () => media.removeEventListener("change", onStoreChange);
9
+ }
10
+ function getMobileViewportSnapshot() {
11
+ return typeof window !== "undefined" && window.matchMedia(MOBILE_QUERY).matches;
12
+ }
13
+ function useMobileViewport() {
14
+ return useSyncExternalStore(subscribeMobileViewport, getMobileViewportSnapshot, () => false);
15
+ }
16
+ //#endregion
17
+ export { useMobileViewport };
@@ -0,0 +1,49 @@
1
+ import { measureElement, observeTruncation } from "./truncation.mjs";
2
+ import { useCallback, useRef } from "react";
3
+ //#region src/lib/use-overflow-title.ts
4
+ function cut(element) {
5
+ return measureElement(element) === true;
6
+ }
7
+ function assign(ref, node) {
8
+ if (typeof ref === "function") ref(node);
9
+ else if (ref) ref.current = node;
10
+ }
11
+ /**
12
+ * Gives a value that is cut off (an ellipsis, a clamp) its whole text as its
13
+ * `title`, and takes it away again when the value fits: a value that shows in
14
+ * full needs no tooltip repeating it (design/patterns/forms.md#long-values-in-fields).
15
+ * It watches the element and its children, so a part whose text sits in a
16
+ * child that truncates (a chip's label) is covered too. A `title` the caller
17
+ * passes wins, and is never touched.
18
+ *
19
+ * Pass a stable `ref`: a ref object, or a callback ref made with `useCallback`
20
+ * (or defined outside the component). The returned callback ref changes
21
+ * whenever `ref` does, and React then detaches and re-attaches it, so an inline
22
+ * `ref={(node) => ...}` disconnects and rebuilds both observers on every render.
23
+ * The title stays right, but each render pays for new observers and a fresh
24
+ * measurement.
25
+ */
26
+ function useOverflowTitle(ref, title) {
27
+ const cleanup = useRef(void 0);
28
+ const own = title !== void 0;
29
+ return useCallback((node) => {
30
+ cleanup.current?.();
31
+ cleanup.current = void 0;
32
+ assign(ref, node);
33
+ const view = node?.ownerDocument.defaultView;
34
+ if (!node || own || !view) return;
35
+ const children = Array.from(node.children);
36
+ cleanup.current = observeTruncation({
37
+ observe: () => [node, ...children],
38
+ watch: () => node,
39
+ read: () => cut(node) || children.some(cut),
40
+ commit: (truncated) => {
41
+ const text = node.textContent?.trim() ?? "";
42
+ if (text && truncated) node.title = text;
43
+ else node.removeAttribute("title");
44
+ }
45
+ });
46
+ }, [own, ref]);
47
+ }
48
+ //#endregion
49
+ export { useOverflowTitle };
@@ -0,0 +1,16 @@
1
+ //#region src/lib/use-scrollbar-size.d.ts
2
+ /**
3
+ * Publishes a scroller's classic scrollbar width as `--scrollbar-size` on the
4
+ * scroller, for the list cells inside it (lib/list-cell.ts): a cell gives
5
+ * that much of its 8px end inset back, so its fill sits 8px from both outer
6
+ * edges of the list whether the scrollbar takes room (a classic scrollbar,
7
+ * `scrollbar-list`) or not (an overlay scrollbar: 0). CSS alone can't tell
8
+ * the two apart. The width is kept current while the scroller or one of its
9
+ * direct children resizes, which is when a scrollbar comes and goes: content
10
+ * deeper down that grows also grows the child that holds it. A child whose
11
+ * box keeps its size while its content overflows it would not be seen.
12
+ *
13
+ * Returns a ref callback for the scroller.
14
+ */
15
+ export declare function useScrollbarSize<E extends HTMLElement>(): (el: E | null) => void;
16
+ //#endregion
@@ -0,0 +1,46 @@
1
+ import { useCallback, useRef } from "react";
2
+ //#region src/lib/use-scrollbar-size.ts
3
+ /**
4
+ * Publishes a scroller's classic scrollbar width as `--scrollbar-size` on the
5
+ * scroller, for the list cells inside it (lib/list-cell.ts): a cell gives
6
+ * that much of its 8px end inset back, so its fill sits 8px from both outer
7
+ * edges of the list whether the scrollbar takes room (a classic scrollbar,
8
+ * `scrollbar-list`) or not (an overlay scrollbar: 0). CSS alone can't tell
9
+ * the two apart. The width is kept current while the scroller or one of its
10
+ * direct children resizes, which is when a scrollbar comes and goes: content
11
+ * deeper down that grows also grows the child that holds it. A child whose
12
+ * box keeps its size while its content overflows it would not be seen.
13
+ *
14
+ * Returns a ref callback for the scroller.
15
+ */
16
+ function useScrollbarSize() {
17
+ const cleanup = useRef(null);
18
+ return useCallback((el) => {
19
+ cleanup.current?.();
20
+ cleanup.current = null;
21
+ if (!el || typeof ResizeObserver === "undefined") return;
22
+ const update = () => {
23
+ const style = getComputedStyle(el);
24
+ const size = el.offsetWidth - el.clientWidth - parseFloat(style.borderLeftWidth || "0") - parseFloat(style.borderRightWidth || "0");
25
+ el.style.setProperty("--scrollbar-size", `${Math.max(0, Math.round(size))}px`);
26
+ };
27
+ const resize = new ResizeObserver(update);
28
+ const observeChildren = () => {
29
+ for (const child of el.children) resize.observe(child);
30
+ };
31
+ resize.observe(el);
32
+ observeChildren();
33
+ const mutation = new MutationObserver(() => {
34
+ observeChildren();
35
+ update();
36
+ });
37
+ mutation.observe(el, { childList: true });
38
+ update();
39
+ cleanup.current = () => {
40
+ resize.disconnect();
41
+ mutation.disconnect();
42
+ };
43
+ }, []);
44
+ }
45
+ //#endregion
46
+ export { useScrollbarSize };
@@ -0,0 +1,20 @@
1
+ import { Truncation } from "./truncation.mjs";
2
+ import { RefObject } from "react";
3
+ //#region src/lib/use-truncated.d.ts
4
+ /**
5
+ * Whether the text in the element `ref` points at is cut off by its CSS
6
+ * (`truncate`, `line-clamp`, a fixed size with `overflow: hidden`): `true`,
7
+ * `false`, or `undefined` until it is measured or while it has no box.
8
+ *
9
+ * It measures fractional sizes with a 0.5px tolerance, past either inline
10
+ * edge and below the bottom edge, so it needs no line count. It measures again
11
+ * when the element changes size, when its text changes and when a web font
12
+ * finishes loading, in one batched frame for every measured element on the
13
+ * page (lib/truncation.ts), before that frame paints.
14
+ *
15
+ * The element is read when the component mounts: keep `ref` on one element
16
+ * for the component's life, or give the component a `key` that changes with
17
+ * the element.
18
+ */
19
+ export declare function useTruncated(ref: RefObject<Element | null>): Truncation;
20
+ //#endregion
@@ -0,0 +1,34 @@
1
+ import { measureElement, observeTruncation } from "./truncation.mjs";
2
+ import { useLayoutEffect, useState } from "react";
3
+ //#region src/lib/use-truncated.ts
4
+ /**
5
+ * Whether the text in the element `ref` points at is cut off by its CSS
6
+ * (`truncate`, `line-clamp`, a fixed size with `overflow: hidden`): `true`,
7
+ * `false`, or `undefined` until it is measured or while it has no box.
8
+ *
9
+ * It measures fractional sizes with a 0.5px tolerance, past either inline
10
+ * edge and below the bottom edge, so it needs no line count. It measures again
11
+ * when the element changes size, when its text changes and when a web font
12
+ * finishes loading, in one batched frame for every measured element on the
13
+ * page (lib/truncation.ts), before that frame paints.
14
+ *
15
+ * The element is read when the component mounts: keep `ref` on one element
16
+ * for the component's life, or give the component a `key` that changes with
17
+ * the element.
18
+ */
19
+ function useTruncated(ref) {
20
+ const [truncated, setTruncated] = useState(void 0);
21
+ useLayoutEffect(() => {
22
+ const element = ref.current;
23
+ if (!element) return void 0;
24
+ return observeTruncation({
25
+ observe: () => [element],
26
+ watch: () => element,
27
+ read: () => measureElement(element),
28
+ commit: setTruncated
29
+ });
30
+ }, [ref]);
31
+ return truncated;
32
+ }
33
+ //#endregion
34
+ export { useTruncated };
@@ -0,0 +1,8 @@
1
+ //#region src/lib/without-children.d.ts
2
+ /**
3
+ * Element props without `children` — for leaf components (dots, markers) that
4
+ * render no caller content. React ships `ComponentPropsWithoutRef` but no
5
+ * equivalent that subtracts children, so this names the one-off `Omit`.
6
+ */
7
+ export type WithoutChildren<P> = Omit<P, "children">;
8
+ //#endregion