@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,258 @@
1
+ "use client";
2
+ import { cn } from "../../cn.mjs";
3
+ import { SILENT_DRAG_ANNOUNCEMENTS, dragInstructions, dragMessages } from "./drag-announcements.mjs";
4
+ import { useDragAcrossLists } from "./drag-sensors.mjs";
5
+ import { DropPlaceholder } from "./drop-placeholder.mjs";
6
+ import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { arrayMove, verticalListSortingStrategy } from "@dnd-kit/sortable";
9
+ //#region src/components/drag/drag-lists.tsx
10
+ /** dnd-kit's vertical strategy, except that nothing moves while the hand is outside the list. */
11
+ const dragListStrategy = (args) => args.overIndex < 0 ? null : verticalListSortingStrategy(args);
12
+ /**
13
+ * Items in one or more lists that can be reordered and moved between lists
14
+ * (a sidebar's sections, a board's columns): the lists half of the drag
15
+ * model (design/patterns/drag-and-drop.md#where-it-will-land). While dragging,
16
+ * the item stands at its landing spot (its own slot is the place; siblings
17
+ * slide apart), a list can refuse it, and every step is announced by name.
18
+ * The keyboard is measured from the item's real place, so the arrows never
19
+ * skip one after a move into another list.
20
+ *
21
+ * Spread `handlers`, `collisionDetection` and `accessibility` on the
22
+ * `DndContext`, pass `coordinateGetter` to `useDragSensors`, and render
23
+ * `DragRemeasure version={items}` inside it.
24
+ */
25
+ function useDragLists({ lists, items, onItemsChange, listName, itemName, refuse, collisionDetection, announce, messages }) {
26
+ const say = useMemo(() => dragMessages(messages), [messages]);
27
+ const across = useDragAcrossLists(collisionDetection);
28
+ const itemsRef = useRef(items);
29
+ useLayoutEffect(() => {
30
+ itemsRef.current = items;
31
+ }, [items]);
32
+ const [activeId, setActiveId] = useState(null);
33
+ const [originList, setOriginList] = useState(null);
34
+ const [refusal, setRefusalState] = useState(null);
35
+ const refusalRef = useRef(refusal);
36
+ const setRefusal = (next) => {
37
+ refusalRef.current = next;
38
+ setRefusalState(next);
39
+ };
40
+ const origin = useRef(null);
41
+ const inserted = useRef(null);
42
+ const listOf = useCallback((state, id) => lists.includes(id) ? id : lists.find((list) => state[list].includes(String(id))) ?? null, [lists]);
43
+ const isList = (id) => lists.includes(id);
44
+ const where = (state, id) => {
45
+ const list = listOf(state, id);
46
+ return {
47
+ place: listName(list),
48
+ position: state[list].indexOf(id) + 1,
49
+ count: state[list].length
50
+ };
51
+ };
52
+ const update = (next) => {
53
+ itemsRef.current = next;
54
+ onItemsChange(next);
55
+ };
56
+ /** Still home: in its own list, at its own index (pass the sortable's projected index). */
57
+ const isHome = useCallback((id, index) => {
58
+ const start = origin.current;
59
+ return start != null && listOf(itemsRef.current, id) === start.list && index === start.index;
60
+ }, [listOf]);
61
+ const onDragStart = ({ active, activatorEvent }) => {
62
+ const id = String(active.id);
63
+ const list = listOf(items, id);
64
+ if (!list) return;
65
+ origin.current = {
66
+ list,
67
+ index: items[list].indexOf(id),
68
+ snapshot: items,
69
+ keyboard: typeof KeyboardEvent !== "undefined" && activatorEvent instanceof KeyboardEvent
70
+ };
71
+ inserted.current = null;
72
+ setActiveId(id);
73
+ setOriginList(list);
74
+ announce(say.pickedUp({
75
+ name: itemName(id),
76
+ ...where(items, id)
77
+ }));
78
+ };
79
+ const onDragOver = ({ active, over }) => {
80
+ const start = origin.current;
81
+ if (!start) return;
82
+ const id = String(active.id);
83
+ if (!over) {
84
+ if (refusalRef.current) setRefusal(null);
85
+ announce(say.notOver({ name: itemName(id) }));
86
+ return;
87
+ }
88
+ const current = itemsRef.current;
89
+ const from = listOf(current, id);
90
+ const to = listOf(current, over.id);
91
+ if (!from || !to) return;
92
+ const reason = refuse?.(start.list, to, id) ?? null;
93
+ if (reason) {
94
+ setRefusal({
95
+ list: to,
96
+ reason
97
+ });
98
+ update(start.snapshot);
99
+ inserted.current = null;
100
+ announce(say.refused({
101
+ name: itemName(id),
102
+ place: listName(to),
103
+ reason
104
+ }));
105
+ return;
106
+ }
107
+ if (refusalRef.current) setRefusal(null);
108
+ if (from !== to) {
109
+ const fromList = current[from].filter((item) => item !== id);
110
+ const toList = [...current[to]];
111
+ let at = toList.indexOf(String(over.id));
112
+ if (at < 0) at = toList.length;
113
+ else if (start.keyboard) {
114
+ if (lists.indexOf(from) > lists.indexOf(to)) at += 1;
115
+ } else {
116
+ const rect = active.rect.current.translated;
117
+ if (rect && rect.top + rect.height / 2 > over.rect.top + over.rect.height / 2) at += 1;
118
+ }
119
+ toList.splice(at, 0, id);
120
+ const next = {
121
+ ...current,
122
+ [from]: fromList,
123
+ [to]: toList
124
+ };
125
+ across.moved(start.keyboard);
126
+ update(next);
127
+ inserted.current = isList(over.id) ? null : over.id;
128
+ announce(say.over({
129
+ name: itemName(id),
130
+ ...where(next, id)
131
+ }));
132
+ return;
133
+ }
134
+ if (over.id === id) {
135
+ inserted.current = null;
136
+ return;
137
+ }
138
+ const list = current[to];
139
+ if (inserted.current === over.id) {
140
+ announce(say.over({
141
+ name: itemName(id),
142
+ ...where(current, id)
143
+ }));
144
+ return;
145
+ }
146
+ inserted.current = null;
147
+ const overIndex = isList(over.id) ? list.length - 1 : list.indexOf(String(over.id));
148
+ announce(say.over({
149
+ name: itemName(id),
150
+ place: listName(to),
151
+ position: overIndex + 1,
152
+ count: list.length
153
+ }));
154
+ };
155
+ const finish = (dropped, overId) => {
156
+ const start = origin.current;
157
+ const id = activeId;
158
+ const refused = refusalRef.current;
159
+ origin.current = null;
160
+ across.reset();
161
+ setActiveId(null);
162
+ setOriginList(null);
163
+ setRefusal(null);
164
+ if (!start || !id) return;
165
+ if (!dropped || overId == null || refused) {
166
+ update(start.snapshot);
167
+ const home = {
168
+ name: itemName(id),
169
+ ...where(start.snapshot, id)
170
+ };
171
+ announce(refused && dropped ? say.refusedDrop({
172
+ ...home,
173
+ reason: refused.reason
174
+ }) : say.cancelled(home));
175
+ return;
176
+ }
177
+ const current = itemsRef.current;
178
+ const list = listOf(current, id);
179
+ const ids = current[list];
180
+ const fromIndex = ids.indexOf(id);
181
+ const toIndex = inserted.current === overId ? fromIndex : isList(overId) ? ids.length - 1 : ids.indexOf(String(overId));
182
+ const next = toIndex >= 0 && toIndex !== fromIndex ? {
183
+ ...current,
184
+ [list]: arrayMove([...ids], fromIndex, toIndex)
185
+ } : current;
186
+ update(next);
187
+ announce(say.dropped({
188
+ name: itemName(id),
189
+ ...where(next, id)
190
+ }));
191
+ };
192
+ const accessibility = useMemo(() => ({
193
+ announcements: SILENT_DRAG_ANNOUNCEMENTS,
194
+ screenReaderInstructions: dragInstructions(messages)
195
+ }), [messages]);
196
+ return {
197
+ /** The dragged item's id, or null. */
198
+ activeId,
199
+ /** The list that refuses the item under the hand, and why. */
200
+ refusal,
201
+ /** The list the drag started in, while dragging. */
202
+ originList,
203
+ isHome,
204
+ listOf,
205
+ collisionDetection: across.collisionDetection,
206
+ coordinateGetter: across.coordinateGetter,
207
+ accessibility,
208
+ handlers: {
209
+ onDragStart,
210
+ onDragOver,
211
+ onDragEnd: ({ over }) => finish(true, over?.id ?? null),
212
+ onDragCancel: () => finish(false, null)
213
+ }
214
+ };
215
+ }
216
+ /**
217
+ * Wraps each item's content in a list. The dragged item's own node is at 40%
218
+ * while it is still home, and the dashed place (its size, its radius) once it
219
+ * stands anywhere else. Every other item renders as it is: the wrapper stays
220
+ * the same, so the item keeps focus when its drag starts.
221
+ */
222
+ function DraggedSlot({ dragging = false, home, radius, className, children }) {
223
+ const place = dragging && !home;
224
+ return /* @__PURE__ */ jsxs("div", {
225
+ "data-slot": "drag-slot",
226
+ className: "relative",
227
+ children: [/* @__PURE__ */ jsx("div", {
228
+ "data-drag-origin": dragging && home ? "" : void 0,
229
+ className: place ? "invisible" : void 0,
230
+ children
231
+ }), place ? /* @__PURE__ */ jsx(DropPlaceholder, { className: cn("absolute inset-0", radius, className) }) : null]
232
+ });
233
+ }
234
+ /** The last announcement, for a polite live region (`DragLiveRegion`). Repeats are dropped. */
235
+ function useDragAnnouncer() {
236
+ const [message, setMessage] = useState("");
237
+ const last = useRef("");
238
+ return {
239
+ message,
240
+ announce: useCallback((text) => {
241
+ if (text === last.current) return;
242
+ last.current = text;
243
+ setMessage(text);
244
+ }, [])
245
+ };
246
+ }
247
+ /** A polite, visually hidden live region for drag announcements. */
248
+ function DragLiveRegion({ message }) {
249
+ return /* @__PURE__ */ jsx("span", {
250
+ className: "sr-only",
251
+ role: "status",
252
+ "aria-live": "polite",
253
+ "aria-atomic": "true",
254
+ children: message
255
+ });
256
+ }
257
+ //#endregion
258
+ export { DragLiveRegion, DraggedSlot, dragListStrategy, useDragAnnouncer, useDragLists };
@@ -0,0 +1,87 @@
1
+ import { HoldThenMoveOptions } from "../../lib/touch-drag.mjs";
2
+ import { CollisionDetection, KeyboardCoordinateGetter, KeyboardSensorOptions } from "@dnd-kit/core";
3
+ //#region src/components/drag/drag-sensors.d.ts
4
+ /**
5
+ * A mouse or a pen picks an item up once it has moved this far, so a click
6
+ * never moves anything (design/patterns/drag-and-drop.md#starting-a-drag).
7
+ */
8
+ export declare const MOUSE_DRAG_DISTANCE_PX = 6;
9
+ /**
10
+ * Space picks up and drops, Escape puts back, the arrow keys move. Enter
11
+ * never starts a drag: on an item that can also be opened or activated, Enter
12
+ * does that.
13
+ */
14
+ export declare const DRAG_KEYBOARD_CODES: NonNullable<KeyboardSensorOptions["keyboardCodes"]>;
15
+ export type DragSensorsOptions = {
16
+ /**
17
+ * How the arrow keys move a lifted item. Defaults to
18
+ * `listKeyboardCoordinates`, which steps through a sortable list.
19
+ */
20
+ coordinateGetter?: KeyboardCoordinateGetter;
21
+ /** Leave the keyboard out, for a surface whose keyboard path is a button. */
22
+ keyboard?: boolean;
23
+ /** The touch hold, distance and tolerance; the defaults are the system's. */
24
+ touch?: HoldThenMoveOptions;
25
+ };
26
+ /**
27
+ * The one sensor set for everything that can be dragged
28
+ * (design/patterns/drag-and-drop.md#starting-a-drag):
29
+ *
30
+ * - a mouse or a pen: after 6px of movement;
31
+ * - a finger: hold still 500ms, then move 10px (`useHoldThenMoveTouchSensor`);
32
+ * - the keyboard: Space picks up, the arrows move, Space drops, Escape puts
33
+ * back. Enter never starts a drag.
34
+ *
35
+ * However the drag started, Escape during it only puts the item back: it is
36
+ * taken in the capture phase on the window and stopped, so no app handler
37
+ * (a dialog, a panel, a popover that closes on Escape) hears it. Once the drag
38
+ * is over, Escape reaches the app again.
39
+ *
40
+ * Pass the options, or only the keyboard's `coordinateGetter`.
41
+ */
42
+ export declare function useDragSensors(options?: DragSensorsOptions | KeyboardCoordinateGetter): import("@dnd-kit/core").SensorDescriptor<import("@dnd-kit/core").SensorOptions>[];
43
+ /**
44
+ * dnd-kit's sortable keyboard steps, measured from where the item's place
45
+ * actually is (its own node, slid into the landing spot) rather than from the
46
+ * lifted copy. After an item moves into another list the two differ, and the
47
+ * arrows would skip a place. Use it for lists inside one `DndContext`.
48
+ */
49
+ export declare const listKeyboardCoordinates: KeyboardCoordinateGetter;
50
+ export type DragAcrossLists = {
51
+ /** The caller's collision detection, holding the item over itself right after it moves list. */
52
+ collisionDetection: CollisionDetection;
53
+ /** Pass to `useDragSensors({ coordinateGetter })`. */
54
+ coordinateGetter: KeyboardCoordinateGetter;
55
+ /**
56
+ * Call when the item has just been moved into another list. By keyboard it
57
+ * then stays over itself until the next arrow; by pointer, for one frame.
58
+ */
59
+ moved: (viaKeyboard: boolean) => void;
60
+ /** Call when the drag ends or is cancelled. */
61
+ reset: () => void;
62
+ };
63
+ /**
64
+ * The keyboard fix for an item that moves between lists while it is dragged
65
+ * (a sidebar's sections, a board's columns). Without it, dnd-kit still counts
66
+ * the row the item was put next to as the place under it, projects one more
67
+ * move, and the next arrow skips a place: what is announced and where the item
68
+ * drops disagree. With it:
69
+ *
70
+ * - right after it moves list, the item is over itself (by keyboard until the
71
+ * next arrow, by pointer for one frame);
72
+ * - the arrows are measured from the item's real place (`listKeyboardCoordinates`).
73
+ *
74
+ * Render `DragRemeasure` too, so the lists are measured again after the move.
75
+ */
76
+ export declare function useDragAcrossLists(collisionDetection: CollisionDetection): DragAcrossLists;
77
+ export type DragRemeasureProps = {
78
+ /** Anything that changes when an item moves list, such as the lists' items. */
79
+ version: unknown;
80
+ };
81
+ /**
82
+ * Measures every drop target again once an item's move into another list has
83
+ * rendered. dnd-kit's own observers skip targets whose size didn't change,
84
+ * even when they moved. Render it inside the `DndContext`.
85
+ */
86
+ export declare function DragRemeasure({ version }: DragRemeasureProps): null;
87
+ //#endregion
@@ -0,0 +1,169 @@
1
+ "use client";
2
+ import { eventWindow, holdEscape, releaseEscape } from "../../lib/drag-escape.mjs";
3
+ import { useHoldThenMoveTouchSensor, useMouseOnlyPointerSensor } from "../../lib/touch-drag.mjs";
4
+ import { useLayoutEffect, useMemo, useRef } from "react";
5
+ import { KeyboardSensor, useDndContext, useSensor, useSensors } from "@dnd-kit/core";
6
+ import { sortableKeyboardCoordinates } from "@dnd-kit/sortable";
7
+ //#region src/components/drag/drag-sensors.ts
8
+ /**
9
+ * A mouse or a pen picks an item up once it has moved this far, so a click
10
+ * never moves anything (design/patterns/drag-and-drop.md#starting-a-drag).
11
+ */
12
+ const MOUSE_DRAG_DISTANCE_PX = 6;
13
+ /**
14
+ * Space picks up and drops, Escape puts back, the arrow keys move. Enter
15
+ * never starts a drag: on an item that can also be opened or activated, Enter
16
+ * does that.
17
+ */
18
+ const DRAG_KEYBOARD_CODES = {
19
+ start: ["Space"],
20
+ cancel: ["Escape"],
21
+ end: ["Space"]
22
+ };
23
+ var DragKeyboardSensorImpl = class extends KeyboardSensor {
24
+ static activators = KeyboardSensor.activators;
25
+ attach() {
26
+ super.attach();
27
+ holdEscape(eventWindow(this.props.event), this, (event) => this.handleCancel(event));
28
+ }
29
+ detach() {
30
+ releaseEscape(eventWindow(this.props.event), this);
31
+ super.detach();
32
+ }
33
+ };
34
+ /**
35
+ * dnd-kit's KeyboardSensor, but Escape during the drag puts the item back and
36
+ * reaches nothing else: no dialog, panel or popover that closes on Escape
37
+ * hears it (`drag-escape.ts`). The pointer sensors of `useDragSensors` do the
38
+ * same.
39
+ */
40
+ const DragKeyboardSensor = DragKeyboardSensorImpl;
41
+ const NO_TOUCH = {};
42
+ /**
43
+ * The one sensor set for everything that can be dragged
44
+ * (design/patterns/drag-and-drop.md#starting-a-drag):
45
+ *
46
+ * - a mouse or a pen: after 6px of movement;
47
+ * - a finger: hold still 500ms, then move 10px (`useHoldThenMoveTouchSensor`);
48
+ * - the keyboard: Space picks up, the arrows move, Space drops, Escape puts
49
+ * back. Enter never starts a drag.
50
+ *
51
+ * However the drag started, Escape during it only puts the item back: it is
52
+ * taken in the capture phase on the window and stopped, so no app handler
53
+ * (a dialog, a panel, a popover that closes on Escape) hears it. Once the drag
54
+ * is over, Escape reaches the app again.
55
+ *
56
+ * Pass the options, or only the keyboard's `coordinateGetter`.
57
+ */
58
+ function useDragSensors(options = {}) {
59
+ const { coordinateGetter = listKeyboardCoordinates, keyboard = true, touch = NO_TOUCH } = typeof options === "function" ? { coordinateGetter: options } : options;
60
+ const keyboardOptions = useMemo(() => ({
61
+ keyboardCodes: DRAG_KEYBOARD_CODES,
62
+ coordinateGetter
63
+ }), [coordinateGetter]);
64
+ const mouse = useMouseOnlyPointerSensor(6);
65
+ const finger = useHoldThenMoveTouchSensor(touch);
66
+ const keys = useSensor(DragKeyboardSensor, keyboardOptions);
67
+ return useSensors(mouse, finger, keyboard ? keys : null);
68
+ }
69
+ /**
70
+ * dnd-kit's sortable keyboard steps, measured from where the item's place
71
+ * actually is (its own node, slid into the landing spot) rather than from the
72
+ * lifted copy. After an item moves into another list the two differ, and the
73
+ * arrows would skip a place. Use it for lists inside one `DndContext`.
74
+ */
75
+ const listKeyboardCoordinates = (event, args) => {
76
+ const { context } = args;
77
+ const node = context.active == null ? null : context.draggableNodes.get(context.active.id)?.node.current;
78
+ if (!node) return sortableKeyboardCoordinates(event, args);
79
+ const rect = node.getBoundingClientRect();
80
+ const collisionRect = {
81
+ top: rect.top,
82
+ left: rect.left,
83
+ width: rect.width,
84
+ height: rect.height,
85
+ bottom: rect.bottom,
86
+ right: rect.right
87
+ };
88
+ return sortableKeyboardCoordinates(event, {
89
+ ...args,
90
+ context: {
91
+ ...context,
92
+ collisionRect
93
+ }
94
+ });
95
+ };
96
+ /**
97
+ * The keyboard fix for an item that moves between lists while it is dragged
98
+ * (a sidebar's sections, a board's columns). Without it, dnd-kit still counts
99
+ * the row the item was put next to as the place under it, projects one more
100
+ * move, and the next arrow skips a place: what is announced and where the item
101
+ * drops disagree. With it:
102
+ *
103
+ * - right after it moves list, the item is over itself (by keyboard until the
104
+ * next arrow, by pointer for one frame);
105
+ * - the arrows are measured from the item's real place (`listKeyboardCoordinates`).
106
+ *
107
+ * Render `DragRemeasure` too, so the lists are measured again after the move.
108
+ */
109
+ function useDragAcrossLists(collisionDetection) {
110
+ const box = useRef({
111
+ overSelf: false,
112
+ justMoved: false,
113
+ frame: 0
114
+ });
115
+ return useMemo(() => {
116
+ const clearFrame = () => {
117
+ const state = box.current;
118
+ if (state.frame && typeof cancelAnimationFrame !== "undefined") cancelAnimationFrame(state.frame);
119
+ state.frame = 0;
120
+ };
121
+ return {
122
+ collisionDetection: (args) => (box.current.justMoved || box.current.overSelf) && args.active ? [{ id: args.active.id }] : collisionDetection(args),
123
+ coordinateGetter: (event, args) => {
124
+ box.current.overSelf = false;
125
+ return listKeyboardCoordinates(event, args);
126
+ },
127
+ moved: (viaKeyboard) => {
128
+ const state = box.current;
129
+ state.justMoved = true;
130
+ if (viaKeyboard) state.overSelf = true;
131
+ clearFrame();
132
+ if (typeof requestAnimationFrame === "undefined") {
133
+ state.justMoved = false;
134
+ return;
135
+ }
136
+ state.frame = requestAnimationFrame(() => {
137
+ state.frame = requestAnimationFrame(() => {
138
+ state.justMoved = false;
139
+ state.frame = 0;
140
+ });
141
+ });
142
+ },
143
+ reset: () => {
144
+ clearFrame();
145
+ box.current.overSelf = false;
146
+ box.current.justMoved = false;
147
+ }
148
+ };
149
+ }, [collisionDetection]);
150
+ }
151
+ /**
152
+ * Measures every drop target again once an item's move into another list has
153
+ * rendered. dnd-kit's own observers skip targets whose size didn't change,
154
+ * even when they moved. Render it inside the `DndContext`.
155
+ */
156
+ function DragRemeasure({ version }) {
157
+ const context = useDndContext();
158
+ const latest = useRef(context);
159
+ useLayoutEffect(() => {
160
+ latest.current = context;
161
+ });
162
+ useLayoutEffect(() => {
163
+ const { active, droppableContainers } = latest.current;
164
+ if (active) latest.current.measureDroppableContainers([...droppableContainers.keys()]);
165
+ }, [version]);
166
+ return null;
167
+ }
168
+ //#endregion
169
+ export { DRAG_KEYBOARD_CODES, DragRemeasure, MOUSE_DRAG_DISTANCE_PX, listKeyboardCoordinates, useDragAcrossLists, useDragSensors };
@@ -0,0 +1,7 @@
1
+ //#region src/components/drag/drag.recipe.d.ts
2
+ /**
3
+ * The lift look, for a copy drawn outside `DragLift`: an opaque popover
4
+ * surface, `shadow-float` and the `line-seam` ring. No scale, no tilt.
5
+ */
6
+ export declare const LIFT_CLASS = "bg-layer-popover shadow-float ring-1 ring-line-seam";
7
+ //#endregion
@@ -0,0 +1,30 @@
1
+ import { tv } from "../../lib/tv.mjs";
2
+ //#region src/components/drag/drag.recipe.ts
3
+ /**
4
+ * The lift look, for a copy drawn outside `DragLift`: an opaque popover
5
+ * surface, `shadow-float` and the `line-seam` ring. No scale, no tilt.
6
+ */
7
+ const LIFT_CLASS = "bg-layer-popover shadow-float ring-1 ring-line-seam";
8
+ const drag = tv({
9
+ slots: {
10
+ lift: [
11
+ "pointer-events-none size-full",
12
+ "rounded-control",
13
+ LIFT_CLASS
14
+ ],
15
+ placeholder: [
16
+ "pointer-events-none box-border",
17
+ "rounded-control",
18
+ "border-[1.5px] border-dashed border-line-strong bg-fill-subtle"
19
+ ],
20
+ hint: [
21
+ "pointer-events-none fixed top-0 left-0 z-70 max-w-80",
22
+ "rounded-chip px-2 py-1",
23
+ "font-sans text-caption",
24
+ "bg-layer-hud text-foreground-on-hud shadow-float ring-1 ring-line-seam"
25
+ ]
26
+ },
27
+ variants: { opaque: { true: { placeholder: ["bg-layer-canvas", "bg-[linear-gradient(var(--fill-subtle),var(--fill-subtle))]"] } } }
28
+ });
29
+ //#endregion
30
+ export { LIFT_CLASS, drag };
@@ -0,0 +1,41 @@
1
+ import { ComponentPropsWithRef } from "react";
2
+ import { useRender } from "@base-ui/react/use-render";
3
+ //#region src/components/drag/drop-placeholder.d.ts
4
+ export type DropPlaceholderProps = useRender.ComponentProps<"div"> & {
5
+ /**
6
+ * In a layout (the gap a column makes, a new column's strip): an opaque
7
+ * `layer-canvas` under the `fill-subtle` wash, so the column behind the gap
8
+ * doesn't show through while its sections reflow. Nothing is drawn over
9
+ * live content (design/patterns/drag-and-drop.md#where-it-will-land).
10
+ */
11
+ opaque?: boolean;
12
+ };
13
+ /**
14
+ * Where a dragged item will land (design/patterns/drag-and-drop.md#where-it-will-land):
15
+ * a 1.5px dashed `line-strong` outline on `fill-subtle`, with the item's
16
+ * radius and size. One look for every place. The control radius is the
17
+ * default; pass the item's own (`rounded-container` for a card). Hidden from
18
+ * assistive technology: the announcements say where the item is.
19
+ */
20
+ export declare function DropPlaceholder({ opaque, className, render, ...props }: DropPlaceholderProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
21
+ export type DragRefusalHintProps = Omit<ComponentPropsWithRef<"div">, "children" | "ref"> & {
22
+ /** Why the place under the hand won't take the item, such as "Can't move from Todo to Done". */
23
+ children: string;
24
+ /** Render the hint in another element; by default it renders in `document.body`. */
25
+ container?: Element | DocumentFragment | null;
26
+ };
27
+ /**
28
+ * Shown while the hand is over a place that refuses the item
29
+ * (design/patterns/drag-and-drop.md#refused-places): the reason, in a HUD
30
+ * chip by the pointer (by the lifted copy in a keyboard drag), and the
31
+ * not-allowed cursor. Render it only while the place is refused, inside the
32
+ * `DndContext`, with no placeholder anywhere. Announce the reason as well:
33
+ * the chip is not read out.
34
+ *
35
+ * The chip sits right of and below the pointer. Near the window's right edge
36
+ * it goes left of the pointer and of the lifted copy, near the bottom edge
37
+ * above the pointer; it never sits under the copy, and always stays 8px inside
38
+ * the window. Its size is measured when its content changes, not every frame.
39
+ */
40
+ export declare function DragRefusalHint({ children, container, className, style, ...props }: DragRefusalHintProps): import("react").ReactPortal | null;
41
+ //#endregion