themelia-react-ui 1.0.2 → 2.0.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 (748) hide show
  1. package/CHANGELOG.md +632 -1
  2. package/README.md +31 -13
  3. package/dist/accordion-B6a3vVgA.js +207 -0
  4. package/dist/accordion-B6a3vVgA.js.map +1 -0
  5. package/dist/action-menu-TzCoSlwL.js +280 -0
  6. package/dist/action-menu-TzCoSlwL.js.map +1 -0
  7. package/dist/{affordance-geometry.generated-CL84ZN9A.js → affordance-geometry.generated-B5iu-Mkr.js} +9 -3
  8. package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +1 -0
  9. package/dist/{ai-artifact-DLVdK0Py.js → ai-artifact-BMJdv-6q.js} +389 -391
  10. package/dist/ai-artifact-BMJdv-6q.js.map +1 -0
  11. package/dist/{app-shell-C_fKpljx.js → app-shell-ZK5RWdo6.js} +4 -4
  12. package/dist/{app-shell-C_fKpljx.js.map → app-shell-ZK5RWdo6.js.map} +1 -1
  13. package/dist/attachment-BtfhGm8i.js +245 -0
  14. package/dist/attachment-BtfhGm8i.js.map +1 -0
  15. package/dist/{auth-CAQcasMV.js → auth-CYxKfo69.js} +239 -237
  16. package/dist/auth-CYxKfo69.js.map +1 -0
  17. package/dist/{avatar-Bu2HhitA.js → avatar-BBnEJIx8.js} +71 -68
  18. package/dist/avatar-BBnEJIx8.js.map +1 -0
  19. package/dist/badge-MrKVNzW9.js +93 -0
  20. package/dist/badge-MrKVNzW9.js.map +1 -0
  21. package/dist/base/accordion.js +1 -1
  22. package/dist/base/action-menu.js +1 -1
  23. package/dist/base/attachment.js +1 -1
  24. package/dist/base/avatar.js +1 -1
  25. package/dist/base/badge.js +1 -1
  26. package/dist/base/batch-action-bar.js +3 -0
  27. package/dist/base/buttons.js +2 -3
  28. package/dist/base/cards.js +2 -2
  29. package/dist/base/carousel.js +19 -19
  30. package/dist/base/carousel.js.map +1 -1
  31. package/dist/base/cascader.js +234 -224
  32. package/dist/base/cascader.js.map +1 -1
  33. package/dist/base/chart.js +1 -1
  34. package/dist/base/choice-inputs.js +3 -3
  35. package/dist/base/code-block.js +1 -1
  36. package/dist/base/combobox.js +1 -1
  37. package/dist/base/command.js +1 -1
  38. package/dist/base/copyable.js +1 -1
  39. package/dist/base/date-pickers.js +2 -2
  40. package/dist/base/display.js +7 -7
  41. package/dist/base/feedback.js +3 -3
  42. package/dist/base/forms-numeric.js +1 -1
  43. package/dist/base/forms.js +2 -2
  44. package/dist/base/inline-edit.js +81 -76
  45. package/dist/base/inline-edit.js.map +1 -1
  46. package/dist/base/item.js +1 -1
  47. package/dist/base/media-gallery.js +1 -1
  48. package/dist/base/metadata-list.js +3 -0
  49. package/dist/base/navigation.js +7 -7
  50. package/dist/base/popover-menu.js +1 -1
  51. package/dist/base/popover.js +1 -1
  52. package/dist/base/qr-code.js +7 -4
  53. package/dist/base/qr-code.js.map +1 -1
  54. package/dist/base/repeaters.js +175 -174
  55. package/dist/base/repeaters.js.map +1 -1
  56. package/dist/base/sheet.js +1 -1
  57. package/dist/base/sidebar.js +1 -1
  58. package/dist/base/signature-pad.js +148 -138
  59. package/dist/base/signature-pad.js.map +1 -1
  60. package/dist/base/skeleton.js +1 -1
  61. package/dist/base/spinner.js +1 -1
  62. package/dist/base/structure.js +1 -1
  63. package/dist/base/table.js +1 -1
  64. package/dist/base/text-inputs.js +2 -2
  65. package/dist/base/toaster.js +4 -4
  66. package/dist/base/toaster.js.map +1 -1
  67. package/dist/base/tree.js +1 -1
  68. package/dist/base/upload-queue.js +1 -1
  69. package/dist/base/upload.js +3 -3
  70. package/dist/base/value-inputs.js +2 -2
  71. package/dist/batch-action-bar-BZGDG-Si.js +104 -0
  72. package/dist/batch-action-bar-BZGDG-Si.js.map +1 -0
  73. package/dist/blocks/admin.js +264 -253
  74. package/dist/blocks/admin.js.map +1 -1
  75. package/dist/blocks/ai.js +293 -323
  76. package/dist/blocks/ai.js.map +1 -1
  77. package/dist/blocks/analytics/usage-card.js +1 -1
  78. package/dist/blocks/analytics.js +596 -587
  79. package/dist/blocks/analytics.js.map +1 -1
  80. package/dist/blocks/collaboration.js +1 -1
  81. package/dist/blocks/commerce/receipt.js +1 -1
  82. package/dist/blocks/commerce.js +2246 -1693
  83. package/dist/blocks/commerce.js.map +1 -1
  84. package/dist/blocks/data-display.js +3 -2
  85. package/dist/blocks/onboarding.js +50 -49
  86. package/dist/blocks/onboarding.js.map +1 -1
  87. package/dist/blocks/planning.js +82 -91
  88. package/dist/blocks/planning.js.map +1 -1
  89. package/dist/blocks/timelines.js +1 -1
  90. package/dist/breadcrumbs-D5t7I023.js +129 -0
  91. package/dist/breadcrumbs-D5t7I023.js.map +1 -0
  92. package/dist/{button-BZyfTvwm.js → button-QYwiyhD2.js} +15 -14
  93. package/dist/button-QYwiyhD2.js.map +1 -0
  94. package/dist/buttons-SbIcm1HJ.js +661 -0
  95. package/dist/buttons-SbIcm1HJ.js.map +1 -0
  96. package/dist/{cards-qGSErLw_.js → cards-CiiHpKYd.js} +8 -8
  97. package/dist/cards-CiiHpKYd.js.map +1 -0
  98. package/dist/{chart-Bsc5BICK.js → chart-QfrARkXl.js} +17 -15
  99. package/dist/chart-QfrARkXl.js.map +1 -0
  100. package/dist/checkbox-DhB6K0bK.js +36 -0
  101. package/dist/checkbox-DhB6K0bK.js.map +1 -0
  102. package/dist/choice-inputs-t6w3ATNz.js +766 -0
  103. package/dist/choice-inputs-t6w3ATNz.js.map +1 -0
  104. package/dist/code-block-Dgbu-CU3.js +185 -0
  105. package/dist/code-block-Dgbu-CU3.js.map +1 -0
  106. package/dist/{collapsible-ClvC7Bj3.js → collapsible-D8AEGU1-.js} +4 -4
  107. package/dist/{collapsible-ClvC7Bj3.js.map → collapsible-D8AEGU1-.js.map} +1 -1
  108. package/dist/{collection-content-D6S8cv_n.js → collection-content-uK16Grv0.js} +3 -3
  109. package/dist/{collection-content-D6S8cv_n.js.map → collection-content-uK16Grv0.js.map} +1 -1
  110. package/dist/{combobox-BFnbJJp3.js → combobox-2Ic8N9bL.js} +103 -98
  111. package/dist/combobox-2Ic8N9bL.js.map +1 -0
  112. package/dist/combobox-DLl0bfiq.js +867 -0
  113. package/dist/combobox-DLl0bfiq.js.map +1 -0
  114. package/dist/{command-BnmSchli.js → command-kNR20o7x.js} +34 -30
  115. package/dist/command-kNR20o7x.js.map +1 -0
  116. package/dist/{comments-u5L0OGip.js → comments-BpDuCUUu.js} +304 -301
  117. package/dist/comments-BpDuCUUu.js.map +1 -0
  118. package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
  119. package/dist/components/base/action-menu/action-menu.d.ts +27 -5
  120. package/dist/components/base/action-menu/action-menu.recipes.d.ts +21 -0
  121. package/dist/components/base/action-menu/index.d.ts +1 -0
  122. package/dist/components/base/avatar/stacked-avatars.d.ts +5 -4
  123. package/dist/components/base/badge/badge.d.ts +1 -1
  124. package/dist/components/base/badge/badge.recipes.d.ts +6 -6
  125. package/dist/components/base/batch-action-bar/batch-action-bar.d.ts +50 -0
  126. package/dist/components/base/batch-action-bar/batch-action-bar.strings.d.ts +20 -0
  127. package/dist/components/base/batch-action-bar/index.d.ts +8 -0
  128. package/dist/components/base/buttons/base-button.d.ts +7 -0
  129. package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
  130. package/dist/components/base/buttons/button.recipes.d.ts +2 -2
  131. package/dist/components/base/buttons/button.variants.d.ts +1 -0
  132. package/dist/components/base/buttons/loader-button.d.ts +3 -1
  133. package/dist/components/base/buttons/text-button.d.ts +2 -2
  134. package/dist/components/base/carousel/carousel.d.ts +3 -1
  135. package/dist/components/base/chart/chart.d.ts +7 -7
  136. package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
  137. package/dist/components/base/choice-inputs/choice-types.d.ts +24 -3
  138. package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
  139. package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
  140. package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
  141. package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
  142. package/dist/components/base/date-pickers/datepicker.types.d.ts +13 -3
  143. package/dist/components/base/display/alert-dialog.d.ts +10 -3
  144. package/dist/components/base/display/content-block.d.ts +4 -2
  145. package/dist/components/base/display/date-block.d.ts +1 -1
  146. package/dist/components/base/display/dialog.d.ts +8 -5
  147. package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
  148. package/dist/components/base/display/surface-title.d.ts +6 -1
  149. package/dist/components/base/feedback/alert.d.ts +1 -1
  150. package/dist/components/base/feedback/state-display.d.ts +5 -4
  151. package/dist/components/base/forms/form-sizing.d.ts +43 -8
  152. package/dist/components/base/forms/workflow.d.ts +2 -0
  153. package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
  154. package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
  155. package/dist/components/base/metadata-list/index.d.ts +12 -0
  156. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.d.ts +28 -25
  157. package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-value.d.ts +2 -2
  158. package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
  159. package/dist/components/base/navigation/index.d.ts +1 -1
  160. package/dist/components/base/navigation/language-switcher.d.ts +4 -1
  161. package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
  162. package/dist/components/base/navigation/page-header/index.d.ts +1 -0
  163. package/dist/components/base/navigation/page-header/page-header-commands.d.ts +73 -0
  164. package/dist/components/base/navigation/page-header/page-header.d.ts +30 -4
  165. package/dist/components/base/qr-code/qr-code.d.ts +2 -0
  166. package/dist/components/base/sheet/index.d.ts +29 -1
  167. package/dist/components/base/sheet/sheet.d.ts +10 -5
  168. package/dist/components/base/signature-pad/signature-pad.types.d.ts +5 -1
  169. package/dist/components/base/signature-pad/signature-pad.utils.d.ts +11 -3
  170. package/dist/components/base/spinner/spinner.d.ts +3 -2
  171. package/dist/components/base/structure/structure.types.d.ts +1 -1
  172. package/dist/components/base/text-inputs/field-clear-button.d.ts +6 -0
  173. package/dist/components/base/text-inputs/input-group.d.ts +2 -2
  174. package/dist/components/base/upload/upload.recipes.d.ts +33 -0
  175. package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
  176. package/dist/components/base/value-inputs/index.d.ts +5 -5
  177. package/dist/components/base/value-inputs/tags-input.d.ts +38 -12
  178. package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
  179. package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
  180. package/dist/components/blocks/analytics/index.d.ts +1 -1
  181. package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
  182. package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
  183. package/dist/components/blocks/commerce/address-card/types.d.ts +4 -1
  184. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
  185. package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
  186. package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +3 -1
  187. package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
  188. package/dist/components/blocks/commerce/cart-summary/types.d.ts +6 -1
  189. package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +3 -1
  190. package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
  191. package/dist/components/blocks/commerce/discount-stack/types.d.ts +16 -4
  192. package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +5 -0
  193. package/dist/components/blocks/commerce/fulfillment-group/index.d.ts +2 -0
  194. package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +43 -0
  195. package/dist/components/blocks/commerce/index.d.ts +13 -5
  196. package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
  197. package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
  198. package/dist/components/blocks/commerce/invoice-header/types.d.ts +4 -2
  199. package/dist/components/blocks/commerce/invoice-mini/invoice-mini.d.ts +1 -1
  200. package/dist/components/blocks/commerce/invoice-mini/types.d.ts +2 -1
  201. package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
  202. package/dist/components/blocks/commerce/order-customer/index.d.ts +2 -0
  203. package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +5 -0
  204. package/dist/components/blocks/commerce/order-customer/types.d.ts +48 -0
  205. package/dist/components/blocks/commerce/order-header/index.d.ts +2 -0
  206. package/dist/components/blocks/commerce/order-header/order-header.d.ts +5 -0
  207. package/dist/components/blocks/commerce/order-header/types.d.ts +37 -0
  208. package/dist/components/blocks/commerce/order-line-item/index.d.ts +2 -0
  209. package/dist/components/blocks/commerce/order-line-item/order-line-item.d.ts +5 -0
  210. package/dist/components/blocks/commerce/order-line-item/types.d.ts +46 -0
  211. package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
  212. package/dist/components/blocks/commerce/order-summary/index.d.ts +2 -0
  213. package/dist/components/blocks/commerce/order-summary/order-summary.d.ts +5 -0
  214. package/dist/components/blocks/commerce/order-summary/types.d.ts +42 -0
  215. package/dist/components/blocks/commerce/order-transactions/index.d.ts +2 -0
  216. package/dist/components/blocks/commerce/order-transactions/order-transactions.d.ts +5 -0
  217. package/dist/components/blocks/commerce/order-transactions/types.d.ts +46 -0
  218. package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
  219. package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +9 -1
  220. package/dist/components/blocks/commerce/payment-method/types.d.ts +14 -1
  221. package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
  222. package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +3 -1
  223. package/dist/components/blocks/commerce/refund-status/types.d.ts +6 -3
  224. package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
  225. package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
  226. package/dist/components/blocks/commerce/shared/address-lines.d.ts +21 -0
  227. package/dist/components/blocks/commerce/shared/line-thumbnail.d.ts +9 -0
  228. package/dist/components/blocks/commerce/shared/order-status.d.ts +51 -0
  229. package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
  230. package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +27 -6
  231. package/dist/components/blocks/commerce/summary-panel/amount-row.d.ts +2 -0
  232. package/dist/components/blocks/commerce/summary-panel/index.d.ts +3 -0
  233. package/dist/components/blocks/commerce/summary-panel/summary-panel.d.ts +2 -0
  234. package/dist/components/blocks/commerce/summary-panel/types.d.ts +26 -0
  235. package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
  236. package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +2 -1
  237. package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
  238. package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
  239. package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
  240. package/dist/components/blocks/data-display/metadata/index.d.ts +30 -4
  241. package/dist/components/features/activities/partials/activity-row.d.ts +6 -2
  242. package/dist/components/features/activities/partials/tone-tokens.d.ts +0 -6
  243. package/dist/components/features/global-search/partials/global-search-group-heading.d.ts +15 -0
  244. package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
  245. package/dist/components/features/global-search/partials/tone-palettes.d.ts +0 -5
  246. package/dist/components/features/kanban/kanban.d.ts +1 -1
  247. package/dist/components/features/kanban/kanban.strings.d.ts +1 -1
  248. package/dist/components/features/kanban/kanban.types.d.ts +2 -2
  249. package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
  250. package/dist/components/features/media-library/index.d.ts +1 -1
  251. package/dist/components/features/media-library/media-library.d.ts +1 -1
  252. package/dist/components/features/media-library/media-library.strings.d.ts +4 -0
  253. package/dist/components/features/media-library/media-library.types.d.ts +74 -1
  254. package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
  255. package/dist/components/features/mentions/partials/mention-kind-toggles.d.ts +16 -0
  256. package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
  257. package/dist/components/features/overlays/dialog.d.ts +1 -1
  258. package/dist/components/features/overlays/drawer.d.ts +1 -1
  259. package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
  260. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
  261. package/dist/components/features/overlays/index.d.ts +1 -1
  262. package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
  263. package/dist/components/features/overlays/overlays.types.d.ts +62 -19
  264. package/dist/components/features/products/components/product-contract-overview.d.ts +5 -0
  265. package/dist/components/features/products/components/product-details-card.d.ts +5 -0
  266. package/dist/components/features/products/components/product-operations-card.d.ts +5 -0
  267. package/dist/components/features/products/components/product-option-action-menu.d.ts +5 -0
  268. package/dist/components/features/products/components/product-options-summary.d.ts +5 -0
  269. package/dist/components/features/products/components/product-policies-card.d.ts +5 -0
  270. package/dist/components/features/products/components/product-quote-preview-card.d.ts +5 -0
  271. package/dist/components/features/products/components/product-readiness-card.d.ts +5 -0
  272. package/dist/components/features/products/components/product-structure-card.d.ts +5 -0
  273. package/dist/components/features/products/components/product-variant-action-menu.d.ts +23 -1
  274. package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
  275. package/dist/components/features/products/partials/index.d.ts +1 -1
  276. package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
  277. package/dist/components/features/products/partials/product-tone.d.ts +11 -1
  278. package/dist/components/features/products/products.types.d.ts +11 -3
  279. package/dist/components/features/resource/index.d.ts +1 -1
  280. package/dist/components/features/resource/resource.d.ts +1 -1
  281. package/dist/components/features/resource/resource.types.d.ts +34 -6
  282. package/dist/components/features/rich-text-editor/index.d.ts +2 -1
  283. package/dist/components/features/rich-text-editor/partials/image-nodes.d.ts +13 -0
  284. package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +66 -0
  285. package/dist/components/features/rich-text-editor/partials/inline-reference-node.d.ts +19 -0
  286. package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
  287. package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts +14 -0
  288. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +45 -0
  289. package/dist/components/features/rich-text-editor/use-rich-text-images.d.ts +18 -0
  290. package/dist/components/features/sync/index.d.ts +26 -3
  291. package/dist/components/features/table/data-table.d.ts +1 -1
  292. package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
  293. package/dist/components/features/table/table.types.d.ts +32 -7
  294. package/dist/components/layout/page/index.d.ts +1 -1
  295. package/dist/components/layout/page/page.types.d.ts +51 -4
  296. package/dist/components/layout/page/partials/page-actions.d.ts +1 -0
  297. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  298. package/dist/components/layout/settings/settings.d.ts +16 -2
  299. package/dist/components/layout/workspace/workspace.types.d.ts +21 -4
  300. package/dist/components/primitives/date.d.ts +16 -3
  301. package/dist/components/primitives/dimensions.d.ts +6 -0
  302. package/dist/components/primitives/duration.d.ts +6 -0
  303. package/dist/components/primitives/file-size.d.ts +6 -0
  304. package/dist/components/primitives/index.d.ts +1 -1
  305. package/dist/components/primitives/initials.d.ts +11 -2
  306. package/dist/components/primitives/link.d.ts +7 -0
  307. package/dist/components/primitives/money.d.ts +29 -7
  308. package/dist/components/primitives/number.d.ts +17 -0
  309. package/dist/components/primitives/value-typography.d.ts +54 -0
  310. package/dist/components/primitives/value.d.ts +31 -6
  311. package/dist/components/typography/heading.d.ts +9 -1
  312. package/dist/components/typography/label.d.ts +3 -0
  313. package/dist/components/typography/rich-text/index.d.ts +1 -1
  314. package/dist/components/typography/rich-text/rich-text-tree.d.ts +19 -0
  315. package/dist/components/typography/rich-text/rich-text.d.ts +16 -0
  316. package/dist/components/typography/running-text.d.ts +12 -0
  317. package/dist/components/typography/text-link.d.ts +24 -1
  318. package/dist/components/typography/text.d.ts +12 -0
  319. package/dist/components/typography/text.styles.d.ts +35 -13
  320. package/dist/components/ui/button.d.ts +1 -1
  321. package/dist/components/ui/checkbox.d.ts +6 -0
  322. package/dist/components/ui/overlay.recipes.d.ts +6 -2
  323. package/dist/components/ui/select.d.ts +3 -1
  324. package/dist/components/ui/switch.d.ts +5 -0
  325. package/dist/{containers-DqB-bSYE.js → containers-DmWiJa2I.js} +36 -35
  326. package/dist/containers-DmWiJa2I.js.map +1 -0
  327. package/dist/{copyable-BTSByfmq.js → copyable-B3Gwgdqc.js} +6 -6
  328. package/dist/{copyable-BTSByfmq.js.map → copyable-B3Gwgdqc.js.map} +1 -1
  329. package/dist/data-display-DafIvCl5.js +960 -0
  330. package/dist/data-display-DafIvCl5.js.map +1 -0
  331. package/dist/date-BgK3bTdo.js +144 -0
  332. package/dist/date-BgK3bTdo.js.map +1 -0
  333. package/dist/date-picker-CF-DtUpF.js +1529 -0
  334. package/dist/date-picker-CF-DtUpF.js.map +1 -0
  335. package/dist/date-pickers-BmzxJl5l.js +174 -0
  336. package/dist/date-pickers-BmzxJl5l.js.map +1 -0
  337. package/dist/{display-CS6Hbk18.js → display-DsQTVzMz.js} +88 -87
  338. package/dist/display-DsQTVzMz.js.map +1 -0
  339. package/dist/{dropdown-menu-D-boNgGO.js → dropdown-menu-E2qmdC7o.js} +23 -16
  340. package/dist/dropdown-menu-E2qmdC7o.js.map +1 -0
  341. package/dist/features/activities.js +437 -521
  342. package/dist/features/activities.js.map +1 -1
  343. package/dist/features/ai-chat.js +174 -172
  344. package/dist/features/ai-chat.js.map +1 -1
  345. package/dist/features/async-preview.js +8 -8
  346. package/dist/features/async-preview.js.map +1 -1
  347. package/dist/features/combobox.js +1 -1
  348. package/dist/features/comments.js +1 -1
  349. package/dist/features/data-view.js +139 -138
  350. package/dist/features/data-view.js.map +1 -1
  351. package/dist/features/email-composer/engine.js +1 -1
  352. package/dist/features/email-composer.js +353 -352
  353. package/dist/features/email-composer.js.map +1 -1
  354. package/dist/features/event-calendar.js +262 -269
  355. package/dist/features/event-calendar.js.map +1 -1
  356. package/dist/features/filters.js +1 -1
  357. package/dist/features/global-search.js +307 -310
  358. package/dist/features/global-search.js.map +1 -1
  359. package/dist/features/kanban.js +95 -97
  360. package/dist/features/kanban.js.map +1 -1
  361. package/dist/features/map.js +56 -57
  362. package/dist/features/map.js.map +1 -1
  363. package/dist/features/media-library.js +914 -824
  364. package/dist/features/media-library.js.map +1 -1
  365. package/dist/features/mentions.js +1 -1
  366. package/dist/features/overlays.js +1 -1
  367. package/dist/features/products.js +1272 -1311
  368. package/dist/features/products.js.map +1 -1
  369. package/dist/features/questionnaire.js +204 -194
  370. package/dist/features/questionnaire.js.map +1 -1
  371. package/dist/features/resource-assignment.js +103 -95
  372. package/dist/features/resource-assignment.js.map +1 -1
  373. package/dist/features/resource.js +77 -69
  374. package/dist/features/resource.js.map +1 -1
  375. package/dist/features/rich-text-editor.js +30 -11
  376. package/dist/features/rich-text-editor.js.map +1 -1
  377. package/dist/features/schema-form.js +193 -189
  378. package/dist/features/schema-form.js.map +1 -1
  379. package/dist/features/suggestions.js +3 -3
  380. package/dist/features/sync.js +7 -7
  381. package/dist/features/sync.js.map +1 -1
  382. package/dist/features/table.js +1 -1
  383. package/dist/features/theme-tweaker.js +455 -455
  384. package/dist/features/theme-tweaker.js.map +1 -1
  385. package/dist/feedback-qNuMBtRH.js +233 -0
  386. package/dist/feedback-qNuMBtRH.js.map +1 -0
  387. package/dist/field-affordance-recipes-qQeIf4lG.js +48 -0
  388. package/dist/field-affordance-recipes-qQeIf4lG.js.map +1 -0
  389. package/dist/field-state-recipes-BVA2CWHo.js +12 -0
  390. package/dist/field-state-recipes-BVA2CWHo.js.map +1 -0
  391. package/dist/{filters-D6FF8L6s.js → filters-BkHH53uv.js} +414 -412
  392. package/dist/filters-BkHH53uv.js.map +1 -0
  393. package/dist/focus-recipes-B653VaLq.js +12 -0
  394. package/dist/focus-recipes-B653VaLq.js.map +1 -0
  395. package/dist/{form-field-CZwrkP7m.js → form-field-DUt4UxSV.js} +7 -7
  396. package/dist/{form-field-CZwrkP7m.js.map → form-field-DUt4UxSV.js.map} +1 -1
  397. package/dist/form-sizing-By94KzXE.js +130 -0
  398. package/dist/form-sizing-By94KzXE.js.map +1 -0
  399. package/dist/{forms-B5NCbkSC.js → forms-Bzha-Y3B.js} +25 -25
  400. package/dist/forms-Bzha-Y3B.js.map +1 -0
  401. package/dist/forms-numeric-C0bvjRPZ.js +906 -0
  402. package/dist/forms-numeric-C0bvjRPZ.js.map +1 -0
  403. package/dist/{header-kxruN3RM.js → header-BOefOKd1.js} +38 -41
  404. package/dist/header-BOefOKd1.js.map +1 -0
  405. package/dist/{hooks-BrlnCwQd.js → hooks-9k_TtmKh.js} +2 -2
  406. package/dist/{hooks-BrlnCwQd.js.map → hooks-9k_TtmKh.js.map} +1 -1
  407. package/dist/{http-CdEIHyQf.js → http-D_6rOnzU.js} +2 -2
  408. package/dist/{http-CdEIHyQf.js.map → http-D_6rOnzU.js.map} +1 -1
  409. package/dist/icon-badge-CAuKupo9.js +55 -0
  410. package/dist/icon-badge-CAuKupo9.js.map +1 -0
  411. package/dist/index.js +7 -7
  412. package/dist/input-DWhBBBww.js +262 -0
  413. package/dist/input-DWhBBBww.js.map +1 -0
  414. package/dist/{input-vxcaNCYC.js → input-Ddi_LSYv.js} +3 -3
  415. package/dist/{input-vxcaNCYC.js.map → input-Ddi_LSYv.js.map} +1 -1
  416. package/dist/interaction-recipes-CHr0dJUs.js +24 -0
  417. package/dist/interaction-recipes-CHr0dJUs.js.map +1 -0
  418. package/dist/item-DEmDiTlD.js +265 -0
  419. package/dist/item-DEmDiTlD.js.map +1 -0
  420. package/dist/layer-recipes-CCpklYME.js +13 -0
  421. package/dist/layer-recipes-CCpklYME.js.map +1 -0
  422. package/dist/layout/app-shell.js +1 -1
  423. package/dist/layout/auth.js +1 -1
  424. package/dist/layout/containers.js +1 -1
  425. package/dist/layout/header.js +1 -1
  426. package/dist/layout/hooks.js +1 -1
  427. package/dist/layout/navigation.js +1 -1
  428. package/dist/layout/page.js +1 -1
  429. package/dist/layout/settings.js +1 -1
  430. package/dist/layout/sidebar.js +2 -2
  431. package/dist/layout/workspace.js +1 -1
  432. package/dist/layout.js +10 -10
  433. package/dist/lib/affordance-geometry.generated.d.ts +7 -1
  434. package/dist/lib/field-affordance-recipes.d.ts +41 -1
  435. package/dist/lib/field-state-recipes.d.ts +9 -6
  436. package/dist/lib/focus-recipes.d.ts +24 -0
  437. package/dist/lib/format.d.ts +9 -0
  438. package/dist/lib/interaction-recipes.d.ts +35 -0
  439. package/dist/lib/layer-recipes.d.ts +19 -0
  440. package/dist/lib/money-format.d.ts +30 -0
  441. package/dist/lib/motion-recipes.d.ts +1 -0
  442. package/dist/lib/overlay-anatomy-recipes.d.ts +2 -1
  443. package/dist/lib/safe-image-src.d.ts +10 -0
  444. package/dist/lib/sanitize-html.d.ts +15 -3
  445. package/dist/lib/surface-recipes.d.ts +48 -6
  446. package/dist/lib/token-merge.generated.d.ts +17 -14
  447. package/dist/lib/tone-recipes.d.ts +79 -0
  448. package/dist/lib/track-recipes.d.ts +1 -1
  449. package/dist/lib/ui-provider/hooks.d.ts +2 -1
  450. package/dist/lib/ui-provider/index.d.ts +2 -2
  451. package/dist/lib/ui-provider/provider.d.ts +7 -2
  452. package/dist/lib/ui-provider/store.d.ts +6 -2
  453. package/dist/lib/ui-provider/types.d.ts +14 -2
  454. package/dist/lib/utils.js +1 -1
  455. package/dist/media-gallery-DcTtAaeC.js +203 -0
  456. package/dist/media-gallery-DcTtAaeC.js.map +1 -0
  457. package/dist/mentions-D-uyCh01.js +568 -0
  458. package/dist/mentions-D-uyCh01.js.map +1 -0
  459. package/dist/{message-SZUNB1eX.js → message-CdHgIWKf.js} +5 -5
  460. package/dist/{message-SZUNB1eX.js.map → message-CdHgIWKf.js.map} +1 -1
  461. package/dist/metadata-list-X5rYAKSB.js +394 -0
  462. package/dist/metadata-list-X5rYAKSB.js.map +1 -0
  463. package/dist/{motion-recipes-B6jKXEcN.js → motion-recipes-ChBg4HBq.js} +3 -2
  464. package/dist/{motion-recipes-B6jKXEcN.js.map → motion-recipes-ChBg4HBq.js.map} +1 -1
  465. package/dist/navigation-D3KwXmaq.js +145 -0
  466. package/dist/navigation-D3KwXmaq.js.map +1 -0
  467. package/dist/navigation-HJf5zxlH.js +268 -0
  468. package/dist/navigation-HJf5zxlH.js.map +1 -0
  469. package/dist/{navigation-row-recipes-DQEXQcqY.js → navigation-row-recipes-BVowojQw.js} +2 -2
  470. package/dist/{navigation-row-recipes-DQEXQcqY.js.map → navigation-row-recipes-BVowojQw.js.map} +1 -1
  471. package/dist/number-DMhe-Vsk.js +352 -0
  472. package/dist/number-DMhe-Vsk.js.map +1 -0
  473. package/dist/overflow-tab-bar-sQHXLlwQ.js +280 -0
  474. package/dist/overflow-tab-bar-sQHXLlwQ.js.map +1 -0
  475. package/dist/overlay.recipes-8GHqmlb4.js +6 -0
  476. package/dist/overlay.recipes-8GHqmlb4.js.map +1 -0
  477. package/dist/overlays-I0axtYA6.js +999 -0
  478. package/dist/overlays-I0axtYA6.js.map +1 -0
  479. package/dist/{page-hGmT4nWK.js → page-B5dTH9gE.js} +79 -68
  480. package/dist/page-B5dTH9gE.js.map +1 -0
  481. package/dist/page-header-commands-DjzFEq3E.js +126 -0
  482. package/dist/page-header-commands-DjzFEq3E.js.map +1 -0
  483. package/dist/{pagination-NLGqRirf.js → pagination-3bPA_a6K.js} +19 -19
  484. package/dist/{pagination-NLGqRirf.js.map → pagination-3bPA_a6K.js.map} +1 -1
  485. package/dist/{popover-CghIYdQf.js → popover-Di55PyAI.js} +8 -8
  486. package/dist/popover-Di55PyAI.js.map +1 -0
  487. package/dist/{popover-menu-B4PoWhRl.js → popover-menu-B71Tn2Qz.js} +6 -6
  488. package/dist/{popover-menu-B4PoWhRl.js.map → popover-menu-B71Tn2Qz.js.map} +1 -1
  489. package/dist/{popover.recipes-QlD4JenO.js → popover.recipes-Bdyhj2db.js} +2 -2
  490. package/dist/{popover.recipes-QlD4JenO.js.map → popover.recipes-Bdyhj2db.js.map} +1 -1
  491. package/dist/primitives-B-CkiEMU.js +379 -0
  492. package/dist/primitives-B-CkiEMU.js.map +1 -0
  493. package/dist/primitives.js +5 -5
  494. package/dist/{progress-BroqrAyV.js → progress-rnS8-uAW.js} +11 -11
  495. package/dist/progress-rnS8-uAW.js.map +1 -0
  496. package/dist/{receipt-BuJynLgf.js → receipt-D0oswZ0p.js} +6 -6
  497. package/dist/{receipt-BuJynLgf.js.map → receipt-D0oswZ0p.js.map} +1 -1
  498. package/dist/rich-text-DvGulsNJ.js +78 -0
  499. package/dist/rich-text-DvGulsNJ.js.map +1 -0
  500. package/dist/rich-text-editor-sMU_Scqm.js +1204 -0
  501. package/dist/rich-text-editor-sMU_Scqm.js.map +1 -0
  502. package/dist/rich-text-editor.recipes-CadiF_Uu.js +88 -0
  503. package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +1 -0
  504. package/dist/rich-text-editor.strings-CB59ekH2.js +38 -0
  505. package/dist/rich-text-editor.strings-CB59ekH2.js.map +1 -0
  506. package/dist/safe-image-src-C6kQSMBZ.js +17 -0
  507. package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
  508. package/dist/sanitize-html-DsQmI48u.js +92 -0
  509. package/dist/sanitize-html-DsQmI48u.js.map +1 -0
  510. package/dist/scroll-area-Bt_vXY2b.js +48 -0
  511. package/dist/scroll-area-Bt_vXY2b.js.map +1 -0
  512. package/dist/{separator-BNIgG3au.js → separator-C8DlRGwF.js} +4 -4
  513. package/dist/separator-C8DlRGwF.js.map +1 -0
  514. package/dist/{separator-BhtFyo4x.js → separator-CYHnjsAb.js} +2 -2
  515. package/dist/{separator-BhtFyo4x.js.map → separator-CYHnjsAb.js.map} +1 -1
  516. package/dist/services/actions/action-adapters.d.ts +22 -0
  517. package/dist/services/actions/index.d.ts +1 -1
  518. package/dist/services/actions.js +23 -6
  519. package/dist/services/actions.js.map +1 -1
  520. package/dist/settings-CQW3b-Cu.js +170 -0
  521. package/dist/settings-CQW3b-Cu.js.map +1 -0
  522. package/dist/sheet-4SEvVYzA.js +210 -0
  523. package/dist/sheet-4SEvVYzA.js.map +1 -0
  524. package/dist/{sidebar-CyR4XKwR.js → sidebar-C7WWR29L.js} +181 -180
  525. package/dist/sidebar-C7WWR29L.js.map +1 -0
  526. package/dist/sidebar-d7Dg80ln.js +511 -0
  527. package/dist/sidebar-d7Dg80ln.js.map +1 -0
  528. package/dist/{skeleton-3F0uhYn3.js → skeleton-Cz890JZF.js} +10 -10
  529. package/dist/skeleton-Cz890JZF.js.map +1 -0
  530. package/dist/smart-card-lFKxn5Hu.js +595 -0
  531. package/dist/smart-card-lFKxn5Hu.js.map +1 -0
  532. package/dist/{spinner-Cpf7oRkF.js → spinner-fa3h1Aif.js} +10 -8
  533. package/dist/spinner-fa3h1Aif.js.map +1 -0
  534. package/dist/{structure-CRdqVawd.js → structure-DC2dygdA.js} +3 -3
  535. package/dist/{structure-CRdqVawd.js.map → structure-DC2dygdA.js.map} +1 -1
  536. package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
  537. package/dist/structure.recipes-EPz60cU8.js.map +1 -0
  538. package/dist/style.css +1 -1
  539. package/dist/surface-recipes-BKRVW8Os.js +43 -0
  540. package/dist/surface-recipes-BKRVW8Os.js.map +1 -0
  541. package/dist/table-CIKyLUsy.js +163 -0
  542. package/dist/table-CIKyLUsy.js.map +1 -0
  543. package/dist/{table-CcRDZiLP.js → table-CrcLN9Io.js} +544 -530
  544. package/dist/table-CrcLN9Io.js.map +1 -0
  545. package/dist/tabs-DwBJfjxX.js +190 -0
  546. package/dist/tabs-DwBJfjxX.js.map +1 -0
  547. package/dist/{text-inputs-DsR56TR-.js → text-inputs-aaK9wcDT.js} +151 -155
  548. package/dist/text-inputs-aaK9wcDT.js.map +1 -0
  549. package/dist/{text.styles-Q4sGAIgA.js → text.styles-g4He6UIW.js} +17 -14
  550. package/dist/text.styles-g4He6UIW.js.map +1 -0
  551. package/dist/theme.css +16 -12
  552. package/dist/themes/green.css +24 -0
  553. package/dist/{timelines-D1pkt3se.js → timelines-C_SBwHNP.js} +154 -164
  554. package/dist/timelines-C_SBwHNP.js.map +1 -0
  555. package/dist/tone-recipes-CPoExcTE.js +70 -0
  556. package/dist/tone-recipes-CPoExcTE.js.map +1 -0
  557. package/dist/tooltip-CsfgrfS7.js +111 -0
  558. package/dist/tooltip-CsfgrfS7.js.map +1 -0
  559. package/dist/track-recipes-CDcKmndW.js +10 -0
  560. package/dist/track-recipes-CDcKmndW.js.map +1 -0
  561. package/dist/{tree-BtmYyMZV.js → tree-BiKhg8AY.js} +72 -70
  562. package/dist/tree-BiKhg8AY.js.map +1 -0
  563. package/dist/typography/rich-text.js +1 -1
  564. package/dist/typography-DTRkE9zL.js +117 -0
  565. package/dist/typography-DTRkE9zL.js.map +1 -0
  566. package/dist/typography.js +2 -2
  567. package/dist/{ui-provider-DRPn3qNl.js → ui-provider-1D_NSYzO.js} +30 -23
  568. package/dist/ui-provider-1D_NSYzO.js.map +1 -0
  569. package/dist/ui-provider.js +3 -3
  570. package/dist/{upload-CDbYw1WN.js → upload-BO8-CLN6.js} +294 -293
  571. package/dist/upload-BO8-CLN6.js.map +1 -0
  572. package/dist/{upload-queue-CNd_hH_a.js → upload-queue-EOC8g1gf.js} +133 -138
  573. package/dist/upload-queue-EOC8g1gf.js.map +1 -0
  574. package/dist/upload.recipes-BbxTqrCT.js +61 -0
  575. package/dist/upload.recipes-BbxTqrCT.js.map +1 -0
  576. package/dist/{usage-card-VyJLUwRr.js → usage-card-obRaBskq.js} +42 -43
  577. package/dist/{usage-card-VyJLUwRr.js.map → usage-card-obRaBskq.js.map} +1 -1
  578. package/dist/{utils-BvH9PSmq.js → utils-l5LpDw2z.js} +264 -62
  579. package/dist/utils-l5LpDw2z.js.map +1 -0
  580. package/dist/value-inputs-TAYMX111.js +947 -0
  581. package/dist/value-inputs-TAYMX111.js.map +1 -0
  582. package/dist/value-typography-b8wpz1eX.js +116 -0
  583. package/dist/value-typography-b8wpz1eX.js.map +1 -0
  584. package/dist/workspace-DH0v0KcB.js +407 -0
  585. package/dist/workspace-DH0v0KcB.js.map +1 -0
  586. package/docs/consumer-skill/SKILL.md +62 -50
  587. package/docs/consumer-skill/examples/app-layout.tsx +3 -5
  588. package/docs/consumer-skill/examples/composition.tsx +3 -3
  589. package/docs/consumer-skill/examples/detail.tsx +59 -13
  590. package/docs/consumer-skill/examples/edit.tsx +2 -2
  591. package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
  592. package/docs/consumer-skill/examples/manifest.json +28 -6
  593. package/docs/consumer-skill/examples/receipt.tsx +2 -2
  594. package/docs/consumer-skill/examples/scoped-directory.tsx +3 -3
  595. package/docs/consumer-skill/examples/website.tsx +1 -1
  596. package/docs/consumer-skill/references/agents-md.md +33 -0
  597. package/docs/consumer-skill/references/analytics.md +1 -1
  598. package/docs/consumer-skill/references/composition.md +139 -24
  599. package/docs/consumer-skill/references/design-contract.md +12 -3
  600. package/docs/consumer-skill/references/discovery.md +4 -0
  601. package/docs/consumer-skill/references/installation.md +33 -1
  602. package/docs/consumer-skill/references/integration.md +32 -1
  603. package/docs/consumer-skill/references/public-api.json +1051 -610
  604. package/docs/consumer-skill/references/review.md +44 -8
  605. package/docs/consumer-skill/references/theming.md +14 -4
  606. package/docs/consumer-skill/references/tokens.json +5 -2
  607. package/docs/consumer-skill/references/workflows.md +30 -9
  608. package/docs/consumer-skill/scripts/composition-policy.mjs +127 -6
  609. package/docs/consumer-skill/scripts/discovery.mjs +11 -3
  610. package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
  611. package/docs/consumer-skill/scripts/surface-policy.mjs +139 -5
  612. package/package.json +13 -3
  613. package/dist/accordion-BRTcsp8J.js +0 -205
  614. package/dist/accordion-BRTcsp8J.js.map +0 -1
  615. package/dist/action-menu-Drxw_vJk.js +0 -265
  616. package/dist/action-menu-Drxw_vJk.js.map +0 -1
  617. package/dist/affordance-geometry.generated-CL84ZN9A.js.map +0 -1
  618. package/dist/ai-artifact-DLVdK0Py.js.map +0 -1
  619. package/dist/attachment-DbjUWsP0.js +0 -244
  620. package/dist/attachment-DbjUWsP0.js.map +0 -1
  621. package/dist/auth-CAQcasMV.js.map +0 -1
  622. package/dist/avatar-Bu2HhitA.js.map +0 -1
  623. package/dist/badge-CzId1Wlm.js +0 -92
  624. package/dist/badge-CzId1Wlm.js.map +0 -1
  625. package/dist/breadcrumbs-BuYz5SDU.js +0 -128
  626. package/dist/breadcrumbs-BuYz5SDU.js.map +0 -1
  627. package/dist/button-BZDasD04.js +0 -651
  628. package/dist/button-BZDasD04.js.map +0 -1
  629. package/dist/button-BZyfTvwm.js.map +0 -1
  630. package/dist/buttons-D_6KJvEE.js +0 -99
  631. package/dist/buttons-D_6KJvEE.js.map +0 -1
  632. package/dist/cards-qGSErLw_.js.map +0 -1
  633. package/dist/chart-Bsc5BICK.js.map +0 -1
  634. package/dist/checkbox-BQNDjUCh.js +0 -34
  635. package/dist/checkbox-BQNDjUCh.js.map +0 -1
  636. package/dist/choice-inputs-Mk3iWbhr.js +0 -725
  637. package/dist/choice-inputs-Mk3iWbhr.js.map +0 -1
  638. package/dist/code-block-DzHKRybS.js +0 -183
  639. package/dist/code-block-DzHKRybS.js.map +0 -1
  640. package/dist/combobox-BFnbJJp3.js.map +0 -1
  641. package/dist/combobox-hozNwUcc.js +0 -847
  642. package/dist/combobox-hozNwUcc.js.map +0 -1
  643. package/dist/command-BnmSchli.js.map +0 -1
  644. package/dist/comments-u5L0OGip.js.map +0 -1
  645. package/dist/containers-DqB-bSYE.js.map +0 -1
  646. package/dist/data-display-Bihs9Ven.js +0 -1342
  647. package/dist/data-display-Bihs9Ven.js.map +0 -1
  648. package/dist/date-DOKhJPu7.js +0 -140
  649. package/dist/date-DOKhJPu7.js.map +0 -1
  650. package/dist/date-picker-DzP5HQq7.js +0 -1541
  651. package/dist/date-picker-DzP5HQq7.js.map +0 -1
  652. package/dist/date-pickers-BpgGz7S-.js +0 -196
  653. package/dist/date-pickers-BpgGz7S-.js.map +0 -1
  654. package/dist/display-CS6Hbk18.js.map +0 -1
  655. package/dist/dropdown-menu-D-boNgGO.js.map +0 -1
  656. package/dist/feedback-CJkUAapr.js +0 -233
  657. package/dist/feedback-CJkUAapr.js.map +0 -1
  658. package/dist/field-affordance-recipes-uKY4MsZ_.js +0 -25
  659. package/dist/field-affordance-recipes-uKY4MsZ_.js.map +0 -1
  660. package/dist/field-state-recipes-DQQpiLWC.js +0 -11
  661. package/dist/field-state-recipes-DQQpiLWC.js.map +0 -1
  662. package/dist/filters-D6FF8L6s.js.map +0 -1
  663. package/dist/form-sizing-QP8aIRaW.js +0 -103
  664. package/dist/form-sizing-QP8aIRaW.js.map +0 -1
  665. package/dist/format-iamDSqs2.js +0 -110
  666. package/dist/format-iamDSqs2.js.map +0 -1
  667. package/dist/forms-B5NCbkSC.js.map +0 -1
  668. package/dist/forms-numeric-Crrm80Lm.js +0 -867
  669. package/dist/forms-numeric-Crrm80Lm.js.map +0 -1
  670. package/dist/header-kxruN3RM.js.map +0 -1
  671. package/dist/icon-badge-Btc6pQrp.js +0 -53
  672. package/dist/icon-badge-Btc6pQrp.js.map +0 -1
  673. package/dist/input-SX9V0AL3.js +0 -255
  674. package/dist/input-SX9V0AL3.js.map +0 -1
  675. package/dist/item-DE4YnuJx.js +0 -258
  676. package/dist/item-DE4YnuJx.js.map +0 -1
  677. package/dist/media-gallery-DLp3HAz0.js +0 -201
  678. package/dist/media-gallery-DLp3HAz0.js.map +0 -1
  679. package/dist/mentions-Cl0Kt_Pd.js +0 -565
  680. package/dist/mentions-Cl0Kt_Pd.js.map +0 -1
  681. package/dist/navigation-DnQSNMT0.js +0 -276
  682. package/dist/navigation-DnQSNMT0.js.map +0 -1
  683. package/dist/navigation-DyytsLRB.js +0 -265
  684. package/dist/navigation-DyytsLRB.js.map +0 -1
  685. package/dist/number-DasMFWEG.js +0 -269
  686. package/dist/number-DasMFWEG.js.map +0 -1
  687. package/dist/overlay.recipes-BxW5FIfK.js +0 -6
  688. package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
  689. package/dist/overlays-DUbs1KEi.js +0 -1011
  690. package/dist/overlays-DUbs1KEi.js.map +0 -1
  691. package/dist/page-hGmT4nWK.js.map +0 -1
  692. package/dist/page-header-D8nERkn5.js +0 -112
  693. package/dist/page-header-D8nERkn5.js.map +0 -1
  694. package/dist/popover-CghIYdQf.js.map +0 -1
  695. package/dist/primitives-C7ff0QaI.js +0 -337
  696. package/dist/primitives-C7ff0QaI.js.map +0 -1
  697. package/dist/progress-BroqrAyV.js.map +0 -1
  698. package/dist/rich-text-DlxDOtf4.js +0 -32
  699. package/dist/rich-text-DlxDOtf4.js.map +0 -1
  700. package/dist/rich-text-editor-BKyG7rWz.js +0 -574
  701. package/dist/rich-text-editor-BKyG7rWz.js.map +0 -1
  702. package/dist/rich-text-editor.recipes-B72Nfuze.js +0 -81
  703. package/dist/rich-text-editor.recipes-B72Nfuze.js.map +0 -1
  704. package/dist/rich-text-editor.strings-BpnIQgMl.js +0 -25
  705. package/dist/rich-text-editor.strings-BpnIQgMl.js.map +0 -1
  706. package/dist/sanitize-html-BG9FGe-j.js +0 -64
  707. package/dist/sanitize-html-BG9FGe-j.js.map +0 -1
  708. package/dist/scroll-area-D-pIhEKl.js +0 -47
  709. package/dist/scroll-area-D-pIhEKl.js.map +0 -1
  710. package/dist/separator-BNIgG3au.js.map +0 -1
  711. package/dist/settings-DOTOzeZ2.js +0 -161
  712. package/dist/settings-DOTOzeZ2.js.map +0 -1
  713. package/dist/sheet-BFhrNehm.js +0 -205
  714. package/dist/sheet-BFhrNehm.js.map +0 -1
  715. package/dist/sidebar-CyR4XKwR.js.map +0 -1
  716. package/dist/sidebar-SvGJ0Zwi.js +0 -506
  717. package/dist/sidebar-SvGJ0Zwi.js.map +0 -1
  718. package/dist/skeleton-3F0uhYn3.js.map +0 -1
  719. package/dist/smart-card-DjGVV2xr.js +0 -584
  720. package/dist/smart-card-DjGVV2xr.js.map +0 -1
  721. package/dist/spinner-Cpf7oRkF.js.map +0 -1
  722. package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
  723. package/dist/surface-recipes-Dd__PD-w.js +0 -28
  724. package/dist/surface-recipes-Dd__PD-w.js.map +0 -1
  725. package/dist/table-CLtJTxoR.js +0 -147
  726. package/dist/table-CLtJTxoR.js.map +0 -1
  727. package/dist/table-CcRDZiLP.js.map +0 -1
  728. package/dist/tabs-BNgu7g0u.js +0 -188
  729. package/dist/tabs-BNgu7g0u.js.map +0 -1
  730. package/dist/text-inputs-DsR56TR-.js.map +0 -1
  731. package/dist/text.styles-Q4sGAIgA.js.map +0 -1
  732. package/dist/timelines-D1pkt3se.js.map +0 -1
  733. package/dist/track-recipes-LLPNVwFg.js +0 -10
  734. package/dist/track-recipes-LLPNVwFg.js.map +0 -1
  735. package/dist/tree-BtmYyMZV.js.map +0 -1
  736. package/dist/typography-BxQgiZyw.js +0 -96
  737. package/dist/typography-BxQgiZyw.js.map +0 -1
  738. package/dist/ui-provider-DRPn3qNl.js.map +0 -1
  739. package/dist/upload-CDbYw1WN.js.map +0 -1
  740. package/dist/upload-queue-CNd_hH_a.js.map +0 -1
  741. package/dist/use-file-drop-target-BX7GnhoQ.js +0 -39
  742. package/dist/use-file-drop-target-BX7GnhoQ.js.map +0 -1
  743. package/dist/utils-BvH9PSmq.js.map +0 -1
  744. package/dist/value-inputs-D0KCrfVC.js +0 -840
  745. package/dist/value-inputs-D0KCrfVC.js.map +0 -1
  746. package/dist/workspace-CcR8r-Nt.js +0 -395
  747. package/dist/workspace-CcR8r-Nt.js.map +0 -1
  748. /package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.strings.d.ts +0 -0
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import { useStrings as e } from "../lib/strings.js";
3
- import { t } from "../utils-BvH9PSmq.js";
4
- import { a as n } from "../typography-BxQgiZyw.js";
5
- import { t as r } from "../button-BZDasD04.js";
6
- import { n as i } from "../action-menu-Drxw_vJk.js";
7
- import { createContext as a, forwardRef as o, useCallback as s, useContext as c, useEffect as l, useLayoutEffect as u, useMemo as d, useRef as f, useState as p } from "react";
8
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
9
- import { MoreHorizontal as g } from "lucide-react";
3
+ import { t } from "../utils-l5LpDw2z.js";
4
+ import { n } from "../buttons-SbIcm1HJ.js";
5
+ import { s as r } from "../typography-DTRkE9zL.js";
6
+ import { r as i } from "../tone-recipes-CPoExcTE.js";
7
+ import { n as a } from "../action-menu-TzCoSlwL.js";
8
+ import { createContext as o, forwardRef as s, useCallback as c, useContext as l, useEffect as u, useLayoutEffect as d, useMemo as f, useRef as p, useState as m } from "react";
9
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
10
10
  import { DndContext as _, DragOverlay as v, KeyboardSensor as y, PointerSensor as b, useDroppable as x, useSensor as S, useSensors as C } from "@dnd-kit/core";
