@mastra/playground-ui 61.0.0-alpha.6 → 61.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1062) hide show
  1. package/README.md +59 -0
  2. package/dist/{Avatar-DchBEEMO.cjs → Avatar-D_L-oAme.cjs} +2 -2
  3. package/dist/{Avatar-DchBEEMO.cjs.map → Avatar-D_L-oAme.cjs.map} +1 -1
  4. package/dist/{Avatar-Bg_EZRgZ.js → Avatar-DpRimnsu.js} +2 -2
  5. package/dist/{Avatar-Bg_EZRgZ.js.map → Avatar-DpRimnsu.js.map} +1 -1
  6. package/dist/{EmptyState-O089K_US.cjs → EmptyState-B6kP-dEp.cjs} +2 -2
  7. package/dist/{EmptyState-O089K_US.cjs.map → EmptyState-B6kP-dEp.cjs.map} +1 -1
  8. package/dist/{EmptyState-BI6cIolY.js → EmptyState-BQww74OL.js} +2 -2
  9. package/dist/{EmptyState-BI6cIolY.js.map → EmptyState-BQww74OL.js.map} +1 -1
  10. package/dist/{Header-BHqUw0qH.js → Header-BzSnNlwq.js} +2 -2
  11. package/dist/{Header-BHqUw0qH.js.map → Header-BzSnNlwq.js.map} +1 -1
  12. package/dist/{Header-DwcRfQuP.cjs → Header-Cy_BQ2Ht.cjs} +2 -2
  13. package/dist/{Header-DwcRfQuP.cjs.map → Header-Cy_BQ2Ht.cjs.map} +1 -1
  14. package/dist/{Notice-D4zc_oTj.cjs → Notice-CjQQjfK7.cjs} +2 -2
  15. package/dist/{Notice-D4zc_oTj.cjs.map → Notice-CjQQjfK7.cjs.map} +1 -1
  16. package/dist/{Notice-D4gMAkVI.js → Notice-CmFkTliT.js} +2 -2
  17. package/dist/{Notice-D4gMAkVI.js.map → Notice-CmFkTliT.js.map} +1 -1
  18. package/dist/Txt-CuuPO9Ho.js +20 -0
  19. package/dist/Txt-CuuPO9Ho.js.map +1 -0
  20. package/dist/Txt-DFPibRb3.cjs +22 -0
  21. package/dist/Txt-DFPibRb3.cjs.map +1 -0
  22. package/dist/{activity-ClKZR5_o.cjs → activity-C3F5Z6U2.cjs} +2 -2
  23. package/dist/{activity-ClKZR5_o.cjs.map → activity-C3F5Z6U2.cjs.map} +1 -1
  24. package/dist/{activity-D0SefV4r.js → activity-CREOMVXI.js} +2 -2
  25. package/dist/{activity-D0SefV4r.js.map → activity-CREOMVXI.js.map} +1 -1
  26. package/dist/{ask-user-DBb0lUh2.cjs → ask-user-BR6s4GTF.cjs} +2 -2
  27. package/dist/{ask-user-DBb0lUh2.cjs.map → ask-user-BR6s4GTF.cjs.map} +1 -1
  28. package/dist/{ask-user-CqCUiZRR.js → ask-user-DAm06wBo.js} +2 -2
  29. package/dist/{ask-user-CqCUiZRR.js.map → ask-user-DAm06wBo.js.map} +1 -1
  30. package/dist/{attachment-card-BcK3XoCH.cjs → attachment-card-B95kgvBs.cjs} +2 -2
  31. package/dist/{attachment-card-BcK3XoCH.cjs.map → attachment-card-B95kgvBs.cjs.map} +1 -1
  32. package/dist/{attachment-card-CbsWWaV5.js → attachment-card-Q-77luib.js} +2 -2
  33. package/dist/{attachment-card-CbsWWaV5.js.map → attachment-card-Q-77luib.js.map} +1 -1
  34. package/dist/{code-C8akLzcu.js → code-DAXWNzvf.js} +2 -2
  35. package/dist/code-DAXWNzvf.js.map +1 -0
  36. package/dist/{code-D_sH618U.cjs → code-Dcah35Gp.cjs} +2 -2
  37. package/dist/code-Dcah35Gp.cjs.map +1 -0
  38. package/dist/{code-block-BMmilLti.js → code-block-Cug9dlAp.js} +4 -4
  39. package/dist/{code-block-BMmilLti.js.map → code-block-Cug9dlAp.js.map} +1 -1
  40. package/dist/{code-block-Ipm4Kqvc.cjs → code-block-CxN4T0Xw.cjs} +4 -4
  41. package/dist/{code-block-Ipm4Kqvc.cjs.map → code-block-CxN4T0Xw.cjs.map} +1 -1
  42. package/dist/{code-editor-Btr1qm_5.cjs → code-editor-GtjlBrBg.cjs} +9 -8
  43. package/dist/code-editor-GtjlBrBg.cjs.map +1 -0
  44. package/dist/{code-editor-DzhYz1fH.js → code-editor-zKwlle-5.js} +9 -8
  45. package/dist/code-editor-zKwlle-5.js.map +1 -0
  46. package/dist/{combobox-NPw0vrSa.js → combobox-Dwf4U1CZ.js} +2 -2
  47. package/dist/{combobox-NPw0vrSa.js.map → combobox-Dwf4U1CZ.js.map} +1 -1
  48. package/dist/{combobox-BaVFPQ6X.cjs → combobox-anmnqGB0.cjs} +2 -2
  49. package/dist/{combobox-BaVFPQ6X.cjs.map → combobox-anmnqGB0.cjs.map} +1 -1
  50. package/dist/{command-D9tAe7E8.cjs → command-CkiAUyOY.cjs} +4 -3
  51. package/dist/{command-D9tAe7E8.cjs.map → command-CkiAUyOY.cjs.map} +1 -1
  52. package/dist/{command-DEG5XcoY.js → command-NDEyxdvS.js} +4 -3
  53. package/dist/{command-DEG5XcoY.js.map → command-NDEyxdvS.js.map} +1 -1
  54. package/dist/{comment-B1Cf9w4Z.js → comment-CLSjQ6TN.js} +10 -10
  55. package/dist/comment-CLSjQ6TN.js.map +1 -0
  56. package/dist/{comment-DnbibTOe.cjs → comment-DNHjp35d.cjs} +10 -10
  57. package/dist/comment-DNHjp35d.cjs.map +1 -0
  58. package/dist/components/AttachmentCard.cjs.js +1 -1
  59. package/dist/components/AttachmentCard.es.js +1 -1
  60. package/dist/components/Avatar.cjs.js +1 -1
  61. package/dist/components/Avatar.es.js +1 -1
  62. package/dist/components/ClampedText.cjs.js +1 -1
  63. package/dist/components/ClampedText.es.js +1 -1
  64. package/dist/components/Code.cjs.js +1 -1
  65. package/dist/components/Code.es.js +1 -1
  66. package/dist/components/CodeBlock.cjs.js +1 -1
  67. package/dist/components/CodeBlock.es.js +1 -1
  68. package/dist/components/CodeEditor.cjs.js +1 -1
  69. package/dist/components/CodeEditor.es.js +1 -1
  70. package/dist/components/Combobox.cjs.js +1 -1
  71. package/dist/components/Combobox.es.js +1 -1
  72. package/dist/components/Command.cjs.js +1 -1
  73. package/dist/components/Command.es.js +1 -1
  74. package/dist/components/CommandPalette.cjs.js +2 -2
  75. package/dist/components/CommandPalette.es.js +2 -2
  76. package/dist/components/Comment.cjs.js +2 -2
  77. package/dist/components/Comment.es.js +3 -3
  78. package/dist/components/DataCodeSection.cjs.js +1 -1
  79. package/dist/components/DataCodeSection.es.js +1 -1
  80. package/dist/components/DataDetailsPanel.cjs.js +2 -2
  81. package/dist/components/DataDetailsPanel.es.js +2 -2
  82. package/dist/components/DataList.cjs.js +6 -5
  83. package/dist/components/DataList.cjs.js.map +1 -1
  84. package/dist/components/DataList.es.js +5 -5
  85. package/dist/components/DataPanel.cjs.js +1 -1
  86. package/dist/components/DataPanel.es.js +1 -1
  87. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  88. package/dist/components/DateRangeTimeline.es.js +1 -1
  89. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  90. package/dist/components/DateTimeRangePicker.es.js +1 -1
  91. package/dist/components/EmptyState.cjs.js +1 -1
  92. package/dist/components/EmptyState.es.js +1 -1
  93. package/dist/components/Entity.cjs.js +3 -2
  94. package/dist/components/Entity.cjs.js.map +1 -1
  95. package/dist/components/Entity.es.js +3 -2
  96. package/dist/components/Entity.es.js.map +1 -1
  97. package/dist/components/EntityHeader.cjs.js +1 -1
  98. package/dist/components/EntityHeader.es.js +1 -1
  99. package/dist/components/Entry.cjs.js +1 -1
  100. package/dist/components/Entry.es.js +1 -1
  101. package/dist/components/EnvironmentVariablesEditor.cjs.js +3 -3
  102. package/dist/components/EnvironmentVariablesEditor.es.js +3 -3
  103. package/dist/components/FileDropBackdrop.cjs.js +1 -1
  104. package/dist/components/FileDropBackdrop.es.js +1 -1
  105. package/dist/components/FilterBar.cjs.js +1 -1
  106. package/dist/components/FilterBar.es.js +1 -1
  107. package/dist/components/FormFieldBlocks.cjs.js +1 -1
  108. package/dist/components/FormFieldBlocks.es.js +1 -1
  109. package/dist/components/Header.cjs.js +1 -1
  110. package/dist/components/Header.es.js +1 -1
  111. package/dist/components/HorizontalBars.cjs.js +1 -1
  112. package/dist/components/HorizontalBars.es.js +1 -1
  113. package/dist/components/KeyValueList.cjs.js +1 -1
  114. package/dist/components/KeyValueList.es.js +1 -1
  115. package/dist/components/LogsDataList.cjs.js +2 -4
  116. package/dist/components/LogsDataList.cjs.js.map +1 -1
  117. package/dist/components/LogsDataList.es.js +2 -4
  118. package/dist/components/LogsDataList.es.js.map +1 -1
  119. package/dist/components/MainHeader.cjs.js +1 -1
  120. package/dist/components/MainHeader.es.js +1 -1
  121. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  122. package/dist/components/MarkdownRenderer.es.js +1 -1
  123. package/dist/components/Message.cjs.js +1 -1
  124. package/dist/components/Message.es.js +2 -2
  125. package/dist/components/MetricsCard.cjs.js +1 -1
  126. package/dist/components/MetricsCard.es.js +1 -1
  127. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  128. package/dist/components/MetricsKpiCard.es.js +1 -1
  129. package/dist/components/MetricsLineChart.cjs.js +2 -2
  130. package/dist/components/MetricsLineChart.es.js +2 -2
  131. package/dist/components/MetricsStackedBarChart.cjs.js +1 -1
  132. package/dist/components/MetricsStackedBarChart.es.js +1 -1
  133. package/dist/components/Notice.cjs.js +1 -1
  134. package/dist/components/Notice.es.js +1 -1
  135. package/dist/components/PageHeader.cjs.js +1 -1
  136. package/dist/components/PageHeader.es.js +1 -1
  137. package/dist/components/PageLayout.cjs.js +1 -1
  138. package/dist/components/PageLayout.es.js +1 -1
  139. package/dist/components/PropertyFilter.cjs.js +2 -2
  140. package/dist/components/PropertyFilter.es.js +2 -2
  141. package/dist/components/RuleBuilder.cjs.js +6 -6
  142. package/dist/components/RuleBuilder.cjs.js.map +1 -1
  143. package/dist/components/RuleBuilder.es.js +6 -6
  144. package/dist/components/RuleBuilder.es.js.map +1 -1
  145. package/dist/components/SavedViews.cjs.js +1 -1
  146. package/dist/components/SavedViews.es.js +1 -1
  147. package/dist/components/ScatterPlotChart.cjs.js +1 -1
  148. package/dist/components/ScatterPlotChart.es.js +1 -1
  149. package/dist/components/Section.cjs.js +1 -1
  150. package/dist/components/Section.es.js +1 -1
  151. package/dist/components/SectionCard.cjs.js +1 -1
  152. package/dist/components/SectionCard.es.js +1 -1
  153. package/dist/components/SideDialog.cjs.js +1 -1
  154. package/dist/components/SideDialog.es.js +1 -1
  155. package/dist/components/Sidebar.cjs.js +1641 -0
  156. package/dist/components/Sidebar.cjs.js.map +1 -0
  157. package/dist/components/Sidebar.d.ts +2 -0
  158. package/dist/components/Sidebar.es.js +1615 -0
  159. package/dist/components/Sidebar.es.js.map +1 -0
  160. package/dist/components/StatusIndicators.cjs.js +1 -1
  161. package/dist/components/StatusIndicators.es.js +1 -1
  162. package/dist/components/Steps.cjs.js +1 -1
  163. package/dist/components/Steps.es.js +1 -1
  164. package/dist/components/Table.cjs.js +1 -1
  165. package/dist/components/Table.es.js +1 -1
  166. package/dist/components/Tabs.cjs.js +2 -2
  167. package/dist/components/Tabs.es.js +2 -2
  168. package/dist/components/Text.cjs.js +1 -1
  169. package/dist/components/Text.es.js +1 -1
  170. package/dist/components/ThinkingLevel.cjs.js +1 -1
  171. package/dist/components/ThinkingLevel.es.js +1 -1
  172. package/dist/components/ThreadList.cjs.js +1 -1
  173. package/dist/components/ThreadList.es.js +1 -1
  174. package/dist/components/ThreadRail.cjs.js +1 -1
  175. package/dist/components/ThreadRail.es.js +1 -1
  176. package/dist/components/TokenBudget.cjs.js +4 -4
  177. package/dist/components/TokenBudget.cjs.js.map +1 -1
  178. package/dist/components/TokenBudget.es.js +4 -4
  179. package/dist/components/TokenBudget.es.js.map +1 -1
  180. package/dist/components/Truncate.cjs.js +1 -1
  181. package/dist/components/Truncate.es.js +1 -1
  182. package/dist/components/Txt.cjs.js +1 -1
  183. package/dist/components/Txt.es.js +1 -1
  184. package/dist/components/Workflow.cjs.js +5 -5
  185. package/dist/components/Workflow.es.js +5 -5
  186. package/dist/components/ai/activity.cjs.js +4 -4
  187. package/dist/components/ai/activity.es.js +4 -4
  188. package/dist/components/ai/ask-user.cjs.js +1 -1
  189. package/dist/components/ai/ask-user.es.js +1 -1
  190. package/dist/components/ai/plan.cjs.js +1 -1
  191. package/dist/components/ai/plan.es.js +1 -1
  192. package/dist/components/ai/task-list.cjs.js +1 -1
  193. package/dist/components/ai/task-list.es.js +1 -1
  194. package/dist/components/ai/tool-approval.cjs.js +2 -1
  195. package/dist/components/ai/tool-approval.cjs.js.map +1 -1
  196. package/dist/components/ai/tool-approval.es.js +1 -1
  197. package/dist/components/ai/tool-call.cjs.js +2 -2
  198. package/dist/components/ai/tool-call.es.js +2 -2
  199. package/dist/components/ai/transcript-divider.cjs.js +1 -1
  200. package/dist/components/ai/transcript-divider.es.js +1 -1
  201. package/dist/{data-code-section-B5kljGaH.cjs → data-code-section-BNQkWe4H.cjs} +2 -2
  202. package/dist/{data-code-section-B5kljGaH.cjs.map → data-code-section-BNQkWe4H.cjs.map} +1 -1
  203. package/dist/{data-code-section-CW9TU70O.js → data-code-section-CU2XLh4d.js} +2 -2
  204. package/dist/{data-code-section-CW9TU70O.js.map → data-code-section-CU2XLh4d.js.map} +1 -1
  205. package/dist/{data-list-BHtjZ528.js → data-list-B6DT-u-0.js} +21 -6
  206. package/dist/data-list-B6DT-u-0.js.map +1 -0
  207. package/dist/{data-list-TouUI4pb.cjs → data-list-DQgIgmjy.cjs} +20 -5
  208. package/dist/data-list-DQgIgmjy.cjs.map +1 -0
  209. package/dist/{data-list-skeleton-BqihjHu8.cjs → data-list-skeleton-DdWv6VN-.cjs} +10 -6
  210. package/dist/data-list-skeleton-DdWv6VN-.cjs.map +1 -0
  211. package/dist/{data-list-skeleton-H8Zpph6_.js → data-list-skeleton-DuK0aDVr.js} +10 -7
  212. package/dist/data-list-skeleton-DuK0aDVr.js.map +1 -0
  213. package/dist/{data-list-spacer-D7UBH1uv.js → data-list-spacer-C0tMRgfC.js} +2 -2
  214. package/dist/{data-list-spacer-D7UBH1uv.js.map → data-list-spacer-C0tMRgfC.js.map} +1 -1
  215. package/dist/{data-list-spacer-CtooAPJP.cjs → data-list-spacer-_GgQY2d4.cjs} +2 -2
  216. package/dist/{data-list-spacer-CtooAPJP.cjs.map → data-list-spacer-_GgQY2d4.cjs.map} +1 -1
  217. package/dist/{data-panel-B5flRCQM.js → data-panel-Bzed2B75.js} +3 -3
  218. package/dist/{data-panel-B5flRCQM.js.map → data-panel-Bzed2B75.js.map} +1 -1
  219. package/dist/{data-panel-Ckjs7Kwo.cjs → data-panel-b48tWgzs.cjs} +3 -3
  220. package/dist/{data-panel-Ckjs7Kwo.cjs.map → data-panel-b48tWgzs.cjs.map} +1 -1
  221. package/dist/{date-time-range-picker-DzPLKJol.js → date-time-range-picker-BqlAiuYW.js} +2 -2
  222. package/dist/{date-time-range-picker-DzPLKJol.js.map → date-time-range-picker-BqlAiuYW.js.map} +1 -1
  223. package/dist/{date-time-range-picker-BbX8F_LY.cjs → date-time-range-picker-CvzC4nOt.cjs} +2 -2
  224. package/dist/{date-time-range-picker-BbX8F_LY.cjs.map → date-time-range-picker-CvzC4nOt.cjs.map} +1 -1
  225. package/dist/domains/auth/components/permission-denied.cjs.js +1 -1
  226. package/dist/domains/auth/components/permission-denied.es.js +1 -1
  227. package/dist/domains/auth/components/session-expired.cjs.js +1 -1
  228. package/dist/domains/auth/components/session-expired.es.js +1 -1
  229. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +11 -11
  230. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js.map +1 -1
  231. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +11 -11
  232. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js.map +1 -1
  233. package/dist/domains/chat/attachments/composer-attachment-context.cjs.js +10 -0
  234. package/dist/domains/chat/attachments/composer-attachment-context.cjs.js.map +1 -0
  235. package/dist/domains/chat/attachments/composer-attachment-context.d.ts +2 -0
  236. package/dist/domains/chat/attachments/composer-attachment-context.es.js +6 -0
  237. package/dist/domains/chat/attachments/composer-attachment-context.es.js.map +1 -0
  238. package/dist/domains/chat/attachments/composer-attachment-entry.cjs.js +35 -0
  239. package/dist/domains/chat/attachments/composer-attachment-entry.cjs.js.map +1 -0
  240. package/dist/domains/chat/attachments/composer-attachment-entry.d.ts +2 -0
  241. package/dist/domains/chat/attachments/composer-attachment-entry.es.js +31 -0
  242. package/dist/domains/chat/attachments/composer-attachment-entry.es.js.map +1 -0
  243. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +4 -3
  244. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js.map +1 -1
  245. package/dist/domains/chat/attachments/composer-attachment-list.es.js +4 -3
  246. package/dist/domains/chat/attachments/composer-attachment-list.es.js.map +1 -1
  247. package/dist/domains/chat/attachments/composer-attachment.cjs.js +16 -19
  248. package/dist/domains/chat/attachments/composer-attachment.cjs.js.map +1 -1
  249. package/dist/domains/chat/attachments/composer-attachment.es.js +17 -20
  250. package/dist/domains/chat/attachments/composer-attachment.es.js.map +1 -1
  251. package/dist/domains/chat/attachments/message-attachment.cjs.js +1 -1
  252. package/dist/domains/chat/attachments/message-attachment.es.js +1 -1
  253. package/dist/domains/chat/attachments/message-image-attachment.cjs.js +1 -1
  254. package/dist/domains/chat/attachments/message-image-attachment.es.js +1 -1
  255. package/dist/domains/chat/components/badge-wrapper.cjs.js +4 -2
  256. package/dist/domains/chat/components/badge-wrapper.cjs.js.map +1 -1
  257. package/dist/domains/chat/components/badge-wrapper.es.js +4 -2
  258. package/dist/domains/chat/components/badge-wrapper.es.js.map +1 -1
  259. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +4 -4
  260. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js.map +1 -1
  261. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +4 -4
  262. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js.map +1 -1
  263. package/dist/domains/chat/components/section-label.cjs.js +1 -1
  264. package/dist/domains/chat/components/section-label.es.js +1 -1
  265. package/dist/domains/chat/context/tool-call-context.cjs.js +4 -0
  266. package/dist/domains/chat/context/tool-call-context.cjs.js.map +1 -1
  267. package/dist/domains/chat/context/tool-call-context.es.js +4 -1
  268. package/dist/domains/chat/context/tool-call-context.es.js.map +1 -1
  269. package/dist/domains/chat/messages/assistant-message-actions.cjs.js +1 -1
  270. package/dist/domains/chat/messages/assistant-message-actions.es.js +1 -1
  271. package/dist/domains/chat/messages/dataset-save-action.cjs.js +5 -4
  272. package/dist/domains/chat/messages/dataset-save-action.cjs.js.map +1 -1
  273. package/dist/domains/chat/messages/dataset-save-action.es.js +5 -4
  274. package/dist/domains/chat/messages/dataset-save-action.es.js.map +1 -1
  275. package/dist/domains/chat/messages/message-row.cjs.js +5 -5
  276. package/dist/domains/chat/messages/message-row.es.js +5 -5
  277. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  278. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  279. package/dist/domains/chat/messages/renderers/message-text.cjs.js +2 -2
  280. package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
  281. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  282. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  283. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
  284. package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
  285. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  286. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  287. package/dist/domains/chat/messages/skill-message.cjs.js +3 -3
  288. package/dist/domains/chat/messages/skill-message.es.js +3 -3
  289. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  290. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  291. package/dist/domains/chat/messages/tripwire-notice.cjs.js +16 -8
  292. package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
  293. package/dist/domains/chat/messages/tripwire-notice.es.js +16 -8
  294. package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
  295. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  296. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  297. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +3 -4
  298. package/dist/domains/chat/tools/badges/agent-badge.cjs.js.map +1 -1
  299. package/dist/domains/chat/tools/badges/agent-badge.es.js +3 -4
  300. package/dist/domains/chat/tools/badges/agent-badge.es.js.map +1 -1
  301. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  302. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  303. package/dist/domains/chat/tools/badges/awaits-tool-approval.cjs.js.map +1 -1
  304. package/dist/domains/chat/tools/badges/awaits-tool-approval.es.js.map +1 -1
  305. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +3 -3
  306. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js.map +1 -1
  307. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +3 -3
  308. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js.map +1 -1
  309. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +26 -33
  310. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js.map +1 -1
  311. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +21 -28
  312. package/dist/domains/chat/tools/badges/code-mode-badge.es.js.map +1 -1
  313. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +16 -26
  314. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js.map +1 -1
  315. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +16 -26
  316. package/dist/domains/chat/tools/badges/file-tree-badge.es.js.map +1 -1
  317. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
  318. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
  319. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +16 -10
  320. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js.map +1 -1
  321. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +16 -10
  322. package/dist/domains/chat/tools/badges/observation-marker-details.es.js.map +1 -1
  323. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +28 -16
  324. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js.map +1 -1
  325. package/dist/domains/chat/tools/badges/observation-renderer.es.js +28 -16
  326. package/dist/domains/chat/tools/badges/observation-renderer.es.js.map +1 -1
  327. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +16 -26
  328. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js.map +1 -1
  329. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +16 -26
  330. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js.map +1 -1
  331. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +69 -0
  332. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js.map +1 -0
  333. package/dist/domains/chat/tools/badges/{tool-approval-buttons.d.ts → tool-approval-badge.d.ts} +1 -1
  334. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +65 -0
  335. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js.map +1 -0
  336. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +21 -21
  337. package/dist/domains/chat/tools/badges/tool-badge.cjs.js.map +1 -1
  338. package/dist/domains/chat/tools/badges/tool-badge.es.js +21 -21
  339. package/dist/domains/chat/tools/badges/tool-badge.es.js.map +1 -1
  340. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +13 -17
  341. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  342. package/dist/domains/chat/tools/badges/workflow-badge.es.js +13 -17
  343. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  344. package/dist/domains/chat/tools/badges/workspace-link.cjs.js +1 -1
  345. package/dist/domains/chat/tools/badges/workspace-link.es.js +1 -1
  346. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +2 -2
  347. package/dist/domains/chat/tools/submit-plan-tool.es.js +2 -2
  348. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  349. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  350. package/dist/domains/chat.cjs.js +1 -0
  351. package/dist/domains/chat.cjs.js.map +1 -1
  352. package/dist/domains/chat.es.js +1 -1
  353. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +5 -4
  354. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js.map +1 -1
  355. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +5 -4
  356. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js.map +1 -1
  357. package/dist/domains/logs/components/log-data-panel.cjs.js +2 -2
  358. package/dist/domains/logs/components/log-data-panel.es.js +2 -2
  359. package/dist/domains/logs/components/logs-error-content.cjs.js +1 -1
  360. package/dist/domains/logs/components/logs-error-content.es.js +1 -1
  361. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  362. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  363. package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
  364. package/dist/domains/logs/components/no-logs-info.es.js +1 -1
  365. package/dist/domains/mcps/components/mcp-app-tool-result.cjs.js +2 -1
  366. package/dist/domains/mcps/components/mcp-app-tool-result.cjs.js.map +1 -1
  367. package/dist/domains/mcps/components/mcp-app-tool-result.es.js +2 -1
  368. package/dist/domains/mcps/components/mcp-app-tool-result.es.js.map +1 -1
  369. package/dist/domains/memory/components/flame-graph.cjs.js +7 -7
  370. package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
  371. package/dist/domains/memory/components/flame-graph.es.js +7 -7
  372. package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
  373. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  374. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  375. package/dist/domains/memory/components/observation-detail-view.cjs.js +7 -6
  376. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  377. package/dist/domains/memory/components/observation-detail-view.es.js +7 -6
  378. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  379. package/dist/domains/memory/components/thread-context-progress.cjs.js +4 -3
  380. package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
  381. package/dist/domains/memory/components/thread-context-progress.es.js +4 -3
  382. package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
  383. package/dist/domains/metrics/components/bar-list.cjs.js +1 -1
  384. package/dist/domains/metrics/components/bar-list.es.js +1 -1
  385. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  386. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  387. package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
  388. package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
  389. package/dist/domains/metrics/components/latency-card-view.cjs.js +5 -5
  390. package/dist/domains/metrics/components/latency-card-view.es.js +5 -5
  391. package/dist/domains/metrics/components/memory-card-view.cjs.js +4 -4
  392. package/dist/domains/metrics/components/memory-card-view.es.js +4 -4
  393. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
  394. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
  395. package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -5
  396. package/dist/domains/metrics/components/scores-card-view.es.js +5 -5
  397. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +4 -4
  398. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +4 -4
  399. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +5 -5
  400. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +5 -5
  401. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +4 -4
  402. package/dist/domains/metrics/components/traces-volume-card-view.es.js +4 -4
  403. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +7 -6
  404. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js.map +1 -1
  405. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +7 -6
  406. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js.map +1 -1
  407. package/dist/domains/observability/components/trace-as-item-dialog.cjs.js +1 -1
  408. package/dist/domains/observability/components/trace-as-item-dialog.es.js +1 -1
  409. package/dist/domains/scores/components/score-as-item-dialog.cjs.js +1 -1
  410. package/dist/domains/scores/components/score-as-item-dialog.es.js +1 -1
  411. package/dist/domains/scores/components/score-data-panel.cjs.js +17 -6
  412. package/dist/domains/scores/components/score-data-panel.cjs.js.map +1 -1
  413. package/dist/domains/scores/components/score-data-panel.es.js +17 -6
  414. package/dist/domains/scores/components/score-data-panel.es.js.map +1 -1
  415. package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
  416. package/dist/domains/scores/components/span-scoring.es.js +3 -3
  417. package/dist/domains/scores/components/trace-scores-tab.cjs.js +5 -6
  418. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  419. package/dist/domains/scores/components/trace-scores-tab.es.js +5 -6
  420. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  421. package/dist/domains/traces/components/feedback-thread.cjs.js +3 -3
  422. package/dist/domains/traces/components/feedback-thread.es.js +3 -3
  423. package/dist/domains/traces/components/no-traces-info.cjs.js +1 -1
  424. package/dist/domains/traces/components/no-traces-info.es.js +1 -1
  425. package/dist/domains/traces/components/span-data-panel-view.cjs.js +7 -5
  426. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  427. package/dist/domains/traces/components/span-data-panel-view.es.js +7 -5
  428. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  429. package/dist/domains/traces/components/span-details-view.cjs.js +3 -1
  430. package/dist/domains/traces/components/span-details-view.cjs.js.map +1 -1
  431. package/dist/domains/traces/components/span-details-view.es.js +3 -1
  432. package/dist/domains/traces/components/span-details-view.es.js.map +1 -1
  433. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +2 -2
  434. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +2 -2
  435. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  436. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  437. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +5 -4
  438. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
  439. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +5 -4
  440. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
  441. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +4 -3
  442. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +1 -1
  443. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +4 -3
  444. package/dist/domains/traces/components/span-payload/span-payload-json.es.js.map +1 -1
  445. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +3 -3
  446. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +3 -3
  447. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +3 -2
  448. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js.map +1 -1
  449. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +3 -2
  450. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js.map +1 -1
  451. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  452. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  453. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
  454. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
  455. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +5 -5
  456. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js.map +1 -1
  457. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +5 -5
  458. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js.map +1 -1
  459. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  460. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  461. package/dist/domains/traces/components/span-timeline-row.cjs.js +11 -8
  462. package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
  463. package/dist/domains/traces/components/span-timeline-row.es.js +11 -8
  464. package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
  465. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +2 -1
  466. package/dist/domains/traces/components/span-timing-hover-card.cjs.js.map +1 -1
  467. package/dist/domains/traces/components/span-timing-hover-card.es.js +2 -1
  468. package/dist/domains/traces/components/span-timing-hover-card.es.js.map +1 -1
  469. package/dist/domains/traces/components/span-token-usage.cjs.js +1 -1
  470. package/dist/domains/traces/components/span-token-usage.es.js +1 -1
  471. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  472. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  473. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +2 -2
  474. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +2 -2
  475. package/dist/domains/traces/components/thread-trace/thread-trace-root.cjs.js +1 -10
  476. package/dist/domains/traces/components/thread-trace/thread-trace-root.cjs.js.map +1 -1
  477. package/dist/domains/traces/components/thread-trace/thread-trace-root.es.js +1 -10
  478. package/dist/domains/traces/components/thread-trace/thread-trace-root.es.js.map +1 -1
  479. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +1 -1
  480. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +1 -1
  481. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +1 -1
  482. package/dist/domains/traces/components/thread-view-by-trace.es.js +1 -1
  483. package/dist/domains/traces/components/timeline-name-col.cjs.js +11 -7
  484. package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
  485. package/dist/domains/traces/components/timeline-name-col.es.js +11 -7
  486. package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
  487. package/dist/domains/traces/components/timeline-timing-col.cjs.js +4 -4
  488. package/dist/domains/traces/components/timeline-timing-col.cjs.js.map +1 -1
  489. package/dist/domains/traces/components/timeline-timing-col.es.js +4 -4
  490. package/dist/domains/traces/components/timeline-timing-col.es.js.map +1 -1
  491. package/dist/domains/traces/components/trace-columns-menu.cjs.js +2 -2
  492. package/dist/domains/traces/components/trace-columns-menu.es.js +2 -2
  493. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +11 -5
  494. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  495. package/dist/domains/traces/components/trace-data-panel-view.es.js +11 -5
  496. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  497. package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -1
  498. package/dist/domains/traces/components/trace-data-panel.es.js +1 -1
  499. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  500. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  501. package/dist/domains/traces/components/trace-span-panel.cjs.js +2 -0
  502. package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
  503. package/dist/domains/traces/components/trace-span-panel.es.js +2 -0
  504. package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
  505. package/dist/domains/traces/components/trace-span-timeline.cjs.js +6 -2
  506. package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
  507. package/dist/domains/traces/components/trace-span-timeline.es.js +6 -2
  508. package/dist/domains/traces/components/trace-span-timeline.es.js.map +1 -1
  509. package/dist/domains/traces/components/trace-span-tree.cjs.js +1 -1
  510. package/dist/domains/traces/components/trace-span-tree.es.js +1 -1
  511. package/dist/domains/traces/components/trace-summary-description.cjs.js +2 -2
  512. package/dist/domains/traces/components/trace-summary-description.es.js +2 -2
  513. package/dist/domains/traces/components/trace-thread-item-view.cjs.js +1 -1
  514. package/dist/domains/traces/components/trace-thread-item-view.es.js +1 -1
  515. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  516. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  517. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +1 -1
  518. package/dist/domains/traces/components/trace-time-range-chip.es.js +1 -1
  519. package/dist/domains/traces/components/traces-error-content.cjs.js +1 -1
  520. package/dist/domains/traces/components/traces-error-content.es.js +1 -1
  521. package/dist/domains/traces/components/traces-list-view.cjs.js +6 -15
  522. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  523. package/dist/domains/traces/components/traces-list-view.es.js +8 -17
  524. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  525. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -3
  526. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  527. package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -3
  528. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  529. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +2 -9
  530. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js.map +1 -1
  531. package/dist/domains/traces/hooks/use-trace-url-state.es.js +2 -9
  532. package/dist/domains/traces/hooks/use-trace-url-state.es.js.map +1 -1
  533. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  534. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  535. package/dist/domains/workflows/components/workflow-entity-header.cjs.js +1 -1
  536. package/dist/domains/workflows/components/workflow-entity-header.es.js +1 -1
  537. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +4 -4
  538. package/dist/domains/workflows/components/workflow-step-detail.es.js +4 -4
  539. package/dist/domains/workflows/components/workflows-list/no-workflows-info.cjs.js +1 -1
  540. package/dist/domains/workflows/components/workflows-list/no-workflows-info.es.js +1 -1
  541. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +5 -5
  542. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js.map +1 -1
  543. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +5 -5
  544. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js.map +1 -1
  545. package/dist/domains/workflows/runs/workflow-run-details.cjs.js +1 -1
  546. package/dist/domains/workflows/runs/workflow-run-details.es.js +1 -1
  547. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +13 -3
  548. package/dist/domains/workflows/runs/workflow-run-list.cjs.js.map +1 -1
  549. package/dist/domains/workflows/runs/workflow-run-list.es.js +13 -3
  550. package/dist/domains/workflows/runs/workflow-run-list.es.js.map +1 -1
  551. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  552. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  553. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +2 -2
  554. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +2 -2
  555. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  556. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  557. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +2 -2
  558. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +2 -2
  559. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +2 -2
  560. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +2 -2
  561. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  562. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  563. package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
  564. package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
  565. package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +10 -3
  566. package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js.map +1 -1
  567. package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +10 -3
  568. package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js.map +1 -1
  569. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
  570. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
  571. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +2 -2
  572. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +2 -2
  573. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
  574. package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
  575. package/dist/domains/workflows/workflow/workflow-input-type-toggle.cjs.js +1 -1
  576. package/dist/domains/workflows/workflow/workflow-input-type-toggle.es.js +1 -1
  577. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  578. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
  579. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +3 -3
  580. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +3 -3
  581. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +4 -4
  582. package/dist/domains/workflows/workflow/workflow-run-data.es.js +4 -4
  583. package/dist/domains/workflows/workflow/workflow-run-error.cjs.js +1 -1
  584. package/dist/domains/workflows/workflow/workflow-run-error.es.js +1 -1
  585. package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +2 -2
  586. package/dist/domains/workflows/workflow/workflow-run-header.cjs.js.map +1 -1
  587. package/dist/domains/workflows/workflow/workflow-run-header.es.js +2 -2
  588. package/dist/domains/workflows/workflow/workflow-run-header.es.js.map +1 -1
  589. package/dist/domains/workflows/workflow/workflow-status.cjs.js +2 -2
  590. package/dist/domains/workflows/workflow/workflow-status.es.js +2 -2
  591. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +1 -1
  592. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +1 -1
  593. package/dist/domains/workflows/workflow/workflow-steps-status.cjs.js +1 -1
  594. package/dist/domains/workflows/workflow/workflow-steps-status.es.js +1 -1
  595. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
  596. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
  597. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +3 -3
  598. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +3 -3
  599. package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js +7 -6
  600. package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js.map +1 -1
  601. package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +7 -6
  602. package/dist/domains/workflows/workflow/workflow-timeline-row.es.js.map +1 -1
  603. package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
  604. package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
  605. package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +1 -1
  606. package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +1 -1
  607. package/dist/domains/workflows/workflow/workflow-trigger.cjs.js +2 -2
  608. package/dist/domains/workflows/workflow/workflow-trigger.cjs.js.map +1 -1
  609. package/dist/domains/workflows/workflow/workflow-trigger.es.js +2 -2
  610. package/dist/domains/workflows/workflow/workflow-trigger.es.js.map +1 -1
  611. package/dist/domains/workspace/components/workspace-active-file.cjs.js +2 -2
  612. package/dist/domains/workspace/components/workspace-active-file.es.js +2 -2
  613. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +18 -13
  614. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js.map +1 -1
  615. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +18 -13
  616. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js.map +1 -1
  617. package/dist/domains/workspace/components/workspace-error.cjs.js +1 -1
  618. package/dist/domains/workspace/components/workspace-error.es.js +1 -1
  619. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
  620. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
  621. package/dist/domains/workspace/components/workspace-parts.cjs.js +1 -1
  622. package/dist/domains/workspace/components/workspace-parts.es.js +1 -1
  623. package/dist/domains/workspace/components/workspace-search.cjs.js +6 -5
  624. package/dist/domains/workspace/components/workspace-search.cjs.js.map +1 -1
  625. package/dist/domains/workspace/components/workspace-search.es.js +6 -5
  626. package/dist/domains/workspace/components/workspace-search.es.js.map +1 -1
  627. package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
  628. package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
  629. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +8 -7
  630. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js.map +1 -1
  631. package/dist/ee/signals/components/entity-index-compact-grid.es.js +8 -7
  632. package/dist/ee/signals/components/entity-index-compact-grid.es.js.map +1 -1
  633. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -3
  634. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  635. package/dist/ee/signals/components/entity-index-list.es.js +1 -3
  636. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  637. package/dist/ee/signals/components/signals-empty-state.cjs.js +21 -23
  638. package/dist/ee/signals/components/signals-empty-state.cjs.js.map +1 -1
  639. package/dist/ee/signals/components/signals-empty-state.es.js +21 -23
  640. package/dist/ee/signals/components/signals-empty-state.es.js.map +1 -1
  641. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +1 -1
  642. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +1 -1
  643. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -3
  644. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  645. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -3
  646. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  647. package/dist/ee/signals/examples-pager.cjs.js +2 -2
  648. package/dist/ee/signals/examples-pager.cjs.js.map +1 -1
  649. package/dist/ee/signals/examples-pager.es.js +2 -2
  650. package/dist/ee/signals/examples-pager.es.js.map +1 -1
  651. package/dist/ee/signals/flow-card.cjs.js +7 -16
  652. package/dist/ee/signals/flow-card.cjs.js.map +1 -1
  653. package/dist/ee/signals/flow-card.es.js +7 -16
  654. package/dist/ee/signals/flow-card.es.js.map +1 -1
  655. package/dist/ee/signals/lifeline-point.cjs.js +1 -1
  656. package/dist/ee/signals/lifeline-point.cjs.js.map +1 -1
  657. package/dist/ee/signals/lifeline-point.es.js +1 -1
  658. package/dist/ee/signals/lifeline-point.es.js.map +1 -1
  659. package/dist/ee/signals/lifeline-row.cjs.js +2 -2
  660. package/dist/ee/signals/lifeline-row.cjs.js.map +1 -1
  661. package/dist/ee/signals/lifeline-row.es.js +2 -2
  662. package/dist/ee/signals/lifeline-row.es.js.map +1 -1
  663. package/dist/ee/signals/noise-detail-panel.cjs.js +8 -29
  664. package/dist/ee/signals/noise-detail-panel.cjs.js.map +1 -1
  665. package/dist/ee/signals/noise-detail-panel.es.js +8 -29
  666. package/dist/ee/signals/noise-detail-panel.es.js.map +1 -1
  667. package/dist/ee/signals/sankey-signals.cjs.js +4 -4
  668. package/dist/ee/signals/sankey-signals.cjs.js.map +1 -1
  669. package/dist/ee/signals/sankey-signals.es.js +4 -4
  670. package/dist/ee/signals/sankey-signals.es.js.map +1 -1
  671. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
  672. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
  673. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +5 -5
  674. package/dist/ee/signals/settings/trace-signal-settings.cjs.js.map +1 -1
  675. package/dist/ee/signals/settings/trace-signal-settings.es.js +5 -5
  676. package/dist/ee/signals/settings/trace-signal-settings.es.js.map +1 -1
  677. package/dist/ee/signals/signal-delta-column.cjs.js +5 -7
  678. package/dist/ee/signals/signal-delta-column.cjs.js.map +1 -1
  679. package/dist/ee/signals/signal-delta-column.es.js +5 -7
  680. package/dist/ee/signals/signal-delta-column.es.js.map +1 -1
  681. package/dist/ee/signals/signal-lifelines.cjs.js +3 -3
  682. package/dist/ee/signals/signal-lifelines.cjs.js.map +1 -1
  683. package/dist/ee/signals/signal-lifelines.es.js +3 -3
  684. package/dist/ee/signals/signal-lifelines.es.js.map +1 -1
  685. package/dist/ee/signals/signals-error-state.cjs.js +1 -1
  686. package/dist/ee/signals/signals-error-state.es.js +1 -1
  687. package/dist/ee/signals/snapshot-timeline.cjs.js +2 -3
  688. package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -1
  689. package/dist/ee/signals/snapshot-timeline.es.js +2 -3
  690. package/dist/ee/signals/snapshot-timeline.es.js.map +1 -1
  691. package/dist/ee/signals/sortable-signal-headers.cjs.js +3 -1
  692. package/dist/ee/signals/sortable-signal-headers.cjs.js.map +1 -1
  693. package/dist/ee/signals/sortable-signal-headers.es.js +3 -1
  694. package/dist/ee/signals/sortable-signal-headers.es.js.map +1 -1
  695. package/dist/ee/signals/theme-compare.cjs.js +1 -3
  696. package/dist/ee/signals/theme-compare.cjs.js.map +1 -1
  697. package/dist/ee/signals/theme-compare.es.js +1 -3
  698. package/dist/ee/signals/theme-compare.es.js.map +1 -1
  699. package/dist/ee/signals/theme-detail-panel.cjs.js +9 -43
  700. package/dist/ee/signals/theme-detail-panel.cjs.js.map +1 -1
  701. package/dist/ee/signals/theme-detail-panel.es.js +9 -43
  702. package/dist/ee/signals/theme-detail-panel.es.js.map +1 -1
  703. package/dist/ee/signals/theme-filter-banner.cjs.js +4 -4
  704. package/dist/ee/signals/theme-filter-banner.cjs.js.map +1 -1
  705. package/dist/ee/signals/theme-filter-banner.es.js +4 -4
  706. package/dist/ee/signals/theme-filter-banner.es.js.map +1 -1
  707. package/dist/ee/signals/theme-lifelines.cjs.js +2 -2
  708. package/dist/ee/signals/theme-lifelines.cjs.js.map +1 -1
  709. package/dist/ee/signals/theme-lifelines.es.js +2 -2
  710. package/dist/ee/signals/theme-lifelines.es.js.map +1 -1
  711. package/dist/ee/signals/theme-trend-chart.cjs.js +4 -3
  712. package/dist/ee/signals/theme-trend-chart.cjs.js.map +1 -1
  713. package/dist/ee/signals/theme-trend-chart.es.js +4 -3
  714. package/dist/ee/signals/theme-trend-chart.es.js.map +1 -1
  715. package/dist/ee/signals/trace-insight-view.cjs.js +15 -37
  716. package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -1
  717. package/dist/ee/signals/trace-insight-view.es.js +15 -37
  718. package/dist/ee/signals/trace-insight-view.es.js.map +1 -1
  719. package/dist/ee/signals/trace-intelligence-explainer.cjs.js +3 -4
  720. package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -1
  721. package/dist/ee/signals/trace-intelligence-explainer.es.js +3 -4
  722. package/dist/ee/signals/trace-intelligence-explainer.es.js.map +1 -1
  723. package/dist/ee/signals/view-mode-tab.cjs.js +2 -2
  724. package/dist/ee/signals/view-mode-tab.es.js +2 -2
  725. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
  726. package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
  727. package/dist/{entity-header-By57lpH8.cjs → entity-header-DB1p5sEk.cjs} +2 -2
  728. package/dist/{entity-header-By57lpH8.cjs.map → entity-header-DB1p5sEk.cjs.map} +1 -1
  729. package/dist/{entity-header-DMjzE4Za.js → entity-header-GQT7ZnzW.js} +2 -2
  730. package/dist/{entity-header-DMjzE4Za.js.map → entity-header-GQT7ZnzW.js.map} +1 -1
  731. package/dist/{field-error-id-CSvLKtJE.js → field-error-id-B6AEO4lS.js} +2 -2
  732. package/dist/{field-error-id-CSvLKtJE.js.map → field-error-id-B6AEO4lS.js.map} +1 -1
  733. package/dist/{field-error-id-4xiCVBJ_.cjs → field-error-id-CFlRpKIz.cjs} +2 -2
  734. package/dist/{field-error-id-4xiCVBJ_.cjs.map → field-error-id-CFlRpKIz.cjs.map} +1 -1
  735. package/dist/hooks/use-fluid-hover.cjs.js +44 -30
  736. package/dist/hooks/use-fluid-hover.cjs.js.map +1 -1
  737. package/dist/hooks/use-fluid-hover.es.js +44 -31
  738. package/dist/hooks/use-fluid-hover.es.js.map +1 -1
  739. package/dist/hooks/use-is-mobile.cjs.js.map +1 -1
  740. package/dist/hooks/use-is-mobile.es.js.map +1 -1
  741. package/dist/{horizontal-bars-BdQnhZ5Y.cjs → horizontal-bars-BhYULTsx.cjs} +2 -2
  742. package/dist/{horizontal-bars-BdQnhZ5Y.cjs.map → horizontal-bars-BhYULTsx.cjs.map} +1 -1
  743. package/dist/{horizontal-bars-DHX7208F.js → horizontal-bars-ibfbdoX9.js} +2 -2
  744. package/dist/{horizontal-bars-DHX7208F.js.map → horizontal-bars-ibfbdoX9.js.map} +1 -1
  745. package/dist/layout/tabbed-container.cjs.js +5 -5
  746. package/dist/layout/tabbed-container.es.js +5 -5
  747. package/dist/lib/form/components/array-element-wrapper.cjs.js +1 -1
  748. package/dist/lib/form/components/array-element-wrapper.es.js +1 -1
  749. package/dist/lib/form/components/array-wrapper.cjs.js +1 -1
  750. package/dist/lib/form/components/array-wrapper.es.js +1 -1
  751. package/dist/lib/form/components/error-message.cjs.js +1 -1
  752. package/dist/lib/form/components/error-message.es.js +1 -1
  753. package/dist/lib/form/components/object-wrapper.cjs.js +1 -1
  754. package/dist/lib/form/components/object-wrapper.es.js +1 -1
  755. package/dist/lib/form/components/union-field.cjs.js +1 -1
  756. package/dist/lib/form/components/union-field.es.js +1 -1
  757. package/dist/{logs-data-list-MakOZmBm.cjs → logs-data-list-CMbvhzUW.cjs} +3 -3
  758. package/dist/{logs-data-list-MakOZmBm.cjs.map → logs-data-list-CMbvhzUW.cjs.map} +1 -1
  759. package/dist/{logs-data-list-CdLNnsJm.js → logs-data-list-YNXUjGIB.js} +3 -3
  760. package/dist/{logs-data-list-CdLNnsJm.js.map → logs-data-list-YNXUjGIB.js.map} +1 -1
  761. package/dist/{markdown-renderer-BCeiKCA4.cjs → markdown-renderer-4P5RZjlT.cjs} +2 -2
  762. package/dist/{markdown-renderer-BCeiKCA4.cjs.map → markdown-renderer-4P5RZjlT.cjs.map} +1 -1
  763. package/dist/{markdown-renderer-CKSEkKch.js → markdown-renderer-DR6SJPyB.js} +2 -2
  764. package/dist/{markdown-renderer-CKSEkKch.js.map → markdown-renderer-DR6SJPyB.js.map} +1 -1
  765. package/dist/{message-DGYBEr0X.js → message-16E_OfJr.js} +2 -2
  766. package/dist/{message-DGYBEr0X.js.map → message-16E_OfJr.js.map} +1 -1
  767. package/dist/{message-BSjrZWVU.cjs → message-La-BSpBC.cjs} +2 -2
  768. package/dist/{message-BSjrZWVU.cjs.map → message-La-BSpBC.cjs.map} +1 -1
  769. package/dist/{metrics-card-B9m1jHwk.cjs → metrics-card-CF0TvQ6M.cjs} +3 -3
  770. package/dist/{metrics-card-B9m1jHwk.cjs.map → metrics-card-CF0TvQ6M.cjs.map} +1 -1
  771. package/dist/{metrics-card-BcKVznFk.js → metrics-card-COZt0cRK.js} +3 -3
  772. package/dist/{metrics-card-BcKVznFk.js.map → metrics-card-COZt0cRK.js.map} +1 -1
  773. package/dist/{metrics-kpi-card-CLlu5you.cjs → metrics-kpi-card-DU96jUI0.cjs} +2 -2
  774. package/dist/{metrics-kpi-card-CLlu5you.cjs.map → metrics-kpi-card-DU96jUI0.cjs.map} +1 -1
  775. package/dist/{metrics-kpi-card-CDeJ3I1-.js → metrics-kpi-card-PJWplcOg.js} +2 -2
  776. package/dist/{metrics-kpi-card-CDeJ3I1-.js.map → metrics-kpi-card-PJWplcOg.js.map} +1 -1
  777. package/dist/{metrics-line-chart-R-T_jyeP.cjs → metrics-line-chart-BofHRush.cjs} +2 -2
  778. package/dist/{metrics-line-chart-R-T_jyeP.cjs.map → metrics-line-chart-BofHRush.cjs.map} +1 -1
  779. package/dist/{metrics-line-chart-C9_EMuHK.js → metrics-line-chart-C7i--w_F.js} +2 -2
  780. package/dist/{metrics-line-chart-C9_EMuHK.js.map → metrics-line-chart-C7i--w_F.js.map} +1 -1
  781. package/dist/{metrics-line-chart-tooltip-BoG8nbkO.cjs → metrics-line-chart-tooltip-BXRdTzZX.cjs} +2 -2
  782. package/dist/{metrics-line-chart-tooltip-BoG8nbkO.cjs.map → metrics-line-chart-tooltip-BXRdTzZX.cjs.map} +1 -1
  783. package/dist/{metrics-line-chart-tooltip-C3WAk3DN.js → metrics-line-chart-tooltip-qXjxMRkc.js} +2 -2
  784. package/dist/{metrics-line-chart-tooltip-C3WAk3DN.js.map → metrics-line-chart-tooltip-qXjxMRkc.js.map} +1 -1
  785. package/dist/new/layout/page-header.cjs.js +1 -1
  786. package/dist/new/layout/page-header.es.js +1 -1
  787. package/dist/new/settings.cjs.js +1 -1
  788. package/dist/new/settings.es.js +1 -1
  789. package/dist/{notification-activity-BDoleJAA.js → notification-activity-DEzmrUfo.js} +3 -3
  790. package/dist/{notification-activity-BDoleJAA.js.map → notification-activity-DEzmrUfo.js.map} +1 -1
  791. package/dist/{notification-activity-C_vZiswj.cjs → notification-activity-DermuFT1.cjs} +3 -3
  792. package/dist/{notification-activity-C_vZiswj.cjs.map → notification-activity-DermuFT1.cjs.map} +1 -1
  793. package/dist/{page-header-Dc2KSbnw.cjs → page-header-CLcX--H8.cjs} +14 -14
  794. package/dist/page-header-CLcX--H8.cjs.map +1 -0
  795. package/dist/{page-header-D5a7qrVc.js → page-header-pWZXI3lO.js} +14 -14
  796. package/dist/page-header-pWZXI3lO.js.map +1 -0
  797. package/dist/{plan-4Udllcyn.cjs → plan-BQh1M96H.cjs} +3 -3
  798. package/dist/plan-BQh1M96H.cjs.map +1 -0
  799. package/dist/{plan-CZxw-Q5D.js → plan-cSkdE2Fd.js} +3 -3
  800. package/dist/plan-cSkdE2Fd.js.map +1 -0
  801. package/dist/{Txt-DNnvlrBo.cjs → primitives/text.cjs.js} +15 -10
  802. package/dist/primitives/text.cjs.js.map +1 -0
  803. package/dist/primitives/text.d.ts +2 -0
  804. package/dist/{Txt-C3cYJgKU.js → primitives/text.es.js} +13 -10
  805. package/dist/primitives/text.es.js.map +1 -0
  806. package/dist/{reasoning-activity-Du19QVGl.js → reasoning-activity-CS-aUa1E.js} +3 -3
  807. package/dist/{reasoning-activity-Du19QVGl.js.map → reasoning-activity-CS-aUa1E.js.map} +1 -1
  808. package/dist/{reasoning-activity-Bux9ZUhr.cjs → reasoning-activity-Cfelxr49.cjs} +3 -3
  809. package/dist/{reasoning-activity-Bux9ZUhr.cjs.map → reasoning-activity-Cfelxr49.cjs.map} +1 -1
  810. package/dist/{section-C5r-Mtxk.cjs → section-BvTlcV3N.cjs} +2 -2
  811. package/dist/{section-C5r-Mtxk.cjs.map → section-BvTlcV3N.cjs.map} +1 -1
  812. package/dist/{section-DYrbH35K.js → section-BvkW-glM.js} +2 -2
  813. package/dist/{section-DYrbH35K.js.map → section-BvkW-glM.js.map} +1 -1
  814. package/dist/{side-dialog-yvAvCday.js → side-dialog-BMrmb8Fz.js} +2 -2
  815. package/dist/{side-dialog-yvAvCday.js.map → side-dialog-BMrmb8Fz.js.map} +1 -1
  816. package/dist/{side-dialog-CFTgnDXu.cjs → side-dialog-BsMzNpHT.cjs} +2 -2
  817. package/dist/{side-dialog-CFTgnDXu.cjs.map → side-dialog-BsMzNpHT.cjs.map} +1 -1
  818. package/dist/{signal-activity-BI-DRdjw.cjs → signal-activity-D4vzi2cB.cjs} +3 -3
  819. package/dist/{signal-activity-BI-DRdjw.cjs.map → signal-activity-D4vzi2cB.cjs.map} +1 -1
  820. package/dist/{signal-activity-_ChAbNsW.js → signal-activity-DaC48fkM.js} +3 -3
  821. package/dist/{signal-activity-_ChAbNsW.js.map → signal-activity-DaC48fkM.js.map} +1 -1
  822. package/dist/{span-payload-primitives-XWZOfAi-.js → span-payload-primitives-Cniig-k4.js} +7 -6
  823. package/dist/span-payload-primitives-Cniig-k4.js.map +1 -0
  824. package/dist/{span-payload-primitives-0b_ow5Rt.cjs → span-payload-primitives-DIyQNNw0.cjs} +7 -6
  825. package/dist/span-payload-primitives-DIyQNNw0.cjs.map +1 -0
  826. package/dist/src/domains/chat/attachments/composer-attachment-context.d.ts +1 -0
  827. package/dist/src/domains/chat/attachments/composer-attachment-entry.d.ts +7 -0
  828. package/dist/src/domains/chat/attachments/composer-attachment.d.ts +1 -0
  829. package/dist/src/domains/chat/components/badge-wrapper.d.ts +5 -2
  830. package/dist/src/domains/chat/context/tool-call-context.d.ts +1 -0
  831. package/dist/src/domains/chat/stories/composer-attachments.stories.d.ts +3 -0
  832. package/dist/src/domains/chat/tools/badges/agent-badge-wrapper.d.ts +2 -2
  833. package/dist/src/domains/chat/tools/badges/agent-badge.d.ts +2 -2
  834. package/dist/src/domains/chat/tools/badges/awaits-tool-approval.d.ts +2 -2
  835. package/dist/src/domains/chat/tools/badges/code-mode-badge.d.ts +2 -2
  836. package/dist/src/domains/chat/tools/badges/file-tree-badge.d.ts +2 -2
  837. package/dist/src/domains/chat/tools/badges/sandbox-execution-badge.d.ts +2 -2
  838. package/dist/src/domains/chat/tools/badges/tool-approval-badge.d.ts +19 -0
  839. package/dist/src/domains/chat/tools/badges/tool-badge.d.ts +2 -2
  840. package/dist/src/domains/chat/tools/badges/workflow-badge.d.ts +2 -2
  841. package/dist/src/domains/traces/components/trace-data-panel-view.d.ts +3 -1
  842. package/dist/src/domains/traces/components/trace-data-panel-view.stories.d.ts +1 -0
  843. package/dist/src/domains/traces/components/trace-span-panel.d.ts +3 -1
  844. package/dist/src/ds/components/CodeEditor/code-editor.d.ts +6 -1
  845. package/dist/src/ds/components/CodeEditor/code-editor.stories.d.ts +1 -0
  846. package/dist/src/ds/components/Composer/composer.stories.d.ts +0 -1
  847. package/dist/src/ds/components/DataList/data-list-group.d.ts +4 -0
  848. package/dist/src/ds/components/DataList/data-list-skeleton.d.ts +9 -0
  849. package/dist/src/ds/components/DataList/data-list.d.ts +1 -0
  850. package/dist/src/ds/components/DataList/data-list.stories.d.ts +1 -0
  851. package/dist/src/ds/components/Sidebar/footer/sidebar-footer-meta.d.ts +7 -0
  852. package/dist/src/ds/components/Sidebar/footer/sidebar-footer.d.ts +3 -0
  853. package/dist/src/ds/components/Sidebar/footer/sidebar-meter.d.ts +24 -0
  854. package/dist/src/ds/components/Sidebar/header/sidebar-brand.d.ts +6 -0
  855. package/dist/src/ds/components/Sidebar/header/sidebar-command-header.d.ts +3 -0
  856. package/dist/src/ds/components/Sidebar/header/sidebar-header.d.ts +6 -0
  857. package/dist/src/ds/components/Sidebar/header/sidebar-search-trigger.d.ts +7 -0
  858. package/dist/src/ds/components/Sidebar/index.d.ts +20 -0
  859. package/dist/src/ds/components/{MainSidebar/main-sidebar-link-active.d.ts → Sidebar/nav/sidebar-link-active.d.ts} +2 -2
  860. package/dist/src/ds/components/Sidebar/nav/sidebar-nav-header.d.ts +13 -0
  861. package/dist/src/ds/components/{MainSidebar/main-sidebar-nav-item-classes.d.ts → Sidebar/nav/sidebar-nav-item-classes.d.ts} +2 -2
  862. package/dist/src/ds/components/{MainSidebar/main-sidebar-nav-label.d.ts → Sidebar/nav/sidebar-nav-label.d.ts} +4 -4
  863. package/dist/src/ds/components/{MainSidebar/main-sidebar-nav-link.d.ts → Sidebar/nav/sidebar-nav-link.d.ts} +9 -9
  864. package/dist/src/ds/components/Sidebar/nav/sidebar-nav-list.d.ts +3 -0
  865. package/dist/src/ds/components/Sidebar/nav/sidebar-nav-section.d.ts +3 -0
  866. package/dist/src/ds/components/Sidebar/nav/sidebar-nav-separator.d.ts +3 -0
  867. package/dist/src/ds/components/Sidebar/nav/sidebar-nav.d.ts +3 -0
  868. package/dist/src/ds/components/Sidebar/nav-stack/sidebar-nav-stack-context.d.ts +8 -0
  869. package/dist/src/ds/components/Sidebar/nav-stack/sidebar-nav-stack-page-classes.d.ts +1 -0
  870. package/dist/src/ds/components/Sidebar/nav-stack/sidebar-nav-stack-root-view.d.ts +3 -0
  871. package/dist/src/ds/components/Sidebar/nav-stack/sidebar-nav-stack-root.d.ts +7 -0
  872. package/dist/src/ds/components/Sidebar/nav-stack/sidebar-nav-stack-view.d.ts +9 -0
  873. package/dist/src/ds/components/Sidebar/nav-stack/sidebar-nav-stack.d.ts +10 -0
  874. package/dist/src/ds/components/{MainSidebar/main-sidebar-context.d.ts → Sidebar/root/sidebar-context.d.ts} +7 -7
  875. package/dist/src/ds/components/Sidebar/root/sidebar-mobile-trigger.d.ts +5 -0
  876. package/dist/src/ds/components/Sidebar/root/sidebar-panel.d.ts +6 -0
  877. package/dist/src/ds/components/{MainSidebar/main-sidebar-provider.d.ts → Sidebar/root/sidebar-provider.d.ts} +5 -5
  878. package/dist/src/ds/components/Sidebar/root/sidebar-root.d.ts +6 -0
  879. package/dist/src/ds/components/Sidebar/root/sidebar-trigger.d.ts +3 -0
  880. package/dist/src/ds/components/Sidebar/sections/sidebar-customize-dialog.d.ts +12 -0
  881. package/dist/src/ds/components/Sidebar/sections/sidebar-more-links.d.ts +11 -0
  882. package/dist/src/ds/components/Sidebar/sections/sidebar-optional-link.d.ts +11 -0
  883. package/dist/src/ds/components/Sidebar/sections/sidebar-section-link.d.ts +9 -0
  884. package/dist/src/ds/components/Sidebar/sections/sidebar-sections-content.d.ts +4 -0
  885. package/dist/src/ds/components/Sidebar/sections/sidebar-sections.d.ts +18 -0
  886. package/dist/src/ds/components/Sidebar/sections/sidebar-visibility.d.ts +19 -0
  887. package/dist/src/ds/components/{MainSidebar/main-sidebar.stories.d.ts → Sidebar/sidebar-layout.stories.d.ts} +4 -4
  888. package/dist/src/ds/components/Sidebar/sidebar.d.ts +43 -0
  889. package/dist/src/ds/{new/sidebar/sidebar-new.stories.d.ts → components/Sidebar/sidebar.stories.d.ts} +3 -3
  890. package/dist/src/ds/components/Tabs/tabs-list.d.ts +1 -0
  891. package/dist/src/ds/components/Tabs/tabs.stories.d.ts +6 -0
  892. package/dist/src/ds/components/Txt/Txt.d.ts +12 -20
  893. package/dist/src/ds/components/Txt/txt.stories.d.ts +2 -0
  894. package/dist/src/ds/components/ai/plan/plan.d.ts +2 -2
  895. package/dist/src/ds/components/ai/tool-approval/index.d.ts +2 -2
  896. package/dist/src/ds/components/ai/tool-approval/tool-approval.d.ts +11 -4
  897. package/dist/src/ds/components/ai/tool-approval/tool-approval.stories.d.ts +17 -3
  898. package/dist/src/ds/components/ai/tool-call/tool-call-arguments.d.ts +2 -1
  899. package/dist/src/ds/components/ai/tool-call/tool-call-edit.d.ts +2 -1
  900. package/dist/src/ds/primitives/control-sizes.stories.d.ts +10 -0
  901. package/dist/src/ds/primitives/text.d.ts +19 -0
  902. package/dist/src/ds/tokens/fonts.d.ts +1 -1
  903. package/dist/src/ee/signals/components/signals-empty-state.stories.d.ts +12 -0
  904. package/dist/src/hooks/use-fluid-hover.d.ts +5 -1
  905. package/dist/style.css +100 -91
  906. package/dist/{tabs-list-Tqj36HIL.cjs → tabs-list-BeWntzEw.cjs} +17 -3
  907. package/dist/tabs-list-BeWntzEw.cjs.map +1 -0
  908. package/dist/{tabs-list-tLx5fgP0.js → tabs-list-DoSX2xLL.js} +17 -3
  909. package/dist/tabs-list-DoSX2xLL.js.map +1 -0
  910. package/dist/tabs-root.css +2 -2
  911. package/dist/{tabs-tab-ClLIOGiC.js → tabs-tab-BI3hb-HP.js} +3 -4
  912. package/dist/tabs-tab-BI3hb-HP.js.map +1 -0
  913. package/dist/{tabs-tab-C-C2vX-D.cjs → tabs-tab-DhLs9bO0.cjs} +3 -4
  914. package/dist/tabs-tab-DhLs9bO0.cjs.map +1 -0
  915. package/dist/{text-and-icon-Bo6NLLBl.js → text-and-icon-CsBZ4Gn8.js} +2 -2
  916. package/dist/{text-and-icon-Bo6NLLBl.js.map → text-and-icon-CsBZ4Gn8.js.map} +1 -1
  917. package/dist/{text-and-icon-CvakH4YL.cjs → text-and-icon-DB9klVPu.cjs} +2 -2
  918. package/dist/{text-and-icon-CvakH4YL.cjs.map → text-and-icon-DB9klVPu.cjs.map} +1 -1
  919. package/dist/{thread-list-DKBwiGfX.cjs → thread-list-BbOI-tHs.cjs} +2 -2
  920. package/dist/{thread-list-DKBwiGfX.cjs.map → thread-list-BbOI-tHs.cjs.map} +1 -1
  921. package/dist/{thread-list-D2zSEQWK.js → thread-list-BhqOe2iu.js} +2 -2
  922. package/dist/{thread-list-D2zSEQWK.js.map → thread-list-BhqOe2iu.js.map} +1 -1
  923. package/dist/tokens.cjs.js +3 -0
  924. package/dist/tokens.cjs.js.map +1 -1
  925. package/dist/tokens.es.js +3 -0
  926. package/dist/tokens.es.js.map +1 -1
  927. package/dist/tool-approval-B0DJ3coA.js +71 -0
  928. package/dist/tool-approval-B0DJ3coA.js.map +1 -0
  929. package/dist/tool-approval-jNN6UeC7.cjs +75 -0
  930. package/dist/tool-approval-jNN6UeC7.cjs.map +1 -0
  931. package/dist/{tool-call-arguments-DEXKbR8d.cjs → tool-call-arguments-Bud9On3h.cjs} +15 -11
  932. package/dist/tool-call-arguments-Bud9On3h.cjs.map +1 -0
  933. package/dist/{tool-call-arguments-CufA6H_n.js → tool-call-arguments-DzdVtN4f.js} +15 -11
  934. package/dist/tool-call-arguments-DzdVtN4f.js.map +1 -0
  935. package/dist/{tool-call-group-DKCarGYB.js → tool-call-group-Bg9Rg05T.js} +3 -3
  936. package/dist/{tool-call-group-DKCarGYB.js.map → tool-call-group-Bg9Rg05T.js.map} +1 -1
  937. package/dist/{tool-call-group-GBF6eQAK.cjs → tool-call-group-xOLcTzb_.cjs} +3 -3
  938. package/dist/{tool-call-group-GBF6eQAK.cjs.map → tool-call-group-xOLcTzb_.cjs.map} +1 -1
  939. package/dist/{tool-card-DKNWgEoo.js → tool-card-B5wPeDh_.js} +13 -17
  940. package/dist/tool-card-B5wPeDh_.js.map +1 -0
  941. package/dist/{tool-card-CQAEtUhC.cjs → tool-card-CwENsPdZ.cjs} +13 -17
  942. package/dist/tool-card-CwENsPdZ.cjs.map +1 -0
  943. package/dist/{traces-data-list-BeWQiNT2.js → traces-data-list-B0xInvZg.js} +4 -4
  944. package/dist/{traces-data-list-BeWQiNT2.js.map → traces-data-list-B0xInvZg.js.map} +1 -1
  945. package/dist/{traces-data-list-DDG1BY5u.cjs → traces-data-list-CVLHJtd4.cjs} +4 -4
  946. package/dist/{traces-data-list-DDG1BY5u.cjs.map → traces-data-list-CVLHJtd4.cjs.map} +1 -1
  947. package/dist/{transcript-divider-CPIo8NUj.js → transcript-divider-DQbebYHb.js} +2 -2
  948. package/dist/{transcript-divider-CPIo8NUj.js.map → transcript-divider-DQbebYHb.js.map} +1 -1
  949. package/dist/{transcript-divider-273Bsdjs.cjs → transcript-divider-fc_PrxES.cjs} +2 -2
  950. package/dist/{transcript-divider-273Bsdjs.cjs.map → transcript-divider-fc_PrxES.cjs.map} +1 -1
  951. package/dist/{use-workflow-graph-runtime-r_OOpvSo.cjs → use-workflow-graph-runtime-B4njhsih.cjs} +3 -3
  952. package/dist/{use-workflow-graph-runtime-r_OOpvSo.cjs.map → use-workflow-graph-runtime-B4njhsih.cjs.map} +1 -1
  953. package/dist/{use-workflow-graph-runtime-BF_NZEkj.js → use-workflow-graph-runtime-CfRQ3vzM.js} +3 -3
  954. package/dist/{use-workflow-graph-runtime-BF_NZEkj.js.map → use-workflow-graph-runtime-CfRQ3vzM.js.map} +1 -1
  955. package/dist/{workflow-code-dialog-content-DyoN3850.cjs → workflow-code-dialog-content-BE9f1Fcf.cjs} +2 -2
  956. package/dist/{workflow-code-dialog-content-DyoN3850.cjs.map → workflow-code-dialog-content-BE9f1Fcf.cjs.map} +1 -1
  957. package/dist/{workflow-code-dialog-content-3AcgitHa.js → workflow-code-dialog-content-BZAkw31A.js} +2 -2
  958. package/dist/{workflow-code-dialog-content-3AcgitHa.js.map → workflow-code-dialog-content-BZAkw31A.js.map} +1 -1
  959. package/dist/{workflow-condition-card-BCSYogql.js → workflow-condition-card-3YSKAtKw.js} +3 -3
  960. package/dist/{workflow-condition-card-BCSYogql.js.map → workflow-condition-card-3YSKAtKw.js.map} +1 -1
  961. package/dist/{workflow-condition-card-Dlo2PaKV.cjs → workflow-condition-card-80XcAvDl.cjs} +3 -3
  962. package/dist/{workflow-condition-card-Dlo2PaKV.cjs.map → workflow-condition-card-80XcAvDl.cjs.map} +1 -1
  963. package/dist/{workflow-data-edge-view-CjbBulHe.cjs → workflow-data-edge-view-BoCjUe4t.cjs} +2 -2
  964. package/dist/{workflow-data-edge-view-CjbBulHe.cjs.map → workflow-data-edge-view-BoCjUe4t.cjs.map} +1 -1
  965. package/dist/{workflow-data-edge-view-B9uz58wL.js → workflow-data-edge-view-ux68M8gD.js} +2 -2
  966. package/dist/{workflow-data-edge-view-B9uz58wL.js.map → workflow-data-edge-view-ux68M8gD.js.map} +1 -1
  967. package/dist/{workflow-debug-controls-BVaX_0Dq.js → workflow-debug-controls-BgyAN-Ke.js} +2 -2
  968. package/dist/{workflow-debug-controls-BVaX_0Dq.js.map → workflow-debug-controls-BgyAN-Ke.js.map} +1 -1
  969. package/dist/{workflow-debug-controls-DUNR0Ws0.cjs → workflow-debug-controls-DsAvdRuS.cjs} +2 -2
  970. package/dist/{workflow-debug-controls-DUNR0Ws0.cjs.map → workflow-debug-controls-DsAvdRuS.cjs.map} +1 -1
  971. package/dist/{workflow-edge-data-button-DQAzBPfm.cjs → workflow-edge-data-button-BKTN3LQd.cjs} +3 -3
  972. package/dist/{workflow-edge-data-button-DQAzBPfm.cjs.map → workflow-edge-data-button-BKTN3LQd.cjs.map} +1 -1
  973. package/dist/{workflow-edge-data-button-BTynlndD.js → workflow-edge-data-button-YegDtxyD.js} +3 -3
  974. package/dist/{workflow-edge-data-button-BTynlndD.js.map → workflow-edge-data-button-YegDtxyD.js.map} +1 -1
  975. package/package.json +11 -17
  976. package/theme/typography.css +16 -0
  977. package/dist/Txt-C3cYJgKU.js.map +0 -1
  978. package/dist/Txt-DNnvlrBo.cjs.map +0 -1
  979. package/dist/code-C8akLzcu.js.map +0 -1
  980. package/dist/code-D_sH618U.cjs.map +0 -1
  981. package/dist/code-editor-Btr1qm_5.cjs.map +0 -1
  982. package/dist/code-editor-DzhYz1fH.js.map +0 -1
  983. package/dist/comment-B1Cf9w4Z.js.map +0 -1
  984. package/dist/comment-DnbibTOe.cjs.map +0 -1
  985. package/dist/components/MainSidebar.cjs.js +0 -133
  986. package/dist/components/MainSidebar.cjs.js.map +0 -1
  987. package/dist/components/MainSidebar.d.ts +0 -2
  988. package/dist/components/MainSidebar.es.js +0 -121
  989. package/dist/components/MainSidebar.es.js.map +0 -1
  990. package/dist/data-list-BHtjZ528.js.map +0 -1
  991. package/dist/data-list-TouUI4pb.cjs.map +0 -1
  992. package/dist/data-list-skeleton-BqihjHu8.cjs.map +0 -1
  993. package/dist/data-list-skeleton-H8Zpph6_.js.map +0 -1
  994. package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +0 -66
  995. package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js.map +0 -1
  996. package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +0 -62
  997. package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js.map +0 -1
  998. package/dist/main-sidebar-link-active-C9P_WBus.cjs +0 -798
  999. package/dist/main-sidebar-link-active-C9P_WBus.cjs.map +0 -1
  1000. package/dist/main-sidebar-link-active-JtKNF9hx.js +0 -781
  1001. package/dist/main-sidebar-link-active-JtKNF9hx.js.map +0 -1
  1002. package/dist/new/sidebar.cjs.js +0 -725
  1003. package/dist/new/sidebar.cjs.js.map +0 -1
  1004. package/dist/new/sidebar.d.ts +0 -2
  1005. package/dist/new/sidebar.es.js +0 -705
  1006. package/dist/new/sidebar.es.js.map +0 -1
  1007. package/dist/page-header-D5a7qrVc.js.map +0 -1
  1008. package/dist/page-header-Dc2KSbnw.cjs.map +0 -1
  1009. package/dist/plan-4Udllcyn.cjs.map +0 -1
  1010. package/dist/plan-CZxw-Q5D.js.map +0 -1
  1011. package/dist/span-payload-primitives-0b_ow5Rt.cjs.map +0 -1
  1012. package/dist/span-payload-primitives-XWZOfAi-.js.map +0 -1
  1013. package/dist/src/domains/chat/stories/approvals.stories.d.ts +0 -52
  1014. package/dist/src/domains/chat/tools/badges/tool-approval-buttons.d.ts +0 -14
  1015. package/dist/src/ds/components/MainSidebar/index.d.ts +0 -1
  1016. package/dist/src/ds/components/MainSidebar/main-sidebar-bottom.d.ts +0 -3
  1017. package/dist/src/ds/components/MainSidebar/main-sidebar-mobile-trigger.d.ts +0 -5
  1018. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-header.d.ts +0 -11
  1019. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-list.d.ts +0 -3
  1020. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-section.d.ts +0 -12
  1021. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-separator.d.ts +0 -3
  1022. package/dist/src/ds/components/MainSidebar/main-sidebar-nav.d.ts +0 -3
  1023. package/dist/src/ds/components/MainSidebar/main-sidebar-root.d.ts +0 -6
  1024. package/dist/src/ds/components/MainSidebar/main-sidebar-sections.d.ts +0 -13
  1025. package/dist/src/ds/components/MainSidebar/main-sidebar-trigger.d.ts +0 -3
  1026. package/dist/src/ds/components/MainSidebar/main-sidebar.d.ts +0 -35
  1027. package/dist/src/ds/components/ai/tool-approval/tool-approval-actions.stories.d.ts +0 -44
  1028. package/dist/src/ds/new/sidebar/index.d.ts +0 -15
  1029. package/dist/src/ds/new/sidebar/sidebar-new-brand.d.ts +0 -6
  1030. package/dist/src/ds/new/sidebar/sidebar-new-command-header.d.ts +0 -3
  1031. package/dist/src/ds/new/sidebar/sidebar-new-footer-meta.d.ts +0 -7
  1032. package/dist/src/ds/new/sidebar/sidebar-new-footer.d.ts +0 -3
  1033. package/dist/src/ds/new/sidebar/sidebar-new-header.d.ts +0 -6
  1034. package/dist/src/ds/new/sidebar/sidebar-new-meter.d.ts +0 -24
  1035. package/dist/src/ds/new/sidebar/sidebar-new-more-links.d.ts +0 -10
  1036. package/dist/src/ds/new/sidebar/sidebar-new-nav-header.d.ts +0 -11
  1037. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack-context.d.ts +0 -8
  1038. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack-page-classes.d.ts +0 -1
  1039. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack-root-view.d.ts +0 -3
  1040. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack-root.d.ts +0 -7
  1041. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack-view.d.ts +0 -9
  1042. package/dist/src/ds/new/sidebar/sidebar-new-nav-stack.d.ts +0 -10
  1043. package/dist/src/ds/new/sidebar/sidebar-new-nav.d.ts +0 -3
  1044. package/dist/src/ds/new/sidebar/sidebar-new-root.d.ts +0 -6
  1045. package/dist/src/ds/new/sidebar/sidebar-new-search-trigger.d.ts +0 -7
  1046. package/dist/src/ds/new/sidebar/sidebar-new-section-link.d.ts +0 -9
  1047. package/dist/src/ds/new/sidebar/sidebar-new-sections.d.ts +0 -12
  1048. package/dist/src/ds/new/sidebar/sidebar-new-trigger.d.ts +0 -3
  1049. package/dist/src/ds/new/sidebar/sidebar-new.d.ts +0 -43
  1050. package/dist/tabs-list-Tqj36HIL.cjs.map +0 -1
  1051. package/dist/tabs-list-tLx5fgP0.js.map +0 -1
  1052. package/dist/tabs-tab-C-C2vX-D.cjs.map +0 -1
  1053. package/dist/tabs-tab-ClLIOGiC.js.map +0 -1
  1054. package/dist/tool-approval-BNJ6MpnV.js +0 -77
  1055. package/dist/tool-approval-BNJ6MpnV.js.map +0 -1
  1056. package/dist/tool-approval-DOPxugSv.cjs +0 -80
  1057. package/dist/tool-approval-DOPxugSv.cjs.map +0 -1
  1058. package/dist/tool-call-arguments-CufA6H_n.js.map +0 -1
  1059. package/dist/tool-call-arguments-DEXKbR8d.cjs.map +0 -1
  1060. package/dist/tool-card-CQAEtUhC.cjs.map +0 -1
  1061. package/dist/tool-card-DKNWgEoo.js.map +0 -1
  1062. /package/dist/{sidebar.css → Sidebar.css} +0 -0