11
11
  import { SortableContext as w, useSortable as T, verticalListSortingStrategy as E } from "@dnd-kit/sortable";
12
12
  import { CSS as D } from "@dnd-kit/utilities";
@@ -50,7 +50,7 @@ function k(e, t, n, r, i) {
50
50
  //#endregion
51
51
  //#region src/components/features/kanban/hooks/use-kanban.ts
52
52
  function A({ value: e, onValueChange: t, getItemValue: n, onItemMove: r }) {
53
- let i = s((t) => {
53
+ let i = c((t) => {
54
54
  for (let [r, i] of Object.entries(e)) {
55
55
  let e = i.findIndex((e) => n(e) === t);
56
56
  if (e >= 0) return {
@@ -59,7 +59,7 @@ function A({ value: e, onValueChange: t, getItemValue: n, onItemMove: r }) {
59
59
  item: i[e]
60
60
  };
61
61
  }
62
- }, [e, n]), a = s(({ itemId: n, toColumnId: a, toIndex: o }) => {
62
+ }, [e, n]), a = c(({ itemId: n, toColumnId: a, toIndex: o }) => {
63
63
  let s = i(n);
64
64
  if (!s || !Object.prototype.hasOwnProperty.call(e, a)) return;
65
65
  let { columnId: c, index: l, item: u } = s, d = e[a], f = o === void 0 ? d.length : Math.max(0, Math.min(o, d.length));
@@ -85,22 +85,22 @@ function A({ value: e, onValueChange: t, getItemValue: n, onItemMove: r }) {
85
85
  t,
86
86
  r
87
87
  ]);
88
- return d(() => ({
88
+ return f(() => ({
89
89
  findItem: i,
90
90
  move: a
91
91
  }), [i, a]);
92
92
  }
93
93
  //#endregion
94
94
  //#region src/components/features/kanban/kanban-context.tsx
95
- var j = a(null), M = j.Provider;
95
+ var j = o(null), M = j.Provider;
96
96
  function N() {
97
- let e = c(j);
97
+ let e = l(j);
98
98
  if (!e) throw Error("Kanban subcomponents must be rendered inside a <Kanban> root.");
99
99
  return e;
100
100
  }
101
- var P = a(null), F = P.Provider;
101
+ var P = o(null), F = P.Provider;
102
102
  function I() {
103
- let e = c(P);
103
+ let e = l(P);
104
104
  if (!e) throw Error("<KanbanItemHandle> / <KanbanItemActions> must be rendered inside a <KanbanItem>.");
105
105
  return e;
106
106
  }
@@ -120,32 +120,32 @@ function R(e, t) {
120
120
  }
121
121
  //#endregion
122
122
  //#region src/components/features/kanban/kanban.tsx
123
- function z({ value: r, onValueChange: i, getItemValue: a, getItemLabel: o, getColumnLabel: c, onItemMove: l, itemActions: g, onItemClick: v, strings: x, className: w, children: T }) {
123
+ function z({ value: n, onValueChange: i, getItemValue: a, getItemLabel: o, getColumnLabel: s, onItemMove: l, itemActions: u, onItemClick: v, strings: x, className: w, children: T }) {
124
124
  let E = e(L, x), { findItem: D, move: O } = A({
125
- value: r,
125
+ value: n,
126
126
  onValueChange: i,
127
127
  getItemValue: a,
128
128
  onItemMove: l
129
- }), [j, N] = p(null), P = f(null), F = f(null);
130
- u(() => {
129
+ }), [j, N] = m(null), P = p(null), F = p(null);
130
+ d(() => {
131
131
  if (j || !F.current) return;
132
132
  let e = Array.from(P.current?.querySelectorAll("[data-kanban-item-id]") ?? []).find((e) => e.dataset.kanbanItemId === F.current), t = e?.querySelector("[data-slot=\"kanban-item-handle\"]") ?? e;
133
133
  t && (t.focus(), F.current = null);
134
- }, [j, r]);
135
- let I = f(null), z = f(null), [B, V] = p(null), H = f(null), U = d(() => k(r, a, D, H, V), [
136
- r,
134
+ }, [j, n]);
135
+ let I = p(null), z = p(null), [B, V] = m(null), H = p(null), U = f(() => k(n, a, D, H, V), [
136
+ n,
137
137
  a,
138
138
  D
139
- ]), W = C(S(b, { activationConstraint: { distance: 6 } }), S(y, { coordinateGetter: U })), G = d(() => j ? D(j)?.item ?? null : null, [j, D]), K = s((e) => {
139
+ ]), W = C(S(b, { activationConstraint: { distance: 6 } }), S(y, { coordinateGetter: U })), G = f(() => j ? D(j)?.item ?? null : null, [j, D]), K = c((e) => {
140
140
  let t = D(String(e.active.id));
141
141
  I.current = t ? {
142
142
  columnId: t.columnId,
143
143
  index: t.index,
144
144
  name: o?.(t.item) ?? String(e.active.id)
145
145
  } : null, z.current = null, V(null), H.current = null, F.current = e.activatorEvent instanceof KeyboardEvent ? String(e.active.id) : null, N(String(e.active.id));
146
- }, [D, o]), q = s((e) => {
146
+ }, [D, o]), q = c((e) => {
147
147
  N(null), V(null);
148
- let { active: t, over: n } = e, i = H.current;
148
+ let { active: t, over: r } = e, i = H.current;
149
149
  if (z.current = i, H.current = null, i) {
150
150
  let e = D(String(t.id)), n = e?.columnId === i.columnId && e.index < i.index ? i.index + 1 : i.index;
151
151
  O({
@@ -155,11 +155,11 @@ function z({ value: r, onValueChange: i, getItemValue: a, getItemLabel: o, getCo
155
155
  });
156
156
  return;
157
157
  }
158
- if (!n) return;
158
+ if (!r) return;
159
159
  t.data.current;
160
- let a = n.data.current, o = String(n.id), s = a?.columnId ?? (Object.prototype.hasOwnProperty.call(r, o) ? o : void 0);
160
+ let a = r.data.current, o = String(r.id), s = a?.columnId ?? (Object.prototype.hasOwnProperty.call(n, o) ? o : void 0);
161
161
  if (!s) return;
162
- let c = a?.columnId === void 0 ? r[s].length : a.index;
162
+ let c = a?.columnId === void 0 ? n[s].length : a.index;
163
163
  O({
164
164
  itemId: String(t.id),
165
165
  toColumnId: s,
@@ -167,41 +167,41 @@ function z({ value: r, onValueChange: i, getItemValue: a, getItemLabel: o, getCo
167
167
  });
168
168
  }, [
169
169
  O,
170
- r,
170
+ n,
171
171
  D
172
- ]), J = d(() => ({
173
- value: r,
172
+ ]), J = f(() => ({
173
+ value: n,
174
174
  onValueChange: i,
175
175
  getItemValue: a,
176
176
  activeId: j,
177
177
  activeItem: G,
178
178
  findItem: D,
179
- itemActions: g,
179
+ itemActions: u,
180
180
  onItemClick: v
181
181
  }), [
182
- r,
182
+ n,
183
183
  i,
184
184
  a,
185
185
  j,
186
186
  G,
187
187
  D,
188
- g,
188
+ u,
189
189
  v
190
190
  ]), Y = (e, t) => {
191
- let n = D(e), i = I.current, a = t ? D(t) : void 0, s = H.current ?? z.current ?? a ?? (t && r[t] ? {
191
+ let r = D(e), i = I.current, a = t ? D(t) : void 0, c = H.current ?? z.current ?? a ?? (t && n[t] ? {
192
192
  columnId: t,
193
- index: r[t].length
194
- } : i), l = (e) => e ? c?.(e) ?? e : "";
193
+ index: n[t].length
194
+ } : i), l = (e) => e ? s?.(e) ?? e : "";
195
195
  return {
196
- name: i?.name ?? (n ? o?.(n.item) ?? e : e),
196
+ name: i?.name ?? (r ? o?.(r.item) ?? e : e),
197
197
  from: l(i?.columnId),
198
- to: l(s?.columnId),
199
- position: String((s?.index ?? 0) + 1)
198
+ to: l(c?.columnId),
199
+ position: String((c?.index ?? 0) + 1)
200
200
  };
201
201
  };
202
- return /* @__PURE__ */ m(M, {
202
+ return /* @__PURE__ */ h(M, {
203
203
  value: J,
204
- children: /* @__PURE__ */ m(_, {
204
+ children: /* @__PURE__ */ h(_, {
205
205
  sensors: W,
206
206
  onDragStart: K,
207
207
  onDragEnd: q,
@@ -225,17 +225,17 @@ function z({ value: r, onValueChange: i, getItemValue: a, getItemLabel: o, getCo
225
225
  return R(E.announceDragCancel, Y(String(e.id)));
226
226
  }
227
227
  } },
228
- children: /* @__PURE__ */ h("div", {
228
+ children: /* @__PURE__ */ g("div", {
229
229
  ref: P,
230
230
  role: "application",
231
231
  "aria-label": E.boardAria,
232
232
  className: t("kanban--component", "w-full", w),
233
- children: [T, /* @__PURE__ */ m("div", {
233
+ children: [T, /* @__PURE__ */ h("div", {
234
234
  className: "kanban--keyboard-announcement sr-only",
235
235
  role: "status",
236
236
  "aria-live": "assertive",
237
237
  "aria-atomic": "true",
238
- children: /* @__PURE__ */ m(n, {
238
+ children: /* @__PURE__ */ h(r, {
239
239
  tag: "span",
240
240
  children: j && B ? R(E.announceDragMove, Y(j)) : ""
241
241
  })
@@ -246,7 +246,7 @@ function z({ value: r, onValueChange: i, getItemValue: a, getItemLabel: o, getCo
246
246
  }
247
247
  z.displayName = "Kanban";
248
248
  function B({ className: e, style: n, children: r }) {
249
- return /* @__PURE__ */ m("div", {
249
+ return /* @__PURE__ */ h("div", {
250
250
  className: t("grid w-full gap-space-lg", e),
251
251
  style: n,
252
252
  children: r
@@ -255,7 +255,7 @@ function B({ className: e, style: n, children: r }) {
255
255
  B.displayName = "KanbanBoard";
256
256
  function V({ value: e, className: n, children: r }) {
257
257
  let { setNodeRef: i, isOver: a } = x({ id: e });
258
- return /* @__PURE__ */ m("div", {
258
+ return /* @__PURE__ */ h("div", {
259
259
  ref: i,
260
260
  "data-slot": "kanban-column",
261
261
  "data-column-id": e,
@@ -267,10 +267,10 @@ function V({ value: e, className: n, children: r }) {
267
267
  V.displayName = "KanbanColumn";
268
268
  function H({ value: e, className: n, children: r }) {
269
269
  let i = N(), a = (i.value[e] ?? []).map((e) => i.getItemValue(e));
270
- return /* @__PURE__ */ m(w, {
270
+ return /* @__PURE__ */ h(w, {
271
271
  items: a,
272
272
  strategy: E,
273
- children: /* @__PURE__ */ m("div", {
273
+ children: /* @__PURE__ */ h("div", {
274
274
  "data-slot": "kanban-column-content",
275
275
  className: t("flex flex-col gap-space-md", n),
276
276
  children: r
@@ -279,48 +279,48 @@ function H({ value: e, className: n, children: r }) {
279
279
  }
280
280
  H.displayName = "KanbanColumnContent";
281
281
  function U({ value: e, className: n, disabled: r = !1, onClick: i, children: a }) {
282
- let o = N(), c = o.findItem(e), { attributes: l, listeners: u, setNodeRef: f, setActivatorNodeRef: h, transform: g, transition: _, isDragging: v } = T({
282
+ let o = N(), s = o.findItem(e), { attributes: l, listeners: u, setNodeRef: d, setActivatorNodeRef: p, transform: g, transition: _, isDragging: v } = T({
283
283
  id: e,
284
284
  disabled: r,
285
285
  data: {
286
- columnId: c?.columnId,
287
- index: c?.index
286
+ columnId: s?.columnId,
287
+ index: s?.index
288
288
  }
289
289
  }), y = {
290
290
  transform: D.Transform.toString(g),
291
291
  transition: _,
292
292
  opacity: v ? .4 : void 0
293
- }, [b, x] = p(0), S = b > 0, C = s(() => (x((e) => e + 1), () => x((e) => Math.max(0, e - 1))), []), w = d(() => ({
293
+ }, [b, x] = m(0), S = b > 0, C = c(() => (x((e) => e + 1), () => x((e) => Math.max(0, e - 1))), []), w = f(() => ({
294
294
  listeners: u,
295
295
  attributes: l,
296
- setActivatorNodeRef: h,
296
+ setActivatorNodeRef: p,
297
297
  registerHandle: C,
298
298
  itemId: e,
299
- item: c?.item ?? null
299
+ item: s?.item ?? null
300
300
  }), [
301
301
  u,
302
302
  l,
303
- h,
303
+ p,
304
304
  C,
305
305
  e,
306
- c?.item
307
- ]), E = o.onItemClick, O = s((e) => {
306
+ s?.item
307
+ ]), E = o.onItemClick, O = c((e) => {
308
308
  if (!e.target?.closest("[data-stop-item-click]")) {
309
309
  if (i) {
310
310
  i();
311
311
  return;
312
312
  }
313
- E && c?.item !== void 0 && E(c.item);
313
+ E && s?.item !== void 0 && E(s.item);
314
314
  }
315
315
  }, [
316
316
  i,
317
317
  E,
318
- c?.item
318
+ s?.item
319
319
  ]), k = !!(i || E);
320
- return /* @__PURE__ */ m(F, {
320
+ return /* @__PURE__ */ h(F, {
321
321
  value: w,
322
- children: /* @__PURE__ */ m("div", {
323
- ref: f,
322
+ children: /* @__PURE__ */ h("div", {
323
+ ref: d,
324
324
  style: y,
325
325
  "data-slot": "kanban-item",
326
326
  "data-kanban-item-id": e,
@@ -334,13 +334,13 @@ function U({ value: e, className: n, disabled: r = !1, onClick: i, children: a }
334
334
  });
335
335
  }
336
336
  U.displayName = "KanbanItem";
337
- var W = o(function({ className: e, children: n }, i) {
338
- let { setActivatorNodeRef: a, listeners: o, attributes: c, registerHandle: u } = I();
339
- l(() => u(), [u]);
340
- let d = s((e) => {
337
+ var W = s(function({ className: e, children: r }, i) {
338
+ let { setActivatorNodeRef: a, listeners: o, attributes: s, registerHandle: l } = I();
339
+ u(() => l(), [l]);
340
+ let d = c((e) => {
341
341
  a(e), typeof i == "function" ? i(e) : i && (i.current = e);
342
342
  }, [a, i]);
343
- return /* @__PURE__ */ m(r, {
343
+ return /* @__PURE__ */ h(n, {
344
344
  type: "button",
345
345
  tone: "secondary",
346
346
  buttonStyle: "ghost",
@@ -350,71 +350,69 @@ var W = o(function({ className: e, children: n }, i) {
350
350
  "data-slot": "kanban-item-handle",
351
351
  "data-stop-item-click": !0,
352
352
  onClick: (e) => e.stopPropagation(),
353
- className: t("cursor-grab shadow-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring active:cursor-grabbing", e),
354
- ...c,
353
+ className: t("cursor-grab shadow-none active:cursor-grabbing", e),
354
+ ...s,
355
355
  ...o,
356
- children: n
356
+ children: r
357
357
  });
358
358
  });
359
359
  W.displayName = "KanbanItemHandle";
360
- function G({ className: n, icon: r, ariaLabel: a }) {
361
- let o = N(), s = I(), c = e(L, void 0), l = s.item, u = o.itemActions, f = d(() => !u || l == null ? [] : (typeof u == "function" ? u(l) : u).flatMap((e) => {
362
- let t = typeof e.visible == "function" ? e.visible(l) : e.visible ?? !0;
360
+ function G({ className: t, icon: n, ariaLabel: r }) {
361
+ let i = N(), o = I(), s = e(L, void 0), c = o.item, l = i.itemActions, u = f(() => !l || c == null ? [] : (typeof l == "function" ? l(c) : l).flatMap((e) => {
362
+ let t = typeof e.visible == "function" ? e.visible(c) : e.visible ?? !0;
363
363
  if (!t) return [];
364
- let n = typeof e.disabled == "function" ? e.disabled(l) : e.disabled ?? !1;
364
+ let n = typeof e.disabled == "function" ? e.disabled(c) : e.disabled ?? !1;
365
365
  return [{
366
366
  ...e,
367
367
  visible: t,
368
368
  disabled: n
369
369
  }];
370
- }), [u, l]);
371
- if (l === null || f.length === 0) return null;
372
- let p = f.map((e) => ({
370
+ }), [l, c]);
371
+ if (c === null || u.length === 0) return null;
372
+ let d = u.map((e) => ({
373
373
  id: e.id,
374
374
  label: e.label,
375
375
  icon: e.icon,
376
376
  disabled: e.disabled,
377
377
  tone: e.tone,
378
378
  buttonStyle: e.buttonStyle,
379
- onClick: () => e.onClick(l)
379
+ onClick: () => e.onClick(c)
380
380
  }));
381
- return /* @__PURE__ */ m("span", {
381
+ return /* @__PURE__ */ h("span", {
382
382
  className: "kanban-item-actions--component inline-flex",
383
383
  "data-stop-item-click": !0,
384
384
  onClick: (e) => e.stopPropagation(),
385
385
  onPointerDown: (e) => e.stopPropagation(),
386
- children: /* @__PURE__ */ m(i, {
387
- actions: p,
388
- icon: r ?? g,
389
- srText: a ?? c.itemActionsAria,
386
+ children: /* @__PURE__ */ h(a, {
387
+ actions: d,
388
+ icon: n ?? void 0,
389
+ srText: r ?? s.itemActionsAria,
390
390
  width: "w-44",
391
391
  align: "end",
392
392
  density: "table",
393
393
  buttonProps: {
394
- size: "sm",
395
- iconOnly: !0,
396
- className: t("text-muted-foreground/70 hover:bg-muted hover:text-foreground", "transition-colors", n),
394
+ className: t,
397
395
  "data-slot": "kanban-item-actions-trigger",
398
396
  "data-stop-item-click": !0,
399
- "aria-label": a ?? c.itemActionsAria
397
+ "aria-label": r ?? s.itemActionsAria
400
398
  }
401
399
  })
402
400
  });
403
401
  }
404
402
  G.displayName = "KanbanItemActions";
405
- function K({ className: e, render: r }) {
406
- let { activeItem: i, activeId: a, findItem: o } = N();
407
- return /* @__PURE__ */ m(v, { children: a ? r ? r({
408
- item: i,
409
- columnId: o(a)?.columnId ?? null
410
- }) : /* @__PURE__ */ m("div", {
411
- className: t("kanban-overlay--component pointer-events-none rounded-radius border-2 border-dashed border-primary/40 bg-primary/5 p-surface shadow-lg", e),
412
- children: /* @__PURE__ */ m(n, {
403
+ function K({ className: e, render: n }) {
404
+ let { activeItem: a, activeId: o, findItem: s } = N();
405
+ return /* @__PURE__ */ h(v, { children: o ? n ? n({
406
+ item: a,
407
+ columnId: s(o)?.columnId ?? null
408
+ }) : /* @__PURE__ */ h("div", {
409
+ className: t("kanban-overlay--component pointer-events-none rounded-radius border-2 border-dashed p-surface shadow-lg", i.primary.edge, i.primary.wash, e),
410
+ children: /* @__PURE__ */ h(r, {
413
411
  tag: "span",
414
412
  size: "xs",
415
413
  weight: "medium",
416
- className: "text-primary-accent/80",
417
- children: a
414
+ className: "text-primary-accent",
415
+ children: o
418
416
  })
419
417
  }) : null });
420
418
  }
@@ -1 +1 @@
1
- {"version":3,"file":"kanban.js","names":["Text","Button","ActionMenu","getKanbanKeyboardPosition","ids","columns","columnIndex","position","key","nextId","createKanbanKeyboardCoordinates","event","active","context","destination","findItem","next","value","onPositionChange","item","id","getItemValue","rect","activeRect","currentCoordinates","useKanban","useCallback","columnId","items","index","move","found","itemId","toColumnId","fromColumnId","fromIndex","targetItems","resolvedToIndex","toIndex","sourceCopy","targetCopy","landingIndex","onValueChange","onItemMove","useMemo","KanbanContext","createContext","KanbanContextProvider","useKanbanContext","ctx","useContext","KanbanItemContext","KanbanItemContextProvider","useKanbanItemContext","defaultKanbanStrings","interpolateKanbanString","params","acc","template","Kanban","stringsProp","strings","useStrings","activeId","setActiveId","useState","boardRef","useRef","keyboardFocusId","node","handle","dragOrigin","completedDestination","keyboardPosition","setKeyboardPosition","keyboardDestination","keyboardCoordinates","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","activeItem","handleDragStart","getItemLabel","handleDragEnd","source","over","overData","overId","targetColumnId","ctxValue","itemActions","onItemClick","announcementParams","origin","columnName","getColumnLabel","DndContext","cn","className","children","KanbanBoard","KanbanColumn","useDroppable","setNodeRef","isOver","KanbanColumnContent","SortableContext","verticalListSortingStrategy","KanbanItem","useSortable","style","CSS","transform","isDragging","handleCount","setHandleCount","hasHandle","registerHandle","count","itemCtx","listeners","attributes","setActivatorNodeRef","rootClick","handleClick","onClick","isClickable","KanbanItemHandle","forwardRef","setMergedRef","forwardedRef","KanbanItemActions","rawActions","actions","visible","action","disabled","menuActions","icon","MoreHorizontal","ariaLabel","KanbanOverlay","DragOverlay","render"],"sources":["../../src/components/features/kanban/kanban-keyboard.ts","../../src/components/features/kanban/hooks/use-kanban.ts","../../src/components/features/kanban/kanban-context.tsx","../../src/components/features/kanban/kanban.strings.ts","../../src/components/features/kanban/kanban.tsx"],"sourcesContent":["import type { KeyboardCoordinateGetter } from '@dnd-kit/core';\n\nexport interface KanbanKeyboardPosition { columnId: string; index: number }\n\n/** Resolve arrow movement from board order, including columns with no cards. */\nexport function getKanbanKeyboardPosition(\n\tcolumns: Record<string, unknown[]>,\n\tposition: KanbanKeyboardPosition,\n\tkey: string,\n): KanbanKeyboardPosition {\n\tconst ids = Object.keys(columns);\n\tconst columnIndex = ids.indexOf(position.columnId);\n\tif (key === 'ArrowLeft' || key === 'ArrowRight') {\n\t\tconst nextId = ids[columnIndex + (key === 'ArrowRight' ? 1 : -1)];\n\t\treturn nextId ? { columnId: nextId, index: Math.min(position.index, columns[nextId].length) } : position;\n\t}\n\tif (key === 'ArrowUp' || key === 'ArrowDown') {\n\t\treturn { columnId: position.columnId, index: Math.max(0, Math.min(columns[position.columnId].length - 1, position.index + (key === 'ArrowDown' ? 1 : -1))) };\n\t}\n\treturn position;\n}\n\nexport function createKanbanKeyboardCoordinates(\n\tvalue: Record<string, unknown[]>,\n\tgetItemValue: (item: unknown) => string,\n\tfindItem: (id: string) => KanbanKeyboardPosition | undefined,\n\tdestination: { current: KanbanKeyboardPosition | null },\n\tonPositionChange?: (position: KanbanKeyboardPosition) => void,\n): KeyboardCoordinateGetter {\n\treturn (event, { currentCoordinates, context }) => {\n\t\tif (!['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.code)) return undefined;\n\t\tconst active = context.active;\n\t\tif (!active) return undefined;\n\t\tconst position = destination.current ?? findItem(String(active.id));\n\t\tif (!position) return undefined;\n\t\tevent.preventDefault();\n\t\tconst next = getKanbanKeyboardPosition(value, position, event.code);\n\t\tdestination.current = next;\n\t\tonPositionChange?.(next);\n\t\tconst item = value[next.columnId][next.index];\n\t\tconst id = item === undefined ? next.columnId : getItemValue(item);\n\t\tconst rect = context.droppableRects.get(id);\n\t\tconst activeRect = context.collisionRect;\n\t\tif (!rect || !activeRect) return currentCoordinates;\n\t\treturn {\n\t\t\tx: currentCoordinates.x + rect.left - activeRect.left,\n\t\t\ty: currentCoordinates.y + rect.top - activeRect.top,\n\t\t};\n\t};\n}\n","import { useCallback, useMemo } from 'react';\n\nimport type { KanbanItemMoveEvent, KanbanValue } from '../kanban.types';\n\n/**\n * Headless hook — exposes the same state machine `<Kanban>` uses\n * internally so consumers can build a fully custom UI against it.\n *\n * const { findItem, move } = useKanban({ value, onValueChange,\n * getItemValue });\n * move({ itemId: 'card-1', toColumnId: 'shipped', toIndex: 0 });\n */\nexport interface UseKanbanOptions<T> {\n\tvalue: KanbanValue<T>;\n\tonValueChange: (next: KanbanValue<T>) => void;\n\tgetItemValue: (item: T) => string;\n\tonItemMove?: (event: KanbanItemMoveEvent<T>) => void;\n}\n\nexport interface UseKanbanResult<T> {\n\tfindItem: (id: string) => { columnId: string; index: number; item: T } | undefined;\n\t/**\n\t * Move an item between columns / within the same column. Idempotent:\n\t * a no-op move is safe.\n\t */\n\tmove: (input: { itemId: string; toColumnId: string; toIndex?: number }) => void;\n}\n\nexport function useKanban<T>({\n\tvalue,\n\tonValueChange,\n\tgetItemValue,\n\tonItemMove,\n}: UseKanbanOptions<T>): UseKanbanResult<T> {\n\tconst findItem = useCallback(\n\t\t(id: string) => {\n\t\t\tfor (const [columnId, items] of Object.entries(value)) {\n\t\t\t\tconst index = items.findIndex((item) => getItemValue(item) === id);\n\t\t\t\tif (index >= 0) return { columnId, index, item: items[index] };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\t[value, getItemValue],\n\t);\n\n\tconst move = useCallback(\n\t\t({ itemId, toColumnId, toIndex }: { itemId: string; toColumnId: string; toIndex?: number }) => {\n\t\t\tconst found = findItem(itemId);\n\t\t\tif (!found) return;\n\t\t\tif (!Object.prototype.hasOwnProperty.call(value, toColumnId)) return;\n\n\t\t\tconst { columnId: fromColumnId, index: fromIndex, item } = found;\n\n\t\t\t// Same column, same slot — nothing to do.\n\t\t\tconst targetItems = value[toColumnId];\n\t\t\tconst resolvedToIndex =\n\t\t\t\ttoIndex === undefined\n\t\t\t\t\t? targetItems.length\n\t\t\t\t\t: Math.max(0, Math.min(toIndex, targetItems.length));\n\n\t\t\tif (fromColumnId === toColumnId && fromIndex === resolvedToIndex) return;\n\n\t\t\tconst next: KanbanValue<T> = { ...value };\n\t\t\tconst sourceCopy = [...next[fromColumnId]];\n\t\t\tsourceCopy.splice(fromIndex, 1);\n\t\t\tnext[fromColumnId] = sourceCopy;\n\n\t\t\tconst targetCopy = [...(fromColumnId === toColumnId ? sourceCopy : next[toColumnId])];\n\t\t\t// When moving within the same column to a later index, the splice\n\t\t\t// above shifted everything left — re-resolve the destination.\n\t\t\tlet landingIndex = resolvedToIndex;\n\t\t\tif (fromColumnId === toColumnId && fromIndex < resolvedToIndex) {\n\t\t\t\tlandingIndex = Math.max(0, resolvedToIndex - 1);\n\t\t\t}\n\t\t\ttargetCopy.splice(landingIndex, 0, item);\n\t\t\tnext[toColumnId] = targetCopy;\n\n\t\t\tonValueChange(next);\n\t\t\tonItemMove?.({\n\t\t\t\titem,\n\t\t\t\titemId,\n\t\t\t\tfrom: { columnId: fromColumnId, index: fromIndex },\n\t\t\t\tto: { columnId: toColumnId, index: landingIndex },\n\t\t\t});\n\t\t},\n\t\t[value, findItem, onValueChange, onItemMove],\n\t);\n\n\treturn useMemo(() => ({ findItem, move }), [findItem, move]);\n}\n","import { createContext, useContext } from 'react';\n\nimport type { KanbanContextShape } from './kanban.types';\n\n/**\n * Internal context for the Kanban — the parts use this to read\n * shared state (current value, getItemValue, active drag id).\n */\nconst KanbanContext = createContext<KanbanContextShape | null>(null);\n\nexport const KanbanContextProvider = KanbanContext.Provider;\n\nexport function useKanbanContext<T = unknown>(): KanbanContextShape<T> {\n\tconst ctx = useContext(KanbanContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t'Kanban subcomponents must be rendered inside a <Kanban> root.',\n\t\t);\n\t}\n\treturn ctx as unknown as KanbanContextShape<T>;\n}\n\n/**\n * Internal context exposed by `<KanbanItem>` so the optional\n * `<KanbanItemHandle>` knows which listeners + accessibility props to\n * wire to the dedicated drag handle. Also carries the resolved\n * domain item so `<KanbanItemActions>` (and any other item-aware\n * subcomponent) can render per-item content without prop drilling.\n *\n * The dnd-kit shapes are widened to `unknown` so consumers can spread\n * them onto any HTMLElement.\n */\nexport interface KanbanItemContextShape<T = unknown> {\n\tlisteners: unknown;\n\tattributes: unknown;\n\tsetActivatorNodeRef: (node: HTMLElement | null) => void;\n\tregisterHandle: () => () => void;\n\t/** Stable id (the value returned by `getItemValue`). */\n\titemId: string;\n\t/** The domain item itself — null if it can't be resolved. */\n\titem: T | null;\n}\n\nconst KanbanItemContext = createContext<KanbanItemContextShape | null>(null);\n\nexport const KanbanItemContextProvider = KanbanItemContext.Provider;\n\nexport function useKanbanItemContext<T = unknown>(): KanbanItemContextShape<T> {\n\tconst ctx = useContext(KanbanItemContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t'<KanbanItemHandle> / <KanbanItemActions> must be rendered inside a <KanbanItem>.',\n\t\t);\n\t}\n\treturn ctx as KanbanItemContextShape<T>;\n}\n","/**\n * Strings for the Kanban — drag-and-drop screen-reader announcements\n * + accessibility labels. The library never renders user-visible copy\n * that the consumer hasn't already supplied via column headers / item\n * children, so the strings here are exclusively for assistive tech.\n */\nexport interface KanbanStrings {\n\t/** Read by screen readers when a drag begins. `{name}` = item label (or ID). */\n\tannounceDragStart: string;\n\t/** Read when an item moves over a column. `{from}` / `{to}` are column labels; `{position}` is one-based. */\n\tannounceDragMove: string;\n\t/** Read when an item is dropped into a column. */\n\tannounceDragEnd: string;\n\t/** Read when the user cancels a drag with Escape. */\n\tannounceDragCancel: string;\n\t/** Aria label on the drag handle. */\n\tdragHandleAria: string;\n\t/** Aria label on the board landmark. */\n\tboardAria: string;\n\t/** Aria label on the per-item actions trigger (`⋮`). */\n\titemActionsAria: string;\n}\n\nexport const defaultKanbanStrings: KanbanStrings = {\n\tannounceDragStart: 'Picked up item {name}.',\n\tannounceDragMove: 'Moving {name} from {from} to {to}, position {position}.',\n\tannounceDragEnd: 'Dropped {name} into {to}, position {position}.',\n\tannounceDragCancel: 'Cancelled drag of {name}.',\n\tdragHandleAria: 'Drag handle',\n\tboardAria: 'Kanban board',\n\titemActionsAria: 'Item actions',\n};\n\nexport function interpolateKanbanString(\n\ttemplate: string,\n\tparams: Record<string, string>,\n): string {\n\treturn Object.entries(params).reduce(\n\t\t(acc, [key, value]) => acc.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), value),\n\t\ttemplate,\n\t);\n}\n","/**\n * Kanban — drag-and-drop board with multi-column item sorting and\n * cross-column moves. Headless behavior comes from `@dnd-kit/core` +\n * `@dnd-kit/sortable`; the library wires it into a callback-driven,\n * generic-T API:\n *\n * <Kanban\n * value={columns}\n * onValueChange={setColumns}\n * getItemValue={(c) => c.id}\n * onItemMove={(e) => api.persistMove(e)}\n * >\n * <KanbanBoard className=\"grid grid-cols-3 gap-3\">\n * {Object.entries(columns).map(([colId, items]) => (\n * <KanbanColumn key={colId} value={colId}>\n * <header>{COLUMNS[colId].title}</header>\n * <KanbanColumnContent value={colId}>\n * {items.map((card) => (\n * <KanbanItem key={card.id} value={card.id}>\n * …card body…\n * </KanbanItem>\n * ))}\n * </KanbanColumnContent>\n * </KanbanColumn>\n * ))}\n * </KanbanBoard>\n * <KanbanOverlay />\n * </Kanban>\n *\n * The library never reaches into a router, never persists state — your\n * `onValueChange` is the source of truth. Use `onItemMove` for\n * analytics / optimistic-update plumbing.\n */\nimport {\n\tDndContext,\n\tDragOverlay,\n\tPointerSensor,\n\tKeyboardSensor,\n\tuseDroppable,\n\tuseSensor,\n\tuseSensors,\n\ttype DragEndEvent,\n\ttype DragStartEvent,\n} from '@dnd-kit/core';\nimport {\n\tSortableContext,\n\tuseSortable,\n\tverticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { MoreHorizontal } from 'lucide-react';\nimport { forwardRef, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, type MouseEvent } from 'react';\n\nimport { Button } from '../../base/buttons';\nimport { ActionMenu, type ActionMenuAction } from '../../base/action-menu';\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { createKanbanKeyboardCoordinates, type KanbanKeyboardPosition } from './kanban-keyboard';\nimport { useKanban } from './hooks/use-kanban';\nimport {\n\tKanbanContextProvider,\n\tKanbanItemContextProvider,\n\tuseKanbanContext,\n\tuseKanbanItemContext,\n} from './kanban-context';\nimport { defaultKanbanStrings, interpolateKanbanString } from './kanban.strings';\nimport type {\n\tKanbanBoardProps,\n\tKanbanColumnContentProps,\n\tKanbanColumnProps,\n\tKanbanItemAction,\n\tKanbanItemActionsConfig,\n\tKanbanItemActionsProps,\n\tKanbanItemHandleProps,\n\tKanbanItemProps,\n\tKanbanOverlayProps,\n\tKanbanProps,\n} from './kanban.types';\n\nexport function Kanban<T>({\n\tvalue,\n\tonValueChange,\n\tgetItemValue,\n\tgetItemLabel,\n\tgetColumnLabel,\n\tonItemMove,\n\titemActions,\n\tonItemClick,\n\tstrings: stringsProp,\n\tclassName,\n\tchildren,\n}: KanbanProps<T>) {\n\tconst strings = useStrings(defaultKanbanStrings, stringsProp);\n\tconst { findItem, move } = useKanban({\n\t\tvalue,\n\t\tonValueChange,\n\t\tgetItemValue,\n\t\tonItemMove,\n\t});\n\tconst [activeId, setActiveId] = useState<string | null>(null);\n\n\tconst boardRef = useRef<HTMLDivElement | null>(null);\n\tconst keyboardFocusId = useRef<string | null>(null);\n\tuseLayoutEffect(() => {\n\t\tif (activeId || !keyboardFocusId.current) return;\n\t\tconst item = Array.from(boardRef.current?.querySelectorAll<HTMLElement>('[data-kanban-item-id]') ?? []).find(node => node.dataset.kanbanItemId === keyboardFocusId.current);\n\t\tconst handle = item?.querySelector<HTMLElement>('[data-slot=\"kanban-item-handle\"]') ?? item;\n\t\tif (handle) { handle.focus(); keyboardFocusId.current = null; }\n\t}, [activeId, value]);\n\tconst dragOrigin = useRef<{ columnId: string; index: number; name: string } | null>(null);\n\tconst completedDestination = useRef<KanbanKeyboardPosition | null>(null);\n\tconst [keyboardPosition, setKeyboardPosition] = useState<KanbanKeyboardPosition | null>(null);\n\tconst keyboardDestination = useRef<KanbanKeyboardPosition | null>(null);\n\tconst keyboardCoordinates = useMemo(() => createKanbanKeyboardCoordinates(\n\t\tvalue, getItemValue as (item: unknown) => string, findItem, keyboardDestination, setKeyboardPosition,\n\t), [value, getItemValue, findItem]);\n\tconst sensors = useSensors(\n\t\tuseSensor(PointerSensor, { activationConstraint: { distance: 6 } }),\n\t\tuseSensor(KeyboardSensor, { coordinateGetter: keyboardCoordinates }),\n\t);\n\n\tconst activeItem = useMemo(\n\t\t() => (activeId ? findItem(activeId)?.item ?? null : null),\n\t\t[activeId, findItem],\n\t);\n\n\tconst handleDragStart = useCallback(\n\t\t(event: DragStartEvent) => {\n\t\t\tconst item = findItem(String(event.active.id));\n\t\t\tdragOrigin.current = item ? { columnId: item.columnId, index: item.index, name: getItemLabel?.(item.item) ?? String(event.active.id) } : null;\n\t\t\tcompletedDestination.current = null;\n\t\t\tsetKeyboardPosition(null);\n\t\t\tkeyboardDestination.current = null;\n\t\t\tkeyboardFocusId.current = event.activatorEvent instanceof KeyboardEvent ? String(event.active.id) : null;\n\t\t\tsetActiveId(String(event.active.id));\n\t\t},\n\t\t[findItem, getItemLabel],\n\t);\n\n\tconst handleDragEnd = useCallback(\n\t\t(event: DragEndEvent) => {\n\t\t\tsetActiveId(null);\n\t\t\tsetKeyboardPosition(null);\n\t\t\tconst { active, over } = event;\n\t\t\tconst destination = keyboardDestination.current;\n\t\t\tcompletedDestination.current = destination;\n\t\t\tkeyboardDestination.current = null;\n\t\t\tif (destination) {\n\t\t\t\tconst source = findItem(String(active.id));\n\t\t\t\tconst toIndex = source?.columnId === destination.columnId && source.index < destination.index ? destination.index + 1 : destination.index;\n\t\t\t\tmove({ itemId: String(active.id), toColumnId: destination.columnId, toIndex });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!over) return;\n\t\t\tconst activeData = active.data.current as\n\t\t\t\t| { columnId?: string; index?: number }\n\t\t\t\t| undefined;\n\t\t\tconst overData = over.data.current as\n\t\t\t\t| { columnId?: string; index?: number }\n\t\t\t\t| undefined;\n\t\t\tconst overId = String(over.id);\n\n\t\t\t// Dropping on a column container (not a sortable item) → append.\n\t\t\tconst targetColumnId =\n\t\t\t\toverData?.columnId ?? (Object.prototype.hasOwnProperty.call(value, overId) ? overId : undefined);\n\t\t\tif (!targetColumnId) return;\n\n\t\t\tconst toIndex =\n\t\t\t\toverData?.columnId !== undefined ? overData.index : value[targetColumnId].length;\n\n\t\t\tmove({\n\t\t\t\titemId: String(active.id),\n\t\t\t\ttoColumnId: targetColumnId,\n\t\t\t\ttoIndex,\n\t\t\t});\n\t\t\tvoid activeData;\n\t\t},\n\t\t[move, value, findItem],\n\t);\n\n\tconst ctxValue = useMemo(\n\t\t() => ({\n\t\t\tvalue: value as Record<string, unknown[]>,\n\t\t\tonValueChange: onValueChange as (next: Record<string, unknown[]>) => void,\n\t\t\tgetItemValue: getItemValue as (item: unknown) => string,\n\t\t\tactiveId,\n\t\t\tactiveItem: activeItem as unknown,\n\t\t\tfindItem: findItem as (id: string) => { columnId: string; index: number; item: unknown } | undefined,\n\t\t\titemActions: itemActions as KanbanItemActionsConfig<unknown> | undefined,\n\t\t\tonItemClick: onItemClick as ((item: unknown) => void) | undefined,\n\t\t}),\n\t\t[value, onValueChange, getItemValue, activeId, activeItem, findItem, itemActions, onItemClick],\n\t);\n\n\tconst announcementParams = (itemId: string, overId?: string) => {\n\t\tconst item = findItem(itemId);\n\t\tconst origin = dragOrigin.current;\n\t\tconst over = overId ? findItem(overId) : undefined;\n\t\tconst position = keyboardDestination.current ?? completedDestination.current ?? over ?? (overId && value[overId] ? { columnId: overId, index: value[overId].length } : origin);\n\t\tconst columnName = (id?: string) => id ? getColumnLabel?.(id) ?? id : '';\n\t\treturn {\n\t\t\tname: origin?.name ?? (item ? getItemLabel?.(item.item) ?? itemId : itemId),\n\t\t\tfrom: columnName(origin?.columnId),\n\t\t\tto: columnName(position?.columnId),\n\t\t\tposition: String((position?.index ?? 0) + 1),\n\t\t};\n\t};\n\treturn (\n\t\t<KanbanContextProvider value={ctxValue}>\n\t\t\t<DndContext\n\t\t\t\tsensors={sensors}\n\t\t\t\tonDragStart={handleDragStart}\n\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t\tonDragCancel={() => { keyboardDestination.current = null; setKeyboardPosition(null); setActiveId(null); }}\n\t\t\t\taccessibility={{\n\t\t\t\t\tannouncements: {\n\t\t\t\t\t\tonDragStart({ active }) {\n\t\t\t\t\t\t\treturn interpolateKanbanString(strings.announceDragStart, announcementParams(String(active.id)));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragMove({ active, over }) {\n\t\t\t\t\t\t\tif (keyboardFocusId.current) return undefined;\n\t\t\t\t\t\t\treturn interpolateKanbanString(strings.announceDragMove, announcementParams(String(active.id), over ? String(over.id) : undefined));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragOver({ active, over }) {\n\t\t\t\t\t\t\tif (keyboardFocusId.current) return undefined;\n\t\t\t\t\t\t\treturn interpolateKanbanString(strings.announceDragMove, announcementParams(String(active.id), over ? String(over.id) : undefined));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragEnd({ active, over }) {\n\t\t\t\t\t\t\treturn interpolateKanbanString(strings.announceDragEnd, announcementParams(String(active.id), over ? String(over.id) : undefined));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragCancel({ active }) {\n\t\t\t\t\t\t\treturn interpolateKanbanString(strings.announceDragCancel, announcementParams(String(active.id)));\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tref={boardRef}\n\t\t\t\t\trole=\"application\"\n\t\t\t\t\taria-label={strings.boardAria}\n\t\t\t\t\tclassName={cn('kanban--component', 'w-full', className)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t\t<div className=\"kanban--keyboard-announcement sr-only\" role=\"status\" aria-live=\"assertive\" aria-atomic=\"true\">\n\t\t\t\t\t\t<Text tag=\"span\">{activeId && keyboardPosition ? interpolateKanbanString(strings.announceDragMove, announcementParams(activeId)) : ''}</Text>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</DndContext>\n\t\t</KanbanContextProvider>\n\t);\n}\n\nKanban.displayName = 'Kanban';\n\nexport function KanbanBoard({ className, style, children }: KanbanBoardProps) {\n\treturn (\n\t\t<div className={cn('grid w-full gap-space-lg', className)} style={style}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nKanbanBoard.displayName = 'KanbanBoard';\n\nexport function KanbanColumn({ value, className, children }: KanbanColumnProps) {\n\tconst { setNodeRef, isOver } = useDroppable({ id: value });\n\treturn (\n\t\t<div\n\t\t\tref={setNodeRef}\n\t\t\tdata-slot=\"kanban-column\"\n\t\t\tdata-column-id={value}\n\t\t\tdata-over={isOver ? 'true' : undefined}\n\t\t\tclassName={cn('flex min-w-0 flex-col', className)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nKanbanColumn.displayName = 'KanbanColumn';\n\nexport function KanbanColumnContent({\n\tvalue,\n\tclassName,\n\tchildren,\n}: KanbanColumnContentProps) {\n\tconst ctx = useKanbanContext();\n\tconst items = ctx.value[value] ?? [];\n\tconst ids = items.map((item) => ctx.getItemValue(item));\n\treturn (\n\t\t<SortableContext items={ids} strategy={verticalListSortingStrategy}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"kanban-column-content\"\n\t\t\t\tclassName={cn('flex flex-col gap-space-md', className)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</SortableContext>\n\t);\n}\n\nKanbanColumnContent.displayName = 'KanbanColumnContent';\n\nexport function KanbanItem({\n\tvalue,\n\tclassName,\n\tdisabled = false,\n\tonClick,\n\tchildren,\n}: KanbanItemProps) {\n\tconst ctx = useKanbanContext();\n\tconst found = ctx.findItem(value);\n\tconst {\n\t\tattributes,\n\t\tlisteners,\n\t\tsetNodeRef,\n\t\tsetActivatorNodeRef,\n\t\ttransform,\n\t\ttransition,\n\t\tisDragging,\n\t} = useSortable({\n\t\tid: value,\n\t\tdisabled,\n\t\tdata: { columnId: found?.columnId, index: found?.index },\n\t});\n\n\tconst style = {\n\t\ttransform: CSS.Transform.toString(transform),\n\t\ttransition,\n\t\topacity: isDragging ? 0.4 : undefined,\n\t};\n\tconst [handleCount, setHandleCount] = useState(0);\n\tconst hasHandle = handleCount > 0;\n\tconst registerHandle = useCallback(() => {\n\t\tsetHandleCount((count) => count + 1);\n\t\treturn () => setHandleCount((count) => Math.max(0, count - 1));\n\t}, []);\n\n\tconst itemCtx = useMemo(\n\t\t() => ({\n\t\t\tlisteners,\n\t\t\tattributes,\n\t\t\tsetActivatorNodeRef,\n\t\t\tregisterHandle,\n\t\t\titemId: value,\n\t\t\titem: found?.item ?? null,\n\t\t}),\n\t\t[listeners, attributes, setActivatorNodeRef, registerHandle, value, found?.item],\n\t);\n\n\tconst rootClick = ctx.onItemClick;\n\tconst handleClick = useCallback(\n\t\t(event: MouseEvent<HTMLDivElement>) => {\n\t\t\t// `<KanbanItemHandle>` and `<KanbanItemActions>` mark themselves\n\t\t\t// with `data-stop-item-click` so a click on the drag handle or\n\t\t\t// the actions menu doesn't bubble up as a card click.\n\t\t\tconst target = event.target as HTMLElement | null;\n\t\t\tif (target?.closest('[data-stop-item-click]')) return;\n\t\t\tif (onClick) {\n\t\t\t\tonClick();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (rootClick && found?.item !== undefined) {\n\t\t\t\trootClick(found.item);\n\t\t\t}\n\t\t},\n\t\t[onClick, rootClick, found?.item],\n\t);\n\n\tconst isClickable = Boolean(onClick || rootClick);\n\n\t// When no <KanbanItemHandle> is used, the whole row is the activator.\n\t// We attach listeners + attributes here as the default — KanbanItemHandle\n\t// can then override by wiring them to a more specific element.\n\treturn (\n\t\t<KanbanItemContextProvider value={itemCtx}>\n\t\t\t<div\n\t\t\t\tref={setNodeRef}\n\t\t\t\tstyle={style}\n\t\t\t\tdata-slot=\"kanban-item\"\n\t\t\t\tdata-kanban-item-id={value}\n\t\t\t\tdata-dragging={isDragging ? 'true' : undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'touch-none select-none',\n\t\t\t\t\tisClickable && 'cursor-pointer',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonClick={isClickable ? handleClick : undefined}\n\t\t\t\t{...(!hasHandle ? attributes : {})}\n\t\t\t\t{...(!hasHandle ? listeners : {})}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</KanbanItemContextProvider>\n\t);\n}\n\nKanbanItem.displayName = 'KanbanItem';\n\nexport const KanbanItemHandle = forwardRef<HTMLButtonElement, KanbanItemHandleProps>(function KanbanItemHandle({ className, children }, forwardedRef) {\n\tconst { setActivatorNodeRef, listeners, attributes, registerHandle } = useKanbanItemContext();\n\tuseEffect(() => registerHandle(), [registerHandle]);\n\t// Merge dnd-kit's activator ref with the consumer's forwarded ref so a\n\t// `<Tooltip><KanbanItemHandle ref={…}/></Tooltip>` wiring still gets a\n\t// real ref to the button element.\n\tconst setMergedRef = useCallback(\n\t\t(node: HTMLButtonElement | null) => {\n\t\t\tsetActivatorNodeRef(node);\n\t\t\tif (typeof forwardedRef === 'function') {\n\t\t\t\tforwardedRef(node);\n\t\t\t} else if (forwardedRef) {\n\t\t\t\tforwardedRef.current = node;\n\t\t\t}\n\t\t},\n\t\t[setActivatorNodeRef, forwardedRef],\n\t);\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tsize=\"sm\" iconOnly\n\t\t\tref={setMergedRef}\n\t\t\tdata-slot=\"kanban-item-handle\"\n\t\t\tdata-stop-item-click\n\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\tclassName={cn(\n\t\t\t\t'cursor-grab shadow-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring active:cursor-grabbing',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...(attributes as Record<string, unknown>)}\n\t\t\t{...(listeners as Record<string, unknown>)}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n});\n\nKanbanItemHandle.displayName = 'KanbanItemHandle';\n\n/**\n * Per-item actions menu (`⋮` trigger → popover with the actions\n * registered at the `<Kanban itemActions>` root). Place inside any\n * `<KanbanItem>` — typically in the card's top-right corner.\n *\n * The trigger marks itself with `data-stop-item-click` so opening the\n * menu doesn't fire the parent `onItemClick` callback.\n */\nexport function KanbanItemActions<T = unknown>({\n\tclassName,\n\ticon,\n\tariaLabel,\n}: KanbanItemActionsProps) {\n\tconst ctx = useKanbanContext<T>();\n\tconst itemCtx = useKanbanItemContext<T>();\n\tconst strings = useStrings(defaultKanbanStrings, undefined);\n\n\tconst item = itemCtx.item;\n\tconst rawActions = ctx.itemActions;\n\tconst actions = useMemo<ReadonlyArray<\n\t\tOmit<KanbanItemAction<T>, 'visible' | 'disabled'> & {\n\t\t\tvisible: boolean;\n\t\t\tdisabled: boolean;\n\t\t}\n\t>>(() => {\n\t\tif (!rawActions || item === null || item === undefined) return [];\n\t\tconst list = typeof rawActions === 'function' ? rawActions(item) : rawActions;\n\t\treturn list.flatMap((action) => {\n\t\t\tconst visible = typeof action.visible === 'function'\n\t\t\t\t? action.visible(item)\n\t\t\t\t: action.visible ?? true;\n\t\t\tif (!visible) return [];\n\t\t\tconst disabled = typeof action.disabled === 'function'\n\t\t\t\t? action.disabled(item)\n\t\t\t\t: action.disabled ?? false;\n\t\t\treturn [{ ...action, visible, disabled }];\n\t\t});\n\t}, [rawActions, item]);\n\n\tif (item === null || actions.length === 0) return null;\n\n\tconst menuActions: ActionMenuAction[] = actions.map((action) => ({\n\t\tid: action.id,\n\t\tlabel: action.label,\n\t\ticon: action.icon,\n\t\tdisabled: action.disabled,\n\t\ttone: action.tone,\n\t\tbuttonStyle: action.buttonStyle,\n\t\tonClick: () => action.onClick(item),\n\t}));\n\n\treturn (\n\t\t<span\n\t\t\tclassName=\"kanban-item-actions--component inline-flex\"\n\t\t\tdata-stop-item-click\n\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\tonPointerDown={(event) => event.stopPropagation()}\n\t\t>\n\t\t\t<ActionMenu\n\t\t\t\tactions={menuActions}\n\t\t\t\ticon={icon ?? MoreHorizontal}\n\t\t\t\tsrText={ariaLabel ?? strings.itemActionsAria}\n\t\t\t\twidth=\"w-44\"\n\t\t\t\talign=\"end\"\n\t\t\t\tdensity=\"table\"\n\t\t\t\tbuttonProps={{\n\t\t\t\t\tsize: 'sm',\n\t\t\t\t\ticonOnly: true,\n\t\t\t\t\tclassName: cn(\n\n\t\t\t\t\t\t'text-muted-foreground/70 hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t'transition-colors',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t),\n\t\t\t\t\t'data-slot': 'kanban-item-actions-trigger',\n\t\t\t\t\t'data-stop-item-click': true,\n\t\t\t\t\t'aria-label': ariaLabel ?? strings.itemActionsAria,\n\t\t\t\t}}\n\t\t\t/>\n\t\t</span>\n\t);\n}\n\nKanbanItemActions.displayName = 'KanbanItemActions';\n\nexport function KanbanOverlay<T = unknown>({ className, render }: KanbanOverlayProps<T>) {\n\tconst { activeItem, activeId, findItem } = useKanbanContext<T>();\n\treturn (\n\t\t<DragOverlay>\n\t\t\t{activeId\n\t\t\t\t? render\n\t\t\t\t\t? render({\n\t\t\t\t\t\t\titem: activeItem,\n\t\t\t\t\t\t\tcolumnId: findItem(activeId)?.columnId ?? null,\n\t\t\t\t\t\t})\n\t\t\t\t\t: (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'kanban-overlay--component pointer-events-none rounded-radius border-2 border-dashed border-primary/40 bg-primary/5 p-surface shadow-lg',\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"text-primary-accent/80\">{activeId}</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t: null}\n\t\t</DragOverlay>\n\t);\n}\n\nKanbanOverlay.displayName = 'KanbanOverlay';\n"],"mappings":"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"}
1
+ {"version":3,"file":"kanban.js","names":["Text","toneRecipes","ActionMenu","getKanbanKeyboardPosition","ids","columns","columnIndex","position","key","nextId","createKanbanKeyboardCoordinates","event","active","context","destination","findItem","next","value","onPositionChange","item","id","getItemValue","rect","activeRect","currentCoordinates","useKanban","useCallback","columnId","items","index","move","found","itemId","toColumnId","fromColumnId","fromIndex","targetItems","resolvedToIndex","toIndex","sourceCopy","targetCopy","landingIndex","onValueChange","onItemMove","useMemo","KanbanContext","createContext","KanbanContextProvider","useKanbanContext","ctx","useContext","KanbanItemContext","KanbanItemContextProvider","useKanbanItemContext","defaultKanbanStrings","interpolateKanbanString","params","acc","template","Kanban","stringsProp","strings","useStrings","activeId","setActiveId","useState","boardRef","useRef","keyboardFocusId","node","handle","dragOrigin","completedDestination","keyboardPosition","setKeyboardPosition","keyboardDestination","keyboardCoordinates","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","activeItem","handleDragStart","getItemLabel","handleDragEnd","source","over","overData","overId","targetColumnId","ctxValue","itemActions","onItemClick","announcementParams","origin","columnName","getColumnLabel","DndContext","cn","className","children","KanbanBoard","KanbanColumn","useDroppable","setNodeRef","isOver","KanbanColumnContent","SortableContext","verticalListSortingStrategy","KanbanItem","useSortable","style","CSS","transform","isDragging","handleCount","setHandleCount","hasHandle","registerHandle","count","itemCtx","listeners","attributes","setActivatorNodeRef","rootClick","handleClick","onClick","isClickable","KanbanItemHandle","forwardRef","setMergedRef","forwardedRef","Button","KanbanItemActions","rawActions","actions","visible","action","disabled","menuActions","icon","ariaLabel","KanbanOverlay","DragOverlay","render"],"sources":["../../src/components/features/kanban/kanban-keyboard.ts","../../src/components/features/kanban/hooks/use-kanban.ts","../../src/components/features/kanban/kanban-context.tsx","../../src/components/features/kanban/kanban.strings.ts","../../src/components/features/kanban/kanban.tsx"],"sourcesContent":["import type { KeyboardCoordinateGetter } from '@dnd-kit/core';\n\nexport interface KanbanKeyboardPosition { columnId: string; index: number }\n\n/** Resolve arrow movement from board order, including columns with no cards. */\nexport function getKanbanKeyboardPosition(\n\tcolumns: Record<string, unknown[]>,\n\tposition: KanbanKeyboardPosition,\n\tkey: string,\n): KanbanKeyboardPosition {\n\tconst ids = Object.keys(columns);\n\tconst columnIndex = ids.indexOf(position.columnId);\n\tif (key === 'ArrowLeft' || key === 'ArrowRight') {\n\t\tconst nextId = ids[columnIndex + (key === 'ArrowRight' ? 1 : -1)];\n\t\treturn nextId ? { columnId: nextId, index: Math.min(position.index, columns[nextId].length) } : position;\n\t}\n\tif (key === 'ArrowUp' || key === 'ArrowDown') {\n\t\treturn { columnId: position.columnId, index: Math.max(0, Math.min(columns[position.columnId].length - 1, position.index + (key === 'ArrowDown' ? 1 : -1))) };\n\t}\n\treturn position;\n}\n\nexport function createKanbanKeyboardCoordinates(\n\tvalue: Record<string, unknown[]>,\n\tgetItemValue: (item: unknown) => string,\n\tfindItem: (id: string) => KanbanKeyboardPosition | undefined,\n\tdestination: { current: KanbanKeyboardPosition | null },\n\tonPositionChange?: (position: KanbanKeyboardPosition) => void,\n): KeyboardCoordinateGetter {\n\treturn (event, { currentCoordinates, context }) => {\n\t\tif (!['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.code)) return undefined;\n\t\tconst active = context.active;\n\t\tif (!active) return undefined;\n\t\tconst position = destination.current ?? findItem(String(active.id));\n\t\tif (!position) return undefined;\n\t\tevent.preventDefault();\n\t\tconst next = getKanbanKeyboardPosition(value, position, event.code);\n\t\tdestination.current = next;\n\t\tonPositionChange?.(next);\n\t\tconst item = value[next.columnId][next.index];\n\t\tconst id = item === undefined ? next.columnId : getItemValue(item);\n\t\tconst rect = context.droppableRects.get(id);\n\t\tconst activeRect = context.collisionRect;\n\t\tif (!rect || !activeRect) return currentCoordinates;\n\t\treturn {\n\t\t\tx: currentCoordinates.x + rect.left - activeRect.left,\n\t\t\ty: currentCoordinates.y + rect.top - activeRect.top,\n\t\t};\n\t};\n}\n","import { useCallback, useMemo } from 'react';\n\nimport type { KanbanItemMoveEvent, KanbanValue } from '../kanban.types';\n\n/**\n * Headless hook — exposes the same state machine `<Kanban>` uses\n * internally so consumers can build a fully custom UI against it.\n *\n * const { findItem, move } = useKanban({ value, onValueChange,\n * getItemValue });\n * move({ itemId: 'card-1', toColumnId: 'shipped', toIndex: 0 });\n */\nexport interface UseKanbanOptions<T> {\n\tvalue: KanbanValue<T>;\n\tonValueChange: (next: KanbanValue<T>) => void;\n\tgetItemValue: (item: T) => string;\n\tonItemMove?: (event: KanbanItemMoveEvent<T>) => void;\n}\n\nexport interface UseKanbanResult<T> {\n\tfindItem: (id: string) => { columnId: string; index: number; item: T } | undefined;\n\t/**\n\t * Move an item between columns / within the same column. Idempotent:\n\t * a no-op move is safe.\n\t */\n\tmove: (input: { itemId: string; toColumnId: string; toIndex?: number }) => void;\n}\n\nexport function useKanban<T>({\n\tvalue,\n\tonValueChange,\n\tgetItemValue,\n\tonItemMove,\n}: UseKanbanOptions<T>): UseKanbanResult<T> {\n\tconst findItem = useCallback(\n\t\t(id: string) => {\n\t\t\tfor (const [columnId, items] of Object.entries(value)) {\n\t\t\t\tconst index = items.findIndex((item) => getItemValue(item) === id);\n\t\t\t\tif (index >= 0) return { columnId, index, item: items[index] };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\t[value, getItemValue],\n\t);\n\n\tconst move = useCallback(\n\t\t({ itemId, toColumnId, toIndex }: { itemId: string; toColumnId: string; toIndex?: number }) => {\n\t\t\tconst found = findItem(itemId);\n\t\t\tif (!found) return;\n\t\t\tif (!Object.prototype.hasOwnProperty.call(value, toColumnId)) return;\n\n\t\t\tconst { columnId: fromColumnId, index: fromIndex, item } = found;\n\n\t\t\t// Same column, same slot — nothing to do.\n\t\t\tconst targetItems = value[toColumnId];\n\t\t\tconst resolvedToIndex =\n\t\t\t\ttoIndex === undefined\n\t\t\t\t\t? targetItems.length\n\t\t\t\t\t: Math.max(0, Math.min(toIndex, targetItems.length));\n\n\t\t\tif (fromColumnId === toColumnId && fromIndex === resolvedToIndex) return;\n\n\t\t\tconst next: KanbanValue<T> = { ...value };\n\t\t\tconst sourceCopy = [...next[fromColumnId]];\n\t\t\tsourceCopy.splice(fromIndex, 1);\n\t\t\tnext[fromColumnId] = sourceCopy;\n\n\t\t\tconst targetCopy = [...(fromColumnId === toColumnId ? sourceCopy : next[toColumnId])];\n\t\t\t// When moving within the same column to a later index, the splice\n\t\t\t// above shifted everything left — re-resolve the destination.\n\t\t\tlet landingIndex = resolvedToIndex;\n\t\t\tif (fromColumnId === toColumnId && fromIndex < resolvedToIndex) {\n\t\t\t\tlandingIndex = Math.max(0, resolvedToIndex - 1);\n\t\t\t}\n\t\t\ttargetCopy.splice(landingIndex, 0, item);\n\t\t\tnext[toColumnId] = targetCopy;\n\n\t\t\tonValueChange(next);\n\t\t\tonItemMove?.({\n\t\t\t\titem,\n\t\t\t\titemId,\n\t\t\t\tfrom: { columnId: fromColumnId, index: fromIndex },\n\t\t\t\tto: { columnId: toColumnId, index: landingIndex },\n\t\t\t});\n\t\t},\n\t\t[value, findItem, onValueChange, onItemMove],\n\t);\n\n\treturn useMemo(() => ({ findItem, move }), [findItem, move]);\n}\n","import { createContext, useContext } from 'react';\n\nimport type { KanbanContextShape } from './kanban.types';\n\n/**\n * Internal context for the Kanban — the parts use this to read\n * shared state (current value, getItemValue, active drag id).\n */\nconst KanbanContext = createContext<KanbanContextShape | null>(null);\n\nexport const KanbanContextProvider = KanbanContext.Provider;\n\nexport function useKanbanContext<T = unknown>(): KanbanContextShape<T> {\n\tconst ctx = useContext(KanbanContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t'Kanban subcomponents must be rendered inside a <Kanban> root.',\n\t\t);\n\t}\n\treturn ctx as unknown as KanbanContextShape<T>;\n}\n\n/**\n * Internal context exposed by `<KanbanItem>` so the optional\n * `<KanbanItemHandle>` knows which listeners + accessibility props to\n * wire to the dedicated drag handle. Also carries the resolved\n * domain item so `<KanbanItemActions>` (and any other item-aware\n * subcomponent) can render per-item content without prop drilling.\n *\n * The dnd-kit shapes are widened to `unknown` so consumers can spread\n * them onto any HTMLElement.\n */\nexport interface KanbanItemContextShape<T = unknown> {\n\tlisteners: unknown;\n\tattributes: unknown;\n\tsetActivatorNodeRef: (node: HTMLElement | null) => void;\n\tregisterHandle: () => () => void;\n\t/** Stable id (the value returned by `getItemValue`). */\n\titemId: string;\n\t/** The domain item itself — null if it can't be resolved. */\n\titem: T | null;\n}\n\nconst KanbanItemContext = createContext<KanbanItemContextShape | null>(null);\n\nexport const KanbanItemContextProvider = KanbanItemContext.Provider;\n\nexport function useKanbanItemContext<T = unknown>(): KanbanItemContextShape<T> {\n\tconst ctx = useContext(KanbanItemContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t'<KanbanItemHandle> / <KanbanItemActions> must be rendered inside a <KanbanItem>.',\n\t\t);\n\t}\n\treturn ctx as KanbanItemContextShape<T>;\n}\n","/**\n * Strings for the Kanban — drag-and-drop screen-reader announcements\n * + accessibility labels. The library never renders user-visible copy\n * that the consumer hasn't already supplied via column headers / item\n * children, so the strings here are exclusively for assistive tech.\n */\nexport interface KanbanStrings {\n\t/** Read by screen readers when a drag begins. `{name}` = item label (or ID). */\n\tannounceDragStart: string;\n\t/** Read when an item moves over a column. `{from}` / `{to}` are column labels; `{position}` is one-based. */\n\tannounceDragMove: string;\n\t/** Read when an item is dropped into a column. */\n\tannounceDragEnd: string;\n\t/** Read when the user cancels a drag with Escape. */\n\tannounceDragCancel: string;\n\t/** Aria label on the drag handle. */\n\tdragHandleAria: string;\n\t/** Aria label on the board landmark. */\n\tboardAria: string;\n\t/** Aria label on the per-item actions trigger (`⋯`). */\n\titemActionsAria: string;\n}\n\nexport const defaultKanbanStrings: KanbanStrings = {\n\tannounceDragStart: 'Picked up item {name}.',\n\tannounceDragMove: 'Moving {name} from {from} to {to}, position {position}.',\n\tannounceDragEnd: 'Dropped {name} into {to}, position {position}.',\n\tannounceDragCancel: 'Cancelled drag of {name}.',\n\tdragHandleAria: 'Drag handle',\n\tboardAria: 'Kanban board',\n\titemActionsAria: 'Item actions',\n};\n\nexport function interpolateKanbanString(\n\ttemplate: string,\n\tparams: Record<string, string>,\n): string {\n\treturn Object.entries(params).reduce(\n\t\t(acc, [key, value]) => acc.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), value),\n\t\ttemplate,\n\t);\n}\n","/**\n * Kanban — drag-and-drop board with multi-column item sorting and\n * cross-column moves. Headless behavior comes from `@dnd-kit/core` +\n * `@dnd-kit/sortable`; the library wires it into a callback-driven,\n * generic-T API:\n *\n * <Kanban\n * value={columns}\n * onValueChange={setColumns}\n * getItemValue={(c) => c.id}\n * onItemMove={(e) => api.persistMove(e)}\n * >\n * <KanbanBoard className=\"grid grid-cols-3 gap-3\">\n * {Object.entries(columns).map(([colId, items]) => (\n * <KanbanColumn key={colId} value={colId}>\n * <header>{COLUMNS[colId].title}</header>\n * <KanbanColumnContent value={colId}>\n * {items.map((card) => (\n * <KanbanItem key={card.id} value={card.id}>\n * …card body…\n * </KanbanItem>\n * ))}\n * </KanbanColumnContent>\n * </KanbanColumn>\n * ))}\n * </KanbanBoard>\n * <KanbanOverlay />\n * </Kanban>\n *\n * The library never reaches into a router, never persists state — your\n * `onValueChange` is the source of truth. Use `onItemMove` for\n * analytics / optimistic-update plumbing.\n */\nimport {\n\tDndContext,\n\tDragOverlay,\n\tPointerSensor,\n\tKeyboardSensor,\n\tuseDroppable,\n\tuseSensor,\n\tuseSensors,\n\ttype DragEndEvent,\n\ttype DragStartEvent,\n} from '@dnd-kit/core';\nimport {\n\tSortableContext,\n\tuseSortable,\n\tverticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { forwardRef, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, type MouseEvent } from 'react';\n\nimport { Button } from '../../base/buttons';\nimport { ActionMenu, type ActionMenuAction } from '../../base/action-menu';\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { createKanbanKeyboardCoordinates, type KanbanKeyboardPosition } from './kanban-keyboard';\nimport { useKanban } from './hooks/use-kanban';\nimport {\n\tKanbanContextProvider,\n\tKanbanItemContextProvider,\n\tuseKanbanContext,\n\tuseKanbanItemContext,\n} from './kanban-context';\nimport { defaultKanbanStrings, interpolateKanbanString } from './kanban.strings';\nimport type {\n\tKanbanBoardProps,\n\tKanbanColumnContentProps,\n\tKanbanColumnProps,\n\tKanbanItemAction,\n\tKanbanItemActionsConfig,\n\tKanbanItemActionsProps,\n\tKanbanItemHandleProps,\n\tKanbanItemProps,\n\tKanbanOverlayProps,\n\tKanbanProps,\n} from './kanban.types';\nimport { toneRecipes } from '../../../lib/tone-recipes';\n\nexport function Kanban<T>({\n\tvalue,\n\tonValueChange,\n\tgetItemValue,\n\tgetItemLabel,\n\tgetColumnLabel,\n\tonItemMove,\n\titemActions,\n\tonItemClick,\n\tstrings: stringsProp,\n\tclassName,\n\tchildren,\n}: KanbanProps<T>) {\n\tconst strings = useStrings(defaultKanbanStrings, stringsProp);\n\tconst { findItem, move } = useKanban({\n\t\tvalue,\n\t\tonValueChange,\n\t\tgetItemValue,\n\t\tonItemMove,\n\t});\n\tconst [activeId, setActiveId] = useState<string | null>(null);\n\n\tconst boardRef = useRef<HTMLDivElement | null>(null);\n\tconst keyboardFocusId = useRef<string | null>(null);\n\tuseLayoutEffect(() => {\n\t\tif (activeId || !keyboardFocusId.current) return;\n\t\tconst item = Array.from(boardRef.current?.querySelectorAll<HTMLElement>('[data-kanban-item-id]') ?? []).find(node => node.dataset.kanbanItemId === keyboardFocusId.current);\n\t\tconst handle = item?.querySelector<HTMLElement>('[data-slot=\"kanban-item-handle\"]') ?? item;\n\t\tif (handle) { handle.focus(); keyboardFocusId.current = null; }\n\t}, [activeId, value]);\n\tconst dragOrigin = useRef<{ columnId: string; index: number; name: string } | null>(null);\n\tconst completedDestination = useRef<KanbanKeyboardPosition | null>(null);\n\tconst [keyboardPosition, setKeyboardPosition] = useState<KanbanKeyboardPosition | null>(null);\n\tconst keyboardDestination = useRef<KanbanKeyboardPosition | null>(null);\n\tconst keyboardCoordinates = useMemo(() => createKanbanKeyboardCoordinates(\n\t\tvalue, getItemValue as (item: unknown) => string, findItem, keyboardDestination, setKeyboardPosition,\n\t), [value, getItemValue, findItem]);\n\tconst sensors = useSensors(\n\t\tuseSensor(PointerSensor, { activationConstraint: { distance: 6 } }),\n\t\tuseSensor(KeyboardSensor, { coordinateGetter: keyboardCoordinates }),\n\t);\n\n\tconst activeItem = useMemo(\n\t\t() => (activeId ? findItem(activeId)?.item ?? null : null),\n\t\t[activeId, findItem],\n\t);\n\n\tconst handleDragStart = useCallback(\n\t\t(event: DragStartEvent) => {\n\t\t\tconst item = findItem(String(event.active.id));\n\t\t\tdragOrigin.current = item ? { columnId: item.columnId, index: item.index, name: getItemLabel?.(item.item) ?? String(event.active.id) } : null;\n\t\t\tcompletedDestination.current = null;\n\t\t\tsetKeyboardPosition(null);\n\t\t\tkeyboardDestination.current = null;\n\t\t\tkeyboardFocusId.current = event.activatorEvent instanceof KeyboardEvent ? String(event.active.id) : null;\n\t\t\tsetActiveId(String(event.active.id));\n\t\t},\n\t\t[findItem, getItemLabel],\n\t);\n\n\tconst handleDragEnd = useCallback(\n\t\t(event: DragEndEvent) => {\n\t\t\tsetActiveId(null);\n\t\t\tsetKeyboardPosition(null);\n\t\t\tconst { active, over } = event;\n\t\t\tconst destination = keyboardDestination.current;\n\t\t\tcompletedDestination.current = destination;\n\t\t\tkeyboardDestination.current = null;\n\t\t\tif (destination) {\n\t\t\t\tconst source = findItem(String(active.id));\n\t\t\t\tconst toIndex = source?.columnId === destination.columnId && source.index < destination.index ? destination.index + 1 : destination.index;\n\t\t\t\tmove({ itemId: String(active.id), toColumnId: destination.columnId, toIndex });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!over) return;\n\t\t\tconst activeData = active.data.current as\n\t\t\t\t| { columnId?: string; index?: number }\n\t\t\t\t| undefined;\n\t\t\tconst overData = over.data.current as\n\t\t\t\t| { columnId?: string; index?: number }\n\t\t\t\t| undefined;\n\t\t\tconst overId = String(over.id);\n\n\t\t\t// Dropping on a column container (not a sortable item) → append.\n\t\t\tconst targetColumnId =\n\t\t\t\toverData?.columnId ?? (Object.prototype.hasOwnProperty.call(value, overId) ? overId : undefined);\n\t\t\tif (!targetColumnId) return;\n\n\t\t\tconst toIndex =\n\t\t\t\toverData?.columnId !== undefined ? overData.index : value[targetColumnId].length;\n\n\t\t\tmove({\n\t\t\t\titemId: String(active.id),\n\t\t\t\ttoColumnId: targetColumnId,\n\t\t\t\ttoIndex,\n\t\t\t});\n\t\t\tvoid activeData;\n\t\t},\n\t\t[move, value, findItem],\n\t);\n\n\tconst ctxValue = useMemo(\n\t\t() => ({\n\t\t\tvalue: value as Record<string, unknown[]>,\n\t\t\tonValueChange: onValueChange as (next: Record<string, unknown[]>) => void,\n\t\t\tgetItemValue: getItemValue as (item: unknown) => string,\n\t\t\tactiveId,\n\t\t\tactiveItem: activeItem as unknown,\n\t\t\tfindItem: findItem as (id: string) => { columnId: string; index: number; item: unknown } | undefined,\n\t\t\titemActions: itemActions as KanbanItemActionsConfig<unknown> | undefined,\n\t\t\tonItemClick: onItemClick as ((item: unknown) => void) | undefined,\n\t\t}),\n\t\t[value, onValueChange, getItemValue, activeId, activeItem, findItem, itemActions, onItemClick],\n\t);\n\n\tconst announcementParams = (itemId: string, overId?: string) => {\n\t\tconst item = findItem(itemId);\n\t\tconst origin = dragOrigin.current;\n\t\tconst over = overId ? findItem(overId) : undefined;\n\t\tconst position = keyboardDestination.current ?? completedDestination.current ?? over ?? (overId && value[overId] ? { columnId: overId, index: value[overId].length } : origin);\n\t\tconst columnName = (id?: string) => id ? getColumnLabel?.(id) ?? id : '';\n\t\treturn {\n\t\t\tname: origin?.name ?? (item ? getItemLabel?.(item.item) ?? itemId : itemId),\n\t\t\tfrom: columnName(origin?.columnId),\n\t\t\tto: columnName(position?.columnId),\n\t\t\tposition: String((position?.index ?? 0) + 1),\n\t\t};\n\t};\n\treturn (\n\t\t<KanbanContextProvider value={ctxValue}>\n\t\t\t<DndContext\n\t\t\t\tsensors={sensors}\n\t\t\t\tonDragStart={handleDragStart}\n\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t\tonDragCancel={() => { keyboardDestination.current = null; setKeyboardPosition(null); setActiveId(null); }}\n\t\t\t\taccessibility={{\n\t\t\t\t\tannouncements: {\n\t\t\t\t\t\tonDragStart({ active }) {\n\t\t\t\t\t\t\treturn interpolateKanbanString(strings.announceDragStart, announcementParams(String(active.id)));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragMove({ active, over }) {\n\t\t\t\t\t\t\tif (keyboardFocusId.current) return undefined;\n\t\t\t\t\t\t\treturn interpolateKanbanString(strings.announceDragMove, announcementParams(String(active.id), over ? String(over.id) : undefined));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragOver({ active, over }) {\n\t\t\t\t\t\t\tif (keyboardFocusId.current) return undefined;\n\t\t\t\t\t\t\treturn interpolateKanbanString(strings.announceDragMove, announcementParams(String(active.id), over ? String(over.id) : undefined));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragEnd({ active, over }) {\n\t\t\t\t\t\t\treturn interpolateKanbanString(strings.announceDragEnd, announcementParams(String(active.id), over ? String(over.id) : undefined));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragCancel({ active }) {\n\t\t\t\t\t\t\treturn interpolateKanbanString(strings.announceDragCancel, announcementParams(String(active.id)));\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tref={boardRef}\n\t\t\t\t\trole=\"application\"\n\t\t\t\t\taria-label={strings.boardAria}\n\t\t\t\t\tclassName={cn('kanban--component', 'w-full', className)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t\t<div className=\"kanban--keyboard-announcement sr-only\" role=\"status\" aria-live=\"assertive\" aria-atomic=\"true\">\n\t\t\t\t\t\t<Text tag=\"span\">{activeId && keyboardPosition ? interpolateKanbanString(strings.announceDragMove, announcementParams(activeId)) : ''}</Text>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</DndContext>\n\t\t</KanbanContextProvider>\n\t);\n}\n\nKanban.displayName = 'Kanban';\n\nexport function KanbanBoard({ className, style, children }: KanbanBoardProps) {\n\treturn (\n\t\t<div className={cn('grid w-full gap-space-lg', className)} style={style}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nKanbanBoard.displayName = 'KanbanBoard';\n\nexport function KanbanColumn({ value, className, children }: KanbanColumnProps) {\n\tconst { setNodeRef, isOver } = useDroppable({ id: value });\n\treturn (\n\t\t<div\n\t\t\tref={setNodeRef}\n\t\t\tdata-slot=\"kanban-column\"\n\t\t\tdata-column-id={value}\n\t\t\tdata-over={isOver ? 'true' : undefined}\n\t\t\tclassName={cn('flex min-w-0 flex-col', className)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nKanbanColumn.displayName = 'KanbanColumn';\n\nexport function KanbanColumnContent({\n\tvalue,\n\tclassName,\n\tchildren,\n}: KanbanColumnContentProps) {\n\tconst ctx = useKanbanContext();\n\tconst items = ctx.value[value] ?? [];\n\tconst ids = items.map((item) => ctx.getItemValue(item));\n\treturn (\n\t\t<SortableContext items={ids} strategy={verticalListSortingStrategy}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"kanban-column-content\"\n\t\t\t\tclassName={cn('flex flex-col gap-space-md', className)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</SortableContext>\n\t);\n}\n\nKanbanColumnContent.displayName = 'KanbanColumnContent';\n\nexport function KanbanItem({\n\tvalue,\n\tclassName,\n\tdisabled = false,\n\tonClick,\n\tchildren,\n}: KanbanItemProps) {\n\tconst ctx = useKanbanContext();\n\tconst found = ctx.findItem(value);\n\tconst {\n\t\tattributes,\n\t\tlisteners,\n\t\tsetNodeRef,\n\t\tsetActivatorNodeRef,\n\t\ttransform,\n\t\ttransition,\n\t\tisDragging,\n\t} = useSortable({\n\t\tid: value,\n\t\tdisabled,\n\t\tdata: { columnId: found?.columnId, index: found?.index },\n\t});\n\n\tconst style = {\n\t\ttransform: CSS.Transform.toString(transform),\n\t\ttransition,\n\t\topacity: isDragging ? 0.4 : undefined,\n\t};\n\tconst [handleCount, setHandleCount] = useState(0);\n\tconst hasHandle = handleCount > 0;\n\tconst registerHandle = useCallback(() => {\n\t\tsetHandleCount((count) => count + 1);\n\t\treturn () => setHandleCount((count) => Math.max(0, count - 1));\n\t}, []);\n\n\tconst itemCtx = useMemo(\n\t\t() => ({\n\t\t\tlisteners,\n\t\t\tattributes,\n\t\t\tsetActivatorNodeRef,\n\t\t\tregisterHandle,\n\t\t\titemId: value,\n\t\t\titem: found?.item ?? null,\n\t\t}),\n\t\t[listeners, attributes, setActivatorNodeRef, registerHandle, value, found?.item],\n\t);\n\n\tconst rootClick = ctx.onItemClick;\n\tconst handleClick = useCallback(\n\t\t(event: MouseEvent<HTMLDivElement>) => {\n\t\t\t// `<KanbanItemHandle>` and `<KanbanItemActions>` mark themselves\n\t\t\t// with `data-stop-item-click` so a click on the drag handle or\n\t\t\t// the actions menu doesn't bubble up as a card click.\n\t\t\tconst target = event.target as HTMLElement | null;\n\t\t\tif (target?.closest('[data-stop-item-click]')) return;\n\t\t\tif (onClick) {\n\t\t\t\tonClick();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (rootClick && found?.item !== undefined) {\n\t\t\t\trootClick(found.item);\n\t\t\t}\n\t\t},\n\t\t[onClick, rootClick, found?.item],\n\t);\n\n\tconst isClickable = Boolean(onClick || rootClick);\n\n\t// When no <KanbanItemHandle> is used, the whole row is the activator.\n\t// We attach listeners + attributes here as the default — KanbanItemHandle\n\t// can then override by wiring them to a more specific element.\n\treturn (\n\t\t<KanbanItemContextProvider value={itemCtx}>\n\t\t\t<div\n\t\t\t\tref={setNodeRef}\n\t\t\t\tstyle={style}\n\t\t\t\tdata-slot=\"kanban-item\"\n\t\t\t\tdata-kanban-item-id={value}\n\t\t\t\tdata-dragging={isDragging ? 'true' : undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'touch-none select-none',\n\t\t\t\t\tisClickable && 'cursor-pointer',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonClick={isClickable ? handleClick : undefined}\n\t\t\t\t{...(!hasHandle ? attributes : {})}\n\t\t\t\t{...(!hasHandle ? listeners : {})}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</KanbanItemContextProvider>\n\t);\n}\n\nKanbanItem.displayName = 'KanbanItem';\n\nexport const KanbanItemHandle = forwardRef<HTMLButtonElement, KanbanItemHandleProps>(function KanbanItemHandle({ className, children }, forwardedRef) {\n\tconst { setActivatorNodeRef, listeners, attributes, registerHandle } = useKanbanItemContext();\n\tuseEffect(() => registerHandle(), [registerHandle]);\n\t// Merge dnd-kit's activator ref with the consumer's forwarded ref so a\n\t// `<Tooltip><KanbanItemHandle ref={…}/></Tooltip>` wiring still gets a\n\t// real ref to the button element.\n\tconst setMergedRef = useCallback(\n\t\t(node: HTMLButtonElement | null) => {\n\t\t\tsetActivatorNodeRef(node);\n\t\t\tif (typeof forwardedRef === 'function') {\n\t\t\t\tforwardedRef(node);\n\t\t\t} else if (forwardedRef) {\n\t\t\t\tforwardedRef.current = node;\n\t\t\t}\n\t\t},\n\t\t[setActivatorNodeRef, forwardedRef],\n\t);\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\ttone=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tsize=\"sm\" iconOnly\n\t\t\tref={setMergedRef}\n\t\t\tdata-slot=\"kanban-item-handle\"\n\t\t\tdata-stop-item-click\n\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\tclassName={cn(\n\t\t\t\t'cursor-grab shadow-none active:cursor-grabbing',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...(attributes as Record<string, unknown>)}\n\t\t\t{...(listeners as Record<string, unknown>)}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n});\n\nKanbanItemHandle.displayName = 'KanbanItemHandle';\n\n/**\n * Per-item actions menu (`⋯` trigger → popover with the actions\n * registered at the `<Kanban itemActions>` root). Place inside any\n * `<KanbanItem>` — typically in the card's top-right corner.\n *\n * The trigger marks itself with `data-stop-item-click` so opening the\n * menu doesn't fire the parent `onItemClick` callback.\n */\nexport function KanbanItemActions<T = unknown>({\n\tclassName,\n\ticon,\n\tariaLabel,\n}: KanbanItemActionsProps) {\n\tconst ctx = useKanbanContext<T>();\n\tconst itemCtx = useKanbanItemContext<T>();\n\tconst strings = useStrings(defaultKanbanStrings, undefined);\n\n\tconst item = itemCtx.item;\n\tconst rawActions = ctx.itemActions;\n\tconst actions = useMemo<ReadonlyArray<\n\t\tOmit<KanbanItemAction<T>, 'visible' | 'disabled'> & {\n\t\t\tvisible: boolean;\n\t\t\tdisabled: boolean;\n\t\t}\n\t>>(() => {\n\t\tif (!rawActions || item === null || item === undefined) return [];\n\t\tconst list = typeof rawActions === 'function' ? rawActions(item) : rawActions;\n\t\treturn list.flatMap((action) => {\n\t\t\tconst visible = typeof action.visible === 'function'\n\t\t\t\t? action.visible(item)\n\t\t\t\t: action.visible ?? true;\n\t\t\tif (!visible) return [];\n\t\t\tconst disabled = typeof action.disabled === 'function'\n\t\t\t\t? action.disabled(item)\n\t\t\t\t: action.disabled ?? false;\n\t\t\treturn [{ ...action, visible, disabled }];\n\t\t});\n\t}, [rawActions, item]);\n\n\tif (item === null || actions.length === 0) return null;\n\n\tconst menuActions: ActionMenuAction[] = actions.map((action) => ({\n\t\tid: action.id,\n\t\tlabel: action.label,\n\t\ticon: action.icon,\n\t\tdisabled: action.disabled,\n\t\ttone: action.tone,\n\t\tbuttonStyle: action.buttonStyle,\n\t\tonClick: () => action.onClick(item),\n\t}));\n\n\treturn (\n\t\t<span\n\t\t\tclassName=\"kanban-item-actions--component inline-flex\"\n\t\t\tdata-stop-item-click\n\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\tonPointerDown={(event) => event.stopPropagation()}\n\t\t>\n\t\t\t<ActionMenu\n\t\t\t\tactions={menuActions}\n\t\t\t\ticon={icon ?? undefined}\n\t\t\t\tsrText={ariaLabel ?? strings.itemActionsAria}\n\t\t\t\twidth=\"w-44\"\n\t\t\t\talign=\"end\"\n\t\t\t\tdensity=\"table\"\n\t\t\t\tbuttonProps={{\n\t\t\t\t\tclassName,\n\t\t\t\t\t'data-slot': 'kanban-item-actions-trigger',\n\t\t\t\t\t'data-stop-item-click': true,\n\t\t\t\t\t'aria-label': ariaLabel ?? strings.itemActionsAria,\n\t\t\t\t}}\n\t\t\t/>\n\t\t</span>\n\t);\n}\n\nKanbanItemActions.displayName = 'KanbanItemActions';\n\nexport function KanbanOverlay<T = unknown>({ className, render }: KanbanOverlayProps<T>) {\n\tconst { activeItem, activeId, findItem } = useKanbanContext<T>();\n\treturn (\n\t\t<DragOverlay>\n\t\t\t{activeId\n\t\t\t\t? render\n\t\t\t\t\t? render({\n\t\t\t\t\t\t\titem: activeItem,\n\t\t\t\t\t\t\tcolumnId: findItem(activeId)?.columnId ?? null,\n\t\t\t\t\t\t})\n\t\t\t\t\t: (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'kanban-overlay--component pointer-events-none rounded-radius border-2 border-dashed p-surface shadow-lg',\n\t\t\t\t\t\t\t\ttoneRecipes.primary.edge,\n\t\t\t\t\t\t\t\ttoneRecipes.primary.wash,\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"text-primary-accent\">{activeId}</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t: null}\n\t\t</DragOverlay>\n\t);\n}\n\nKanbanOverlay.displayName = 'KanbanOverlay';\n"],"mappings":"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"}