@@ -3,7 +3,7 @@
3
3
  const jsxRuntime = require('react/jsx-runtime');
4
4
  const utils_cn = require('./cn-DG0X1KEP.cjs');
5
5
  const lucideReact = require('lucide-react');
6
- const Txt = require('./Txt-DNnvlrBo.cjs');
6
+ const Txt = require('./Txt-DFPibRb3.cjs');
7
7
  const icons_Icon = require('./icons/Icon.cjs.js');
8
8
 
9
9
  function FieldBlockColumn({ children, className }) {
@@ -112,4 +112,4 @@ const fieldErrorId = (name) => `error-${name}`;
112
112
 
113
113
  exports.FieldBlock = FieldBlock;
114
114
  exports.fieldErrorId = fieldErrorId;
115
- //# sourceMappingURL=field-error-id-4xiCVBJ_.cjs.map
115
+ //# sourceMappingURL=field-error-id-CFlRpKIz.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-error-id-4xiCVBJ_.cjs","sources":["../src/ds/components/FormFieldBlocks/block/field-block-column.tsx","../src/ds/components/FormFieldBlocks/block/field-block-error-msg.tsx","../src/ds/components/FormFieldBlocks/block/field-block-help-text.tsx","../src/ds/components/FormFieldBlocks/block/field-block-label.tsx","../src/ds/components/FormFieldBlocks/block/field-block-layout.tsx","../src/ds/components/FormFieldBlocks/block/field-block-message.tsx","../src/ds/components/FormFieldBlocks/block/field-block.tsx","../src/ds/components/FormFieldBlocks/block/field-error-id.ts"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type FieldBlockColumnProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nexport function FieldBlockColumn({ children, className }: FieldBlockColumnProps) {\n return <div className={cn('grid gap-2 text-foreground', className)}>{children}</div>;\n}\n","import { CircleAlertIcon } from 'lucide-react';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { cn } from '@/lib/utils';\n\nexport type FieldBlockErrorMsgProps = {\n children?: React.ReactNode;\n /**\n * The field this message belongs to, matching the `name` given to `FieldBlock.Label`.\n * Sets a stable `error-<name>` id so the control can point at it with\n * `aria-describedby` and a screen reader reads the message with the field.\n */\n name?: string;\n className?: string;\n};\n\nexport function FieldBlockErrorMsg({ children, name, className }: FieldBlockErrorMsgProps) {\n return (\n <Txt\n variant=\"body-sm\"\n // `role=\"alert\"` lives here rather than in a wrapper at every call site, so an\n // error announces itself wherever it is used instead of depending on each caller\n // remembering to wrap it.\n role=\"alert\"\n id={name !== undefined ? `error-${name}` : undefined}\n className={cn('flex gap-1 text-destructive-foreground', className)}\n >\n <Icon size=\"xs\" className=\"mt-1 shrink-0\" aria-hidden>\n <CircleAlertIcon />\n </Icon>\n <span>{children}</span>\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nexport type FieldBlockHelpTextProps = {\n children?: React.ReactNode;\n};\n\nexport function FieldBlockHelpText({ children }: FieldBlockHelpTextProps) {\n return (\n <Txt variant=\"caption\" tone=\"muted\">\n {children}\n </Txt>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type FieldBlockLabelProps = {\n children: React.ReactNode;\n name: string;\n htmlFor?: string;\n required?: boolean;\n disabled?: boolean;\n size?: 'default' | 'bigger';\n className?: string;\n};\n\nexport function FieldBlockLabel({\n children,\n name,\n htmlFor = `input-${name}`,\n required,\n disabled = false,\n size = 'default',\n className,\n}: FieldBlockLabelProps) {\n return (\n <label\n htmlFor={htmlFor}\n className={cn(\n 'inline-flex items-center text-label',\n {\n 'text-body': size === 'bigger',\n 'text-foreground': !disabled,\n 'text-muted-foreground': disabled,\n },\n className,\n )}\n >\n {children}\n {required ? (\n <>\n <span\n aria-hidden\n className={cn('ml-0.5', disabled ? 'text-muted-foreground' : 'text-destructive-foreground')}\n >\n *\n </span>\n <span className=\"sr-only\"> (required)</span>\n </>\n ) : null}\n </label>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type FieldBlockLayoutProps = {\n children: React.ReactNode;\n className?: string;\n layout?: 'vertical' | 'horizontal';\n // Optional prop to specify label column width in horizontal layout\n labelColumnWidth?: string; // e.g., '150px' or '30%'\n};\n\nexport function FieldBlockLayout({\n children,\n className,\n layout = 'vertical',\n labelColumnWidth,\n}: FieldBlockLayoutProps) {\n return (\n <div\n className={cn(\n 'relative grid gap-2 text-foreground',\n {\n 'horizontal-field-block grid-cols-[auto_1fr] items-baseline': layout === 'horizontal',\n },\n className,\n )}\n style={\n layout === 'horizontal' && labelColumnWidth ? { gridTemplateColumns: `${labelColumnWidth} 1fr` } : undefined\n }\n >\n {children}\n </div>\n );\n}\n","import { FieldBlockErrorMsg } from './field-block-error-msg';\nimport { FieldBlockHelpText } from './field-block-help-text';\n\nexport type FieldBlockMessageProps = {\n name: string;\n helpText?: React.ReactNode;\n errorMsg?: React.ReactNode;\n};\n\nexport function FieldBlockMessage({ name, helpText, errorMsg }: FieldBlockMessageProps) {\n return (\n <div className=\"h-[1lh] min-w-0 overflow-hidden text-body-sm [&>p]:truncate\">\n {errorMsg ? (\n <FieldBlockErrorMsg name={name} className=\"truncate\">\n {errorMsg}\n </FieldBlockErrorMsg>\n ) : helpText ? (\n <FieldBlockHelpText>{helpText}</FieldBlockHelpText>\n ) : null}\n </div>\n );\n}\n","import { FieldBlockColumn } from './field-block-column';\nimport { FieldBlockErrorMsg } from './field-block-error-msg';\nimport { FieldBlockHelpText } from './field-block-help-text';\nimport { FieldBlockLabel } from './field-block-label';\nimport { FieldBlockLayout } from './field-block-layout';\nimport { FieldBlockMessage } from './field-block-message';\n\n/** @deprecated Use `Field` with `FieldLabel`, `FieldDescription` and `FieldError`. */\nexport const FieldBlock = Object.assign(\n {},\n {\n Layout: FieldBlockLayout,\n Column: FieldBlockColumn,\n Label: FieldBlockLabel,\n HelpText: FieldBlockHelpText,\n ErrorMsg: FieldBlockErrorMsg,\n Message: FieldBlockMessage,\n },\n);\n","/** @deprecated Wrap the control in a `Field`: `FieldError` links itself to the control. */\nexport const fieldErrorId = (name: string) => `error-${name}`;\n"],"names":["cn","jsxs","Txt","jsx","Icon","CircleAlertIcon","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"field-error-id-CFlRpKIz.cjs","sources":["../src/ds/components/FormFieldBlocks/block/field-block-column.tsx","../src/ds/components/FormFieldBlocks/block/field-block-error-msg.tsx","../src/ds/components/FormFieldBlocks/block/field-block-help-text.tsx","../src/ds/components/FormFieldBlocks/block/field-block-label.tsx","../src/ds/components/FormFieldBlocks/block/field-block-layout.tsx","../src/ds/components/FormFieldBlocks/block/field-block-message.tsx","../src/ds/components/FormFieldBlocks/block/field-block.tsx","../src/ds/components/FormFieldBlocks/block/field-error-id.ts"],"sourcesContent":["import { cn } from '@/lib/utils';\n\nexport type FieldBlockColumnProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nexport function FieldBlockColumn({ children, className }: FieldBlockColumnProps) {\n return <div className={cn('grid gap-2 text-foreground', className)}>{children}</div>;\n}\n","import { CircleAlertIcon } from 'lucide-react';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { cn } from '@/lib/utils';\n\nexport type FieldBlockErrorMsgProps = {\n children?: React.ReactNode;\n /**\n * The field this message belongs to, matching the `name` given to `FieldBlock.Label`.\n * Sets a stable `error-<name>` id so the control can point at it with\n * `aria-describedby` and a screen reader reads the message with the field.\n */\n name?: string;\n className?: string;\n};\n\nexport function FieldBlockErrorMsg({ children, name, className }: FieldBlockErrorMsgProps) {\n return (\n <Txt\n variant=\"body-sm\"\n // `role=\"alert\"` lives here rather than in a wrapper at every call site, so an\n // error announces itself wherever it is used instead of depending on each caller\n // remembering to wrap it.\n role=\"alert\"\n id={name !== undefined ? `error-${name}` : undefined}\n className={cn('flex gap-1 text-destructive-foreground', className)}\n >\n <Icon size=\"xs\" className=\"mt-1 shrink-0\" aria-hidden>\n <CircleAlertIcon />\n </Icon>\n <span>{children}</span>\n </Txt>\n );\n}\n","import { Txt } from '@/ds/components/Txt';\nexport type FieldBlockHelpTextProps = {\n children?: React.ReactNode;\n};\n\nexport function FieldBlockHelpText({ children }: FieldBlockHelpTextProps) {\n return (\n <Txt variant=\"caption\" tone=\"muted\">\n {children}\n </Txt>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type FieldBlockLabelProps = {\n children: React.ReactNode;\n name: string;\n htmlFor?: string;\n required?: boolean;\n disabled?: boolean;\n size?: 'default' | 'bigger';\n className?: string;\n};\n\nexport function FieldBlockLabel({\n children,\n name,\n htmlFor = `input-${name}`,\n required,\n disabled = false,\n size = 'default',\n className,\n}: FieldBlockLabelProps) {\n return (\n <label\n htmlFor={htmlFor}\n className={cn(\n 'inline-flex items-center text-label',\n {\n 'text-body': size === 'bigger',\n 'text-foreground': !disabled,\n 'text-muted-foreground': disabled,\n },\n className,\n )}\n >\n {children}\n {required ? (\n <>\n <span\n aria-hidden\n className={cn('ml-0.5', disabled ? 'text-muted-foreground' : 'text-destructive-foreground')}\n >\n *\n </span>\n <span className=\"sr-only\"> (required)</span>\n </>\n ) : null}\n </label>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport type FieldBlockLayoutProps = {\n children: React.ReactNode;\n className?: string;\n layout?: 'vertical' | 'horizontal';\n // Optional prop to specify label column width in horizontal layout\n labelColumnWidth?: string; // e.g., '150px' or '30%'\n};\n\nexport function FieldBlockLayout({\n children,\n className,\n layout = 'vertical',\n labelColumnWidth,\n}: FieldBlockLayoutProps) {\n return (\n <div\n className={cn(\n 'relative grid gap-2 text-foreground',\n {\n 'horizontal-field-block grid-cols-[auto_1fr] items-baseline': layout === 'horizontal',\n },\n className,\n )}\n style={\n layout === 'horizontal' && labelColumnWidth ? { gridTemplateColumns: `${labelColumnWidth} 1fr` } : undefined\n }\n >\n {children}\n </div>\n );\n}\n","import { FieldBlockErrorMsg } from './field-block-error-msg';\nimport { FieldBlockHelpText } from './field-block-help-text';\n\nexport type FieldBlockMessageProps = {\n name: string;\n helpText?: React.ReactNode;\n errorMsg?: React.ReactNode;\n};\n\nexport function FieldBlockMessage({ name, helpText, errorMsg }: FieldBlockMessageProps) {\n return (\n <div className=\"h-[1lh] min-w-0 overflow-hidden text-body-sm [&>p]:truncate\">\n {errorMsg ? (\n <FieldBlockErrorMsg name={name} className=\"truncate\">\n {errorMsg}\n </FieldBlockErrorMsg>\n ) : helpText ? (\n <FieldBlockHelpText>{helpText}</FieldBlockHelpText>\n ) : null}\n </div>\n );\n}\n","import { FieldBlockColumn } from './field-block-column';\nimport { FieldBlockErrorMsg } from './field-block-error-msg';\nimport { FieldBlockHelpText } from './field-block-help-text';\nimport { FieldBlockLabel } from './field-block-label';\nimport { FieldBlockLayout } from './field-block-layout';\nimport { FieldBlockMessage } from './field-block-message';\n\n/** @deprecated Use `Field` with `FieldLabel`, `FieldDescription` and `FieldError`. */\nexport const FieldBlock = Object.assign(\n {},\n {\n Layout: FieldBlockLayout,\n Column: FieldBlockColumn,\n Label: FieldBlockLabel,\n HelpText: FieldBlockHelpText,\n ErrorMsg: FieldBlockErrorMsg,\n Message: FieldBlockMessage,\n },\n);\n","/** @deprecated Wrap the control in a `Field`: `FieldError` links itself to the control. */\nexport const fieldErrorId = (name: string) => `error-${name}`;\n"],"names":["cn","jsxs","Txt","jsx","Icon","CircleAlertIcon","Fragment"],"mappings":"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"}
@@ -4,6 +4,20 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const React = require('react');
6
6
 
7
+ function boxContains(box, point, axis) {
8
+ const insideX = point.x >= box.left && point.x <= box.right;
9
+ const insideY = point.y >= box.top && point.y <= box.bottom;
10
+ if (axis === "x") return insideX;
11
+ if (axis === "y") return insideY;
12
+ return insideX && insideY;
13
+ }
14
+ function distanceToCenter(box, point, axis) {
15
+ const dx = point.x - (box.left + box.right) / 2;
16
+ const dy = point.y - (box.top + box.bottom) / 2;
17
+ if (axis === "x") return Math.abs(dx);
18
+ if (axis === "y") return Math.abs(dy);
19
+ return Math.hypot(dx, dy);
20
+ }
7
21
  function isOverDisabledItem(items, point, isItemDisabled) {
8
22
  for (const element of items) {
9
23
  if (!isItemDisabled?.(element)) continue;
@@ -22,50 +36,40 @@ function pickNearest({
22
36
  scroll,
23
37
  border,
24
38
  layoutSize,
25
- isDisabled
39
+ isDisabled,
40
+ onlyBetweenItems = false
26
41
  }) {
27
42
  const scaleX = layoutSize.width > 0 ? containerRect.width / layoutSize.width : 1;
28
43
  const scaleY = layoutSize.height > 0 ? containerRect.height / layoutSize.height : 1;
29
44
  let closestIndex = null;
30
45
  let closestDistance = Infinity;
31
46
  let containingIndex = null;
47
+ const itemSpan = { left: Infinity, top: Infinity, right: -Infinity, bottom: -Infinity };
32
48
  for (let index = 0; index < rects.length; index++) {
33
49
  const r = rects[index];
34
50
  if (!r) continue;
35
51
  if (isDisabled?.(index)) continue;
36
- if (axis === "xy") {
37
- const left = containerRect.left + (border.x + r.left - scroll.x) * scaleX;
38
- const top = containerRect.top + (border.y + r.top - scroll.y) * scaleY;
39
- const width = r.width * scaleX;
40
- const height = r.height * scaleY;
41
- if (point.x >= left && point.x <= left + width && point.y >= top && point.y <= top + height) {
42
- containingIndex = index;
43
- }
44
- const distance2 = Math.hypot(point.x - (left + width / 2), point.y - (top + height / 2));
45
- if (distance2 < closestDistance) {
46
- closestDistance = distance2;
47
- closestIndex = index;
48
- }
49
- continue;
50
- }
51
- const horizontal = axis === "x";
52
- const mousePos = horizontal ? point.x : point.y;
53
- const scale = horizontal ? scaleX : scaleY;
54
- const itemStart = (horizontal ? containerRect.left : containerRect.top) + ((horizontal ? border.x : border.y) + (horizontal ? r.left : r.top) - (horizontal ? scroll.x : scroll.y)) * scale;
55
- const itemSize = (horizontal ? r.width : r.height) * scale;
56
- if (mousePos >= itemStart && mousePos <= itemStart + itemSize) {
57
- containingIndex = index;
58
- }
59
- const distance = Math.abs(mousePos - (itemStart + itemSize / 2));
52
+ const left = containerRect.left + (border.x + r.left - scroll.x) * scaleX;
53
+ const top = containerRect.top + (border.y + r.top - scroll.y) * scaleY;
54
+ const box = { left, top, right: left + r.width * scaleX, bottom: top + r.height * scaleY };
55
+ itemSpan.left = Math.min(itemSpan.left, box.left);
56
+ itemSpan.top = Math.min(itemSpan.top, box.top);
57
+ itemSpan.right = Math.max(itemSpan.right, box.right);
58
+ itemSpan.bottom = Math.max(itemSpan.bottom, box.bottom);
59
+ if (boxContains(box, point, axis)) containingIndex = index;
60
+ const distance = distanceToCenter(box, point, axis);
60
61
  if (distance < closestDistance) {
61
62
  closestDistance = distance;
62
63
  closestIndex = index;
63
64
  }
64
65
  }
66
+ if (onlyBetweenItems && !boxContains(itemSpan, point, axis)) return null;
65
67
  return containingIndex ?? closestIndex;
66
68
  }
67
69
  const ACTIVE_ATTR = "data-fluid-hover-active";
68
70
  const ACTIVE_INDEX_ATTR = "data-fluid-hover-active-index";
71
+ const GROUP_ATTR = "data-fluid-hover-group";
72
+ const GROUP_SELECTOR = `[${GROUP_ATTR}]`;
69
73
  function isFromInside(e) {
70
74
  return e.target instanceof Node && e.currentTarget.contains(e.target);
71
75
  }
@@ -82,6 +86,7 @@ function useFluidHover(containerRef, options = {}) {
82
86
  const { axis = "y", isItemDisabled, gapClick = true } = options;
83
87
  const gapClickMaxDistance = typeof gapClick === "object" ? gapClick.maxDistance ?? Infinity : Infinity;
84
88
  const itemsRef = React.useRef(/* @__PURE__ */ new Map());
89
+ const itemGroupsRef = React.useRef(/* @__PURE__ */ new Map());
85
90
  const [activeIndex, setActiveIndex] = React.useState(null);
86
91
  const activeIndexRef = React.useRef(null);
87
92
  activeIndexRef.current = activeIndex;
@@ -176,6 +181,7 @@ function useFluidHover(containerRef, options = {}) {
176
181
  (index, element) => {
177
182
  if (element) {
178
183
  itemsRef.current.set(index, element);
184
+ itemGroupsRef.current.set(index, element.closest(GROUP_SELECTOR));
179
185
  getItemRo()?.observe(element);
180
186
  if (index === activeIndexRef.current) element.setAttribute(ACTIVE_ATTR, "");
181
187
  } else {
@@ -183,6 +189,7 @@ function useFluidHover(containerRef, options = {}) {
183
189
  if (previous) itemRoRef.current?.unobserve(previous);
184
190
  previous?.removeAttribute(ACTIVE_ATTR);
185
191
  itemsRef.current.delete(index);
192
+ itemGroupsRef.current.delete(index);
186
193
  if (index === activeIndexRef.current) {
187
194
  setActiveIndex((current) => current === index && !itemsRef.current.has(index) ? null : current);
188
195
  }
@@ -194,7 +201,8 @@ function useFluidHover(containerRef, options = {}) {
194
201
  );
195
202
  const handleMouseMove = React.useCallback(
196
203
  (e) => {
197
- if (!isFromInside(e)) return;
204
+ if (!isFromInside(e) || !(e.target instanceof Element)) return;
205
+ const pointerTarget = e.target;
198
206
  const mouseX = e.clientX;
199
207
  const mouseY = e.clientY;
200
208
  if (rafIdRef.current !== null) {
@@ -204,6 +212,9 @@ function useFluidHover(containerRef, options = {}) {
204
212
  rafIdRef.current = null;
205
213
  const container = containerRef.current;
206
214
  if (!container) return;
215
+ const enclosingGroup = container.closest(GROUP_SELECTOR);
216
+ const groupInside = (group) => group === enclosingGroup ? null : group;
217
+ const pointerGroup = groupInside(pointerTarget.closest(GROUP_SELECTOR));
207
218
  setActiveIndex(
208
219
  pickNearest({
209
220
  axis,
@@ -213,10 +224,12 @@ function useFluidHover(containerRef, options = {}) {
213
224
  scroll: { x: container.scrollLeft, y: container.scrollTop },
214
225
  border: { x: container.clientLeft, y: container.clientTop },
215
226
  layoutSize: { width: container.offsetWidth, height: container.offsetHeight },
216
- isDisabled: isItemDisabled ? (index) => {
217
- const el = itemsRef.current.get(index);
218
- return !!el && isItemDisabled(el);
219
- } : void 0
227
+ isDisabled: (index) => {
228
+ if (groupInside(itemGroupsRef.current.get(index)) !== pointerGroup) return true;
229
+ const element = itemsRef.current.get(index);
230
+ return !!element && !!isItemDisabled?.(element);
231
+ },
232
+ onlyBetweenItems: pointerGroup !== null
220
233
  })
221
234
  );
222
235
  });
@@ -299,6 +312,7 @@ function useRegisterFluidHoverItem(registerItem, index, ref) {
299
312
 
300
313
  exports.ACTIVE_ATTR = ACTIVE_ATTR;
301
314
  exports.ACTIVE_INDEX_ATTR = ACTIVE_INDEX_ATTR;
315
+ exports.GROUP_ATTR = GROUP_ATTR;
302
316
  exports.pickNearest = pickNearest;
303
317
  exports.useFluidHover = useFluidHover;
304
318
  exports.useRegisterFluidHoverItem = useRegisterFluidHoverItem;
@@ -1 +1 @@
1
- {"version":3,"file":"use-fluid-hover.cjs.js","sources":["../../src/hooks/use-fluid-hover.ts"],"sourcesContent":["'use client';\n\nimport { useRef, useState, useCallback, useEffect, type Dispatch, type RefObject, type SetStateAction } from 'react';\n\nexport interface ItemRect {\n top: number;\n height: number;\n left: number;\n width: number;\n}\n\nexport interface UseFluidHoverOptions {\n /**\n * Which direction to resolve the nearest item along.\n * \"y\" — vertical lists (default): closest by top/height\n * \"x\" — horizontal strips: closest by left/width\n * \"xy\" — 2-D grids: closest card across both rows AND columns,\n * measured by Euclidean distance to each item's center\n */\n axis?: 'x' | 'y' | 'xy';\n /**\n * Makes an item invisible to hit-testing without unregistering it — for\n * rows that stay mounted while clipped away (a collapsed sub-tree).\n * Unregistering would invalidate every measurement; a skipped item keeps\n * the set stable. Consulted per mouse move, so keep it cheap.\n */\n isItemDisabled?: (element: HTMLElement) => boolean;\n /**\n * Whether a click that lands between items (a gap, the padding, past the\n * last row) is routed to the highlighted item, so what is lit is what a\n * click hits. On by default: in a menu or a list the highlight is a\n * promise about the click. Pass `false` where empty space should stay\n * inert (rows with destructive actions, generous whitespace), or\n * `{ maxDistance }` to route only clicks within that many pixels of the\n * highlighted item's edge.\n */\n gapClick?: boolean | { maxDistance?: number };\n}\n\nexport interface UseFluidHoverReturn {\n activeIndex: number | null;\n setActiveIndex: Dispatch<SetStateAction<number | null>>;\n itemRects: ItemRect[];\n /**\n * True once every registered item has been measured and no remeasure is\n * pending, i.e. `itemRects` describes the current item set. Gate absolutely\n * positioned overlays on it: an overlay that mounts against a rect a later\n * pass still corrects animates from the wrong place to the right one, which\n * reads as the highlight sliding in from another row.\n */\n isMeasured: boolean;\n /**\n * Events whose target sits outside the container in the DOM are ignored:\n * React bubbles events from a portaled child (a submenu) through its React\n * parents, and those must not steer or click this list.\n */\n handlers: {\n onMouseMove: (e: React.MouseEvent) => void;\n onMouseLeave: (e: React.MouseEvent) => void;\n /**\n * Routes a click that lands between items (a gap, the padding, past the\n * last row) to the highlighted item, so the highlight and the click agree:\n * what is lit is what a click hits. A click inside an item is left to the\n * item. Disabled items (`isItemDisabled`) are never activated.\n */\n onClick: (e: React.MouseEvent) => void;\n };\n registerItem: (index: number, element: HTMLElement | null) => void;\n /**\n * Invalidates the published rects and runs the hook's coalesced measurement\n * pass again, holding `isMeasured` false until it settles. Reach for it when\n * the rects may be wrong and showing an overlay against them would misplace\n * it: a popup that stays mounted between opens keeps its items registered,\n * so nothing else would notice that its rects were taken while it was\n * hidden. Registration, item resize, and container resize already trigger\n * a pass; do not call this on `children` changes.\n */\n remeasure: () => void;\n /**\n * Re-reads the rects synchronously, keeping `isMeasured` as it is. Only for\n * layout that moves the rows under a visible overlay frame by frame (the\n * accordion re-measures inside its height animation). Everything else\n * wants `remeasure`, or nothing.\n */\n measureItems: () => void;\n}\n\nexport interface PickNearestInput {\n axis: 'x' | 'y' | 'xy';\n /** The pointer, in viewport coordinates. */\n point: { x: number; y: number };\n /** Item rects in the container's layout space (sparse: unregistered slots\n * are undefined). */\n rects: readonly (ItemRect | undefined)[];\n /** The container's bounding rect and live scroll / border offsets, which\n * map layout rects into the pointer's viewport space. */\n containerRect: { left: number; top: number; width: number; height: number };\n scroll: { x: number; y: number };\n border: { x: number; y: number };\n /** Layout size of the container, so a cumulative ancestor `transform:\n * scale` (a popup mid scale-in) can be factored out per axis. */\n layoutSize: { width: number; height: number };\n /** Skips an item without unregistering it. */\n isDisabled?: (index: number) => boolean;\n}\n\nfunction isOverDisabledItem(\n items: Iterable<HTMLElement>,\n point: { clientX: number; clientY: number },\n isItemDisabled: ((element: HTMLElement) => boolean) | undefined,\n) {\n for (const element of items) {\n if (!isItemDisabled?.(element)) continue;\n const r = element.getBoundingClientRect();\n if (point.clientX >= r.left && point.clientX <= r.right && point.clientY >= r.top && point.clientY <= r.bottom) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The rule, as one pure function: an item the pointer is inside wins;\n * otherwise the item whose center is nearest does, so a pointer in a gap, in\n * the padding, or past the last row still lands. `y` and `x` measure one\n * coordinate; `xy` measures the straight line to each center. Ties keep the\n * first item. The hook calls this once per animation frame; the docs page\n * times it.\n */\nexport function pickNearest({\n axis,\n point,\n rects,\n containerRect,\n scroll,\n border,\n layoutSize,\n isDisabled,\n}: PickNearestInput): number | null {\n const scaleX = layoutSize.width > 0 ? containerRect.width / layoutSize.width : 1;\n const scaleY = layoutSize.height > 0 ? containerRect.height / layoutSize.height : 1;\n let closestIndex: number | null = null;\n let closestDistance = Infinity;\n let containingIndex: number | null = null;\n\n for (let index = 0; index < rects.length; index++) {\n const r = rects[index];\n if (!r) continue;\n if (isDisabled?.(index)) continue;\n\n if (axis === 'xy') {\n const left = containerRect.left + (border.x + r.left - scroll.x) * scaleX;\n const top = containerRect.top + (border.y + r.top - scroll.y) * scaleY;\n const width = r.width * scaleX;\n const height = r.height * scaleY;\n if (point.x >= left && point.x <= left + width && point.y >= top && point.y <= top + height) {\n containingIndex = index;\n }\n const distance = Math.hypot(point.x - (left + width / 2), point.y - (top + height / 2));\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n continue;\n }\n\n const horizontal = axis === 'x';\n const mousePos = horizontal ? point.x : point.y;\n const scale = horizontal ? scaleX : scaleY;\n const itemStart =\n (horizontal ? containerRect.left : containerRect.top) +\n ((horizontal ? border.x : border.y) + (horizontal ? r.left : r.top) - (horizontal ? scroll.x : scroll.y)) * scale;\n const itemSize = (horizontal ? r.width : r.height) * scale;\n if (mousePos >= itemStart && mousePos <= itemStart + itemSize) {\n containingIndex = index;\n }\n const distance = Math.abs(mousePos - (itemStart + itemSize / 2));\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n }\n\n return containingIndex ?? closestIndex;\n}\n\n/** Set on the highlighted item (boolean attribute). */\nexport const ACTIVE_ATTR = 'data-fluid-hover-active';\n/** Set on the container: the highlighted index, or absent. */\nexport const ACTIVE_INDEX_ATTR = 'data-fluid-hover-active-index';\n\n/** False for an event bubbled through React from a portal outside the container, and for a detached target. */\nfunction isFromInside(e: React.SyntheticEvent) {\n return e.target instanceof Node && e.currentTarget.contains(e.target);\n}\n\nconst ACTIVATOR_SELECTOR =\n \"a[href], button, [role='menuitem'], [role='menuitemradio'], [role='menuitemcheckbox'], [role='option'], [role='radio'], [role='checkbox'], [role='tab'], [role='link'], [role='button']\";\n\n/**\n * The element a routed click should land on. A registered item is usually\n * the interactive row itself; when it is only a box around one (a sidebar\n * row around its button, a card around its link), the first control inside\n * is what a real click on the row would have reached.\n */\nfunction resolveActivator(element: HTMLElement): HTMLElement {\n if (element.matches(ACTIVATOR_SELECTOR) || element.hasAttribute('tabindex')) {\n return element;\n }\n return element.querySelector<HTMLElement>(ACTIVATOR_SELECTOR) ?? element;\n}\n\n/**\n * How many frames the coalesced remeasure retries while the registered items\n * still have no layout box. A popup can be in the DOM one frame before it is\n * laid out; retrying beats publishing zeroed rects, and the cap keeps a list\n * that stays hidden for good from spinning frames forever.\n */\nconst measurementAttempts = 3;\n\nconst CONTROL_BETWEEN_ROWS =\n \"input, textarea, select, button, a, label, summary, [contenteditable], [role='textbox'], [role='searchbox'], [role='button'], [role='link'], [role='radio'], [role='checkbox'], [role='switch'], [role='slider'], [role='spinbutton'], [role='tab'], [role='radiogroup'], [role='tablist'], [role='toolbar']\";\n\nexport function useFluidHover<T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n options: UseFluidHoverOptions = {},\n): UseFluidHoverReturn {\n const { axis = 'y', isItemDisabled, gapClick = true } = options;\n const gapClickMaxDistance = typeof gapClick === 'object' ? (gapClick.maxDistance ?? Infinity) : Infinity;\n const itemsRef = useRef(new Map<number, HTMLElement>());\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n // Mirrored for handlers that read it outside a render (the gap click).\n const activeIndexRef = useRef<number | null>(null);\n activeIndexRef.current = activeIndex;\n\n // The state, in the DOM: `data-fluid-hover-active` on the highlighted item\n // and `data-fluid-hover-active-index` on the container. Devtools shows it\n // and a test asserts on it without waiting for a frame. React does not\n // manage these attributes, so it never clobbers them.\n useEffect(() => {\n const container = containerRef.current;\n if (activeIndex === null) container?.removeAttribute(ACTIVE_INDEX_ATTR);\n else container?.setAttribute(ACTIVE_INDEX_ATTR, String(activeIndex));\n const active = activeIndex === null ? undefined : itemsRef.current.get(activeIndex);\n active?.setAttribute(ACTIVE_ATTR, '');\n return () => {\n active?.removeAttribute(ACTIVE_ATTR);\n // A row that re-registered under this index while it was highlighted\n // (a remount under a new key) was marked by registerItem, not by this\n // effect: drop the mark from whatever element holds the index now.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- itemsRef is a registry Map, reading it at cleanup is the point\n if (activeIndex !== null) itemsRef.current.get(activeIndex)?.removeAttribute(ACTIVE_ATTR);\n };\n }, [activeIndex, containerRef]);\n const [itemRects, setItemRects] = useState<ItemRect[]>([]);\n const [isMeasured, setIsMeasured] = useState(false);\n const itemRectsRef = useRef<ItemRect[]>([]);\n const rafIdRef = useRef<number | null>(null);\n const remeasureRafIdRef = useRef<number | null>(null);\n\n /**\n * Publishes a rect for every registered item. Returns false when the\n * measurement could not be completed (no container, or an item without a\n * layout box) — nothing is published in that case, so the last complete\n * measurement stands instead of being overwritten with zeroes.\n */\n const runMeasurement = useCallback(() => {\n const container = containerRef.current;\n if (!container) return false;\n const rects: ItemRect[] = [];\n let everyItemHasLayout = true;\n itemsRef.current.forEach((element, index) => {\n // An element inside a display:none / not-yet-laid-out popup has no\n // offsetParent and reports every offset as 0. Publishing that would pin\n // overlays to the top of the list, so treat the whole pass as\n // incomplete. A boxless element is the only case: `position: fixed`\n // items also have no offsetParent but do have a size.\n const hasLayoutBox = element.offsetParent !== null || element.offsetWidth > 0 || element.offsetHeight > 0;\n if (!hasLayoutBox) {\n everyItemHasLayout = false;\n return;\n }\n // Use offset* instead of getBoundingClientRect so measurements are\n // unaffected by CSS transforms (e.g. scaleY animation on the parent\n // motion.div). offsetTop/offsetLeft are layout values relative to the\n // offsetParent (the scroll container), matching the coordinate space\n // used by `position: absolute` children. Items nested inside positioned\n // descendants of the container (a sidebar sub-menu's rows live inside a\n // positioned row) accumulate those ancestors' offsets, so every rect\n // lands in the container's own coordinate space; for a flat list the\n // loop never runs and this is exactly the plain offsetTop/offsetLeft.\n let top = element.offsetTop;\n let left = element.offsetLeft;\n let ancestor = element.offsetParent;\n while (ancestor instanceof HTMLElement && ancestor !== container && container.contains(ancestor)) {\n top += ancestor.offsetTop + ancestor.clientTop;\n left += ancestor.offsetLeft + ancestor.clientLeft;\n ancestor = ancestor.offsetParent;\n }\n rects[index] = {\n top,\n height: element.offsetHeight,\n left,\n width: element.offsetWidth,\n };\n });\n if (!everyItemHasLayout) return false;\n // Skip the state update when nothing moved (a cheap top/left/width/height\n // compare) so redundant remeasures don't churn re-renders.\n const prev = itemRectsRef.current;\n let changed = prev.length !== rects.length;\n for (let i = 0; !changed && i < rects.length; i++) {\n const p = prev[i];\n const r = rects[i];\n if (p === r) continue; // both undefined (sparse slot)\n changed = !p || !r || p.top !== r.top || p.left !== r.left || p.width !== r.width || p.height !== r.height;\n }\n if (changed) {\n itemRectsRef.current = rects;\n setItemRects(rects);\n }\n return true;\n }, [containerRef]);\n\n const measureItems = useCallback(() => {\n runMeasurement();\n }, [runMeasurement]);\n\n /**\n * The hook's single measurement pass: coalesces every trigger (item\n * registration, container resize) into one remeasure on the next frame and\n * is the only place readiness is reported, so `isMeasured` can never turn\n * true while another pass is still queued.\n */\n const scheduleMeasurement = useCallback(\n (attemptsLeft: number) => {\n if (remeasureRafIdRef.current !== null) {\n cancelAnimationFrame(remeasureRafIdRef.current);\n }\n remeasureRafIdRef.current = requestAnimationFrame(() => {\n remeasureRafIdRef.current = null;\n if (runMeasurement()) {\n setIsMeasured(true);\n } else if (attemptsLeft > 1) {\n scheduleMeasurement(attemptsLeft - 1);\n }\n });\n },\n [runMeasurement],\n );\n\n const remeasure = useCallback(() => {\n // Readiness drops first: until the pass below settles, the published rects\n // may not describe what is on screen, and an overlay positioned from them\n // would be corrected after mounting — which animates as a slide.\n setIsMeasured(false);\n scheduleMeasurement(measurementAttempts);\n }, [scheduleMeasurement]);\n\n // Observes the registered items themselves (not just the container): rows\n // that change size in place — e.g. the site-wide size step flipping while a\n // selection background is up — must invalidate the published rects even when\n // the container the effect below captured has since been remounted and the\n // ref points at a different element than the one being observed.\n const itemRoRef = useRef<ResizeObserver | null>(null);\n const getItemRo = useCallback(() => {\n if (itemRoRef.current === null && typeof ResizeObserver !== 'undefined') {\n itemRoRef.current = new ResizeObserver(() => scheduleMeasurement(measurementAttempts));\n }\n return itemRoRef.current;\n }, [scheduleMeasurement]);\n\n const registerItem = useCallback(\n (index: number, element: HTMLElement | null) => {\n if (element) {\n itemsRef.current.set(index, element);\n getItemRo()?.observe(element);\n if (index === activeIndexRef.current) element.setAttribute(ACTIVE_ATTR, '');\n } else {\n const previous = itemsRef.current.get(index);\n if (previous) itemRoRef.current?.unobserve(previous);\n // The mark leaves with the element: a row that only moved to another\n // index (a filtering list re-ordering) must not carry it there.\n previous?.removeAttribute(ACTIVE_ATTR);\n itemsRef.current.delete(index);\n // The highlighted row is gone: nothing should stay lit or receive a\n // routed click until the pointer picks again. Decided when the\n // update applies, after this commit's registrations, so a row that\n // only moved index hands the highlight to the row now under it.\n if (index === activeIndexRef.current) {\n setActiveIndex(current => (current === index && !itemsRef.current.has(index) ? null : current));\n }\n }\n // Coalesce rapid register/unregister calls (e.g. when an AnimatePresence\n // remounts a list of rows) into a single remeasure on the next frame,\n // so consumers don't have to manually call measureItems after the\n // container's children swap. A lit row keeps its element (unregistering\n // it clears the highlight), so its rect stays good while the pass runs:\n // dropping readiness then would blink the highlight every time a\n // virtualized list mounts a row while scrolling.\n if (activeIndexRef.current === null) remeasure();\n else scheduleMeasurement(measurementAttempts);\n },\n [remeasure, scheduleMeasurement, getItemRo],\n );\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n if (!isFromInside(e)) return;\n const mouseX = e.clientX;\n const mouseY = e.clientY;\n\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n const container = containerRef.current;\n if (!container) return;\n setActiveIndex(\n pickNearest({\n axis,\n point: { x: mouseX, y: mouseY },\n rects: itemRectsRef.current,\n containerRect: container.getBoundingClientRect(),\n scroll: { x: container.scrollLeft, y: container.scrollTop },\n border: { x: container.clientLeft, y: container.clientTop },\n layoutSize: { width: container.offsetWidth, height: container.offsetHeight },\n isDisabled: isItemDisabled\n ? index => {\n const el = itemsRef.current.get(index);\n return !!el && isItemDisabled(el);\n }\n : undefined,\n }),\n );\n });\n },\n [axis, containerRef, isItemDisabled],\n );\n\n const handleMouseLeave = useCallback((e: React.MouseEvent) => {\n if (!isFromInside(e)) return;\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n setActiveIndex(null);\n }, []);\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n // Outside the container in the DOM: a portaled child's click, or a row\n // that unmounted while its own click was still bubbling (a pick whose\n // primitive re-renders the list synchronously). Neither is a gap.\n const { target } = e;\n if (!(target instanceof Element) || !isFromInside(e)) return;\n // Inside an item: the item owns the click.\n for (const element of itemsRef.current.values()) {\n if (element.contains(target)) return;\n }\n // A control that sits between the rows (a search field at the top of\n // a menu, a footer button, a theme toggle) keeps its own click too.\n if (target.closest(CONTROL_BETWEEN_ROWS)) return;\n if (gapClick === false) return;\n if (isOverDisabledItem(itemsRef.current.values(), e, isItemDisabled)) return;\n const index = activeIndexRef.current;\n if (index === null) return;\n const element = itemsRef.current.get(index);\n if (!element || isItemDisabled?.(element)) return;\n if (gapClickMaxDistance !== Infinity) {\n const r = element.getBoundingClientRect();\n const dx = Math.max(r.left - e.clientX, 0, e.clientX - r.right);\n const dy = Math.max(r.top - e.clientY, 0, e.clientY - r.bottom);\n if (Math.hypot(dx, dy) > gapClickMaxDistance) return;\n }\n // A real DOM click on the item, so its own handlers (and the primitive\n // wrapping it, if any) run exactly as if the pointer had been inside.\n resolveActivator(element).click();\n },\n [isItemDisabled, gapClick, gapClickMaxDistance],\n );\n\n // Remeasure when the container resizes — a reflow moves items even though\n // the registered set is unchanged, which would otherwise leave itemRects\n // stale. Coalesced through the same rAF as register/unregister. Readiness is\n // deliberately not dropped: the item set is unchanged, so the published rects\n // stay usable, and hiding overlays on every reflow would flicker them.\n useEffect(() => {\n const container = containerRef.current;\n if (!container || typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(() => scheduleMeasurement(measurementAttempts));\n ro.observe(container);\n return () => ro.disconnect();\n }, [containerRef, scheduleMeasurement]);\n\n // Clean up rAF and the item observer on unmount\n useEffect(() => {\n return () => {\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n if (remeasureRafIdRef.current !== null) {\n cancelAnimationFrame(remeasureRafIdRef.current);\n }\n itemRoRef.current?.disconnect();\n itemRoRef.current = null;\n };\n }, []);\n\n return {\n activeIndex,\n setActiveIndex,\n itemRects,\n isMeasured,\n handlers: {\n onMouseMove: handleMouseMove,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n },\n registerItem,\n remeasure,\n measureItems,\n };\n}\n\n/**\n * Registers an item's element with its list for as long as it is mounted.\n * The one way rows join a list: pass the hook's `registerItem` (or the copy\n * a context hands down), the row's index, and its ref. Either may be\n * missing for a row rendered outside a list (a standalone card, an accordion\n * item that is not grouped); then nothing is registered.\n */\nexport function useRegisterFluidHoverItem(\n registerItem: ((index: number, element: HTMLElement | null) => void) | undefined,\n index: number | undefined,\n ref: RefObject<HTMLElement | null>,\n) {\n useEffect(() => {\n if (!registerItem || index === undefined) return;\n registerItem(index, ref.current);\n return () => registerItem(index, null);\n }, [index, registerItem, ref]);\n}\n"],"names":["distance","useRef","useState","useEffect","useCallback","element"],"mappings":"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"}
1
+ {"version":3,"file":"use-fluid-hover.cjs.js","sources":["../../src/hooks/use-fluid-hover.ts"],"sourcesContent":["'use client';\n\nimport { useRef, useState, useCallback, useEffect, type Dispatch, type RefObject, type SetStateAction } from 'react';\n\nexport interface ItemRect {\n top: number;\n height: number;\n left: number;\n width: number;\n}\n\nexport interface UseFluidHoverOptions {\n /**\n * Which direction to resolve the nearest item along.\n * \"y\" — vertical lists (default): closest by top/height\n * \"x\" — horizontal strips: closest by left/width\n * \"xy\" — 2-D grids: closest card across both rows AND columns,\n * measured by Euclidean distance to each item's center\n */\n axis?: 'x' | 'y' | 'xy';\n /**\n * Makes an item invisible to hit-testing without unregistering it — for\n * rows that stay mounted while clipped away (a collapsed sub-tree).\n * Unregistering would invalidate every measurement; a skipped item keeps\n * the set stable. Consulted per mouse move, so keep it cheap.\n */\n isItemDisabled?: (element: HTMLElement) => boolean;\n /**\n * Whether a click that lands between items (a gap, the padding, past the\n * last row) is routed to the highlighted item, so what is lit is what a\n * click hits. On by default: in a menu or a list the highlight is a\n * promise about the click. Pass `false` where empty space should stay\n * inert (rows with destructive actions, generous whitespace), or\n * `{ maxDistance }` to route only clicks within that many pixels of the\n * highlighted item's edge.\n */\n gapClick?: boolean | { maxDistance?: number };\n}\n\nexport interface UseFluidHoverReturn {\n activeIndex: number | null;\n setActiveIndex: Dispatch<SetStateAction<number | null>>;\n itemRects: ItemRect[];\n /**\n * True once every registered item has been measured and no remeasure is\n * pending, i.e. `itemRects` describes the current item set. Gate absolutely\n * positioned overlays on it: an overlay that mounts against a rect a later\n * pass still corrects animates from the wrong place to the right one, which\n * reads as the highlight sliding in from another row.\n */\n isMeasured: boolean;\n /**\n * Events whose target sits outside the container in the DOM are ignored:\n * React bubbles events from a portaled child (a submenu) through its React\n * parents, and those must not steer or click this list.\n */\n handlers: {\n onMouseMove: (e: React.MouseEvent) => void;\n onMouseLeave: (e: React.MouseEvent) => void;\n /**\n * Routes a click that lands between items (a gap, the padding, past the\n * last row) to the highlighted item, so the highlight and the click agree:\n * what is lit is what a click hits. A click inside an item is left to the\n * item. Disabled items (`isItemDisabled`) are never activated.\n */\n onClick: (e: React.MouseEvent) => void;\n };\n registerItem: (index: number, element: HTMLElement | null) => void;\n /**\n * Invalidates the published rects and runs the hook's coalesced measurement\n * pass again, holding `isMeasured` false until it settles. Reach for it when\n * the rects may be wrong and showing an overlay against them would misplace\n * it: a popup that stays mounted between opens keeps its items registered,\n * so nothing else would notice that its rects were taken while it was\n * hidden. Registration, item resize, and container resize already trigger\n * a pass; do not call this on `children` changes.\n */\n remeasure: () => void;\n /**\n * Re-reads the rects synchronously, keeping `isMeasured` as it is. Only for\n * layout that moves the rows under a visible overlay frame by frame (the\n * accordion re-measures inside its height animation). Everything else\n * wants `remeasure`, or nothing.\n */\n measureItems: () => void;\n}\n\nexport interface PickNearestInput {\n axis: 'x' | 'y' | 'xy';\n /** The pointer, in viewport coordinates. */\n point: { x: number; y: number };\n /** Item rects in the container's layout space (sparse: unregistered slots\n * are undefined). */\n rects: readonly (ItemRect | undefined)[];\n /** The container's bounding rect and live scroll / border offsets, which\n * map layout rects into the pointer's viewport space. */\n containerRect: { left: number; top: number; width: number; height: number };\n scroll: { x: number; y: number };\n border: { x: number; y: number };\n /** Layout size of the container, so a cumulative ancestor `transform:\n * scale` (a popup mid scale-in) can be factored out per axis. */\n layoutSize: { width: number; height: number };\n /** Skips an item without unregistering it. */\n isDisabled?: (index: number) => boolean;\n /** Resolves nothing once the pointer leaves the span from the first item to the last. */\n onlyBetweenItems?: boolean;\n}\n\ninterface ViewportBox {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nfunction boxContains(box: ViewportBox, point: { x: number; y: number }, axis: PickNearestInput['axis']) {\n const insideX = point.x >= box.left && point.x <= box.right;\n const insideY = point.y >= box.top && point.y <= box.bottom;\n if (axis === 'x') return insideX;\n if (axis === 'y') return insideY;\n return insideX && insideY;\n}\n\nfunction distanceToCenter(box: ViewportBox, point: { x: number; y: number }, axis: PickNearestInput['axis']) {\n const dx = point.x - (box.left + box.right) / 2;\n const dy = point.y - (box.top + box.bottom) / 2;\n if (axis === 'x') return Math.abs(dx);\n if (axis === 'y') return Math.abs(dy);\n return Math.hypot(dx, dy);\n}\n\nfunction isOverDisabledItem(\n items: Iterable<HTMLElement>,\n point: { clientX: number; clientY: number },\n isItemDisabled: ((element: HTMLElement) => boolean) | undefined,\n) {\n for (const element of items) {\n if (!isItemDisabled?.(element)) continue;\n const r = element.getBoundingClientRect();\n if (point.clientX >= r.left && point.clientX <= r.right && point.clientY >= r.top && point.clientY <= r.bottom) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The rule, as one pure function: an item the pointer is inside wins;\n * otherwise the item whose center is nearest does, so a pointer in a gap, in\n * the padding, or past the last row still lands. `y` and `x` measure one\n * coordinate; `xy` measures the straight line to each center. Ties keep the\n * first item. The hook calls this once per animation frame; the docs page\n * times it.\n */\nexport function pickNearest({\n axis,\n point,\n rects,\n containerRect,\n scroll,\n border,\n layoutSize,\n isDisabled,\n onlyBetweenItems = false,\n}: PickNearestInput): number | null {\n const scaleX = layoutSize.width > 0 ? containerRect.width / layoutSize.width : 1;\n const scaleY = layoutSize.height > 0 ? containerRect.height / layoutSize.height : 1;\n let closestIndex: number | null = null;\n let closestDistance = Infinity;\n let containingIndex: number | null = null;\n const itemSpan: ViewportBox = { left: Infinity, top: Infinity, right: -Infinity, bottom: -Infinity };\n\n for (let index = 0; index < rects.length; index++) {\n const r = rects[index];\n if (!r) continue;\n if (isDisabled?.(index)) continue;\n\n const left = containerRect.left + (border.x + r.left - scroll.x) * scaleX;\n const top = containerRect.top + (border.y + r.top - scroll.y) * scaleY;\n const box: ViewportBox = { left, top, right: left + r.width * scaleX, bottom: top + r.height * scaleY };\n itemSpan.left = Math.min(itemSpan.left, box.left);\n itemSpan.top = Math.min(itemSpan.top, box.top);\n itemSpan.right = Math.max(itemSpan.right, box.right);\n itemSpan.bottom = Math.max(itemSpan.bottom, box.bottom);\n\n if (boxContains(box, point, axis)) containingIndex = index;\n const distance = distanceToCenter(box, point, axis);\n if (distance < closestDistance) {\n closestDistance = distance;\n closestIndex = index;\n }\n }\n\n if (onlyBetweenItems && !boxContains(itemSpan, point, axis)) return null;\n return containingIndex ?? closestIndex;\n}\n\n/** Set on the highlighted item (boolean attribute). */\nexport const ACTIVE_ATTR = 'data-fluid-hover-active';\n/** Set on the container: the highlighted index, or absent. */\nexport const ACTIVE_INDEX_ATTR = 'data-fluid-hover-active-index';\n/** Marks an element whose items form their own hover group: the highlight stays between that group's items. */\nexport const GROUP_ATTR = 'data-fluid-hover-group';\nconst GROUP_SELECTOR = `[${GROUP_ATTR}]`;\n\n/** False for an event bubbled through React from a portal outside the container, and for a detached target. */\nfunction isFromInside(e: React.SyntheticEvent) {\n return e.target instanceof Node && e.currentTarget.contains(e.target);\n}\n\nconst ACTIVATOR_SELECTOR =\n \"a[href], button, [role='menuitem'], [role='menuitemradio'], [role='menuitemcheckbox'], [role='option'], [role='radio'], [role='checkbox'], [role='tab'], [role='link'], [role='button']\";\n\n/**\n * The element a routed click should land on. A registered item is usually\n * the interactive row itself; when it is only a box around one (a sidebar\n * row around its button, a card around its link), the first control inside\n * is what a real click on the row would have reached.\n */\nfunction resolveActivator(element: HTMLElement): HTMLElement {\n if (element.matches(ACTIVATOR_SELECTOR) || element.hasAttribute('tabindex')) {\n return element;\n }\n return element.querySelector<HTMLElement>(ACTIVATOR_SELECTOR) ?? element;\n}\n\n/**\n * How many frames the coalesced remeasure retries while the registered items\n * still have no layout box. A popup can be in the DOM one frame before it is\n * laid out; retrying beats publishing zeroed rects, and the cap keeps a list\n * that stays hidden for good from spinning frames forever.\n */\nconst measurementAttempts = 3;\n\nconst CONTROL_BETWEEN_ROWS =\n \"input, textarea, select, button, a, label, summary, [contenteditable], [role='textbox'], [role='searchbox'], [role='button'], [role='link'], [role='radio'], [role='checkbox'], [role='switch'], [role='slider'], [role='spinbutton'], [role='tab'], [role='radiogroup'], [role='tablist'], [role='toolbar']\";\n\nexport function useFluidHover<T extends HTMLElement>(\n containerRef: RefObject<T | null>,\n options: UseFluidHoverOptions = {},\n): UseFluidHoverReturn {\n const { axis = 'y', isItemDisabled, gapClick = true } = options;\n const gapClickMaxDistance = typeof gapClick === 'object' ? (gapClick.maxDistance ?? Infinity) : Infinity;\n const itemsRef = useRef(new Map<number, HTMLElement>());\n const itemGroupsRef = useRef(new Map<number, Element | null>());\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n // Mirrored for handlers that read it outside a render (the gap click).\n const activeIndexRef = useRef<number | null>(null);\n activeIndexRef.current = activeIndex;\n\n // The state, in the DOM: `data-fluid-hover-active` on the highlighted item\n // and `data-fluid-hover-active-index` on the container. Devtools shows it\n // and a test asserts on it without waiting for a frame. React does not\n // manage these attributes, so it never clobbers them.\n useEffect(() => {\n const container = containerRef.current;\n if (activeIndex === null) container?.removeAttribute(ACTIVE_INDEX_ATTR);\n else container?.setAttribute(ACTIVE_INDEX_ATTR, String(activeIndex));\n const active = activeIndex === null ? undefined : itemsRef.current.get(activeIndex);\n active?.setAttribute(ACTIVE_ATTR, '');\n return () => {\n active?.removeAttribute(ACTIVE_ATTR);\n // A row that re-registered under this index while it was highlighted\n // (a remount under a new key) was marked by registerItem, not by this\n // effect: drop the mark from whatever element holds the index now.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- itemsRef is a registry Map, reading it at cleanup is the point\n if (activeIndex !== null) itemsRef.current.get(activeIndex)?.removeAttribute(ACTIVE_ATTR);\n };\n }, [activeIndex, containerRef]);\n const [itemRects, setItemRects] = useState<ItemRect[]>([]);\n const [isMeasured, setIsMeasured] = useState(false);\n const itemRectsRef = useRef<ItemRect[]>([]);\n const rafIdRef = useRef<number | null>(null);\n const remeasureRafIdRef = useRef<number | null>(null);\n\n /**\n * Publishes a rect for every registered item. Returns false when the\n * measurement could not be completed (no container, or an item without a\n * layout box) — nothing is published in that case, so the last complete\n * measurement stands instead of being overwritten with zeroes.\n */\n const runMeasurement = useCallback(() => {\n const container = containerRef.current;\n if (!container) return false;\n const rects: ItemRect[] = [];\n let everyItemHasLayout = true;\n itemsRef.current.forEach((element, index) => {\n // An element inside a display:none / not-yet-laid-out popup has no\n // offsetParent and reports every offset as 0. Publishing that would pin\n // overlays to the top of the list, so treat the whole pass as\n // incomplete. A boxless element is the only case: `position: fixed`\n // items also have no offsetParent but do have a size.\n const hasLayoutBox = element.offsetParent !== null || element.offsetWidth > 0 || element.offsetHeight > 0;\n if (!hasLayoutBox) {\n everyItemHasLayout = false;\n return;\n }\n // Use offset* instead of getBoundingClientRect so measurements are\n // unaffected by CSS transforms (e.g. scaleY animation on the parent\n // motion.div). offsetTop/offsetLeft are layout values relative to the\n // offsetParent (the scroll container), matching the coordinate space\n // used by `position: absolute` children. Items nested inside positioned\n // descendants of the container (a sidebar sub-menu's rows live inside a\n // positioned row) accumulate those ancestors' offsets, so every rect\n // lands in the container's own coordinate space; for a flat list the\n // loop never runs and this is exactly the plain offsetTop/offsetLeft.\n let top = element.offsetTop;\n let left = element.offsetLeft;\n let ancestor = element.offsetParent;\n while (ancestor instanceof HTMLElement && ancestor !== container && container.contains(ancestor)) {\n top += ancestor.offsetTop + ancestor.clientTop;\n left += ancestor.offsetLeft + ancestor.clientLeft;\n ancestor = ancestor.offsetParent;\n }\n rects[index] = {\n top,\n height: element.offsetHeight,\n left,\n width: element.offsetWidth,\n };\n });\n if (!everyItemHasLayout) return false;\n // Skip the state update when nothing moved (a cheap top/left/width/height\n // compare) so redundant remeasures don't churn re-renders.\n const prev = itemRectsRef.current;\n let changed = prev.length !== rects.length;\n for (let i = 0; !changed && i < rects.length; i++) {\n const p = prev[i];\n const r = rects[i];\n if (p === r) continue; // both undefined (sparse slot)\n changed = !p || !r || p.top !== r.top || p.left !== r.left || p.width !== r.width || p.height !== r.height;\n }\n if (changed) {\n itemRectsRef.current = rects;\n setItemRects(rects);\n }\n return true;\n }, [containerRef]);\n\n const measureItems = useCallback(() => {\n runMeasurement();\n }, [runMeasurement]);\n\n /**\n * The hook's single measurement pass: coalesces every trigger (item\n * registration, container resize) into one remeasure on the next frame and\n * is the only place readiness is reported, so `isMeasured` can never turn\n * true while another pass is still queued.\n */\n const scheduleMeasurement = useCallback(\n (attemptsLeft: number) => {\n if (remeasureRafIdRef.current !== null) {\n cancelAnimationFrame(remeasureRafIdRef.current);\n }\n remeasureRafIdRef.current = requestAnimationFrame(() => {\n remeasureRafIdRef.current = null;\n if (runMeasurement()) {\n setIsMeasured(true);\n } else if (attemptsLeft > 1) {\n scheduleMeasurement(attemptsLeft - 1);\n }\n });\n },\n [runMeasurement],\n );\n\n const remeasure = useCallback(() => {\n // Readiness drops first: until the pass below settles, the published rects\n // may not describe what is on screen, and an overlay positioned from them\n // would be corrected after mounting — which animates as a slide.\n setIsMeasured(false);\n scheduleMeasurement(measurementAttempts);\n }, [scheduleMeasurement]);\n\n // Observes the registered items themselves (not just the container): rows\n // that change size in place — e.g. the site-wide size step flipping while a\n // selection background is up — must invalidate the published rects even when\n // the container the effect below captured has since been remounted and the\n // ref points at a different element than the one being observed.\n const itemRoRef = useRef<ResizeObserver | null>(null);\n const getItemRo = useCallback(() => {\n if (itemRoRef.current === null && typeof ResizeObserver !== 'undefined') {\n itemRoRef.current = new ResizeObserver(() => scheduleMeasurement(measurementAttempts));\n }\n return itemRoRef.current;\n }, [scheduleMeasurement]);\n\n const registerItem = useCallback(\n (index: number, element: HTMLElement | null) => {\n if (element) {\n itemsRef.current.set(index, element);\n itemGroupsRef.current.set(index, element.closest(GROUP_SELECTOR));\n getItemRo()?.observe(element);\n if (index === activeIndexRef.current) element.setAttribute(ACTIVE_ATTR, '');\n } else {\n const previous = itemsRef.current.get(index);\n if (previous) itemRoRef.current?.unobserve(previous);\n // The mark leaves with the element: a row that only moved to another\n // index (a filtering list re-ordering) must not carry it there.\n previous?.removeAttribute(ACTIVE_ATTR);\n itemsRef.current.delete(index);\n itemGroupsRef.current.delete(index);\n // The highlighted row is gone: nothing should stay lit or receive a\n // routed click until the pointer picks again. Decided when the\n // update applies, after this commit's registrations, so a row that\n // only moved index hands the highlight to the row now under it.\n if (index === activeIndexRef.current) {\n setActiveIndex(current => (current === index && !itemsRef.current.has(index) ? null : current));\n }\n }\n // Coalesce rapid register/unregister calls (e.g. when an AnimatePresence\n // remounts a list of rows) into a single remeasure on the next frame,\n // so consumers don't have to manually call measureItems after the\n // container's children swap. A lit row keeps its element (unregistering\n // it clears the highlight), so its rect stays good while the pass runs:\n // dropping readiness then would blink the highlight every time a\n // virtualized list mounts a row while scrolling.\n if (activeIndexRef.current === null) remeasure();\n else scheduleMeasurement(measurementAttempts);\n },\n [remeasure, scheduleMeasurement, getItemRo],\n );\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n if (!isFromInside(e) || !(e.target instanceof Element)) return;\n const pointerTarget = e.target;\n const mouseX = e.clientX;\n const mouseY = e.clientY;\n\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n const container = containerRef.current;\n if (!container) return;\n const enclosingGroup = container.closest(GROUP_SELECTOR);\n const groupInside = (group: Element | null | undefined) => (group === enclosingGroup ? null : group);\n const pointerGroup = groupInside(pointerTarget.closest(GROUP_SELECTOR));\n setActiveIndex(\n pickNearest({\n axis,\n point: { x: mouseX, y: mouseY },\n rects: itemRectsRef.current,\n containerRect: container.getBoundingClientRect(),\n scroll: { x: container.scrollLeft, y: container.scrollTop },\n border: { x: container.clientLeft, y: container.clientTop },\n layoutSize: { width: container.offsetWidth, height: container.offsetHeight },\n isDisabled: index => {\n if (groupInside(itemGroupsRef.current.get(index)) !== pointerGroup) return true;\n const element = itemsRef.current.get(index);\n return !!element && !!isItemDisabled?.(element);\n },\n onlyBetweenItems: pointerGroup !== null,\n }),\n );\n });\n },\n [axis, containerRef, isItemDisabled],\n );\n\n const handleMouseLeave = useCallback((e: React.MouseEvent) => {\n if (!isFromInside(e)) return;\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n setActiveIndex(null);\n }, []);\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n // Outside the container in the DOM: a portaled child's click, or a row\n // that unmounted while its own click was still bubbling (a pick whose\n // primitive re-renders the list synchronously). Neither is a gap.\n const { target } = e;\n if (!(target instanceof Element) || !isFromInside(e)) return;\n // Inside an item: the item owns the click.\n for (const element of itemsRef.current.values()) {\n if (element.contains(target)) return;\n }\n // A control that sits between the rows (a search field at the top of\n // a menu, a footer button, a theme toggle) keeps its own click too.\n if (target.closest(CONTROL_BETWEEN_ROWS)) return;\n if (gapClick === false) return;\n if (isOverDisabledItem(itemsRef.current.values(), e, isItemDisabled)) return;\n const index = activeIndexRef.current;\n if (index === null) return;\n const element = itemsRef.current.get(index);\n if (!element || isItemDisabled?.(element)) return;\n if (gapClickMaxDistance !== Infinity) {\n const r = element.getBoundingClientRect();\n const dx = Math.max(r.left - e.clientX, 0, e.clientX - r.right);\n const dy = Math.max(r.top - e.clientY, 0, e.clientY - r.bottom);\n if (Math.hypot(dx, dy) > gapClickMaxDistance) return;\n }\n // A real DOM click on the item, so its own handlers (and the primitive\n // wrapping it, if any) run exactly as if the pointer had been inside.\n resolveActivator(element).click();\n },\n [isItemDisabled, gapClick, gapClickMaxDistance],\n );\n\n // Remeasure when the container resizes — a reflow moves items even though\n // the registered set is unchanged, which would otherwise leave itemRects\n // stale. Coalesced through the same rAF as register/unregister. Readiness is\n // deliberately not dropped: the item set is unchanged, so the published rects\n // stay usable, and hiding overlays on every reflow would flicker them.\n useEffect(() => {\n const container = containerRef.current;\n if (!container || typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(() => scheduleMeasurement(measurementAttempts));\n ro.observe(container);\n return () => ro.disconnect();\n }, [containerRef, scheduleMeasurement]);\n\n // Clean up rAF and the item observer on unmount\n useEffect(() => {\n return () => {\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n }\n if (remeasureRafIdRef.current !== null) {\n cancelAnimationFrame(remeasureRafIdRef.current);\n }\n itemRoRef.current?.disconnect();\n itemRoRef.current = null;\n };\n }, []);\n\n return {\n activeIndex,\n setActiveIndex,\n itemRects,\n isMeasured,\n handlers: {\n onMouseMove: handleMouseMove,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n },\n registerItem,\n remeasure,\n measureItems,\n };\n}\n\n/**\n * Registers an item's element with its list for as long as it is mounted.\n * The one way rows join a list: pass the hook's `registerItem` (or the copy\n * a context hands down), the row's index, and its ref. Either may be\n * missing for a row rendered outside a list (a standalone card, an accordion\n * item that is not grouped); then nothing is registered.\n */\nexport function useRegisterFluidHoverItem(\n registerItem: ((index: number, element: HTMLElement | null) => void) | undefined,\n index: number | undefined,\n ref: RefObject<HTMLElement | null>,\n) {\n useEffect(() => {\n if (!registerItem || index === undefined) return;\n registerItem(index, ref.current);\n return () => registerItem(index, null);\n }, [index, registerItem, ref]);\n}\n"],"names":["useRef","useState","useEffect","useCallback","element"],"mappings":"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"}
@@ -1,5 +1,19 @@
1
1
  import { useRef, useState, useEffect, useCallback } from 'react';
2
2
 
3
+ function boxContains(box, point, axis) {
4
+ const insideX = point.x >= box.left && point.x <= box.right;
5
+ const insideY = point.y >= box.top && point.y <= box.bottom;
6
+ if (axis === "x") return insideX;
7
+ if (axis === "y") return insideY;
8
+ return insideX && insideY;
9
+ }
10
+ function distanceToCenter(box, point, axis) {
11
+ const dx = point.x - (box.left + box.right) / 2;
12
+ const dy = point.y - (box.top + box.bottom) / 2;
13
+ if (axis === "x") return Math.abs(dx);
14
+ if (axis === "y") return Math.abs(dy);
15
+ return Math.hypot(dx, dy);
16
+ }
3
17
  function isOverDisabledItem(items, point, isItemDisabled) {
4
18
  for (const element of items) {
5
19
  if (!isItemDisabled?.(element)) continue;
@@ -18,50 +32,40 @@ function pickNearest({
18
32
  scroll,
19
33
  border,
20
34
  layoutSize,
21
- isDisabled
35
+ isDisabled,
36
+ onlyBetweenItems = false
22
37
  }) {
23
38
  const scaleX = layoutSize.width > 0 ? containerRect.width / layoutSize.width : 1;
24
39
  const scaleY = layoutSize.height > 0 ? containerRect.height / layoutSize.height : 1;
25
40
  let closestIndex = null;
26
41
  let closestDistance = Infinity;
27
42
  let containingIndex = null;
43
+ const itemSpan = { left: Infinity, top: Infinity, right: -Infinity, bottom: -Infinity };
28
44
  for (let index = 0; index < rects.length; index++) {
29
45
  const r = rects[index];
30
46
  if (!r) continue;
31
47
  if (isDisabled?.(index)) continue;
32
- if (axis === "xy") {
33
- const left = containerRect.left + (border.x + r.left - scroll.x) * scaleX;
34
- const top = containerRect.top + (border.y + r.top - scroll.y) * scaleY;
35
- const width = r.width * scaleX;
36
- const height = r.height * scaleY;
37
- if (point.x >= left && point.x <= left + width && point.y >= top && point.y <= top + height) {
38
- containingIndex = index;
39
- }
40
- const distance2 = Math.hypot(point.x - (left + width / 2), point.y - (top + height / 2));
41
- if (distance2 < closestDistance) {
42
- closestDistance = distance2;
43
- closestIndex = index;
44
- }
45
- continue;
46
- }
47
- const horizontal = axis === "x";
48
- const mousePos = horizontal ? point.x : point.y;
49
- const scale = horizontal ? scaleX : scaleY;
50
- const itemStart = (horizontal ? containerRect.left : containerRect.top) + ((horizontal ? border.x : border.y) + (horizontal ? r.left : r.top) - (horizontal ? scroll.x : scroll.y)) * scale;
51
- const itemSize = (horizontal ? r.width : r.height) * scale;
52
- if (mousePos >= itemStart && mousePos <= itemStart + itemSize) {
53
- containingIndex = index;
54
- }
55
- const distance = Math.abs(mousePos - (itemStart + itemSize / 2));
48
+ const left = containerRect.left + (border.x + r.left - scroll.x) * scaleX;
49
+ const top = containerRect.top + (border.y + r.top - scroll.y) * scaleY;
50
+ const box = { left, top, right: left + r.width * scaleX, bottom: top + r.height * scaleY };
51
+ itemSpan.left = Math.min(itemSpan.left, box.left);
52
+ itemSpan.top = Math.min(itemSpan.top, box.top);
53
+ itemSpan.right = Math.max(itemSpan.right, box.right);
54
+ itemSpan.bottom = Math.max(itemSpan.bottom, box.bottom);
55
+ if (boxContains(box, point, axis)) containingIndex = index;
56
+ const distance = distanceToCenter(box, point, axis);
56
57
  if (distance < closestDistance) {
57
58
  closestDistance = distance;
58
59
  closestIndex = index;
59
60
  }
60
61
  }
62
+ if (onlyBetweenItems && !boxContains(itemSpan, point, axis)) return null;
61
63
  return containingIndex ?? closestIndex;
62
64
  }
63
65
  const ACTIVE_ATTR = "data-fluid-hover-active";
64
66
  const ACTIVE_INDEX_ATTR = "data-fluid-hover-active-index";
67
+ const GROUP_ATTR = "data-fluid-hover-group";
68
+ const GROUP_SELECTOR = `[${GROUP_ATTR}]`;
65
69
  function isFromInside(e) {
66
70
  return e.target instanceof Node && e.currentTarget.contains(e.target);
67
71
  }
@@ -78,6 +82,7 @@ function useFluidHover(containerRef, options = {}) {
78
82
  const { axis = "y", isItemDisabled, gapClick = true } = options;
79
83
  const gapClickMaxDistance = typeof gapClick === "object" ? gapClick.maxDistance ?? Infinity : Infinity;
80
84
  const itemsRef = useRef(/* @__PURE__ */ new Map());
85
+ const itemGroupsRef = useRef(/* @__PURE__ */ new Map());
81
86
  const [activeIndex, setActiveIndex] = useState(null);
82
87
  const activeIndexRef = useRef(null);
83
88
  activeIndexRef.current = activeIndex;
@@ -172,6 +177,7 @@ function useFluidHover(containerRef, options = {}) {
172
177
  (index, element) => {
173
178
  if (element) {
174
179
  itemsRef.current.set(index, element);
180
+ itemGroupsRef.current.set(index, element.closest(GROUP_SELECTOR));
175
181
  getItemRo()?.observe(element);
176
182
  if (index === activeIndexRef.current) element.setAttribute(ACTIVE_ATTR, "");
177
183
  } else {
@@ -179,6 +185,7 @@ function useFluidHover(containerRef, options = {}) {
179
185
  if (previous) itemRoRef.current?.unobserve(previous);
180
186
  previous?.removeAttribute(ACTIVE_ATTR);
181
187
  itemsRef.current.delete(index);
188
+ itemGroupsRef.current.delete(index);
182
189
  if (index === activeIndexRef.current) {
183
190
  setActiveIndex((current) => current === index && !itemsRef.current.has(index) ? null : current);
184
191
  }
@@ -190,7 +197,8 @@ function useFluidHover(containerRef, options = {}) {
190
197
  );
191
198
  const handleMouseMove = useCallback(
192
199
  (e) => {
193
- if (!isFromInside(e)) return;
200
+ if (!isFromInside(e) || !(e.target instanceof Element)) return;
201
+ const pointerTarget = e.target;
194
202
  const mouseX = e.clientX;
195
203
  const mouseY = e.clientY;
196
204
  if (rafIdRef.current !== null) {
@@ -200,6 +208,9 @@ function useFluidHover(containerRef, options = {}) {
200
208
  rafIdRef.current = null;
201
209
  const container = containerRef.current;
202
210
  if (!container) return;
211
+ const enclosingGroup = container.closest(GROUP_SELECTOR);
212
+ const groupInside = (group) => group === enclosingGroup ? null : group;
213
+ const pointerGroup = groupInside(pointerTarget.closest(GROUP_SELECTOR));
203
214
  setActiveIndex(
204
215
  pickNearest({
205
216
  axis,
@@ -209,10 +220,12 @@ function useFluidHover(containerRef, options = {}) {
209
220
  scroll: { x: container.scrollLeft, y: container.scrollTop },
210
221
  border: { x: container.clientLeft, y: container.clientTop },
211
222
  layoutSize: { width: container.offsetWidth, height: container.offsetHeight },
212
- isDisabled: isItemDisabled ? (index) => {
213
- const el = itemsRef.current.get(index);
214
- return !!el && isItemDisabled(el);
215
- } : void 0
223
+ isDisabled: (index) => {
224
+ if (groupInside(itemGroupsRef.current.get(index)) !== pointerGroup) return true;
225
+ const element = itemsRef.current.get(index);
226
+ return !!element && !!isItemDisabled?.(element);
227
+ },
228
+ onlyBetweenItems: pointerGroup !== null
216
229
  })
217
230
  );
218
231
  });
@@ -293,5 +306,5 @@ function useRegisterFluidHoverItem(registerItem, index, ref) {
293
306
  }, [index, registerItem, ref]);
294
307
  }
295
308
 
296
- export { ACTIVE_ATTR, ACTIVE_INDEX_ATTR, pickNearest, useFluidHover, useRegisterFluidHoverItem };
309
+ export { ACTIVE_ATTR, ACTIVE_INDEX_ATTR, GROUP_ATTR, pickNearest, useFluidHover, useRegisterFluidHoverItem };
297
310
  //# sourceMappingURL=use-fluid-hover.es.js.map