@wildo-ai/presets-components 1.1.4 → 1.1.6

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 (780) hide show
  1. package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
  2. package/dist/esm/components/actions/action-bar.js +65 -8
  3. package/dist/esm/components/actions/action-bar.js.map +1 -1
  4. package/dist/esm/components/actions/action-bar.labels.d.ts.map +1 -1
  5. package/dist/esm/components/actions/action-button.d.ts.map +1 -1
  6. package/dist/esm/components/actions/action-button.js +3 -3
  7. package/dist/esm/components/actions/action-button.js.map +1 -1
  8. package/dist/esm/components/actions/action-button.labels.d.ts.map +1 -1
  9. package/dist/esm/components/actions/button-group.d.ts.map +1 -1
  10. package/dist/esm/components/actions/button.d.ts.map +1 -1
  11. package/dist/esm/components/actions/button.js +62 -3
  12. package/dist/esm/components/actions/button.js.map +1 -1
  13. package/dist/esm/components/actions/button.labels.d.ts.map +1 -1
  14. package/dist/esm/components/ai-elements/artifacts/artifact-browser.d.ts.map +1 -1
  15. package/dist/esm/components/ai-elements/artifacts/artifact.d.ts.map +1 -1
  16. package/dist/esm/components/ai-elements/artifacts/artifact.labels.d.ts.map +1 -1
  17. package/dist/esm/components/ai-elements/artifacts/code-block.d.ts.map +1 -1
  18. package/dist/esm/components/ai-elements/artifacts/code-block.js +1 -1
  19. package/dist/esm/components/ai-elements/artifacts/code-block.js.map +1 -1
  20. package/dist/esm/components/ai-elements/artifacts/code-block.labels.d.ts.map +1 -1
  21. package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts +4 -0
  22. package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts.map +1 -0
  23. package/dist/esm/components/ai-elements/artifacts/diff-block.js +165 -0
  24. package/dist/esm/components/ai-elements/artifacts/diff-block.js.map +1 -0
  25. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts +3 -0
  26. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts.map +1 -0
  27. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js +63 -0
  28. package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js.map +1 -0
  29. package/dist/esm/components/ai-elements/artifacts/image.d.ts.map +1 -1
  30. package/dist/esm/components/ai-elements/artifacts/image.labels.d.ts.map +1 -1
  31. package/dist/esm/components/ai-elements/artifacts/shiki-highlighter-runtime.d.ts.map +1 -1
  32. package/dist/esm/components/ai-elements/artifacts/shiki-highlighter.lazy.d.ts.map +1 -1
  33. package/dist/esm/components/ai-elements/artifacts/web-preview.d.ts.map +1 -1
  34. package/dist/esm/components/ai-elements/artifacts/web-preview.labels.d.ts.map +1 -1
  35. package/dist/esm/components/ai-elements/chat/conversation.d.ts.map +1 -1
  36. package/dist/esm/components/ai-elements/chat/conversation.labels.d.ts.map +1 -1
  37. package/dist/esm/components/ai-elements/chat/message.d.ts.map +1 -1
  38. package/dist/esm/components/ai-elements/chat/message.labels.d.ts.map +1 -1
  39. package/dist/esm/components/ai-elements/chat/prompt-input.d.ts.map +1 -1
  40. package/dist/esm/components/ai-elements/chat/prompt-input.labels.d.ts.map +1 -1
  41. package/dist/esm/components/ai-elements/chat/sources.d.ts.map +1 -1
  42. package/dist/esm/components/ai-elements/chat/sources.labels.d.ts.map +1 -1
  43. package/dist/esm/components/ai-elements/chat/suggestion.d.ts.map +1 -1
  44. package/dist/esm/components/ai-elements/chat/suggestion.js +8 -1
  45. package/dist/esm/components/ai-elements/chat/suggestion.js.map +1 -1
  46. package/dist/esm/components/ai-elements/chat/suggestion.labels.d.ts.map +1 -1
  47. package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts +68 -0
  48. package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts.map +1 -0
  49. package/dist/esm/components/ai-elements/decision/approval-argument-fields.js +208 -0
  50. package/dist/esm/components/ai-elements/decision/approval-argument-fields.js.map +1 -0
  51. package/dist/esm/components/ai-elements/decision/approval.d.ts +124 -17
  52. package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
  53. package/dist/esm/components/ai-elements/decision/approval.js +105 -13
  54. package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
  55. package/dist/esm/components/ai-elements/decision/decision-request.d.ts.map +1 -1
  56. package/dist/esm/components/ai-elements/decision/decision-request.labels.d.ts.map +1 -1
  57. package/dist/esm/components/ai-elements/execution/confirmation.d.ts.map +1 -1
  58. package/dist/esm/components/ai-elements/execution/confirmation.labels.d.ts.map +1 -1
  59. package/dist/esm/components/ai-elements/execution/queue.d.ts.map +1 -1
  60. package/dist/esm/components/ai-elements/execution/queue.labels.d.ts.map +1 -1
  61. package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
  62. package/dist/esm/components/ai-elements/execution/task.js +1 -1
  63. package/dist/esm/components/ai-elements/execution/task.js.map +1 -1
  64. package/dist/esm/components/ai-elements/execution/task.labels.d.ts.map +1 -1
  65. package/dist/esm/components/ai-elements/execution/tool.d.ts.map +1 -1
  66. package/dist/esm/components/ai-elements/execution/tool.js +8 -1
  67. package/dist/esm/components/ai-elements/execution/tool.js.map +1 -1
  68. package/dist/esm/components/ai-elements/execution/tool.labels.d.ts.map +1 -1
  69. package/dist/esm/components/ai-elements/graph/canvas.d.ts.map +1 -1
  70. package/dist/esm/components/ai-elements/graph/canvas.labels.d.ts.map +1 -1
  71. package/dist/esm/components/ai-elements/graph/connection.d.ts.map +1 -1
  72. package/dist/esm/components/ai-elements/graph/connection.labels.d.ts.map +1 -1
  73. package/dist/esm/components/ai-elements/graph/controls.d.ts.map +1 -1
  74. package/dist/esm/components/ai-elements/graph/controls.labels.d.ts.map +1 -1
  75. package/dist/esm/components/ai-elements/graph/edge.d.ts.map +1 -1
  76. package/dist/esm/components/ai-elements/graph/edge.labels.d.ts.map +1 -1
  77. package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts +3 -1
  78. package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts.map +1 -1
  79. package/dist/esm/components/ai-elements/graph/graph-runtime.js +3 -1
  80. package/dist/esm/components/ai-elements/graph/graph-runtime.js.map +1 -1
  81. package/dist/esm/components/ai-elements/graph/graph.lazy.d.ts.map +1 -1
  82. package/dist/esm/components/ai-elements/graph/graph.lazy.js +15 -15
  83. package/dist/esm/components/ai-elements/graph/graph.lazy.js.map +1 -1
  84. package/dist/esm/components/ai-elements/graph/node.d.ts.map +1 -1
  85. package/dist/esm/components/ai-elements/graph/node.labels.d.ts.map +1 -1
  86. package/dist/esm/components/ai-elements/graph/panel.d.ts.map +1 -1
  87. package/dist/esm/components/ai-elements/graph/panel.labels.d.ts.map +1 -1
  88. package/dist/esm/components/ai-elements/graph/toolbar.d.ts.map +1 -1
  89. package/dist/esm/components/ai-elements/graph/toolbar.labels.d.ts.map +1 -1
  90. package/dist/esm/components/ai-elements/meta/agent.d.ts +0 -1
  91. package/dist/esm/components/ai-elements/meta/agent.d.ts.map +1 -1
  92. package/dist/esm/components/ai-elements/meta/agent.js +23 -18
  93. package/dist/esm/components/ai-elements/meta/agent.js.map +1 -1
  94. package/dist/esm/components/ai-elements/meta/context.d.ts.map +1 -1
  95. package/dist/esm/components/ai-elements/meta/context.labels.d.ts.map +1 -1
  96. package/dist/esm/components/ai-elements/meta/context.lazy.d.ts.map +1 -1
  97. package/dist/esm/components/ai-elements/meta/context.lazy.js +13 -11
  98. package/dist/esm/components/ai-elements/meta/context.lazy.js.map +1 -1
  99. package/dist/esm/components/ai-elements/meta/model-selector.d.ts.map +1 -1
  100. package/dist/esm/components/ai-elements/meta/model-selector.labels.d.ts.map +1 -1
  101. package/dist/esm/components/ai-elements/meta/open-in-chat.d.ts.map +1 -1
  102. package/dist/esm/components/ai-elements/meta/open-in-chat.labels.d.ts.map +1 -1
  103. package/dist/esm/components/ai-elements/shared/loader.d.ts.map +1 -1
  104. package/dist/esm/components/ai-elements/shared/loader.labels.d.ts.map +1 -1
  105. package/dist/esm/components/ai-elements/shared/shimmer.d.ts.map +1 -1
  106. package/dist/esm/components/ai-elements/shared/shimmer.labels.d.ts.map +1 -1
  107. package/dist/esm/components/ai-elements/stream/execution-stream.d.ts.map +1 -1
  108. package/dist/esm/components/ai-elements/stream/execution-stream.labels.d.ts.map +1 -1
  109. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts +6 -0
  110. package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts.map +1 -1
  111. package/dist/esm/components/ai-elements/trace/chain-of-thought.js +13 -1
  112. package/dist/esm/components/ai-elements/trace/chain-of-thought.js.map +1 -1
  113. package/dist/esm/components/ai-elements/trace/chain-of-thought.labels.d.ts.map +1 -1
  114. package/dist/esm/components/ai-elements/trace/checkpoint.d.ts.map +1 -1
  115. package/dist/esm/components/ai-elements/trace/checkpoint.labels.d.ts.map +1 -1
  116. package/dist/esm/components/ai-elements/trace/inline-citation.d.ts.map +1 -1
  117. package/dist/esm/components/ai-elements/trace/inline-citation.labels.d.ts.map +1 -1
  118. package/dist/esm/components/ai-elements/trace/plan.d.ts.map +1 -1
  119. package/dist/esm/components/ai-elements/trace/plan.labels.d.ts.map +1 -1
  120. package/dist/esm/components/ai-elements/trace/reasoning.d.ts.map +1 -1
  121. package/dist/esm/components/ai-elements/trace/reasoning.labels.d.ts.map +1 -1
  122. package/dist/esm/components/app/app-layout-consent-gate.d.ts +23 -0
  123. package/dist/esm/components/app/app-layout-consent-gate.d.ts.map +1 -0
  124. package/dist/esm/components/app/app-layout-consent-gate.js +133 -0
  125. package/dist/esm/components/app/app-layout-consent-gate.js.map +1 -0
  126. package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts +19 -0
  127. package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts.map +1 -0
  128. package/dist/esm/components/app/app-layout-document-acceptance-gate.js +56 -0
  129. package/dist/esm/components/app/app-layout-document-acceptance-gate.js.map +1 -0
  130. package/dist/esm/components/app/app-layout-main-container.d.ts +9 -0
  131. package/dist/esm/components/app/app-layout-main-container.d.ts.map +1 -1
  132. package/dist/esm/components/app/app-layout-main-container.js +17 -23
  133. package/dist/esm/components/app/app-layout-main-container.js.map +1 -1
  134. package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
  135. package/dist/esm/components/app/app-layout-main-container.labels.js +48 -0
  136. package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
  137. package/dist/esm/components/app/public-layout-main-container.d.ts +1 -1
  138. package/dist/esm/components/app/public-layout-main-container.d.ts.map +1 -1
  139. package/dist/esm/components/app/public-layout-main-container.js +9 -8
  140. package/dist/esm/components/app/public-layout-main-container.js.map +1 -1
  141. package/dist/esm/components/app/public-layout-main-container.labels.d.ts.map +1 -1
  142. package/dist/esm/components/app/public-layout-terms.d.ts +46 -0
  143. package/dist/esm/components/app/public-layout-terms.d.ts.map +1 -0
  144. package/dist/esm/components/app/public-layout-terms.js +137 -0
  145. package/dist/esm/components/app/public-layout-terms.js.map +1 -0
  146. package/dist/esm/components/billing/billing-format.utils.d.ts.map +1 -1
  147. package/dist/esm/components/billing/billing-invoice-history.d.ts +1 -1
  148. package/dist/esm/components/billing/billing-invoice-history.d.ts.map +1 -1
  149. package/dist/esm/components/billing/billing-invoice-history.js +3 -1
  150. package/dist/esm/components/billing/billing-invoice-history.js.map +1 -1
  151. package/dist/esm/components/billing/billing-invoice-history.labels.d.ts.map +1 -1
  152. package/dist/esm/components/billing/billing-invoice-history.labels.js +1 -0
  153. package/dist/esm/components/billing/billing-invoice-history.labels.js.map +1 -1
  154. package/dist/esm/components/billing/billing-plan-change-preview.d.ts +5 -0
  155. package/dist/esm/components/billing/billing-plan-change-preview.d.ts.map +1 -0
  156. package/dist/esm/components/billing/billing-plan-change-preview.js +25 -0
  157. package/dist/esm/components/billing/billing-plan-change-preview.js.map +1 -0
  158. package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts +3 -0
  159. package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts.map +1 -0
  160. package/dist/esm/components/billing/billing-plan-change-preview.labels.js +22 -0
  161. package/dist/esm/components/billing/billing-plan-change-preview.labels.js.map +1 -0
  162. package/dist/esm/components/billing/billing-portal-link.d.ts +1 -1
  163. package/dist/esm/components/billing/billing-portal-link.d.ts.map +1 -1
  164. package/dist/esm/components/billing/billing-portal-link.js +3 -1
  165. package/dist/esm/components/billing/billing-portal-link.js.map +1 -1
  166. package/dist/esm/components/billing/billing-portal-link.labels.d.ts.map +1 -1
  167. package/dist/esm/components/billing/billing-portal-link.labels.js +1 -0
  168. package/dist/esm/components/billing/billing-portal-link.labels.js.map +1 -1
  169. package/dist/esm/components/billing/billing-pricing-table.d.ts +1 -1
  170. package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
  171. package/dist/esm/components/billing/billing-pricing-table.js +10 -4
  172. package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
  173. package/dist/esm/components/billing/billing-pricing-table.labels.d.ts.map +1 -1
  174. package/dist/esm/components/billing/billing-pricing-table.labels.js +8 -1
  175. package/dist/esm/components/billing/billing-pricing-table.labels.js.map +1 -1
  176. package/dist/esm/components/billing/billing-subscription-status.d.ts +1 -1
  177. package/dist/esm/components/billing/billing-subscription-status.d.ts.map +1 -1
  178. package/dist/esm/components/billing/billing-subscription-status.js +3 -1
  179. package/dist/esm/components/billing/billing-subscription-status.js.map +1 -1
  180. package/dist/esm/components/billing/billing-subscription-status.labels.d.ts.map +1 -1
  181. package/dist/esm/components/billing/billing-subscription-status.labels.js +1 -0
  182. package/dist/esm/components/billing/billing-subscription-status.labels.js.map +1 -1
  183. package/dist/esm/components/billing/billing-usage-dashboard.d.ts +1 -1
  184. package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
  185. package/dist/esm/components/billing/billing-usage-dashboard.js +10 -7
  186. package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
  187. package/dist/esm/components/billing/billing-usage-dashboard.labels.d.ts.map +1 -1
  188. package/dist/esm/components/billing/billing-usage-dashboard.labels.js +4 -1
  189. package/dist/esm/components/billing/billing-usage-dashboard.labels.js.map +1 -1
  190. package/dist/esm/components/data-display/avatar.d.ts.map +1 -1
  191. package/dist/esm/components/data-display/avatar.labels.d.ts.map +1 -1
  192. package/dist/esm/components/data-display/badge.d.ts.map +1 -1
  193. package/dist/esm/components/data-display/badge.js +16 -15
  194. package/dist/esm/components/data-display/badge.js.map +1 -1
  195. package/dist/esm/components/data-display/badge.labels.d.ts.map +1 -1
  196. package/dist/esm/components/data-display/description-list.d.ts +2 -1
  197. package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
  198. package/dist/esm/components/data-display/description-list.js +24 -8
  199. package/dist/esm/components/data-display/description-list.js.map +1 -1
  200. package/dist/esm/components/data-display/description-list.labels.d.ts.map +1 -1
  201. package/dist/esm/components/data-display/duration.d.ts +15 -0
  202. package/dist/esm/components/data-display/duration.d.ts.map +1 -0
  203. package/dist/esm/components/data-display/duration.js +50 -0
  204. package/dist/esm/components/data-display/duration.js.map +1 -0
  205. package/dist/esm/components/data-display/duration.labels.d.ts +15 -0
  206. package/dist/esm/components/data-display/duration.labels.d.ts.map +1 -0
  207. package/dist/esm/components/data-display/duration.labels.js +35 -0
  208. package/dist/esm/components/data-display/duration.labels.js.map +1 -0
  209. package/dist/esm/components/data-display/formatters/display-field-address.d.ts +21 -0
  210. package/dist/esm/components/data-display/formatters/display-field-address.d.ts.map +1 -0
  211. package/dist/esm/components/data-display/formatters/display-field-address.js +75 -0
  212. package/dist/esm/components/data-display/formatters/display-field-address.js.map +1 -0
  213. package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts +3 -0
  214. package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts.map +1 -0
  215. package/dist/esm/components/data-display/formatters/display-field-address.labels.js +13 -0
  216. package/dist/esm/components/data-display/formatters/display-field-address.labels.js.map +1 -0
  217. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.d.ts.map +1 -1
  218. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js +6 -2
  219. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js.map +1 -1
  220. package/dist/esm/components/data-display/formatters/display-field-bigdecimal.labels.d.ts.map +1 -1
  221. package/dist/esm/components/data-display/formatters/display-field-boolean.d.ts.map +1 -1
  222. package/dist/esm/components/data-display/formatters/display-field-boolean.js +2 -2
  223. package/dist/esm/components/data-display/formatters/display-field-boolean.js.map +1 -1
  224. package/dist/esm/components/data-display/formatters/display-field-boolean.labels.d.ts.map +1 -1
  225. package/dist/esm/components/data-display/formatters/display-field-code.d.ts.map +1 -1
  226. package/dist/esm/components/data-display/formatters/display-field-code.js +2 -2
  227. package/dist/esm/components/data-display/formatters/display-field-code.js.map +1 -1
  228. package/dist/esm/components/data-display/formatters/display-field-code.labels.d.ts.map +1 -1
  229. package/dist/esm/components/data-display/formatters/display-field-date.d.ts +3 -3
  230. package/dist/esm/components/data-display/formatters/display-field-date.d.ts.map +1 -1
  231. package/dist/esm/components/data-display/formatters/display-field-date.js +17 -4
  232. package/dist/esm/components/data-display/formatters/display-field-date.js.map +1 -1
  233. package/dist/esm/components/data-display/formatters/display-field-date.labels.d.ts.map +1 -1
  234. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts +3 -3
  235. package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts.map +1 -1
  236. package/dist/esm/components/data-display/formatters/display-field-datetime.js +17 -4
  237. package/dist/esm/components/data-display/formatters/display-field-datetime.js.map +1 -1
  238. package/dist/esm/components/data-display/formatters/display-field-datetime.labels.d.ts.map +1 -1
  239. package/dist/esm/components/data-display/formatters/display-field-duration.d.ts.map +1 -1
  240. package/dist/esm/components/data-display/formatters/display-field-duration.labels.d.ts.map +1 -1
  241. package/dist/esm/components/data-display/formatters/display-field-enum.d.ts.map +1 -1
  242. package/dist/esm/components/data-display/formatters/display-field-enum.js +29 -11
  243. package/dist/esm/components/data-display/formatters/display-field-enum.js.map +1 -1
  244. package/dist/esm/components/data-display/formatters/display-field-enum.labels.d.ts.map +1 -1
  245. package/dist/esm/components/data-display/formatters/display-field-file-audio.d.ts.map +1 -1
  246. package/dist/esm/components/data-display/formatters/display-field-file-audio.js +2 -1
  247. package/dist/esm/components/data-display/formatters/display-field-file-audio.js.map +1 -1
  248. package/dist/esm/components/data-display/formatters/display-field-file-audio.labels.d.ts.map +1 -1
  249. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts +4 -1
  250. package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts.map +1 -1
  251. package/dist/esm/components/data-display/formatters/display-field-file-document.js +18 -5
  252. package/dist/esm/components/data-display/formatters/display-field-file-document.js.map +1 -1
  253. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.d.ts.map +1 -1
  254. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js +20 -0
  255. package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js.map +1 -1
  256. package/dist/esm/components/data-display/formatters/display-field-file-gallery.d.ts.map +1 -1
  257. package/dist/esm/components/data-display/formatters/display-field-file-gallery.labels.d.ts.map +1 -1
  258. package/dist/esm/components/data-display/formatters/display-field-file-image.d.ts.map +1 -1
  259. package/dist/esm/components/data-display/formatters/display-field-file-image.js +3 -1
  260. package/dist/esm/components/data-display/formatters/display-field-file-image.js.map +1 -1
  261. package/dist/esm/components/data-display/formatters/display-field-file-image.labels.d.ts.map +1 -1
  262. package/dist/esm/components/data-display/formatters/display-field-file-video.d.ts.map +1 -1
  263. package/dist/esm/components/data-display/formatters/display-field-file-video.labels.d.ts.map +1 -1
  264. package/dist/esm/components/data-display/formatters/display-field-file.d.ts.map +1 -1
  265. package/dist/esm/components/data-display/formatters/display-field-file.js +14 -15
  266. package/dist/esm/components/data-display/formatters/display-field-file.js.map +1 -1
  267. package/dist/esm/components/data-display/formatters/display-field-file.labels.d.ts.map +1 -1
  268. package/dist/esm/components/data-display/formatters/display-field-file.labels.js +2 -0
  269. package/dist/esm/components/data-display/formatters/display-field-file.labels.js.map +1 -1
  270. package/dist/esm/components/data-display/formatters/display-field-format.utils.d.ts.map +1 -1
  271. package/dist/esm/components/data-display/formatters/display-field-i18n.utils.d.ts.map +1 -1
  272. package/dist/esm/components/data-display/formatters/display-field-money.d.ts.map +1 -1
  273. package/dist/esm/components/data-display/formatters/display-field-money.labels.d.ts.map +1 -1
  274. package/dist/esm/components/data-display/formatters/display-field-number.d.ts.map +1 -1
  275. package/dist/esm/components/data-display/formatters/display-field-number.js +8 -3
  276. package/dist/esm/components/data-display/formatters/display-field-number.js.map +1 -1
  277. package/dist/esm/components/data-display/formatters/display-field-number.labels.d.ts.map +1 -1
  278. package/dist/esm/components/data-display/formatters/display-field-number.labels.js +5 -2
  279. package/dist/esm/components/data-display/formatters/display-field-number.labels.js.map +1 -1
  280. package/dist/esm/components/data-display/formatters/display-field-phone.d.ts.map +1 -1
  281. package/dist/esm/components/data-display/formatters/display-field-phone.labels.d.ts.map +1 -1
  282. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.d.ts.map +1 -1
  283. package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.labels.d.ts.map +1 -1
  284. package/dist/esm/components/data-display/formatters/display-field-range-date.d.ts.map +1 -1
  285. package/dist/esm/components/data-display/formatters/display-field-range-date.labels.d.ts.map +1 -1
  286. package/dist/esm/components/data-display/formatters/display-field-range-datetime.d.ts.map +1 -1
  287. package/dist/esm/components/data-display/formatters/display-field-range-datetime.labels.d.ts.map +1 -1
  288. package/dist/esm/components/data-display/formatters/display-field-range-money.d.ts.map +1 -1
  289. package/dist/esm/components/data-display/formatters/display-field-range-money.labels.d.ts.map +1 -1
  290. package/dist/esm/components/data-display/formatters/display-field-range-number.d.ts.map +1 -1
  291. package/dist/esm/components/data-display/formatters/display-field-range-number.labels.d.ts.map +1 -1
  292. package/dist/esm/components/data-display/formatters/display-field-range-time.d.ts.map +1 -1
  293. package/dist/esm/components/data-display/formatters/display-field-range-time.labels.d.ts.map +1 -1
  294. package/dist/esm/components/data-display/formatters/display-field-string.d.ts +1 -1
  295. package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
  296. package/dist/esm/components/data-display/formatters/display-field-string.js +129 -15
  297. package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
  298. package/dist/esm/components/data-display/formatters/display-field-string.labels.d.ts.map +1 -1
  299. package/dist/esm/components/data-display/formatters/display-field-time.d.ts.map +1 -1
  300. package/dist/esm/components/data-display/formatters/display-field-time.labels.d.ts.map +1 -1
  301. package/dist/esm/components/data-display/identifier.d.ts +19 -0
  302. package/dist/esm/components/data-display/identifier.d.ts.map +1 -0
  303. package/dist/esm/components/data-display/identifier.js +21 -0
  304. package/dist/esm/components/data-display/identifier.js.map +1 -0
  305. package/dist/esm/components/data-display/kbd.d.ts +17 -0
  306. package/dist/esm/components/data-display/kbd.d.ts.map +1 -0
  307. package/dist/esm/components/data-display/kbd.js +18 -0
  308. package/dist/esm/components/data-display/kbd.js.map +1 -0
  309. package/dist/esm/components/data-display/markdown-content.d.ts.map +1 -1
  310. package/dist/esm/components/data-display/markdown-stream-runtime.d.ts.map +1 -1
  311. package/dist/esm/components/data-display/markdown-stream.lazy.d.ts.map +1 -1
  312. package/dist/esm/components/data-display/markdown-stream.lazy.js +13 -2
  313. package/dist/esm/components/data-display/markdown-stream.lazy.js.map +1 -1
  314. package/dist/esm/components/data-display/notification-indicator.d.ts.map +1 -1
  315. package/dist/esm/components/data-display/notification-indicator.js +3 -11
  316. package/dist/esm/components/data-display/notification-indicator.js.map +1 -1
  317. package/dist/esm/components/data-display/notification-indicator.labels.d.ts.map +1 -1
  318. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts +63 -0
  319. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts.map +1 -0
  320. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js +75 -0
  321. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js.map +1 -0
  322. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts +32 -0
  323. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts.map +1 -0
  324. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js +36 -0
  325. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js.map +1 -0
  326. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts +46 -6
  327. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  328. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js +70 -46
  329. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js.map +1 -1
  330. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts +12 -2
  331. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts.map +1 -1
  332. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js +3 -2
  333. package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js.map +1 -1
  334. package/dist/esm/components/data-display/timeline.d.ts +3 -0
  335. package/dist/esm/components/data-display/timeline.d.ts.map +1 -0
  336. package/dist/esm/components/data-display/timeline.js +92 -0
  337. package/dist/esm/components/data-display/timeline.js.map +1 -0
  338. package/dist/esm/components/data-display/untrusted-html-content.d.ts +55 -0
  339. package/dist/esm/components/data-display/untrusted-html-content.d.ts.map +1 -0
  340. package/dist/esm/components/data-display/untrusted-html-content.js +67 -0
  341. package/dist/esm/components/data-display/untrusted-html-content.js.map +1 -0
  342. package/dist/esm/components/feedback/celebration-overlay.d.ts +13 -4
  343. package/dist/esm/components/feedback/celebration-overlay.d.ts.map +1 -1
  344. package/dist/esm/components/feedback/celebration-overlay.js +146 -22
  345. package/dist/esm/components/feedback/celebration-overlay.js.map +1 -1
  346. package/dist/esm/components/feedback/celebration-overlay.labels.d.ts.map +1 -1
  347. package/dist/esm/components/feedback/danger-zone.d.ts.map +1 -1
  348. package/dist/esm/components/feedback/danger-zone.labels.d.ts.map +1 -1
  349. package/dist/esm/components/feedback/empty-state.d.ts.map +1 -1
  350. package/dist/esm/components/feedback/empty-state.js.map +1 -1
  351. package/dist/esm/components/feedback/empty-state.labels.d.ts.map +1 -1
  352. package/dist/esm/components/feedback/error-display.d.ts.map +1 -1
  353. package/dist/esm/components/feedback/error-display.labels.d.ts.map +1 -1
  354. package/dist/esm/components/feedback/features/feature-limit-indicator.d.ts.map +1 -1
  355. package/dist/esm/components/feedback/features/feature-limit-indicator.labels.d.ts.map +1 -1
  356. package/dist/esm/components/feedback/features/feature-lock-badge.d.ts.map +1 -1
  357. package/dist/esm/components/feedback/features/feature-lock-badge.labels.d.ts.map +1 -1
  358. package/dist/esm/components/feedback/features/feature-unavailable-dialog.d.ts.map +1 -1
  359. package/dist/esm/components/feedback/features/feature-unavailable-dialog.labels.d.ts.map +1 -1
  360. package/dist/esm/components/feedback/features/feature-unavailable-prompt.d.ts.map +1 -1
  361. package/dist/esm/components/feedback/features/feature-unavailable-prompt.js.map +1 -1
  362. package/dist/esm/components/feedback/features/feature-unavailable-prompt.labels.d.ts.map +1 -1
  363. package/dist/esm/components/feedback/loading-overlay.d.ts.map +1 -1
  364. package/dist/esm/components/feedback/loading-overlay.labels.d.ts.map +1 -1
  365. package/dist/esm/components/feedback/loading-spinner.d.ts.map +1 -1
  366. package/dist/esm/components/feedback/loading-spinner.labels.d.ts.map +1 -1
  367. package/dist/esm/components/feedback/notification-center.d.ts.map +1 -1
  368. package/dist/esm/components/feedback/notification-center.js +5 -5
  369. package/dist/esm/components/feedback/notification-center.js.map +1 -1
  370. package/dist/esm/components/feedback/operations-confirm-critical.d.ts +1 -1
  371. package/dist/esm/components/feedback/operations-confirm-critical.d.ts.map +1 -1
  372. package/dist/esm/components/feedback/operations-confirm-critical.js +9 -7
  373. package/dist/esm/components/feedback/operations-confirm-critical.js.map +1 -1
  374. package/dist/esm/components/feedback/operations-confirm-critical.labels.d.ts.map +1 -1
  375. package/dist/esm/components/feedback/progress.d.ts.map +1 -1
  376. package/dist/esm/components/feedback/progress.labels.d.ts.map +1 -1
  377. package/dist/esm/components/feedback/skeleton.d.ts.map +1 -1
  378. package/dist/esm/components/feedback/skeleton.labels.d.ts.map +1 -1
  379. package/dist/esm/components/feedback/toast.d.ts.map +1 -1
  380. package/dist/esm/components/feedback/toast.labels.d.ts.map +1 -1
  381. package/dist/esm/components/form/autosave-indicator.d.ts.map +1 -1
  382. package/dist/esm/components/form/autosave-indicator.labels.d.ts.map +1 -1
  383. package/dist/esm/components/form/chromes/field.d.ts.map +1 -1
  384. package/dist/esm/components/form/chromes/field.js +11 -3
  385. package/dist/esm/components/form/chromes/field.js.map +1 -1
  386. package/dist/esm/components/form/chromes/field.labels.d.ts.map +1 -1
  387. package/dist/esm/components/form/chromes/form-primitive.d.ts.map +1 -1
  388. package/dist/esm/components/form/chromes/form-primitive.labels.d.ts.map +1 -1
  389. package/dist/esm/components/form/chromes/form-primitive.labels.js +37 -0
  390. package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
  391. package/dist/esm/components/form/combobox.d.ts.map +1 -1
  392. package/dist/esm/components/form/combobox.js +14 -13
  393. package/dist/esm/components/form/combobox.js.map +1 -1
  394. package/dist/esm/components/form/combobox.labels.d.ts.map +1 -1
  395. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts +42 -0
  396. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts.map +1 -0
  397. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js +120 -0
  398. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js.map +1 -0
  399. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts +16 -0
  400. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts.map +1 -0
  401. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js +8 -0
  402. package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js.map +1 -0
  403. package/dist/esm/components/form/controls/boolean/checkbox.d.ts.map +1 -1
  404. package/dist/esm/components/form/controls/boolean/checkbox.js +2 -2
  405. package/dist/esm/components/form/controls/boolean/checkbox.js.map +1 -1
  406. package/dist/esm/components/form/controls/boolean/checkbox.labels.d.ts.map +1 -1
  407. package/dist/esm/components/form/controls/boolean/switch.d.ts.map +1 -1
  408. package/dist/esm/components/form/controls/boolean/switch.labels.d.ts.map +1 -1
  409. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.d.ts.map +1 -1
  410. package/dist/esm/components/form/controls/boolean/toggle-group-boolean.labels.d.ts.map +1 -1
  411. package/dist/esm/components/form/controls/boolean/toggle.d.ts.map +1 -1
  412. package/dist/esm/components/form/controls/boolean/toggle.labels.d.ts.map +1 -1
  413. package/dist/esm/components/form/controls/code-editor/cm6-editor-appearance.d.ts.map +1 -1
  414. package/dist/esm/components/form/controls/code-editor/cm6-editor.d.ts.map +1 -1
  415. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.d.ts.map +1 -1
  416. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js +11 -2
  417. package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js.map +1 -1
  418. package/dist/esm/components/form/controls/code-editor/form-field-code.d.ts.map +1 -1
  419. package/dist/esm/components/form/controls/code-editor/markdown-editor.d.ts.map +1 -1
  420. package/dist/esm/components/form/controls/date-time/calendar.d.ts.map +1 -1
  421. package/dist/esm/components/form/controls/date-time/calendar.labels.d.ts.map +1 -1
  422. package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts.map +1 -1
  423. package/dist/esm/components/form/controls/date-time/date-range-picker.labels.d.ts.map +1 -1
  424. package/dist/esm/components/form/controls/date-time/datepicker.d.ts.map +1 -1
  425. package/dist/esm/components/form/controls/date-time/datepicker.labels.d.ts.map +1 -1
  426. package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts.map +1 -1
  427. package/dist/esm/components/form/controls/date-time/datetime-picker.labels.d.ts.map +1 -1
  428. package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts.map +1 -1
  429. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.d.ts.map +1 -1
  430. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js +11 -2
  431. package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js.map +1 -1
  432. package/dist/esm/components/form/controls/date-time/time-picker.d.ts.map +1 -1
  433. package/dist/esm/components/form/controls/date-time/time-picker.labels.d.ts.map +1 -1
  434. package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts.map +1 -1
  435. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.d.ts.map +1 -1
  436. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js +11 -2
  437. package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js.map +1 -1
  438. package/dist/esm/components/form/controls/enum/radio.d.ts +1 -1
  439. package/dist/esm/components/form/controls/enum/radio.d.ts.map +1 -1
  440. package/dist/esm/components/form/controls/enum/radio.js +13 -12
  441. package/dist/esm/components/form/controls/enum/radio.js.map +1 -1
  442. package/dist/esm/components/form/controls/enum/radio.labels.d.ts.map +1 -1
  443. package/dist/esm/components/form/controls/enum/select-multiple.d.ts.map +1 -1
  444. package/dist/esm/components/form/controls/enum/select-multiple.js +5 -3
  445. package/dist/esm/components/form/controls/enum/select-multiple.js.map +1 -1
  446. package/dist/esm/components/form/controls/enum/select-multiple.labels.d.ts.map +1 -1
  447. package/dist/esm/components/form/controls/enum/select.d.ts.map +1 -1
  448. package/dist/esm/components/form/controls/enum/select.labels.d.ts.map +1 -1
  449. package/dist/esm/components/form/controls/enum/toggle-group.d.ts.map +1 -1
  450. package/dist/esm/components/form/controls/enum/toggle-group.js +96 -5
  451. package/dist/esm/components/form/controls/enum/toggle-group.js.map +1 -1
  452. package/dist/esm/components/form/controls/enum/toggle-group.labels.d.ts.map +1 -1
  453. package/dist/esm/components/form/controls/file/file-upload.d.ts.map +1 -1
  454. package/dist/esm/components/form/controls/file/file-upload.labels.d.ts.map +1 -1
  455. package/dist/esm/components/form/controls/file/image-crop.d.ts.map +1 -1
  456. package/dist/esm/components/form/controls/file/image-crop.labels.d.ts.map +1 -1
  457. package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts +44 -0
  458. package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts.map +1 -0
  459. package/dist/esm/components/form/controls/file/providers/dropbox-picker.js +137 -0
  460. package/dist/esm/components/form/controls/file/providers/dropbox-picker.js.map +1 -0
  461. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts +22 -0
  462. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts.map +1 -0
  463. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js +27 -0
  464. package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js.map +1 -0
  465. package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts +3 -1
  466. package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts.map +1 -1
  467. package/dist/esm/components/form/controls/file/providers/google-drive-picker.js +3 -1
  468. package/dist/esm/components/form/controls/file/providers/google-drive-picker.js.map +1 -1
  469. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts +6 -0
  470. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts.map +1 -1
  471. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js +8 -1
  472. package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js.map +1 -1
  473. package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts +6 -2
  474. package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts.map +1 -1
  475. package/dist/esm/components/form/controls/file/providers/onedrive-picker.js +6 -2
  476. package/dist/esm/components/form/controls/file/providers/onedrive-picker.js.map +1 -1
  477. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts +6 -0
  478. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts.map +1 -1
  479. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js +8 -1
  480. package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js.map +1 -1
  481. package/dist/esm/components/form/controls/input-group.d.ts.map +1 -1
  482. package/dist/esm/components/form/controls/input-group.labels.d.ts.map +1 -1
  483. package/dist/esm/components/form/controls/input.d.ts.map +1 -1
  484. package/dist/esm/components/form/controls/input.labels.d.ts.map +1 -1
  485. package/dist/esm/components/form/controls/number/slider.d.ts.map +1 -1
  486. package/dist/esm/components/form/controls/number/slider.labels.d.ts.map +1 -1
  487. package/dist/esm/components/form/controls/number/slider.labels.js +9 -2
  488. package/dist/esm/components/form/controls/number/slider.labels.js.map +1 -1
  489. package/dist/esm/components/form/controls/string/color-input.d.ts.map +1 -1
  490. package/dist/esm/components/form/controls/string/color-input.labels.d.ts.map +1 -1
  491. package/dist/esm/components/form/controls/string/color-picker-surface.d.ts.map +1 -1
  492. package/dist/esm/components/form/controls/string/color-picker-surface.js.map +1 -1
  493. package/dist/esm/components/form/controls/string/inline-edit-text.d.ts.map +1 -1
  494. package/dist/esm/components/form/controls/string/input-otp.d.ts.map +1 -1
  495. package/dist/esm/components/form/controls/string/input-otp.labels.d.ts.map +1 -1
  496. package/dist/esm/components/form/controls/string/password-input.d.ts.map +1 -1
  497. package/dist/esm/components/form/controls/string/password-input.labels.d.ts.map +1 -1
  498. package/dist/esm/components/form/controls/string/password-input.labels.js +9 -2
  499. package/dist/esm/components/form/controls/string/password-input.labels.js.map +1 -1
  500. package/dist/esm/components/form/controls/string/textarea.d.ts.map +1 -1
  501. package/dist/esm/components/form/controls/string/textarea.labels.d.ts.map +1 -1
  502. package/dist/esm/components/layout/aspect-ratio.d.ts.map +1 -1
  503. package/dist/esm/components/layout/aspect-ratio.labels.d.ts.map +1 -1
  504. package/dist/esm/components/layout/carousel.d.ts.map +1 -1
  505. package/dist/esm/components/layout/carousel.labels.d.ts.map +1 -1
  506. package/dist/esm/components/layout/divider.d.ts.map +1 -1
  507. package/dist/esm/components/layout/divider.labels.d.ts.map +1 -1
  508. package/dist/esm/components/layout/resizable.d.ts.map +1 -1
  509. package/dist/esm/components/layout/resizable.labels.d.ts.map +1 -1
  510. package/dist/esm/components/layout/scroll-area.d.ts.map +1 -1
  511. package/dist/esm/components/layout/scroll-area.labels.d.ts.map +1 -1
  512. package/dist/esm/components/layout/separator.d.ts.map +1 -1
  513. package/dist/esm/components/layout/separator.labels.d.ts.map +1 -1
  514. package/dist/esm/components/navigation/app-level/activity-bar.d.ts.map +1 -1
  515. package/dist/esm/components/navigation/app-level/activity-bar.js +2 -2
  516. package/dist/esm/components/navigation/app-level/activity-bar.js.map +1 -1
  517. package/dist/esm/components/navigation/app-level/activity-bar.labels.d.ts.map +1 -1
  518. package/dist/esm/components/navigation/app-level/command-menu.d.ts.map +1 -1
  519. package/dist/esm/components/navigation/app-level/command-menu.js +2 -2
  520. package/dist/esm/components/navigation/app-level/command-menu.js.map +1 -1
  521. package/dist/esm/components/navigation/app-level/command-menu.labels.d.ts.map +1 -1
  522. package/dist/esm/components/navigation/app-level/control-panel.d.ts.map +1 -1
  523. package/dist/esm/components/navigation/app-level/control-panel.labels.d.ts.map +1 -1
  524. package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
  525. package/dist/esm/components/navigation/app-level/menu-user-org.js +10 -4
  526. package/dist/esm/components/navigation/app-level/menu-user-org.js.map +1 -1
  527. package/dist/esm/components/navigation/app-level/menu-user-org.labels.d.ts.map +1 -1
  528. package/dist/esm/components/navigation/app-level/menu-user-org.labels.js +7 -0
  529. package/dist/esm/components/navigation/app-level/menu-user-org.labels.js.map +1 -1
  530. package/dist/esm/components/navigation/app-level/menubar.d.ts.map +1 -1
  531. package/dist/esm/components/navigation/app-level/menubar.js +36 -14
  532. package/dist/esm/components/navigation/app-level/menubar.js.map +1 -1
  533. package/dist/esm/components/navigation/app-level/menubar.labels.d.ts.map +1 -1
  534. package/dist/esm/components/navigation/app-level/navigation-back.d.ts.map +1 -1
  535. package/dist/esm/components/navigation/app-level/navigation-back.js +31 -5
  536. package/dist/esm/components/navigation/app-level/navigation-back.js.map +1 -1
  537. package/dist/esm/components/navigation/app-level/navigation-back.labels.d.ts.map +1 -1
  538. package/dist/esm/components/navigation/app-level/notification-center.d.ts.map +1 -1
  539. package/dist/esm/components/navigation/app-level/notification-center.js.map +1 -1
  540. package/dist/esm/components/navigation/app-level/notification-center.labels.d.ts.map +1 -1
  541. package/dist/esm/components/navigation/app-level/notification-center.labels.js +15 -0
  542. package/dist/esm/components/navigation/app-level/notification-center.labels.js.map +1 -1
  543. package/dist/esm/components/navigation/app-level/quick-action-button.d.ts.map +1 -1
  544. package/dist/esm/components/navigation/app-level/quick-action-button.labels.d.ts.map +1 -1
  545. package/dist/esm/components/navigation/app-level/quick-action-button.labels.js +4 -0
  546. package/dist/esm/components/navigation/app-level/quick-action-button.labels.js.map +1 -1
  547. package/dist/esm/components/navigation/app-level/quick-switcher.d.ts.map +1 -1
  548. package/dist/esm/components/navigation/app-level/quick-switcher.labels.d.ts.map +1 -1
  549. package/dist/esm/components/navigation/app-level/sidebar.d.ts.map +1 -1
  550. package/dist/esm/components/navigation/app-level/sidebar.js +41 -25
  551. package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
  552. package/dist/esm/components/navigation/app-level/sidebar.labels.d.ts.map +1 -1
  553. package/dist/esm/components/navigation/app-level/sidebar.labels.js +1 -0
  554. package/dist/esm/components/navigation/app-level/sidebar.labels.js.map +1 -1
  555. package/dist/esm/components/navigation/app-level/status-bar.d.ts.map +1 -1
  556. package/dist/esm/components/navigation/app-level/status-bar.js +2 -2
  557. package/dist/esm/components/navigation/app-level/status-bar.js.map +1 -1
  558. package/dist/esm/components/navigation/app-level/status-bar.labels.d.ts.map +1 -1
  559. package/dist/esm/components/navigation/app-level/toolbar.d.ts.map +1 -1
  560. package/dist/esm/components/navigation/app-level/toolbar.js +2 -2
  561. package/dist/esm/components/navigation/app-level/toolbar.js.map +1 -1
  562. package/dist/esm/components/navigation/app-level/toolbar.labels.d.ts.map +1 -1
  563. package/dist/esm/components/navigation/app-level/utility-panel.d.ts.map +1 -1
  564. package/dist/esm/components/navigation/app-level/utility-panel.js +24 -6
  565. package/dist/esm/components/navigation/app-level/utility-panel.js.map +1 -1
  566. package/dist/esm/components/navigation/app-level/utility-panel.labels.d.ts.map +1 -1
  567. package/dist/esm/components/navigation/app-level/utility-panel.labels.js.map +1 -1
  568. package/dist/esm/components/navigation/breadcrumb.d.ts.map +1 -1
  569. package/dist/esm/components/navigation/breadcrumb.js +1 -1
  570. package/dist/esm/components/navigation/breadcrumb.js.map +1 -1
  571. package/dist/esm/components/navigation/breadcrumb.labels.d.ts.map +1 -1
  572. package/dist/esm/components/navigation/command.d.ts.map +1 -1
  573. package/dist/esm/components/navigation/command.js +2 -2
  574. package/dist/esm/components/navigation/command.js.map +1 -1
  575. package/dist/esm/components/navigation/command.labels.d.ts.map +1 -1
  576. package/dist/esm/components/navigation/menu-bar.d.ts.map +1 -1
  577. package/dist/esm/components/navigation/menu-bar.labels.d.ts.map +1 -1
  578. package/dist/esm/components/navigation/navbar.d.ts.map +1 -1
  579. package/dist/esm/components/navigation/navbar.labels.d.ts.map +1 -1
  580. package/dist/esm/components/navigation/sidebar.d.ts.map +1 -1
  581. package/dist/esm/components/navigation/sidebar.labels.d.ts.map +1 -1
  582. package/dist/esm/components/overlays/containers/alert-dialog.d.ts.map +1 -1
  583. package/dist/esm/components/overlays/containers/alert-dialog.js +11 -1
  584. package/dist/esm/components/overlays/containers/alert-dialog.js.map +1 -1
  585. package/dist/esm/components/overlays/containers/alert-dialog.labels.d.ts.map +1 -1
  586. package/dist/esm/components/overlays/containers/alert.d.ts.map +1 -1
  587. package/dist/esm/components/overlays/containers/alert.labels.d.ts.map +1 -1
  588. package/dist/esm/components/overlays/containers/dialog.d.ts.map +1 -1
  589. package/dist/esm/components/overlays/containers/dialog.js +11 -1
  590. package/dist/esm/components/overlays/containers/dialog.js.map +1 -1
  591. package/dist/esm/components/overlays/containers/dialog.labels.d.ts.map +1 -1
  592. package/dist/esm/components/overlays/containers/drawer.d.ts.map +1 -1
  593. package/dist/esm/components/overlays/containers/drawer.labels.d.ts.map +1 -1
  594. package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
  595. package/dist/esm/components/overlays/containers/sheet.labels.d.ts.map +1 -1
  596. package/dist/esm/components/overlays/floating/context-menu.d.ts.map +1 -1
  597. package/dist/esm/components/overlays/floating/context-menu.labels.d.ts.map +1 -1
  598. package/dist/esm/components/overlays/floating/dropdown-menu.d.ts.map +1 -1
  599. package/dist/esm/components/overlays/floating/dropdown-menu.labels.d.ts.map +1 -1
  600. package/dist/esm/components/overlays/floating/hover-card.d.ts.map +1 -1
  601. package/dist/esm/components/overlays/floating/hover-card.labels.d.ts.map +1 -1
  602. package/dist/esm/components/overlays/floating/popover.d.ts.map +1 -1
  603. package/dist/esm/components/overlays/floating/popover.labels.d.ts.map +1 -1
  604. package/dist/esm/components/overlays/floating/tooltip.d.ts.map +1 -1
  605. package/dist/esm/components/overlays/floating/tooltip.labels.d.ts.map +1 -1
  606. package/dist/esm/components/sections/accordion.d.ts.map +1 -1
  607. package/dist/esm/components/sections/accordion.labels.d.ts.map +1 -1
  608. package/dist/esm/components/sections/card.d.ts.map +1 -1
  609. package/dist/esm/components/sections/card.js +71 -6
  610. package/dist/esm/components/sections/card.js.map +1 -1
  611. package/dist/esm/components/sections/card.labels.d.ts.map +1 -1
  612. package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
  613. package/dist/esm/components/sections/collapsible.labels.d.ts.map +1 -1
  614. package/dist/esm/components/sections/content-section.d.ts.map +1 -1
  615. package/dist/esm/components/sections/content-section.js +36 -6
  616. package/dist/esm/components/sections/content-section.js.map +1 -1
  617. package/dist/esm/components/sections/disclosure-nesting.d.ts.map +1 -1
  618. package/dist/esm/components/sections/option-gesture.d.ts +15 -0
  619. package/dist/esm/components/sections/option-gesture.d.ts.map +1 -0
  620. package/dist/esm/components/sections/option-gesture.js +66 -0
  621. package/dist/esm/components/sections/option-gesture.js.map +1 -0
  622. package/dist/esm/components/sections/pagination.d.ts.map +1 -1
  623. package/dist/esm/components/sections/pagination.labels.d.ts.map +1 -1
  624. package/dist/esm/components/sections/stacked-layout.d.ts.map +1 -1
  625. package/dist/esm/components/sections/stacked-layout.labels.d.ts.map +1 -1
  626. package/dist/esm/components/sections/stepper.d.ts.map +1 -1
  627. package/dist/esm/components/sections/stepper.js +5 -3
  628. package/dist/esm/components/sections/stepper.js.map +1 -1
  629. package/dist/esm/components/sections/stepper.labels.d.ts.map +1 -1
  630. package/dist/esm/components/sections/table.d.ts.map +1 -1
  631. package/dist/esm/components/sections/table.labels.d.ts.map +1 -1
  632. package/dist/esm/components/sections/tabs.d.ts.map +1 -1
  633. package/dist/esm/components/sections/tabs.js +60 -15
  634. package/dist/esm/components/sections/tabs.js.map +1 -1
  635. package/dist/esm/components/sections/tabs.labels.d.ts.map +1 -1
  636. package/dist/esm/components/typography/heading.d.ts.map +1 -1
  637. package/dist/esm/components/typography/heading.labels.d.ts.map +1 -1
  638. package/dist/esm/components/typography/label.d.ts.map +1 -1
  639. package/dist/esm/components/typography/label.labels.d.ts.map +1 -1
  640. package/dist/esm/components/typography/link.d.ts.map +1 -1
  641. package/dist/esm/components/typography/link.js +9 -3
  642. package/dist/esm/components/typography/link.js.map +1 -1
  643. package/dist/esm/components/typography/link.labels.d.ts.map +1 -1
  644. package/dist/esm/components/typography/text.d.ts +1 -1
  645. package/dist/esm/components/typography/text.d.ts.map +1 -1
  646. package/dist/esm/components/typography/text.js +3 -2
  647. package/dist/esm/components/typography/text.js.map +1 -1
  648. package/dist/esm/components/typography/text.labels.d.ts.map +1 -1
  649. package/dist/esm/components/typography/truncated-text.d.ts.map +1 -1
  650. package/dist/esm/config/billing-shell.presets.d.ts.map +1 -1
  651. package/dist/esm/config/index.d.ts.map +1 -1
  652. package/dist/esm/config/preset-design-system.d.ts.map +1 -1
  653. package/dist/esm/config/preset-design-system.js +37 -60
  654. package/dist/esm/config/preset-design-system.js.map +1 -1
  655. package/dist/esm/config/preset-error-pages.d.ts.map +1 -1
  656. package/dist/esm/config/preset-kits.d.ts.map +1 -1
  657. package/dist/esm/config/preset-navigation.d.ts.map +1 -1
  658. package/dist/esm/config/preset-navigation.js +23 -7
  659. package/dist/esm/config/preset-navigation.js.map +1 -1
  660. package/dist/esm/config/preset-resources.d.ts.map +1 -1
  661. package/dist/esm/config/preset-shell.d.ts.map +1 -1
  662. package/dist/esm/config/preset-utils.d.ts.map +1 -1
  663. package/dist/esm/config/presets.d.ts.map +1 -1
  664. package/dist/esm/config/resources/agent-work.resource-presets.d.ts +4 -0
  665. package/dist/esm/config/resources/agent-work.resource-presets.d.ts.map +1 -0
  666. package/dist/esm/config/resources/agent-work.resource-presets.js +115 -0
  667. package/dist/esm/config/resources/agent-work.resource-presets.js.map +1 -0
  668. package/dist/esm/config/resources/api-key-rotation-window.d.ts +22 -0
  669. package/dist/esm/config/resources/api-key-rotation-window.d.ts.map +1 -0
  670. package/dist/esm/config/resources/api-key-rotation-window.js +45 -0
  671. package/dist/esm/config/resources/api-key-rotation-window.js.map +1 -0
  672. package/dist/esm/config/resources/application.resource-presets.d.ts +2 -0
  673. package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
  674. package/dist/esm/config/resources/application.resource-presets.js +268 -26
  675. package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
  676. package/dist/esm/config/resources/billing.resource-presets.d.ts +4 -3
  677. package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
  678. package/dist/esm/config/resources/billing.resource-presets.js +241 -111
  679. package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
  680. package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts +4 -0
  681. package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts.map +1 -0
  682. package/dist/esm/config/resources/conversation-threads.resource-presets.js +105 -0
  683. package/dist/esm/config/resources/conversation-threads.resource-presets.js.map +1 -0
  684. package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
  685. package/dist/esm/config/resources/guidance.resource-presets.js +39 -16
  686. package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
  687. package/dist/esm/config/resources/identity.resource-presets.d.ts +0 -13
  688. package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
  689. package/dist/esm/config/resources/identity.resource-presets.js +71 -17
  690. package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
  691. package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts +6 -0
  692. package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts.map +1 -0
  693. package/dist/esm/config/resources/inbound-deliveries.resource-presets.js +112 -0
  694. package/dist/esm/config/resources/inbound-deliveries.resource-presets.js.map +1 -0
  695. package/dist/esm/config/resources/inbound-email.resource-presets.d.ts +4 -0
  696. package/dist/esm/config/resources/inbound-email.resource-presets.d.ts.map +1 -0
  697. package/dist/esm/config/resources/inbound-email.resource-presets.js +182 -0
  698. package/dist/esm/config/resources/inbound-email.resource-presets.js.map +1 -0
  699. package/dist/esm/config/resources/index.d.ts.map +1 -1
  700. package/dist/esm/config/resources/index.js +9 -2
  701. package/dist/esm/config/resources/index.js.map +1 -1
  702. package/dist/esm/config/resources/legal-holds.resource-presets.d.ts +4 -0
  703. package/dist/esm/config/resources/legal-holds.resource-presets.d.ts.map +1 -0
  704. package/dist/esm/config/resources/legal-holds.resource-presets.js +76 -0
  705. package/dist/esm/config/resources/legal-holds.resource-presets.js.map +1 -0
  706. package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
  707. package/dist/esm/config/resources/organizations.resource-presets.js +216 -35
  708. package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
  709. package/dist/esm/config/resources/resource.config.utils.d.ts +20 -0
  710. package/dist/esm/config/resources/resource.config.utils.d.ts.map +1 -1
  711. package/dist/esm/config/resources/resource.config.utils.js +20 -0
  712. package/dist/esm/config/resources/resource.config.utils.js.map +1 -1
  713. package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts +5 -0
  714. package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts.map +1 -0
  715. package/dist/esm/config/resources/retention-enforcement.resource-presets.js +74 -0
  716. package/dist/esm/config/resources/retention-enforcement.resource-presets.js.map +1 -0
  717. package/dist/esm/config/resources/security.resource-presets.d.ts +11 -3
  718. package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
  719. package/dist/esm/config/resources/security.resource-presets.js +685 -99
  720. package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
  721. package/dist/esm/config/resources/service-providers.resource-presets.d.ts +4 -0
  722. package/dist/esm/config/resources/service-providers.resource-presets.d.ts.map +1 -0
  723. package/dist/esm/config/resources/service-providers.resource-presets.js +321 -0
  724. package/dist/esm/config/resources/service-providers.resource-presets.js.map +1 -0
  725. package/dist/esm/config/resources/webhooks.resource-presets.d.ts +4 -3
  726. package/dist/esm/config/resources/webhooks.resource-presets.d.ts.map +1 -1
  727. package/dist/esm/config/resources/webhooks.resource-presets.js +102 -26
  728. package/dist/esm/config/resources/webhooks.resource-presets.js.map +1 -1
  729. package/dist/esm/index.d.ts +7 -1
  730. package/dist/esm/index.d.ts.map +1 -1
  731. package/dist/esm/index.js +7 -1
  732. package/dist/esm/index.js.map +1 -1
  733. package/dist/esm/lottie/lottie.content.definitions.d.ts.map +1 -1
  734. package/dist/esm/lottie/lottie.definitions.d.ts.map +1 -1
  735. package/dist/esm/mermaid-stub.d.ts.map +1 -1
  736. package/dist/esm/registration/register-common-enums.d.ts.map +1 -1
  737. package/dist/esm/registration/register-common-enums.js +63 -34
  738. package/dist/esm/registration/register-common-enums.js.map +1 -1
  739. package/dist/esm/registration/register-default-animations.d.ts.map +1 -1
  740. package/dist/esm/registration/register-default-icons.d.ts.map +1 -1
  741. package/dist/esm/registration/register-default-icons.js +3 -1
  742. package/dist/esm/registration/register-default-icons.js.map +1 -1
  743. package/dist/esm/registration/register-default-presets.d.ts.map +1 -1
  744. package/dist/esm/registration/register-default-presets.js +32 -4
  745. package/dist/esm/registration/register-default-presets.js.map +1 -1
  746. package/dist/esm/registration/register-provider-components.d.ts.map +1 -1
  747. package/dist/esm/registration/register-provider-components.js +11 -0
  748. package/dist/esm/registration/register-provider-components.js.map +1 -1
  749. package/dist/esm/shiki-subset.d.ts +11 -3
  750. package/dist/esm/shiki-subset.d.ts.map +1 -1
  751. package/dist/esm/shiki-subset.js +10 -2
  752. package/dist/esm/shiki-subset.js.map +1 -1
  753. package/dist/esm/theme-exports.d.ts.map +1 -1
  754. package/dist/esm/themes/cozy.theme.d.ts.map +1 -1
  755. package/dist/esm/themes/cozy.theme.js +19 -5
  756. package/dist/esm/themes/cozy.theme.js.map +1 -1
  757. package/dist/esm/themes/dense.theme.d.ts.map +1 -1
  758. package/dist/esm/themes/dense.theme.js +76 -10
  759. package/dist/esm/themes/dense.theme.js.map +1 -1
  760. package/dist/esm/themes/editorial.theme.d.ts.map +1 -1
  761. package/dist/esm/themes/editorial.theme.js +19 -5
  762. package/dist/esm/themes/editorial.theme.js.map +1 -1
  763. package/dist/esm/themes/glass.theme.d.ts.map +1 -1
  764. package/dist/esm/themes/glass.theme.js +5 -1
  765. package/dist/esm/themes/glass.theme.js.map +1 -1
  766. package/dist/esm/themes/neo-brutalist.theme.d.ts.map +1 -1
  767. package/dist/esm/themes/neo-brutalist.theme.js +9 -2
  768. package/dist/esm/themes/neo-brutalist.theme.js.map +1 -1
  769. package/dist/esm/themes/terminal.theme.d.ts.map +1 -1
  770. package/dist/esm/themes/terminal.theme.js +19 -5
  771. package/dist/esm/themes/terminal.theme.js.map +1 -1
  772. package/dist/esm/themes/trading.theme.d.ts.map +1 -1
  773. package/dist/esm/themes/trading.theme.js +22 -6
  774. package/dist/esm/themes/trading.theme.js.map +1 -1
  775. package/dist/tsconfig.build.tsbuildinfo +1 -1
  776. package/package.json +31 -45
  777. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts +0 -16
  778. package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +0 -1
  779. package/dist/esm/components/form/controls/form-field-checkbox-group.js +0 -143
  780. package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +0 -1
@@ -1,8 +1,9 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, Badge, Button, ButtonVariants_Variant, ScrollArea, TextareaRoot, cn, useI18n, Surface, } from '@wildo-ai/saas-frontend-lib';
4
+ import { Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, Badge, Button, ButtonVariants_Variant, ScrollArea, SelectContent, SelectItem, SelectRoot, SelectTrigger, SelectValue, TextareaRoot, cn, useI18n, Surface, } from '@wildo-ai/saas-frontend-lib';
5
5
  import { FrontendComponentType, ButtonSize, SurfaceVariant } from "@wildo-ai/presets-components-models";
6
+ import { ApprovalArgumentEditorMode, ApprovalArgumentFields, fieldsEditableArgumentsSchema } from "./approval-argument-fields.js";
6
7
  const CT = FrontendComponentType.LOW_LEVEL_AI_APPROVAL;
7
8
  //===============================================================
8
9
  // Human-in-the-Loop Approval Components
@@ -40,7 +41,7 @@ function useCountdown(expiresAt) {
40
41
  : `${seconds}s`;
41
42
  return { remaining, isExpired: false };
42
43
  }
43
- export const AI_ApprovalRequest = ({ approvalId, actionDescription, riskLevel, executionId, systemRef, expiresAt, requiredRoles, toolName, executionContext, allowArgumentModification, onApprove, onDeny, onEscalate, isProcessing, createdAt, className, ...props }) => {
44
+ export const AI_ApprovalRequest = ({ approvalId, actionDescription, riskLevel, executionId, systemRef, expiresAt, requiredRoles, toolName, executionContext, allowArgumentModification, argumentsSchema, argumentModificationError, rejectedArguments, reasonCodeOptions, onApprove, onDeny, onEscalate, onClaim, onUnclaim, onReassignOpen, reassignCandidates, onReassign, actionNotice, onPauseClock, onResumeClock, pauseStateOptions, deadlineNotice, clockPausedNotice, answerable = true, isProcessing, createdAt, className, ...props }) => {
44
45
  const { tComponent, isReady } = useI18n({ component: CT });
45
46
  const { remaining, isExpired } = useCountdown(expiresAt);
46
47
  const variant = riskLevel === "critical" || riskLevel === "high" ? "destructive" : "default";
@@ -52,10 +53,23 @@ export const AI_ApprovalRequest = ({ approvalId, actionDescription, riskLevel, e
52
53
  * arguments, so the starting point is the call the agent asked for and an approver changes one
53
54
  * value rather than retyping the object.
54
55
  */
55
- const [draft, setDraft] = React.useState(null);
56
+ const fieldsSchema = React.useMemo(() => fieldsEditableArgumentsSchema(argumentsSchema), [argumentsSchema]);
57
+ /*
58
+ * A refused edit reopens on what the approver SUBMITTED (#587). The request unmounted while its
59
+ * decision was in flight, so without this the approver would land back on the model's proposal and
60
+ * lose the change the server has just explained.
61
+ */
62
+ const reopenedOn = argumentModificationError !== undefined ? (rejectedArguments ?? executionContext) : undefined;
63
+ const [editorMode, setEditorMode] = React.useState(() => reopenedOn === undefined ? null : fieldsSchema ? ApprovalArgumentEditorMode.FIELDS : ApprovalArgumentEditorMode.JSON);
64
+ // The value the field editor (re)mounts on — replaced when the approver switches back from JSON.
65
+ const [fieldsSeed, setFieldsSeed] = React.useState(() => reopenedOn ?? executionContext ?? {});
66
+ const [fieldsEdit, setFieldsEdit] = React.useState({
67
+ value: undefined,
68
+ invalid: false,
69
+ });
70
+ const handleFieldsChange = React.useCallback((next) => setFieldsEdit(next), []);
71
+ const [draft, setDraft] = React.useState(() => JSON.stringify(reopenedOn ?? executionContext ?? {}, null, 2));
56
72
  const parsedDraft = React.useMemo(() => {
57
- if (draft === null)
58
- return { value: undefined, invalid: false };
59
73
  try {
60
74
  const value = JSON.parse(draft);
61
75
  // An array or a scalar is valid JSON and cannot be a tool's arguments. Refusing it HERE spares
@@ -70,23 +84,99 @@ export const AI_ApprovalRequest = ({ approvalId, actionDescription, riskLevel, e
70
84
  }, [draft]);
71
85
  if (!isReady)
72
86
  return null;
73
- return (_jsxs(Alert, { variant: variant, className: cn("flex flex-col gap-card-sm", className), ...props, children: [_jsxs("div", { className: "flex items-center justify-between gap-element", children: [_jsxs("div", { className: "flex items-center gap-element", children: [riskLevel && (_jsx(Badge, { variant: riskLevel === "critical" || riskLevel === "high" ? "destructive" : "outline", className: "text-2xs", children: tComponent(CT, `risk${riskLevel.charAt(0).toUpperCase()}${riskLevel.slice(1)}`) })), systemRef && (_jsx("span", { className: "text-2xs text-muted-foreground", children: systemRef }))] }), remaining && (_jsx(Badge, { variant: "secondary", className: "text-2xs tabular-nums", children: tComponent(CT, "expiresCountdown", { time: remaining }) })), isExpired && (_jsx(Badge, { variant: "destructive", className: "text-2xs", children: tComponent(CT, "expired") }))] }), _jsx(AlertDescription, { className: "text-sm", children: actionDescription }), requiredRoles && requiredRoles.length > 0 && (_jsxs("div", { className: "flex items-center gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "requiredRoles"), ":"] }), _jsx("div", { className: "flex gap-1", children: requiredRoles.map((role) => (_jsx(Badge, { variant: "outline", className: "text-2xs", children: role }, role))) })] })), toolName !== undefined && (_jsxs("div", { className: "flex items-center gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "toolCall"), ":"] }), _jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-2xs font-mono", children: toolName })] })), executionContext && Object.keys(executionContext).length > 0 && (_jsxs("div", { className: "flex flex-col gap-element", children: [_jsxs("div", { className: "flex items-center justify-between gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "toolArguments"), ":"] }), allowArgumentModification && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: isProcessing || isExpired, onClick: () => setDraft(draft === null ? JSON.stringify(executionContext, null, 2) : null), children: tComponent(CT, draft === null ? "editArguments" : "discardArgumentEdits") }))] }), draft === null ? (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.INSET, children: _jsx("dl", { className: "grid grid-cols-[auto_1fr] gap-x-element gap-y-0.5 rounded-md bg-muted p-2 text-2xs", children: Object.entries(executionContext).map(([key, value]) => (_jsxs(React.Fragment, { children: [_jsx("dt", { className: "font-mono text-muted-foreground", children: key }), _jsx("dd", { className: "min-w-0 break-words font-mono", children: typeof value === "string" || typeof value === "number" || typeof value === "boolean"
87
+ return (_jsxs(Alert, { variant: variant, className: cn("flex flex-col gap-card-sm", className), ...props, children: [_jsxs("div", { className: "flex items-center justify-between gap-element", children: [_jsxs("div", { className: "flex items-center gap-element", children: [riskLevel && (_jsx(Badge, { variant: riskLevel === "critical" || riskLevel === "high" ? "destructive" : "outline", className: "text-2xs", children: tComponent(CT, `risk${riskLevel.charAt(0).toUpperCase()}${riskLevel.slice(1)}`) })), systemRef && (_jsx("span", { className: "text-2xs text-muted-foreground", children: systemRef }))] }), remaining && (_jsx(Badge, { variant: "secondary", className: "text-2xs tabular-nums", children: tComponent(CT, "expiresCountdown", { time: remaining }) })), isExpired && (_jsx(Badge, { variant: "destructive", className: "text-2xs", children: tComponent(CT, "expired") }))] }), _jsx(AlertDescription, { className: "text-sm", children: actionDescription }), clockPausedNotice !== undefined ? (_jsx("span", { className: "text-2xs text-muted-foreground", children: clockPausedNotice })) : deadlineNotice !== undefined ? (_jsx("span", { className: "text-2xs text-muted-foreground", children: deadlineNotice })) : null, requiredRoles && requiredRoles.length > 0 && (_jsxs("div", { className: "flex items-center gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "requiredRoles"), ":"] }), _jsx("div", { className: "flex gap-1", children: requiredRoles.map((role) => (_jsx(Badge, { variant: "outline", className: "text-2xs", children: role }, role))) })] })), toolName !== undefined && (_jsxs("div", { className: "flex items-center gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "toolCall"), ":"] }), _jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-2xs font-mono", children: toolName })] })), executionContext && Object.keys(executionContext).length > 0 && (_jsxs("div", { className: "flex flex-col gap-element", children: [_jsxs("div", { className: "flex items-center justify-between gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "toolArguments"), ":"] }), allowArgumentModification && (_jsxs("div", { className: "flex items-center gap-1", children: [editorMode !== null && fieldsSchema && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: isProcessing || isExpired || (editorMode === ApprovalArgumentEditorMode.JSON && parsedDraft.invalid), onClick: () => {
88
+ if (editorMode === ApprovalArgumentEditorMode.FIELDS) {
89
+ setDraft(JSON.stringify(fieldsEdit.value ?? fieldsSeed, null, 2));
90
+ setEditorMode(ApprovalArgumentEditorMode.JSON);
91
+ }
92
+ else if (parsedDraft.value) {
93
+ setFieldsSeed(parsedDraft.value);
94
+ setEditorMode(ApprovalArgumentEditorMode.FIELDS);
95
+ }
96
+ }, children: tComponent(CT, editorMode === ApprovalArgumentEditorMode.FIELDS ? "editArgumentsAsJson" : "editArgumentsAsFields") })), _jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: isProcessing || isExpired, onClick: () => {
97
+ if (editorMode !== null) {
98
+ setEditorMode(null);
99
+ return;
100
+ }
101
+ // Opening always starts from the call the agent PROPOSED.
102
+ const proposed = executionContext ?? {};
103
+ setFieldsSeed(proposed);
104
+ setDraft(JSON.stringify(proposed, null, 2));
105
+ setEditorMode(fieldsSchema ? ApprovalArgumentEditorMode.FIELDS : ApprovalArgumentEditorMode.JSON);
106
+ }, children: tComponent(CT, editorMode === null ? "editArguments" : "discardArgumentEdits") })] }))] }), argumentModificationError !== undefined && editorMode !== null && (_jsxs("span", { className: "text-2xs text-destructive", children: [tComponent(CT, "argumentModificationRefused"), ": ", argumentModificationError] })), editorMode === null ? (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.INSET, children: _jsx("dl", { className: "grid grid-cols-[auto_1fr] gap-x-element gap-y-0.5 rounded-md bg-muted p-2 text-2xs", children: Object.entries(executionContext).map(([key, value]) => (_jsxs(React.Fragment, { children: [_jsx("dt", { className: "font-mono text-muted-foreground", children: key }), _jsx("dd", { className: "min-w-0 break-words font-mono", children: typeof value === "string" || typeof value === "number" || typeof value === "boolean"
74
107
  ? String(value)
75
- : JSON.stringify(value) })] }, key))) }) })) : (_jsxs(_Fragment, { children: [_jsx(TextareaRoot, { rows: Math.min(12, Object.keys(executionContext).length + 3), value: draft, onChange: (e) => setDraft(e.target.value), className: "font-mono text-2xs", disabled: isProcessing || isExpired, "aria-invalid": parsedDraft.invalid || undefined, "aria-label": tComponent(CT, "editArguments") }), parsedDraft.invalid && (_jsx("span", { className: "text-2xs text-destructive", children: tComponent(CT, "argumentsNotValidJson") }))] }))] })), _jsx(AI_ApprovalActions, { approvalId: approvalId, riskLevel: riskLevel, onApprove: onApprove, onDeny: onDeny, onEscalate: onEscalate, isProcessing: isProcessing,
108
+ : JSON.stringify(value) })] }, key))) }) })) : editorMode === ApprovalArgumentEditorMode.FIELDS && fieldsSchema ? (_jsx(ApprovalArgumentFields, { schema: fieldsSchema, initialValue: fieldsSeed, disabled: isProcessing || isExpired, invalidJsonMessage: tComponent(CT, "argumentValueNotValidJson"), onChange: handleFieldsChange })) : (_jsxs(_Fragment, { children: [_jsx(TextareaRoot, { rows: Math.min(12, Object.keys(executionContext).length + 3), value: draft, onChange: (e) => setDraft(e.target.value), className: "font-mono text-2xs", disabled: isProcessing || isExpired, "aria-invalid": parsedDraft.invalid || undefined, "aria-label": tComponent(CT, "editArguments") }), parsedDraft.invalid && (_jsx("span", { className: "text-2xs text-destructive", children: tComponent(CT, "argumentsNotValidJson") }))] }))] })), !answerable ? (actionNotice !== undefined && _jsx("span", { role: "status", className: "text-2xs text-muted-foreground", children: actionNotice })) : (_jsx(AI_ApprovalActions, { approvalId: approvalId, riskLevel: riskLevel, onApprove: onApprove, onDeny: onDeny, onEscalate: onEscalate, onClaim: onClaim, onUnclaim: onUnclaim, onReassignOpen: onReassignOpen, reassignCandidates: reassignCandidates, onReassign: onReassign, actionNotice: actionNotice, onPauseClock: onPauseClock, onResumeClock: onResumeClock, pauseStateOptions: pauseStateOptions, reasonCodeOptions: reasonCodeOptions, isProcessing: isProcessing,
76
109
  // Approving with unparseable text would send nothing and silently run the model's own
77
110
  // arguments — a change collected and dropped, which is the one outcome this feature exists
78
111
  // to prevent. The button is unavailable until the draft is an object.
79
- disabled: isExpired || parsedDraft.invalid, modifiedToolArgs: parsedDraft.value })] }));
112
+ disabled: isExpired
113
+ || (editorMode === ApprovalArgumentEditorMode.FIELDS && fieldsEdit.invalid)
114
+ || (editorMode === ApprovalArgumentEditorMode.JSON && parsedDraft.invalid),
115
+ // Whatever the approver is authoring in — and `undefined` whenever the editor is closed, which is
116
+ // what "run the call as proposed" means on the wire.
117
+ modifiedToolArgs: editorMode === ApprovalArgumentEditorMode.FIELDS
118
+ ? fieldsEdit.value
119
+ : editorMode === ApprovalArgumentEditorMode.JSON
120
+ ? parsedDraft.value
121
+ : undefined }))] }));
80
122
  };
81
- export const AI_ApprovalActions = ({ approvalId, riskLevel, modifiedToolArgs, onApprove, onDeny, onEscalate, isProcessing, disabled, className, ...props }) => {
123
+ export const AI_ApprovalActions = ({ approvalId, riskLevel, modifiedToolArgs, reasonCodeOptions, onApprove, onDeny, onEscalate, onClaim, onUnclaim, onReassignOpen, reassignCandidates, onReassign, actionNotice, onPauseClock, onResumeClock, pauseStateOptions, isProcessing, disabled, className, ...props }) => {
82
124
  const { tComponent, isReady } = useI18n({ component: CT });
83
125
  const [comment, setComment] = React.useState("");
126
+ /*
127
+ * #1921 — the reason an approver gives for a CORRECTION. `undefined` until one is chosen, and optional throughout.
128
+ *
129
+ * Offered only on the two answers that correct the agent: an EDITED approval (the editor is open, so
130
+ * `modifiedToolArgs` is defined) and a rejection. Approving the call as proposed is agreement, so a reason there would
131
+ * enter the record as the reason for a correction that never happened — it is never sent then, even if one was
132
+ * picked while the editor was open. A rejection needs somewhere to choose BEFORE it is sent, so with reasons on offer
133
+ * Reject opens a picker and a confirm button, the pattern Reassign and Pause already use.
134
+ */
135
+ const [reasonCode, setReasonCode] = React.useState(undefined);
136
+ const [rejecting, setRejecting] = React.useState(false);
137
+ const offersReasons = (reasonCodeOptions?.length ?? 0) > 0;
138
+ const isModifying = modifiedToolArgs !== undefined;
139
+ // The reason rides as a TRAILING argument only when there is one, so an answer with no reason is called exactly as it
140
+ // was before reasons existed — `(id, comment, args)` — and a consumer written against that shape sees no change.
141
+ const correctionReason = reasonCode !== undefined ? [reasonCode] : [];
142
+ const approvalReason = isModifying ? correctionReason : [];
143
+ // #1628 — `null` while the pause picker is closed; the chosen reason once one is picked.
144
+ const [pausing, setPausing] = React.useState(null);
145
+ const canPause = !!onPauseClock && (pauseStateOptions?.length ?? 0) > 0;
146
+ // `null` while the picker is closed; the chosen person's id once one is picked.
147
+ const [reassigning, setReassigning] = React.useState(null);
84
148
  const isHighRisk = riskLevel === "high" || riskLevel === "critical";
85
149
  const actionsDisabled = isProcessing || disabled;
86
150
  if (!isReady)
87
151
  return null;
88
- const approveButton = (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.DEFAULT, size: ButtonSize.SM, disabled: actionsDisabled, onClick: isHighRisk ? undefined : () => onApprove?.(approvalId, comment || undefined, modifiedToolArgs), children: isProcessing ? tComponent(CT, "processing") : tComponent(CT, "approve") }));
89
- return (_jsxs("div", { className: cn("flex flex-col gap-2", className), ...props, children: [_jsx(TextareaRoot, { rows: 2, value: comment, onChange: (e) => setComment(e.target.value), placeholder: tComponent(CT, "commentPlaceholder"), className: "text-xs", disabled: actionsDisabled }), _jsxs("div", { className: "flex items-center gap-element", children: [isHighRisk ? (_jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: approveButton }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: tComponent(CT, "confirmTitle") }), _jsx(AlertDialogDescription, { children: tComponent(CT, "confirmDescription") })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: tComponent(CT, "confirmCancel") }), _jsx(AlertDialogAction, { onClick: () => onApprove?.(approvalId, comment || undefined, modifiedToolArgs), children: tComponent(CT, "confirmProceed") })] })] })] })) : (approveButton), _jsx(Button, { type: "button", variant: ButtonVariants_Variant.OUTLINE, size: ButtonSize.SM, disabled: actionsDisabled, onClick: () => onDeny?.(approvalId, comment || undefined), children: tComponent(CT, "deny") }), onEscalate && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.SECONDARY, size: ButtonSize.SM, disabled: actionsDisabled, onClick: () => onEscalate?.(approvalId, comment || undefined), children: tComponent(CT, "escalate") }))] })] }));
152
+ const approveButton = (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.DEFAULT, size: ButtonSize.SM, disabled: actionsDisabled, onClick: isHighRisk ? undefined : () => onApprove?.(approvalId, comment || undefined, modifiedToolArgs, ...approvalReason), children: isProcessing ? tComponent(CT, "processing") : tComponent(CT, "approve") }));
153
+ return (_jsxs("div", { className: cn("flex flex-col gap-2", className), ...props, children: [_jsx(TextareaRoot, { rows: 2, value: comment, onChange: (e) => setComment(e.target.value), placeholder: tComponent(CT, "commentPlaceholder"), className: "text-xs", disabled: actionsDisabled }), _jsxs("div", { className: "flex items-center gap-element", children: [isHighRisk ? (_jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: approveButton }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: tComponent(CT, "confirmTitle") }), _jsx(AlertDialogDescription, { children: tComponent(CT, "confirmDescription") })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: tComponent(CT, "confirmCancel") }), _jsx(AlertDialogAction, { onClick: () => onApprove?.(approvalId, comment || undefined, modifiedToolArgs, ...approvalReason), children: tComponent(CT, "confirmProceed") })] })] })] })) : (approveButton), _jsx(Button, { type: "button", variant: ButtonVariants_Variant.OUTLINE, size: ButtonSize.SM, disabled: actionsDisabled, "aria-expanded": offersReasons ? rejecting : undefined, onClick: () => {
154
+ if (!offersReasons) {
155
+ onDeny?.(approvalId, comment || undefined);
156
+ return;
157
+ }
158
+ setRejecting(!rejecting);
159
+ }, children: tComponent(CT, "deny") }), onEscalate && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.SECONDARY, size: ButtonSize.SM, disabled: actionsDisabled, onClick: () => onEscalate?.(approvalId, comment || undefined), children: tComponent(CT, "escalate") })), onClaim && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: isProcessing, onClick: () => onClaim(approvalId), children: tComponent(CT, "claim") })), onUnclaim && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: isProcessing, onClick: () => onUnclaim(approvalId), children: tComponent(CT, "unclaim") })), canPause && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: isProcessing, "aria-expanded": pausing !== null, onClick: () => setPausing(pausing !== null ? null : { state: undefined }), children: tComponent(CT, "pauseClock") })), onResumeClock && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: isProcessing, onClick: () => onResumeClock(approvalId), children: tComponent(CT, "resumeClock") })), onReassign && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: isProcessing, "aria-expanded": reassigning !== null, onClick: () => {
160
+ if (reassigning !== null) {
161
+ setReassigning(null);
162
+ return;
163
+ }
164
+ setReassigning({ target: undefined });
165
+ onReassignOpen?.(approvalId);
166
+ }, children: tComponent(CT, "reassign") }))] }), offersReasons && (isModifying || rejecting) && (_jsxs("div", { className: "flex items-center gap-element", children: [_jsxs(SelectRoot, { value: reasonCode ?? "", onValueChange: (value) => setReasonCode(value || undefined), disabled: actionsDisabled, children: [_jsx(SelectTrigger, { className: "text-2xs", "aria-label": tComponent(CT, "reasonCode"), children: _jsx(SelectValue, { placeholder: tComponent(CT, "reasonCode") }) }), _jsx(SelectContent, { children: (reasonCodeOptions ?? []).map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value))) })] }), reasonCode !== undefined && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: actionsDisabled, onClick: () => setReasonCode(undefined), children: tComponent(CT, "reasonCodeClear") })), rejecting && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.DESTRUCTIVE, size: ButtonSize.SM, disabled: actionsDisabled, onClick: () => {
167
+ onDeny?.(approvalId, comment || undefined, ...correctionReason);
168
+ setRejecting(false);
169
+ }, children: tComponent(CT, "denyConfirm") }))] })), onReassign && reassigning !== null && (_jsx("div", { className: "flex items-center gap-element", children: reassignCandidates === undefined ? (_jsx("span", { className: "text-2xs text-muted-foreground", children: tComponent(CT, "processing") })) : reassignCandidates.length === 0 ? (_jsx("span", { className: "text-2xs text-muted-foreground", children: tComponent(CT, "reassignNoCandidates") })) : (_jsxs(_Fragment, { children: [_jsxs(SelectRoot, { value: reassigning.target, onValueChange: (target) => setReassigning({ target }), disabled: isProcessing, children: [_jsx(SelectTrigger, { className: "text-2xs", "aria-label": tComponent(CT, "reassignTarget"), children: _jsx(SelectValue, { placeholder: tComponent(CT, "reassignTarget") }) }), _jsx(SelectContent, { children: reassignCandidates.map((candidate) => (_jsx(SelectItem, { value: candidate.value, children: candidate.label }, candidate.value))) })] }), _jsx(Button, { type: "button", variant: ButtonVariants_Variant.SECONDARY, size: ButtonSize.SM, disabled: isProcessing || reassigning.target === undefined, onClick: () => {
170
+ if (reassigning.target === undefined)
171
+ return;
172
+ onReassign(approvalId, reassigning.target, comment || undefined);
173
+ setReassigning(null);
174
+ }, children: tComponent(CT, "reassignConfirm") })] })) })), canPause && pausing !== null && (_jsxs("div", { className: "flex items-center gap-element", children: [_jsxs(SelectRoot, { value: pausing.state, onValueChange: (state) => setPausing({ state }), disabled: isProcessing, children: [_jsx(SelectTrigger, { className: "text-2xs", "aria-label": tComponent(CT, "pauseClockState"), children: _jsx(SelectValue, { placeholder: tComponent(CT, "pauseClockState") }) }), _jsx(SelectContent, { children: (pauseStateOptions ?? []).map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value))) })] }), _jsx(Button, { type: "button", variant: ButtonVariants_Variant.SECONDARY, size: ButtonSize.SM, disabled: isProcessing || pausing.state === undefined, onClick: () => {
175
+ if (pausing.state === undefined || !onPauseClock)
176
+ return;
177
+ onPauseClock(approvalId, pausing.state);
178
+ setPausing(null);
179
+ }, children: tComponent(CT, "pauseClockConfirm") })] })), actionNotice !== undefined && (_jsx("span", { role: "status", className: "text-2xs text-muted-foreground", children: actionNotice }))] }));
90
180
  };
91
181
  //===============================================================
92
182
  // AI_ApprovalQueue
@@ -105,7 +195,7 @@ function useRelativeTimeFormatter() {
105
195
  return tComponent(CT, "timeAgoHours", { count: String(hours) });
106
196
  }, [tComponent]);
107
197
  }
108
- export const AI_ApprovalQueue = ({ items, onApprove, onDeny, onEscalate, processingIds, filter, onFilterChange, className, ...props }) => {
198
+ export const AI_ApprovalQueue = ({ items, onApprove, onDeny, onEscalate, onClaim, onUnclaim, onReassignOpen, onReassign, onPauseClock, onResumeClock, processingIds, filter, onFilterChange, className, ...props }) => {
109
199
  const { tComponent, isReady } = useI18n({ component: CT });
110
200
  const formatRelativeTime = useRelativeTimeFormatter();
111
201
  const [sortByRisk, setSortByRisk] = React.useState(true);
@@ -126,6 +216,8 @@ export const AI_ApprovalQueue = ({ items, onApprove, onDeny, onEscalate, process
126
216
  }, [items, activeFilter, sortByRisk]);
127
217
  if (!isReady)
128
218
  return null;
129
- return (_jsxs("div", { className: cn("flex flex-col gap-card", className), ...props, children: [_jsxs("div", { className: "flex items-center justify-between gap-element", children: [_jsxs("div", { className: "flex items-center gap-element", children: [_jsx("h3", { className: "text-sm font-semibold", children: tComponent(CT, "queueTitle") }), _jsx(Badge, { variant: "secondary", children: items.length })] }), _jsx(Button, { type: "button", variant: sortByRisk ? ButtonVariants_Variant.SECONDARY : ButtonVariants_Variant.GHOST, size: ButtonSize.SM, className: "h-6 text-2xs", onClick: () => setSortByRisk(!sortByRisk), children: tComponent(CT, "queueSortRisk") })] }), items.length === 0 ? (_jsx("p", { className: "py-card text-center text-sm text-muted-foreground", children: tComponent(CT, "queueEmpty") })) : (_jsx(ScrollArea, { className: "max-h-96", children: _jsx("div", { className: "flex flex-col gap-card-sm", children: filtered.map((item) => (_jsxs("div", { className: "relative", children: [item.createdAt && (_jsx("span", { className: "absolute end-2 top-2 text-2xs text-muted-foreground", children: formatRelativeTime(item.createdAt) })), _jsx(AI_ApprovalRequest, { approvalId: item.approvalId, executionId: item.executionId, systemRef: item.systemRef, actionDescription: item.actionDescription, riskLevel: item.riskLevel, expiresAt: item.expiresAt, requiredRoles: item.requiredRoles, executionContext: item.executionContext, createdAt: item.createdAt, onApprove: onApprove, onDeny: onDeny, onEscalate: onEscalate, isProcessing: processingIds?.has(item.approvalId) })] }, item.approvalId))) }) }))] }));
219
+ return (_jsxs("div", { className: cn("flex flex-col gap-card", className), ...props, children: [_jsxs("div", { className: "flex items-center justify-between gap-element", children: [_jsxs("div", { className: "flex items-center gap-element", children: [_jsx("h3", { className: "text-sm font-semibold", children: tComponent(CT, "queueTitle") }), _jsx(Badge, { variant: "secondary", children: items.length })] }), _jsx(Button, { type: "button", variant: sortByRisk ? ButtonVariants_Variant.SECONDARY : ButtonVariants_Variant.GHOST, size: ButtonSize.SM, className: "h-6 text-2xs", onClick: () => setSortByRisk(!sortByRisk), children: tComponent(CT, "queueSortRisk") })] }), items.length === 0 ? (_jsx("p", { className: "py-card text-center text-sm text-muted-foreground", children: tComponent(CT, "queueEmpty") })) : (_jsx(ScrollArea, { className: "max-h-96", children: _jsx("div", { className: "flex flex-col gap-card-sm", children: filtered.map((item) => (_jsxs("div", { className: "relative", children: [item.createdAt && (_jsx("span", { className: "absolute end-2 top-2 text-2xs text-muted-foreground", children: formatRelativeTime(item.createdAt) })), _jsx(AI_ApprovalRequest, { approvalId: item.approvalId, executionId: item.executionId, systemRef: item.systemRef, actionDescription: item.actionDescription, riskLevel: item.riskLevel, expiresAt: item.expiresAt, requiredRoles: item.requiredRoles, executionContext: item.executionContext, toolName: item.toolName, createdAt: item.createdAt, allowArgumentModification: item.allowArgumentModification, argumentsSchema: item.argumentsSchema, reasonCodeOptions: item.reasonCodeOptions, onApprove: onApprove, onDeny: onDeny,
220
+ // Per item, not per queue: an item offers only the acts its person may perform.
221
+ onEscalate: item.canEscalate ? onEscalate : undefined, onClaim: item.canClaim ? onClaim : undefined, onUnclaim: item.canUnclaim ? onUnclaim : undefined, onReassignOpen: item.canReassign ? onReassignOpen : undefined, onReassign: item.canReassign ? onReassign : undefined, reassignCandidates: item.reassignCandidates, actionNotice: item.actionNotice, onPauseClock: item.canPauseClock ? onPauseClock : undefined, onResumeClock: item.canResumeClock ? onResumeClock : undefined, pauseStateOptions: item.pauseStateOptions, deadlineNotice: item.deadlineNotice, clockPausedNotice: item.clockPausedNotice, isProcessing: processingIds?.has(item.approvalId) })] }, item.approvalId))) }) }))] }));
130
222
  };
131
223
  //# sourceMappingURL=approval.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../../../src/components/ai-elements/decision/approval.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Alert,\n AlertDescription,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n Badge,\n Button,\n ButtonVariants_Variant,\n ScrollArea,\n TextareaRoot,\n cn,\n useI18n,\n Surface,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { FrontendComponentType, ButtonSize, SurfaceVariant } from \"@wildo-ai/presets-components-models\";\nimport type { ComponentProps } from \"react\";\n\nconst CT: FrontendComponentType = FrontendComponentType.LOW_LEVEL_AI_APPROVAL;\n\n//===============================================================\n// Human-in-the-Loop Approval Components\n//\n// BACKEND DEPENDENCIES:\n// - FlowsActorsContext.respondToApproval() — implemented (WebSocket emit)\n// - WebSocket event: FLOWS_ACTORS_APPROVAL_REQUEST — implemented\n// - FlowsActorsExecution.pendingApproval — schema ready:\n// { approvalId, actionDescription, riskLevel, expiresAt?, requiredRoles? }\n//\n// Components render approval UI from props. Wire to context via\n// the saas-frontend-lib wrapper (flows-actors/approval.tsx).\n//===============================================================\n\n//===============================================================\n// useCountdown — shared countdown hook\n//===============================================================\n\nfunction useCountdown(expiresAt: Date | undefined): { remaining: string | null; isExpired: boolean } {\n const [now, setNow] = React.useState(() => Date.now());\n\n React.useEffect(() => {\n if (!expiresAt) return;\n const id = setInterval(() => setNow(Date.now()), 1_000);\n return () => clearInterval(id);\n }, [expiresAt]);\n\n if (!expiresAt) return { remaining: null, isExpired: false };\n\n const diff = expiresAt.getTime() - now;\n if (diff <= 0) return { remaining: null, isExpired: true };\n\n const totalSeconds = Math.floor(diff / 1_000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const remaining = minutes > 0\n ? `${minutes}m ${String(seconds).padStart(2, \"0\")}s`\n : `${seconds}s`;\n\n return { remaining, isExpired: false };\n}\n\n//===============================================================\n// AI_ApprovalRequest\n//===============================================================\n\nexport type AI_ApprovalRequestProps = ComponentProps<typeof Alert> & {\n approvalId: string;\n actionDescription: string;\n /**\n * OPTIONAL, because nothing populates it. A risk level exists only on\n * `WS_FlowsActorsApprovalRequestPayload`, a payload no code emits; the announcement a paused turn\n * really sends carries a tool name and its arguments and no risk claim (#528). Absent means the\n * badge is not rendered — a default here would show a severity nobody declared.\n */\n riskLevel?: \"low\" | \"medium\" | \"high\" | \"critical\";\n executionId: string;\n systemRef?: string;\n expiresAt?: Date;\n requiredRoles?: string[];\n /**\n * The gated tool call, and the arguments proposed for it.\n *\n * `toolName` is an IDENTIFIER, rendered as authored — it is the thing the agent asked to run,\n * and humanizing it here would invent display text no i18n tree owns.\n * `executionContext` carries the arguments (#455).\n */\n toolName?: string;\n executionContext?: Record<string, unknown>;\n /**\n * Offer the approver an EDITOR over the proposed arguments (#566).\n *\n * Off by default, and it is not a styling preference: turning it on changes what an approval MEANS\n * — the approver stops assenting to the agent's call and starts authoring one. A surface that\n * shows the editor must be wired to a decision path that carries the result, or it collects a\n * change and drops it, which is the failure #537 refused to ship.\n *\n * v1 is a RAW JSON editor rather than a generated form. The tool's `inputSchema` is not\n * transported to the browser yet, and the server's validation — not the browser's — is the\n * control, so a textarea the server refuses with a readable message is a complete and honest\n * first version. The generated form is its own issue.\n */\n allowArgumentModification?: boolean;\n /**\n * `modifiedToolArgs` is present only when the approver EDITED the arguments. Absent means \"run the\n * call as proposed\", which is what every approval meant before this parameter existed.\n */\n onApprove?: (approvalId: string, comment?: string, modifiedToolArgs?: Record<string, unknown>) => void;\n onDeny?: (approvalId: string, comment?: string) => void;\n onEscalate?: (approvalId: string, comment?: string) => void;\n isProcessing?: boolean;\n createdAt?: Date;\n};\n\nexport const AI_ApprovalRequest = ({\n approvalId,\n actionDescription,\n riskLevel,\n executionId,\n systemRef,\n expiresAt,\n requiredRoles,\n toolName,\n executionContext,\n allowArgumentModification,\n onApprove,\n onDeny,\n onEscalate,\n isProcessing,\n createdAt,\n className,\n ...props\n}: AI_ApprovalRequestProps): React.JSX.Element | null => {\n const { tComponent, isReady } = useI18n({ component: CT });\n const { remaining, isExpired } = useCountdown(expiresAt);\n const variant = riskLevel === \"critical\" || riskLevel === \"high\" ? \"destructive\" : \"default\";\n\n /*\n * The argument editor's state (#566).\n *\n * `draft` is `null` while the approver is reading rather than editing — distinct from an empty\n * string, which is a draft they have cleared. Opening the editor seeds it from the PROPOSED\n * arguments, so the starting point is the call the agent asked for and an approver changes one\n * value rather than retyping the object.\n */\n const [draft, setDraft] = React.useState<string | null>(null);\n const parsedDraft = React.useMemo(() => {\n if (draft === null) return { value: undefined, invalid: false };\n try {\n const value = JSON.parse(draft) as unknown;\n // An array or a scalar is valid JSON and cannot be a tool's arguments. Refusing it HERE spares\n // the round trip; the server refuses it too, which is what actually protects the call.\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return { value: undefined, invalid: true };\n return { value: value as Record<string, unknown>, invalid: false };\n } catch {\n return { value: undefined, invalid: true };\n }\n }, [draft]);\n\n if (!isReady) return null;\n\n return (\n <Alert variant={variant} className={cn(\"flex flex-col gap-card-sm\", className)} {...props}>\n <div className=\"flex items-center justify-between gap-element\">\n <div className=\"flex items-center gap-element\">\n {riskLevel && (\n <Badge\n variant={riskLevel === \"critical\" || riskLevel === \"high\" ? \"destructive\" : \"outline\"}\n className=\"text-2xs\"\n >\n {tComponent(CT, `risk${riskLevel.charAt(0).toUpperCase()}${riskLevel.slice(1)}` as any)}\n </Badge>\n )}\n {systemRef && (\n <span className=\"text-2xs text-muted-foreground\">{systemRef}</span>\n )}\n </div>\n\n {/* Countdown / Expired indicator */}\n {remaining && (\n <Badge variant=\"secondary\" className=\"text-2xs tabular-nums\">\n {tComponent(CT, \"expiresCountdown\", { time: remaining })}\n </Badge>\n )}\n {isExpired && (\n <Badge variant=\"destructive\" className=\"text-2xs\">\n {tComponent(CT, \"expired\")}\n </Badge>\n )}\n </div>\n\n <AlertDescription className=\"text-sm\">\n {actionDescription}\n </AlertDescription>\n\n {/* Required roles display */}\n {requiredRoles && requiredRoles.length > 0 && (\n <div className=\"flex items-center gap-element\">\n <span className=\"text-2xs text-muted-foreground\">{tComponent(CT, \"requiredRoles\")}:</span>\n <div className=\"flex gap-1\">\n {requiredRoles.map((role) => (\n <Badge key={role} variant=\"outline\" className=\"text-2xs\">\n {role}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {/* The gated tool call — WHAT the approver is being asked to authorize (#455). */}\n {toolName !== undefined && (\n <div className=\"flex items-center gap-element\">\n <span className=\"text-2xs text-muted-foreground\">{tComponent(CT, \"toolCall\")}:</span>\n {/*\n * Rendered as authored. A tool name is an IDENTIFIER the agent runtime owns, and turning\n * `renameTodo` into \"Rename Todo\" would invent display text no i18n tree can correct —\n * the exact fallback `display-text-comes-from-i18n.md` retired. The approver is better\n * served by the name the system will actually run.\n */}\n <code className=\"rounded bg-muted px-1 py-0.5 text-2xs font-mono\">{toolName}</code>\n </div>\n )}\n\n {/*\n * The proposed ARGUMENTS, one row per key, expanded by default.\n *\n * This was a collapsed `JSON.stringify` in a `<pre>`. Two things were wrong with that and only\n * the second is cosmetic: a blob is not readable at approval speed, and COLLAPSED-BY-DEFAULT\n * hides the very thing being approved — an approver who never opens it is signing an unread\n * document, which is how an approval prompt stops being read at all.\n *\n * Keys render VERBATIM. They are the tool's own parameter names, they carry no i18n entry, and\n * humanizing them is forbidden for the same reason as the tool name. A value that is not a\n * primitive is serialized, because a nested object has no honest one-line form — and that\n * narrow case is the only place a JSON fragment survives.\n */}\n {executionContext && Object.keys(executionContext).length > 0 && (\n <div className=\"flex flex-col gap-element\">\n <div className=\"flex items-center justify-between gap-element\">\n <span className=\"text-2xs text-muted-foreground\">{tComponent(CT, \"toolArguments\")}:</span>\n {/*\n * The door to approve-with-modifications (#566), rendered only when the surface's owner\n * declared it. An approver who edits these is AUTHORING a call the agent never\n * proposed, so it is opt-in per surface rather than always present.\n */}\n {allowArgumentModification && (\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n disabled={isProcessing || isExpired}\n onClick={() => setDraft(draft === null ? JSON.stringify(executionContext, null, 2) : null)}\n >\n {tComponent(CT, draft === null ? \"editArguments\" : \"discardArgumentEdits\")}\n </Button>\n )}\n </div>\n {draft === null ? (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.INSET}>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-element gap-y-0.5 rounded-md bg-muted p-2 text-2xs\">\n {Object.entries(executionContext).map(([key, value]) => (\n <React.Fragment key={key}>\n <dt className=\"font-mono text-muted-foreground\">{key}</dt>\n <dd className=\"min-w-0 break-words font-mono\">\n {typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\"\n ? String(value)\n : JSON.stringify(value)}\n </dd>\n </React.Fragment>\n ))}\n </dl>\n </Surface>\n ) : (\n <>\n <TextareaRoot\n rows={Math.min(12, Object.keys(executionContext).length + 3)}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n className=\"font-mono text-2xs\"\n disabled={isProcessing || isExpired}\n aria-invalid={parsedDraft.invalid || undefined}\n aria-label={tComponent(CT, \"editArguments\")}\n />\n {/*\n * Local JSON validity only. Whether these arguments SUIT the tool is the server's\n * question — it holds the tool's `inputSchema`, refuses an edit that violates it, and\n * leaves the approval pending with a message naming the offending argument. Judging\n * that here would be a second, weaker copy of the control.\n */}\n {parsedDraft.invalid && (\n <span className=\"text-2xs text-destructive\">{tComponent(CT, \"argumentsNotValidJson\")}</span>\n )}\n </>\n )}\n </div>\n )}\n\n <AI_ApprovalActions\n approvalId={approvalId}\n riskLevel={riskLevel}\n onApprove={onApprove}\n onDeny={onDeny}\n onEscalate={onEscalate}\n isProcessing={isProcessing}\n // Approving with unparseable text would send nothing and silently run the model's own\n // arguments — a change collected and dropped, which is the one outcome this feature exists\n // to prevent. The button is unavailable until the draft is an object.\n disabled={isExpired || parsedDraft.invalid}\n modifiedToolArgs={parsedDraft.value}\n />\n </Alert>\n );\n};\n\n//===============================================================\n// AI_ApprovalActions\n//===============================================================\n\nexport type AI_ApprovalActionsProps = ComponentProps<\"div\"> & {\n approvalId: string;\n riskLevel?: \"low\" | \"medium\" | \"high\" | \"critical\";\n /** Present only while the approver has the argument editor open with a parseable draft (#566). */\n modifiedToolArgs?: Record<string, unknown>;\n onApprove?: (approvalId: string, comment?: string, modifiedToolArgs?: Record<string, unknown>) => void;\n onDeny?: (approvalId: string, comment?: string) => void;\n onEscalate?: (approvalId: string, comment?: string) => void;\n isProcessing?: boolean;\n disabled?: boolean;\n};\n\nexport const AI_ApprovalActions = ({\n approvalId,\n riskLevel,\n modifiedToolArgs,\n onApprove,\n onDeny,\n onEscalate,\n isProcessing,\n disabled,\n className,\n ...props\n}: AI_ApprovalActionsProps): React.JSX.Element | null => {\n const { tComponent, isReady } = useI18n({ component: CT });\n const [comment, setComment] = React.useState(\"\");\n const isHighRisk = riskLevel === \"high\" || riskLevel === \"critical\";\n const actionsDisabled = isProcessing || disabled;\n\n if (!isReady) return null;\n\n const approveButton = (\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.DEFAULT}\n size={ButtonSize.SM}\n disabled={actionsDisabled}\n onClick={isHighRisk ? undefined : () => onApprove?.(approvalId, comment || undefined, modifiedToolArgs)}\n >\n {isProcessing ? tComponent(CT, \"processing\") : tComponent(CT, \"approve\")}\n </Button>\n );\n\n return (\n <div className={cn(\"flex flex-col gap-2\", className)} {...props}>\n {/* Comment textarea */}\n <TextareaRoot\n rows={2}\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n placeholder={tComponent(CT, \"commentPlaceholder\")}\n className=\"text-xs\"\n disabled={actionsDisabled}\n />\n\n <div className=\"flex items-center gap-element\">\n {/* Approve — with confirmation dialog for high/critical risk */}\n {isHighRisk ? (\n <AlertDialog>\n <AlertDialogTrigger asChild>\n {approveButton}\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{tComponent(CT, \"confirmTitle\")}</AlertDialogTitle>\n <AlertDialogDescription>{tComponent(CT, \"confirmDescription\")}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>{tComponent(CT, \"confirmCancel\")}</AlertDialogCancel>\n <AlertDialogAction onClick={() => onApprove?.(approvalId, comment || undefined, modifiedToolArgs)}>\n {tComponent(CT, \"confirmProceed\")}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n ) : (\n approveButton\n )}\n\n {/* Deny */}\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.OUTLINE}\n size={ButtonSize.SM}\n disabled={actionsDisabled}\n onClick={() => onDeny?.(approvalId, comment || undefined)}\n >\n {tComponent(CT, \"deny\")}\n </Button>\n\n {/* Escalate (optional) */}\n {onEscalate && (\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.SECONDARY}\n size={ButtonSize.SM}\n disabled={actionsDisabled}\n onClick={() => onEscalate?.(approvalId, comment || undefined)}\n >\n {tComponent(CT, \"escalate\")}\n </Button>\n )}\n </div>\n </div>\n );\n};\n\n//===============================================================\n// AI_ApprovalQueue\n//===============================================================\n\nconst RISK_ORDER: Record<string, number> = { critical: 0, high: 1, medium: 2, low: 3 };\n\nexport type AI_ApprovalQueueItem = {\n approvalId: string;\n executionId: string;\n systemRef: string;\n actionDescription: string;\n /** OPTIONAL for the same reason as on a single request — nothing populates it (#528). */\n riskLevel?: \"low\" | \"medium\" | \"high\" | \"critical\";\n expiresAt?: Date;\n requiredRoles?: string[];\n executionContext?: Record<string, unknown>;\n createdAt?: Date;\n};\n\nexport type AI_ApprovalQueueProps = ComponentProps<\"div\"> & {\n items: AI_ApprovalQueueItem[];\n onApprove?: (approvalId: string, comment?: string) => void;\n onDeny?: (approvalId: string, comment?: string) => void;\n onEscalate?: (approvalId: string, comment?: string) => void;\n processingIds?: Set<string>;\n filter?: string;\n onFilterChange?: (filter: string) => void;\n};\n\nfunction useRelativeTimeFormatter(): (date: Date) => string {\n const { tComponent } = useI18n({ component: CT });\n return React.useCallback((date: Date): string => {\n const seconds = Math.floor((Date.now() - date.getTime()) / 1_000);\n if (seconds < 60) return tComponent(CT, \"timeAgoSeconds\", { count: String(seconds) });\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return tComponent(CT, \"timeAgoMinutes\", { count: String(minutes) });\n const hours = Math.floor(minutes / 60);\n return tComponent(CT, \"timeAgoHours\", { count: String(hours) });\n }, [tComponent]);\n}\n\nexport const AI_ApprovalQueue = ({\n items,\n onApprove,\n onDeny,\n onEscalate,\n processingIds,\n filter,\n onFilterChange,\n className,\n ...props\n}: AI_ApprovalQueueProps): React.JSX.Element | null => {\n const { tComponent, isReady } = useI18n({ component: CT });\n const formatRelativeTime = useRelativeTimeFormatter();\n const [sortByRisk, setSortByRisk] = React.useState(true);\n const [internalFilter, setInternalFilter] = React.useState(\"\");\n\n const activeFilter = filter ?? internalFilter;\n\n const filtered = React.useMemo(() => {\n let result = items;\n if (activeFilter) {\n const q = activeFilter.toLowerCase();\n result = result.filter((i) =>\n i.systemRef.toLowerCase().includes(q) ||\n i.actionDescription.toLowerCase().includes(q) ||\n i.executionId.toLowerCase().includes(q)\n );\n }\n if (sortByRisk) {\n result = [...result].sort((a, b) =>\n (RISK_ORDER[a.riskLevel] ?? 4) - (RISK_ORDER[b.riskLevel] ?? 4)\n );\n }\n return result;\n }, [items, activeFilter, sortByRisk]);\n\n if (!isReady) return null;\n\n return (\n <div className={cn(\"flex flex-col gap-card\", className)} {...props}>\n <div className=\"flex items-center justify-between gap-element\">\n <div className=\"flex items-center gap-element\">\n <h3 className=\"text-sm font-semibold\">\n {tComponent(CT, \"queueTitle\")}\n </h3>\n <Badge variant=\"secondary\">{items.length}</Badge>\n </div>\n\n <Button\n type=\"button\"\n variant={sortByRisk ? ButtonVariants_Variant.SECONDARY : ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n className=\"h-6 text-2xs\"\n onClick={() => setSortByRisk(!sortByRisk)}\n >\n {tComponent(CT, \"queueSortRisk\")}\n </Button>\n </div>\n\n {items.length === 0 ? (\n <p className=\"py-card text-center text-sm text-muted-foreground\">\n {tComponent(CT, \"queueEmpty\")}\n </p>\n ) : (\n <ScrollArea className=\"max-h-96\">\n <div className=\"flex flex-col gap-card-sm\">\n {filtered.map((item) => (\n <div key={item.approvalId} className=\"relative\">\n {item.createdAt && (\n <span className=\"absolute end-2 top-2 text-2xs text-muted-foreground\">\n {formatRelativeTime(item.createdAt)}\n </span>\n )}\n <AI_ApprovalRequest\n approvalId={item.approvalId}\n executionId={item.executionId}\n systemRef={item.systemRef}\n actionDescription={item.actionDescription}\n riskLevel={item.riskLevel}\n expiresAt={item.expiresAt}\n requiredRoles={item.requiredRoles}\n executionContext={item.executionContext}\n createdAt={item.createdAt}\n onApprove={onApprove}\n onDeny={onDeny}\n onEscalate={onEscalate}\n isProcessing={processingIds?.has(item.approvalId)}\n />\n </div>\n ))}\n </div>\n </ScrollArea>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/decision/approval.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Alert,\n AlertDescription,\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n Badge,\n Button,\n ButtonVariants_Variant,\n ScrollArea,\n SelectContent,\n SelectItem,\n SelectRoot,\n SelectTrigger,\n SelectValue,\n TextareaRoot,\n cn,\n useI18n,\n Surface,\n} from '@wildo-ai/saas-frontend-lib';\nimport type { SerializableZodSchema } from '@wildo-ai/zod-decorators';\n\nimport { FrontendComponentType, ButtonSize, SurfaceVariant } from \"@wildo-ai/presets-components-models\";\nimport { ApprovalArgumentEditorMode, ApprovalArgumentFields, fieldsEditableArgumentsSchema } from \"./approval-argument-fields\";\nimport type { ComponentProps } from \"react\";\n\nconst CT: FrontendComponentType = FrontendComponentType.LOW_LEVEL_AI_APPROVAL;\n\n//===============================================================\n// Human-in-the-Loop Approval Components\n//\n// BACKEND DEPENDENCIES:\n// - FlowsActorsContext.respondToApproval() — implemented (WebSocket emit)\n// - WebSocket event: FLOWS_ACTORS_APPROVAL_REQUEST — implemented\n// - FlowsActorsExecution.pendingApproval — schema ready:\n// { approvalId, actionDescription, riskLevel, expiresAt?, requiredRoles? }\n//\n// Components render approval UI from props. Wire to context via\n// the saas-frontend-lib wrapper (flows-actors/approval.tsx).\n//===============================================================\n\n//===============================================================\n// useCountdown — shared countdown hook\n//===============================================================\n\nfunction useCountdown(expiresAt: Date | undefined): { remaining: string | null; isExpired: boolean } {\n const [now, setNow] = React.useState(() => Date.now());\n\n React.useEffect(() => {\n if (!expiresAt) return;\n const id = setInterval(() => setNow(Date.now()), 1_000);\n return () => clearInterval(id);\n }, [expiresAt]);\n\n if (!expiresAt) return { remaining: null, isExpired: false };\n\n const diff = expiresAt.getTime() - now;\n if (diff <= 0) return { remaining: null, isExpired: true };\n\n const totalSeconds = Math.floor(diff / 1_000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const remaining = minutes > 0\n ? `${minutes}m ${String(seconds).padStart(2, \"0\")}s`\n : `${seconds}s`;\n\n return { remaining, isExpired: false };\n}\n\n//===============================================================\n// AI_ApprovalRequest\n//===============================================================\n\n/** One person a decision may be moved to, as the surface shows them. `value` is their id. */\nexport type AI_ApprovalReassignCandidate = { value: string; label: string };\n\n/** One reason a decision's clocks may be paused for (#1628). `value` is the gate's pause-state identifier. */\nexport type AI_ApprovalPauseStateOption = { value: string; label: string };\n\n/**\n * One reason an approver may give for changing or rejecting an agent's proposal (#1921). `value` is a code of the\n * application's declared vocabulary; `label` is its word, as LOCALIZED text the surface's owner resolved.\n */\nexport type AI_ApprovalReasonCodeOption = { value: string; label: string };\n\n/**\n * What else a person may do with a decision besides answering it (#1594 D12). Each is offered only when its\n * callback is supplied, so a surface shows exactly the acts its owner can carry out — never a button that\n * submits into nothing.\n */\nexport type AI_ApprovalRoutingProps = {\n /** Take a decision routed to a role you hold for yourself. */\n onClaim?: (approvalId: string) => void;\n /** Give a decision you claimed back to its role. */\n onUnclaim?: (approvalId: string) => void;\n /** The reassign picker opened: load who it may go to, and pass them back as `reassignCandidates`. */\n onReassignOpen?: (approvalId: string) => void;\n /** Only people who could answer it. Absent while loading; empty when nobody else can. */\n reassignCandidates?: readonly AI_ApprovalReassignCandidate[];\n onReassign?: (approvalId: string, targetUserId: string, comment?: string) => void;\n /**\n * What the last act came to, as LOCALIZED text the surface's owner resolved — \"someone else settled this\",\n * \"there is nobody to escalate this to\". Absent when there is nothing to say.\n */\n actionNotice?: string;\n /**\n * Stop the decision's CLAIM and DECISION deadlines, naming one of `pauseStateOptions` (#1628). Offered only\n * with at least one option. Pausing never stops the decision from expiring.\n */\n onPauseClock?: (approvalId: string, pauseStateRef: string) => void;\n /** Restart paused deadlines; the paused time is added to them. */\n onResumeClock?: (approvalId: string) => void;\n /** The reasons the gate allows its deadlines to be paused for. */\n pauseStateOptions?: readonly AI_ApprovalPauseStateOption[];\n /** The next deadline ahead of the decision, as LOCALIZED text the surface's owner resolved. */\n deadlineNotice?: string;\n /** Set while its deadlines are paused: why, as LOCALIZED text the surface's owner resolved. */\n clockPausedNotice?: string;\n};\n\nexport type AI_ApprovalRequestProps = ComponentProps<typeof Alert> & AI_ApprovalRoutingProps & {\n /**\n * Whether THIS viewer may answer it (#1594). `false` renders the request with no actions — the person\n * whose conversation it is sees a question that a reviewer answers, and `actionNotice` says so. Default\n * `true`, which is every surface that answers its own questions.\n */\n answerable?: boolean;\n approvalId: string;\n actionDescription: string;\n /**\n * OPTIONAL, because nothing populates it. A risk level exists only on\n * `WS_FlowsActorsApprovalRequestPayload`, a payload no code emits; the announcement a paused turn\n * really sends carries a tool name and its arguments and no risk claim (#528). Absent means the\n * badge is not rendered — a default here would show a severity nobody declared.\n */\n riskLevel?: \"low\" | \"medium\" | \"high\" | \"critical\";\n executionId: string;\n systemRef?: string;\n expiresAt?: Date;\n requiredRoles?: string[];\n /**\n * The gated tool call, and the arguments proposed for it.\n *\n * `toolName` is an IDENTIFIER, rendered as authored — it is the thing the agent asked to run,\n * and humanizing it here would invent display text no i18n tree owns.\n * `executionContext` carries the arguments (#455).\n */\n toolName?: string;\n executionContext?: Record<string, unknown>;\n /**\n * Offer the approver an EDITOR over the proposed arguments (#566).\n *\n * Off by default, and it is not a styling preference: turning it on changes what an approval MEANS\n * — the approver stops assenting to the agent's call and starts authoring one. A surface that\n * shows the editor must be wired to a decision path that carries the result, or it collects a\n * change and drops it, which is the failure #537 refused to ship.\n *\n * The editor offers the tool's FIELDS when `argumentsSchema` describes a shape they can express\n * (#587), and raw JSON otherwise; the raw editor stays one click away in both cases. Neither is the\n * control: the server re-validates the edit against the tool's live schema and refuses a violation\n * with a readable message, which is why a field editor that drops refinements is still honest.\n */\n allowArgumentModification?: boolean;\n /** The gated tool's input-schema descriptor (#587). Absent, or a shape fields cannot express, means raw JSON. */\n argumentsSchema?: SerializableZodSchema;\n /**\n * Why the last submitted edit was refused (#587), as LOCALIZED text. The approval is still pending: the\n * editor reopens on the refused arguments and shows this reason beside them. The engine wrapper renders it\n * from the approval's own labels, one per refusal reason, naming the tool and the offending arguments\n * (#1186) — a direct consumer must pass words the reader can read, never a server's sentence.\n */\n argumentModificationError?: string;\n /** What the approver submitted when that edit was refused (#587) — the reopened editor starts from it. */\n rejectedArguments?: Record<string, unknown>;\n /**\n * The reasons an approver may give when they CHANGE or REJECT the proposal (#1921) — the application's declared\n * vocabulary, worded by the surface's owner. Offered only then: approving the call as proposed is not a correction.\n * Never required — a reason is evidence for why experts disagree with the agent, not a gate on answering.\n */\n reasonCodeOptions?: readonly AI_ApprovalReasonCodeOption[];\n /**\n * `modifiedToolArgs` is present only when the approver EDITED the arguments. Absent means \"run the\n * call as proposed\", which is what every approval meant before this parameter existed. `reasonCode` is present only\n * when the approver edited the call AND chose a reason for it (#1921).\n */\n onApprove?: (approvalId: string, comment?: string, modifiedToolArgs?: Record<string, unknown>, reasonCode?: string) => void;\n /** `reasonCode` is present only when the approver chose a reason for the rejection (#1921). */\n onDeny?: (approvalId: string, comment?: string, reasonCode?: string) => void;\n onEscalate?: (approvalId: string, comment?: string) => void;\n isProcessing?: boolean;\n createdAt?: Date;\n};\n\nexport const AI_ApprovalRequest = ({\n approvalId,\n actionDescription,\n riskLevel,\n executionId,\n systemRef,\n expiresAt,\n requiredRoles,\n toolName,\n executionContext,\n allowArgumentModification,\n argumentsSchema,\n argumentModificationError,\n rejectedArguments,\n reasonCodeOptions,\n onApprove,\n onDeny,\n onEscalate,\n onClaim,\n onUnclaim,\n onReassignOpen,\n reassignCandidates,\n onReassign,\n actionNotice,\n onPauseClock,\n onResumeClock,\n pauseStateOptions,\n deadlineNotice,\n clockPausedNotice,\n answerable = true,\n isProcessing,\n createdAt,\n className,\n ...props\n}: AI_ApprovalRequestProps): React.JSX.Element | null => {\n const { tComponent, isReady } = useI18n({ component: CT });\n const { remaining, isExpired } = useCountdown(expiresAt);\n const variant = riskLevel === \"critical\" || riskLevel === \"high\" ? \"destructive\" : \"default\";\n\n /*\n * The argument editor's state (#566).\n *\n * `draft` is `null` while the approver is reading rather than editing — distinct from an empty\n * string, which is a draft they have cleared. Opening the editor seeds it from the PROPOSED\n * arguments, so the starting point is the call the agent asked for and an approver changes one\n * value rather than retyping the object.\n */\n const fieldsSchema = React.useMemo(() => fieldsEditableArgumentsSchema(argumentsSchema), [argumentsSchema]);\n /*\n * A refused edit reopens on what the approver SUBMITTED (#587). The request unmounted while its\n * decision was in flight, so without this the approver would land back on the model's proposal and\n * lose the change the server has just explained.\n */\n const reopenedOn = argumentModificationError !== undefined ? (rejectedArguments ?? executionContext) : undefined;\n const [editorMode, setEditorMode] = React.useState<ApprovalArgumentEditorMode | null>(() =>\n reopenedOn === undefined ? null : fieldsSchema ? ApprovalArgumentEditorMode.FIELDS : ApprovalArgumentEditorMode.JSON,\n );\n // The value the field editor (re)mounts on — replaced when the approver switches back from JSON.\n const [fieldsSeed, setFieldsSeed] = React.useState<Record<string, unknown>>(() => reopenedOn ?? executionContext ?? {});\n const [fieldsEdit, setFieldsEdit] = React.useState<{ value: Record<string, unknown> | undefined; invalid: boolean }>({\n value: undefined,\n invalid: false,\n });\n const handleFieldsChange = React.useCallback(\n (next: { value: Record<string, unknown> | undefined; invalid: boolean }) => setFieldsEdit(next),\n [],\n );\n const [draft, setDraft] = React.useState<string>(() => JSON.stringify(reopenedOn ?? executionContext ?? {}, null, 2));\n const parsedDraft = React.useMemo(() => {\n try {\n const value = JSON.parse(draft) as unknown;\n // An array or a scalar is valid JSON and cannot be a tool's arguments. Refusing it HERE spares\n // the round trip; the server refuses it too, which is what actually protects the call.\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return { value: undefined, invalid: true };\n return { value: value as Record<string, unknown>, invalid: false };\n } catch {\n return { value: undefined, invalid: true };\n }\n }, [draft]);\n\n if (!isReady) return null;\n\n return (\n <Alert variant={variant} className={cn(\"flex flex-col gap-card-sm\", className)} {...props}>\n <div className=\"flex items-center justify-between gap-element\">\n <div className=\"flex items-center gap-element\">\n {riskLevel && (\n <Badge\n variant={riskLevel === \"critical\" || riskLevel === \"high\" ? \"destructive\" : \"outline\"}\n className=\"text-2xs\"\n >\n {tComponent(CT, `risk${riskLevel.charAt(0).toUpperCase()}${riskLevel.slice(1)}` as any)}\n </Badge>\n )}\n {systemRef && (\n <span className=\"text-2xs text-muted-foreground\">{systemRef}</span>\n )}\n </div>\n\n {/* Countdown / Expired indicator */}\n {remaining && (\n <Badge variant=\"secondary\" className=\"text-2xs tabular-nums\">\n {tComponent(CT, \"expiresCountdown\", { time: remaining })}\n </Badge>\n )}\n {isExpired && (\n <Badge variant=\"destructive\" className=\"text-2xs\">\n {tComponent(CT, \"expired\")}\n </Badge>\n )}\n </div>\n\n <AlertDescription className=\"text-sm\">\n {actionDescription}\n </AlertDescription>\n\n {/* #1628 — the next deadline ahead of it, or why its deadlines are paused. Neither is the expiry above. */}\n {clockPausedNotice !== undefined ? (\n <span className=\"text-2xs text-muted-foreground\">{clockPausedNotice}</span>\n ) : deadlineNotice !== undefined ? (\n <span className=\"text-2xs text-muted-foreground\">{deadlineNotice}</span>\n ) : null}\n\n {/* Required roles display */}\n {requiredRoles && requiredRoles.length > 0 && (\n <div className=\"flex items-center gap-element\">\n <span className=\"text-2xs text-muted-foreground\">{tComponent(CT, \"requiredRoles\")}:</span>\n <div className=\"flex gap-1\">\n {requiredRoles.map((role) => (\n <Badge key={role} variant=\"outline\" className=\"text-2xs\">\n {role}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {/* The gated tool call — WHAT the approver is being asked to authorize (#455). */}\n {toolName !== undefined && (\n <div className=\"flex items-center gap-element\">\n <span className=\"text-2xs text-muted-foreground\">{tComponent(CT, \"toolCall\")}:</span>\n {/*\n * Rendered as authored. A tool name is an IDENTIFIER the agent runtime owns, and turning\n * `renameTodo` into \"Rename Todo\" would invent display text no i18n tree can correct —\n * the exact fallback `display-text-comes-from-i18n.md` retired. The approver is better\n * served by the name the system will actually run.\n */}\n <code className=\"rounded bg-muted px-1 py-0.5 text-2xs font-mono\">{toolName}</code>\n </div>\n )}\n\n {/*\n * The proposed ARGUMENTS, one row per key, expanded by default.\n *\n * This was a collapsed `JSON.stringify` in a `<pre>`. Two things were wrong with that and only\n * the second is cosmetic: a blob is not readable at approval speed, and COLLAPSED-BY-DEFAULT\n * hides the very thing being approved — an approver who never opens it is signing an unread\n * document, which is how an approval prompt stops being read at all.\n *\n * Keys render VERBATIM. They are the tool's own parameter names, they carry no i18n entry, and\n * humanizing them is forbidden for the same reason as the tool name. A value that is not a\n * primitive is serialized, because a nested object has no honest one-line form — and that\n * narrow case is the only place a JSON fragment survives.\n */}\n {executionContext && Object.keys(executionContext).length > 0 && (\n <div className=\"flex flex-col gap-element\">\n <div className=\"flex items-center justify-between gap-element\">\n <span className=\"text-2xs text-muted-foreground\">{tComponent(CT, \"toolArguments\")}:</span>\n {/*\n * The door to approve-with-modifications (#566), rendered only when the surface's owner\n * declared it. An approver who edits these is AUTHORING a call the agent never\n * proposed, so it is opt-in per surface rather than always present.\n */}\n {allowArgumentModification && (\n <div className=\"flex items-center gap-1\">\n {/*\n * Fields ⇄ JSON (#587). Offered only when the descriptor can be expressed as fields, and\n * JSON → fields only from a draft that parses, so switching never discards an edit.\n */}\n {editorMode !== null && fieldsSchema && (\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n disabled={isProcessing || isExpired || (editorMode === ApprovalArgumentEditorMode.JSON && parsedDraft.invalid)}\n onClick={() => {\n if (editorMode === ApprovalArgumentEditorMode.FIELDS) {\n setDraft(JSON.stringify(fieldsEdit.value ?? fieldsSeed, null, 2));\n setEditorMode(ApprovalArgumentEditorMode.JSON);\n } else if (parsedDraft.value) {\n setFieldsSeed(parsedDraft.value);\n setEditorMode(ApprovalArgumentEditorMode.FIELDS);\n }\n }}\n >\n {tComponent(CT, editorMode === ApprovalArgumentEditorMode.FIELDS ? \"editArgumentsAsJson\" : \"editArgumentsAsFields\")}\n </Button>\n )}\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n disabled={isProcessing || isExpired}\n onClick={() => {\n if (editorMode !== null) {\n setEditorMode(null);\n return;\n }\n // Opening always starts from the call the agent PROPOSED.\n const proposed = executionContext ?? {};\n setFieldsSeed(proposed);\n setDraft(JSON.stringify(proposed, null, 2));\n setEditorMode(fieldsSchema ? ApprovalArgumentEditorMode.FIELDS : ApprovalArgumentEditorMode.JSON);\n }}\n >\n {tComponent(CT, editorMode === null ? \"editArguments\" : \"discardArgumentEdits\")}\n </Button>\n </div>\n )}\n </div>\n {/*\n * Why the last submitted edit was refused (#587). The words are the approval's own labels,\n * resolved by the wrapper per refusal reason with the offending arguments named (#1186); the\n * server's sentence no longer reaches this card. The approval is still pending while it shows.\n */}\n {argumentModificationError !== undefined && editorMode !== null && (\n <span className=\"text-2xs text-destructive\">\n {tComponent(CT, \"argumentModificationRefused\")}: {argumentModificationError}\n </span>\n )}\n {editorMode === null ? (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.INSET}>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-element gap-y-0.5 rounded-md bg-muted p-2 text-2xs\">\n {Object.entries(executionContext).map(([key, value]) => (\n <React.Fragment key={key}>\n <dt className=\"font-mono text-muted-foreground\">{key}</dt>\n <dd className=\"min-w-0 break-words font-mono\">\n {typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\"\n ? String(value)\n : JSON.stringify(value)}\n </dd>\n </React.Fragment>\n ))}\n </dl>\n </Surface>\n ) : editorMode === ApprovalArgumentEditorMode.FIELDS && fieldsSchema ? (\n <ApprovalArgumentFields\n schema={fieldsSchema}\n initialValue={fieldsSeed}\n disabled={isProcessing || isExpired}\n invalidJsonMessage={tComponent(CT, \"argumentValueNotValidJson\")}\n onChange={handleFieldsChange}\n />\n ) : (\n <>\n <TextareaRoot\n rows={Math.min(12, Object.keys(executionContext).length + 3)}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n className=\"font-mono text-2xs\"\n disabled={isProcessing || isExpired}\n aria-invalid={parsedDraft.invalid || undefined}\n aria-label={tComponent(CT, \"editArguments\")}\n />\n {/*\n * Local JSON validity only. Whether these arguments SUIT the tool is the server's\n * question — it holds the tool's `inputSchema`, refuses an edit that violates it, and\n * leaves the approval pending with a message naming the offending argument. Judging\n * that here would be a second, weaker copy of the control.\n */}\n {parsedDraft.invalid && (\n <span className=\"text-2xs text-destructive\">{tComponent(CT, \"argumentsNotValidJson\")}</span>\n )}\n </>\n )}\n </div>\n )}\n\n {!answerable ? (\n actionNotice !== undefined && <span role=\"status\" className=\"text-2xs text-muted-foreground\">{actionNotice}</span>\n ) : (\n <AI_ApprovalActions\n approvalId={approvalId}\n riskLevel={riskLevel}\n onApprove={onApprove}\n onDeny={onDeny}\n onEscalate={onEscalate}\n onClaim={onClaim}\n onUnclaim={onUnclaim}\n onReassignOpen={onReassignOpen}\n reassignCandidates={reassignCandidates}\n onReassign={onReassign}\n actionNotice={actionNotice}\n onPauseClock={onPauseClock}\n onResumeClock={onResumeClock}\n pauseStateOptions={pauseStateOptions}\n reasonCodeOptions={reasonCodeOptions}\n isProcessing={isProcessing}\n // Approving with unparseable text would send nothing and silently run the model's own\n // arguments — a change collected and dropped, which is the one outcome this feature exists\n // to prevent. The button is unavailable until the draft is an object.\n disabled={\n isExpired\n || (editorMode === ApprovalArgumentEditorMode.FIELDS && fieldsEdit.invalid)\n || (editorMode === ApprovalArgumentEditorMode.JSON && parsedDraft.invalid)\n }\n // Whatever the approver is authoring in — and `undefined` whenever the editor is closed, which is\n // what \"run the call as proposed\" means on the wire.\n modifiedToolArgs={\n editorMode === ApprovalArgumentEditorMode.FIELDS\n ? fieldsEdit.value\n : editorMode === ApprovalArgumentEditorMode.JSON\n ? parsedDraft.value\n : undefined\n }\n />\n )}\n </Alert>\n );\n};\n\n//===============================================================\n// AI_ApprovalActions\n//===============================================================\n\nexport type AI_ApprovalActionsProps = ComponentProps<\"div\"> & AI_ApprovalRoutingProps & {\n approvalId: string;\n riskLevel?: \"low\" | \"medium\" | \"high\" | \"critical\";\n /** Present only while the approver has the argument editor open with a parseable draft (#566). */\n modifiedToolArgs?: Record<string, unknown>;\n /** See {@link AI_ApprovalRequestProps.reasonCodeOptions} (#1921). */\n reasonCodeOptions?: readonly AI_ApprovalReasonCodeOption[];\n onApprove?: (approvalId: string, comment?: string, modifiedToolArgs?: Record<string, unknown>, reasonCode?: string) => void;\n onDeny?: (approvalId: string, comment?: string, reasonCode?: string) => void;\n onEscalate?: (approvalId: string, comment?: string) => void;\n isProcessing?: boolean;\n disabled?: boolean;\n};\n\nexport const AI_ApprovalActions = ({\n approvalId,\n riskLevel,\n modifiedToolArgs,\n reasonCodeOptions,\n onApprove,\n onDeny,\n onEscalate,\n onClaim,\n onUnclaim,\n onReassignOpen,\n reassignCandidates,\n onReassign,\n actionNotice,\n onPauseClock,\n onResumeClock,\n pauseStateOptions,\n isProcessing,\n disabled,\n className,\n ...props\n}: AI_ApprovalActionsProps): React.JSX.Element | null => {\n const { tComponent, isReady } = useI18n({ component: CT });\n const [comment, setComment] = React.useState(\"\");\n /*\n * #1921 — the reason an approver gives for a CORRECTION. `undefined` until one is chosen, and optional throughout.\n *\n * Offered only on the two answers that correct the agent: an EDITED approval (the editor is open, so\n * `modifiedToolArgs` is defined) and a rejection. Approving the call as proposed is agreement, so a reason there would\n * enter the record as the reason for a correction that never happened — it is never sent then, even if one was\n * picked while the editor was open. A rejection needs somewhere to choose BEFORE it is sent, so with reasons on offer\n * Reject opens a picker and a confirm button, the pattern Reassign and Pause already use.\n */\n const [reasonCode, setReasonCode] = React.useState<string | undefined>(undefined);\n const [rejecting, setRejecting] = React.useState(false);\n const offersReasons = (reasonCodeOptions?.length ?? 0) > 0;\n const isModifying = modifiedToolArgs !== undefined;\n // The reason rides as a TRAILING argument only when there is one, so an answer with no reason is called exactly as it\n // was before reasons existed — `(id, comment, args)` — and a consumer written against that shape sees no change.\n const correctionReason: [string] | [] = reasonCode !== undefined ? [reasonCode] : [];\n const approvalReason: [string] | [] = isModifying ? correctionReason : [];\n // #1628 — `null` while the pause picker is closed; the chosen reason once one is picked.\n const [pausing, setPausing] = React.useState<{ state: string | undefined } | null>(null);\n const canPause = !!onPauseClock && (pauseStateOptions?.length ?? 0) > 0;\n // `null` while the picker is closed; the chosen person's id once one is picked.\n const [reassigning, setReassigning] = React.useState<{ target: string | undefined } | null>(null);\n const isHighRisk = riskLevel === \"high\" || riskLevel === \"critical\";\n const actionsDisabled = isProcessing || disabled;\n\n if (!isReady) return null;\n\n const approveButton = (\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.DEFAULT}\n size={ButtonSize.SM}\n disabled={actionsDisabled}\n onClick={isHighRisk ? undefined : () => onApprove?.(approvalId, comment || undefined, modifiedToolArgs, ...approvalReason)}\n >\n {isProcessing ? tComponent(CT, \"processing\") : tComponent(CT, \"approve\")}\n </Button>\n );\n\n return (\n <div className={cn(\"flex flex-col gap-2\", className)} {...props}>\n {/* Comment textarea */}\n <TextareaRoot\n rows={2}\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n placeholder={tComponent(CT, \"commentPlaceholder\")}\n className=\"text-xs\"\n disabled={actionsDisabled}\n />\n\n <div className=\"flex items-center gap-element\">\n {/* Approve — with confirmation dialog for high/critical risk */}\n {isHighRisk ? (\n <AlertDialog>\n <AlertDialogTrigger asChild>\n {approveButton}\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{tComponent(CT, \"confirmTitle\")}</AlertDialogTitle>\n <AlertDialogDescription>{tComponent(CT, \"confirmDescription\")}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>{tComponent(CT, \"confirmCancel\")}</AlertDialogCancel>\n <AlertDialogAction onClick={() => onApprove?.(approvalId, comment || undefined, modifiedToolArgs, ...approvalReason)}>\n {tComponent(CT, \"confirmProceed\")}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n ) : (\n approveButton\n )}\n\n {/* Deny — with reasons on offer, it opens the reason picker first (#1921); otherwise it rejects at once. */}\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.OUTLINE}\n size={ButtonSize.SM}\n disabled={actionsDisabled}\n aria-expanded={offersReasons ? rejecting : undefined}\n onClick={() => {\n if (!offersReasons) { onDeny?.(approvalId, comment || undefined); return; }\n setRejecting(!rejecting);\n }}\n >\n {tComponent(CT, \"deny\")}\n </Button>\n\n {/* Escalate (optional) */}\n {onEscalate && (\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.SECONDARY}\n size={ButtonSize.SM}\n disabled={actionsDisabled}\n onClick={() => onEscalate?.(approvalId, comment || undefined)}\n >\n {tComponent(CT, \"escalate\")}\n </Button>\n )}\n\n {onClaim && (\n <Button type=\"button\" variant={ButtonVariants_Variant.GHOST} size={ButtonSize.SM} disabled={isProcessing} onClick={() => onClaim(approvalId)}>\n {tComponent(CT, \"claim\")}\n </Button>\n )}\n {onUnclaim && (\n <Button type=\"button\" variant={ButtonVariants_Variant.GHOST} size={ButtonSize.SM} disabled={isProcessing} onClick={() => onUnclaim(approvalId)}>\n {tComponent(CT, \"unclaim\")}\n </Button>\n )}\n {canPause && (\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n disabled={isProcessing}\n aria-expanded={pausing !== null}\n onClick={() => setPausing(pausing !== null ? null : { state: undefined })}\n >\n {tComponent(CT, \"pauseClock\")}\n </Button>\n )}\n {onResumeClock && (\n <Button type=\"button\" variant={ButtonVariants_Variant.GHOST} size={ButtonSize.SM} disabled={isProcessing} onClick={() => onResumeClock(approvalId)}>\n {tComponent(CT, \"resumeClock\")}\n </Button>\n )}\n {onReassign && (\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n disabled={isProcessing}\n aria-expanded={reassigning !== null}\n onClick={() => {\n if (reassigning !== null) { setReassigning(null); return; }\n setReassigning({ target: undefined });\n onReassignOpen?.(approvalId);\n }}\n >\n {tComponent(CT, \"reassign\")}\n </Button>\n )}\n </div>\n\n {/*\n * #1921 — the reason picker, shown while the approver is CORRECTING the agent: editing the call, or rejecting it.\n * It lists only the application's declared codes, so a reason chosen here is never refused for what it is. On a\n * rejection it carries the confirm button, because the rejection is sent from here.\n */}\n {offersReasons && (isModifying || rejecting) && (\n <div className=\"flex items-center gap-element\">\n <SelectRoot value={reasonCode ?? \"\"} onValueChange={(value) => setReasonCode(value || undefined)} disabled={actionsDisabled}>\n <SelectTrigger className=\"text-2xs\" aria-label={tComponent(CT, \"reasonCode\")}>\n <SelectValue placeholder={tComponent(CT, \"reasonCode\")} />\n </SelectTrigger>\n <SelectContent>\n {(reasonCodeOptions ?? []).map((option) => (\n <SelectItem key={option.value} value={option.value}>{option.label}</SelectItem>\n ))}\n </SelectContent>\n </SelectRoot>\n {reasonCode !== undefined && (\n <Button type=\"button\" variant={ButtonVariants_Variant.GHOST} size={ButtonSize.SM} disabled={actionsDisabled} onClick={() => setReasonCode(undefined)}>\n {tComponent(CT, \"reasonCodeClear\")}\n </Button>\n )}\n {rejecting && (\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.DESTRUCTIVE}\n size={ButtonSize.SM}\n disabled={actionsDisabled}\n onClick={() => {\n onDeny?.(approvalId, comment || undefined, ...correctionReason);\n setRejecting(false);\n }}\n >\n {tComponent(CT, \"denyConfirm\")}\n </Button>\n )}\n </div>\n )}\n\n {/*\n * The reassign picker. It lists only the people the server says could ANSWER this decision, so a\n * choice made here is never refused for who the person is — only if the decision moved meanwhile.\n */}\n {onReassign && reassigning !== null && (\n <div className=\"flex items-center gap-element\">\n {reassignCandidates === undefined ? (\n <span className=\"text-2xs text-muted-foreground\">{tComponent(CT, \"processing\")}</span>\n ) : reassignCandidates.length === 0 ? (\n <span className=\"text-2xs text-muted-foreground\">{tComponent(CT, \"reassignNoCandidates\")}</span>\n ) : (\n <>\n <SelectRoot value={reassigning.target} onValueChange={(target) => setReassigning({ target })} disabled={isProcessing}>\n <SelectTrigger className=\"text-2xs\" aria-label={tComponent(CT, \"reassignTarget\")}>\n <SelectValue placeholder={tComponent(CT, \"reassignTarget\")} />\n </SelectTrigger>\n <SelectContent>\n {reassignCandidates.map((candidate) => (\n <SelectItem key={candidate.value} value={candidate.value}>{candidate.label}</SelectItem>\n ))}\n </SelectContent>\n </SelectRoot>\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.SECONDARY}\n size={ButtonSize.SM}\n disabled={isProcessing || reassigning.target === undefined}\n onClick={() => {\n if (reassigning.target === undefined) return;\n onReassign(approvalId, reassigning.target, comment || undefined);\n setReassigning(null);\n }}\n >\n {tComponent(CT, \"reassignConfirm\")}\n </Button>\n </>\n )}\n </div>\n )}\n\n {/* #1628 — the pause picker: only the reasons the gate declares, so a pause is never refused for its reason. */}\n {canPause && pausing !== null && (\n <div className=\"flex items-center gap-element\">\n <SelectRoot value={pausing.state} onValueChange={(state) => setPausing({ state })} disabled={isProcessing}>\n <SelectTrigger className=\"text-2xs\" aria-label={tComponent(CT, \"pauseClockState\")}>\n <SelectValue placeholder={tComponent(CT, \"pauseClockState\")} />\n </SelectTrigger>\n <SelectContent>\n {(pauseStateOptions ?? []).map((option) => (\n <SelectItem key={option.value} value={option.value}>{option.label}</SelectItem>\n ))}\n </SelectContent>\n </SelectRoot>\n <Button\n type=\"button\"\n variant={ButtonVariants_Variant.SECONDARY}\n size={ButtonSize.SM}\n disabled={isProcessing || pausing.state === undefined}\n onClick={() => {\n if (pausing.state === undefined || !onPauseClock) return;\n onPauseClock(approvalId, pausing.state);\n setPausing(null);\n }}\n >\n {tComponent(CT, \"pauseClockConfirm\")}\n </Button>\n </div>\n )}\n\n {actionNotice !== undefined && (\n <span role=\"status\" className=\"text-2xs text-muted-foreground\">{actionNotice}</span>\n )}\n </div>\n );\n};\n\n//===============================================================\n// AI_ApprovalQueue\n//===============================================================\n\nconst RISK_ORDER: Record<string, number> = { critical: 0, high: 1, medium: 2, low: 3 };\n\nexport type AI_ApprovalQueueItem = {\n approvalId: string;\n executionId: string;\n systemRef: string;\n actionDescription: string;\n /** OPTIONAL for the same reason as on a single request — nothing populates it (#528). */\n riskLevel?: \"low\" | \"medium\" | \"high\" | \"critical\";\n expiresAt?: Date;\n requiredRoles?: string[];\n executionContext?: Record<string, unknown>;\n createdAt?: Date;\n /** The gated tool, rendered as authored (#455). */\n toolName?: string;\n /**\n * Which routing acts THIS item offers (#1594). Unset means none: the queue's callbacks are wired per item\n * only where the person may perform the act, so no item shows a button the server would refuse.\n */\n canEscalate?: boolean;\n canClaim?: boolean;\n canUnclaim?: boolean;\n canReassign?: boolean;\n /** See {@link AI_ApprovalRoutingProps.reassignCandidates}. */\n reassignCandidates?: readonly AI_ApprovalReassignCandidate[];\n /** See {@link AI_ApprovalRoutingProps.actionNotice}. */\n actionNotice?: string;\n /** #1628: whether this item offers Pause / Resume, the reasons it may be paused for, and its deadline lines. */\n canPauseClock?: boolean;\n canResumeClock?: boolean;\n pauseStateOptions?: readonly AI_ApprovalPauseStateOption[];\n deadlineNotice?: string;\n clockPausedNotice?: string;\n /** #1921: the reasons a reviewer may give when changing or rejecting this item's proposal. */\n reasonCodeOptions?: readonly AI_ApprovalReasonCodeOption[];\n /** #1921: offer the argument editor on this item, so a reviewer may CHANGE the proposed call. */\n allowArgumentModification?: boolean;\n /** The gated tool's input-schema descriptor, so the editor offers the tool's fields (#587). */\n argumentsSchema?: SerializableZodSchema;\n};\n\nexport type AI_ApprovalQueueProps = ComponentProps<\"div\"> & Omit<AI_ApprovalRoutingProps, 'reassignCandidates' | 'actionNotice' | 'pauseStateOptions' | 'deadlineNotice' | 'clockPausedNotice'> & {\n items: AI_ApprovalQueueItem[];\n /** `modifiedToolArgs` only when the reviewer edited the call; `reasonCode` only when they gave a reason (#1921). */\n onApprove?: (approvalId: string, comment?: string, modifiedToolArgs?: Record<string, unknown>, reasonCode?: string) => void;\n onDeny?: (approvalId: string, comment?: string, reasonCode?: string) => void;\n onEscalate?: (approvalId: string, comment?: string) => void;\n processingIds?: Set<string>;\n filter?: string;\n onFilterChange?: (filter: string) => void;\n};\n\nfunction useRelativeTimeFormatter(): (date: Date) => string {\n const { tComponent } = useI18n({ component: CT });\n return React.useCallback((date: Date): string => {\n const seconds = Math.floor((Date.now() - date.getTime()) / 1_000);\n if (seconds < 60) return tComponent(CT, \"timeAgoSeconds\", { count: String(seconds) });\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return tComponent(CT, \"timeAgoMinutes\", { count: String(minutes) });\n const hours = Math.floor(minutes / 60);\n return tComponent(CT, \"timeAgoHours\", { count: String(hours) });\n }, [tComponent]);\n}\n\nexport const AI_ApprovalQueue = ({\n items,\n onApprove,\n onDeny,\n onEscalate,\n onClaim,\n onUnclaim,\n onReassignOpen,\n onReassign,\n onPauseClock,\n onResumeClock,\n processingIds,\n filter,\n onFilterChange,\n className,\n ...props\n}: AI_ApprovalQueueProps): React.JSX.Element | null => {\n const { tComponent, isReady } = useI18n({ component: CT });\n const formatRelativeTime = useRelativeTimeFormatter();\n const [sortByRisk, setSortByRisk] = React.useState(true);\n const [internalFilter, setInternalFilter] = React.useState(\"\");\n\n const activeFilter = filter ?? internalFilter;\n\n const filtered = React.useMemo(() => {\n let result = items;\n if (activeFilter) {\n const q = activeFilter.toLowerCase();\n result = result.filter((i) =>\n i.systemRef.toLowerCase().includes(q) ||\n i.actionDescription.toLowerCase().includes(q) ||\n i.executionId.toLowerCase().includes(q)\n );\n }\n if (sortByRisk) {\n result = [...result].sort((a, b) =>\n (RISK_ORDER[a.riskLevel] ?? 4) - (RISK_ORDER[b.riskLevel] ?? 4)\n );\n }\n return result;\n }, [items, activeFilter, sortByRisk]);\n\n if (!isReady) return null;\n\n return (\n <div className={cn(\"flex flex-col gap-card\", className)} {...props}>\n <div className=\"flex items-center justify-between gap-element\">\n <div className=\"flex items-center gap-element\">\n <h3 className=\"text-sm font-semibold\">\n {tComponent(CT, \"queueTitle\")}\n </h3>\n <Badge variant=\"secondary\">{items.length}</Badge>\n </div>\n\n <Button\n type=\"button\"\n variant={sortByRisk ? ButtonVariants_Variant.SECONDARY : ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n className=\"h-6 text-2xs\"\n onClick={() => setSortByRisk(!sortByRisk)}\n >\n {tComponent(CT, \"queueSortRisk\")}\n </Button>\n </div>\n\n {items.length === 0 ? (\n <p className=\"py-card text-center text-sm text-muted-foreground\">\n {tComponent(CT, \"queueEmpty\")}\n </p>\n ) : (\n <ScrollArea className=\"max-h-96\">\n <div className=\"flex flex-col gap-card-sm\">\n {filtered.map((item) => (\n <div key={item.approvalId} className=\"relative\">\n {item.createdAt && (\n <span className=\"absolute end-2 top-2 text-2xs text-muted-foreground\">\n {formatRelativeTime(item.createdAt)}\n </span>\n )}\n <AI_ApprovalRequest\n approvalId={item.approvalId}\n executionId={item.executionId}\n systemRef={item.systemRef}\n actionDescription={item.actionDescription}\n riskLevel={item.riskLevel}\n expiresAt={item.expiresAt}\n requiredRoles={item.requiredRoles}\n executionContext={item.executionContext}\n toolName={item.toolName}\n createdAt={item.createdAt}\n allowArgumentModification={item.allowArgumentModification}\n argumentsSchema={item.argumentsSchema}\n reasonCodeOptions={item.reasonCodeOptions}\n onApprove={onApprove}\n onDeny={onDeny}\n // Per item, not per queue: an item offers only the acts its person may perform.\n onEscalate={item.canEscalate ? onEscalate : undefined}\n onClaim={item.canClaim ? onClaim : undefined}\n onUnclaim={item.canUnclaim ? onUnclaim : undefined}\n onReassignOpen={item.canReassign ? onReassignOpen : undefined}\n onReassign={item.canReassign ? onReassign : undefined}\n reassignCandidates={item.reassignCandidates}\n actionNotice={item.actionNotice}\n onPauseClock={item.canPauseClock ? onPauseClock : undefined}\n onResumeClock={item.canResumeClock ? onResumeClock : undefined}\n pauseStateOptions={item.pauseStateOptions}\n deadlineNotice={item.deadlineNotice}\n clockPausedNotice={item.clockPausedNotice}\n isProcessing={processingIds?.has(item.approvalId)}\n />\n </div>\n ))}\n </div>\n </ScrollArea>\n )}\n </div>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"decision-request.d.ts","sourceRoot":"","sources":["../../../../../src/components/ai-elements/decision/decision-request.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,IAAI,EAaL,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAmD5C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,oHAWhC,uBAAuB,KAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IA2JhD,CAAC;AAMF,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,mGAUlC,yBAAyB,KAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IA4GlD,CAAC"}
1
+ {"version":3,"file":"decision-request.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/decision/decision-request.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,IAAI,EAaL,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAmD5C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,oHAWhC,uBAAuB,KAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IA2JhD,CAAC;AAMF,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,mGAUlC,yBAAyB,KAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IA4GlD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"decision-request.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/ai-elements/decision/decision-request.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAM7C,eAAO,MAAM,wBAAwB,EAAE,mBAAmB,EAwDzD,CAAC"}
1
+ {"version":3,"file":"decision-request.labels.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/decision/decision-request.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAM7C,eAAO,MAAM,wBAAwB,EAAE,mBAAmB,EAwDzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"confirmation.d.ts","sourceRoot":"","sources":["../../../../../src/components/ai-elements/execution/confirmation.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAGV,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,6BAA6B,CAAC;AAsBrC,eAAO,MAAM,eAAe,GAAI,0CAK7B,oBAAoB,KAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAU7C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,yBAGlC,yBAAyB,KAAG,KAAK,CAAC,GAAG,CAAC,OAExC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,cAAc,2BAA2B,KAAG,KAAK,CAAC,SASxF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,eAErC,4BAA4B,KAAG,KAAK,CAAC,SAcvC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,eAErC,4BAA4B,KAAG,KAAK,CAAC,SAcvC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,yBAGpC,2BAA2B,KAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAcpD,CAAC;AAKF,eAAO,MAAM,qBAAqB,GAAI,OAAO,0BAA0B,KAAG,KAAK,CAAC,GAAG,CAAC,OAEnF,CAAC"}
1
+ {"version":3,"file":"confirmation.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/execution/confirmation.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAGV,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,6BAA6B,CAAC;AAsBrC,eAAO,MAAM,eAAe,GAAI,0CAK7B,oBAAoB,KAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAU7C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,yBAGlC,yBAAyB,KAAG,KAAK,CAAC,GAAG,CAAC,OAExC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,cAAc,2BAA2B,KAAG,KAAK,CAAC,SASxF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,eAErC,4BAA4B,KAAG,KAAK,CAAC,SAcvC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,eAErC,4BAA4B,KAAG,KAAK,CAAC,SAcvC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,yBAGpC,2BAA2B,KAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAcpD,CAAC;AAKF,eAAO,MAAM,qBAAqB,GAAI,OAAO,0BAA0B,KAAG,KAAK,CAAC,GAAG,CAAC,OAEnF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"confirmation.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/ai-elements/execution/confirmation.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM1I,eAAO,MAAM,4BAA4B,EAAE,mBAAmB,EAW7D,CAAC"}
1
+ {"version":3,"file":"confirmation.labels.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/execution/confirmation.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM1I,eAAO,MAAM,4BAA4B,EAAE,mBAAmB,EAW7D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../../src/components/ai-elements/execution/queue.tsx"],"names":[],"mappings":"AAGA,OAAO,EAaL,gBAAgB,EAmBjB,MAAM,6BAA6B,CAAC;AAqTrC,eAAO,MAAM,QAAQ,kBAiBnB,CAAC"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/execution/queue.tsx"],"names":[],"mappings":"AAGA,OAAO,EAaL,gBAAgB,EAmBjB,MAAM,6BAA6B,CAAC;AAqTrC,eAAO,MAAM,QAAQ,kBAiBnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"queue.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/ai-elements/execution/queue.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,EAAO,CAAC"}
1
+ {"version":3,"file":"queue.labels.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/execution/queue.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,EAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../../../src/components/ai-elements/execution/task.tsx"],"names":[],"mappings":"AAGA,OAAO,EAeL,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAiGrC,eAAO,MAAM,OAAO,iBAKlB,CAAC"}
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/execution/task.tsx"],"names":[],"mappings":"AAGA,OAAO,EAeL,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAwGrC,eAAO,MAAM,OAAO,iBAKlB,CAAC"}
@@ -13,7 +13,7 @@ const AI_TaskTrigger = ({ children, className, title, ...props }) => {
13
13
  const { renderIcon } = useIconRegistry();
14
14
  const { getRecipe } = useUI();
15
15
  const descRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);
16
- return (_jsx(CollapsibleTrigger, { asChild: true, className: cn("group", className), ...props, children: children ?? (_jsxs("div", { className: cn("flex w-full cursor-pointer items-center gap-element transition-colors hover:text-foreground", descRecipe.base), children: [renderIcon(StandardIconReference.SEARCH, { className: "size-4" }), _jsx("p", { className: "text-sm", children: title }), renderIcon(StandardIconReference.CHEVRON_DOWN, { className: "size-4 transition-transform group-data-[state=open]:rotate-180" })] })) }));
16
+ return (_jsx(CollapsibleTrigger, { asChild: true, className: cn("group", className), ...props, children: children ?? (_jsxs("div", { className: cn("flex w-full min-w-0 cursor-pointer items-center gap-element transition-colors hover:text-foreground", descRecipe.base), children: [renderIcon(StandardIconReference.SEARCH, { className: "size-4 shrink-0" }), _jsx("p", { className: "min-w-0 flex-1 break-words text-sm", children: title }), renderIcon(StandardIconReference.CHEVRON_DOWN, { className: "size-4 transition-transform group-data-[state=open]:rotate-180" })] })) }));
17
17
  };
18
18
  /** The themed nesting guide for the task's revealed items — a hook because a recipe is runtime theme state. */
19
19
  function useTaskNestingGuide() {
@@ -1 +1 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/execution/task.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAML,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,EAAE,EACF,eAAe,EACf,qBAAqB,EACrB,KAAK,EACL,oBAAoB,EACpB,OAAO,GAER,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,cAAc,EAAyB,cAAc,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAE3I,MAAM,eAAe,GAAG,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACa,EAAqB,EAAE,CAAC,CAC7C,KAAC,OAAO,IAAC,OAAO,QAAC,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,YACnE,cACE,SAAS,EAAE,EAAE,CACX,2GAA2G,EAC3G,SAAS,CACV,KACG,KAAK,YAER,QAAQ,GACL,GACE,CACX,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB,EAAqB,EAAE;IAC7F,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAEnF,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,KAAM,KAAK,YACtD,QAAQ,GACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,EACnB,WAAW,GAAG,IAAI,EAClB,SAAS,EACT,GAAG,KAAK,EACK,EAAqB,EAAE,CAAC,CACrC,KAAC,WAAW,IAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,WAAW,KAAM,KAAK,GAAI,CAC/E,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACY,EAAqB,EAAE;IAC3C,MAAM,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,CAAC;IACzC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAEnF,OAAO,CACL,KAAC,kBAAkB,IAAC,OAAO,QAAC,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,KAAM,KAAK,YACrE,QAAQ,IAAI,CACX,eAAK,SAAS,EAAE,EAAE,CAAC,6FAA6F,EAAE,UAAU,CAAC,IAAI,CAAC,aAC/H,UAAU,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAClE,YAAG,SAAS,EAAC,SAAS,YAAE,KAAK,GAAK,EACjC,UAAU,CAAC,qBAAqB,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,gEAAgE,EAAE,CAAC,IAC5H,CACP,GACkB,CACtB,CAAC;AACJ,CAAC,CAAC;AAGF,+GAA+G;AAC/G,SAAS,mBAAmB;IAC1B,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAA;IAC7B,OAAO,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,IAAI,CAAA;AACzE,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACY,EAAqB,EAAE;IAC3C,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAA;IAC1C,OAAO,CACP,KAAC,kBAAkB,IACjB,SAAS,EAAE,EAAE,CACX,uMAAuM,EACvM,SAAS,CACV,KACG,KAAK,YAOT,cAAK,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,+BAA+B,CAAC,YAC9D,QAAQ,GACL,GACa,CACpB,CAAA;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,oBAAoB,CAAkB,WAAW,EAAE;IACxE,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,WAAW;IACjB,QAAQ,EAAE,eAAe;CAC1B,CAAC,CAAC","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AI_TaskProps,\n AI_TaskTriggerProps,\n AI_TaskContentProps,\n AI_TaskItemProps,\n AI_TaskItemFileProps,\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n cn,\n useIconRegistry,\n StandardIconReference,\n useUI,\n createCompoundPreset,\n Surface,\n AI_TaskCompound,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { DividerVariant, FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior } from \"@wildo-ai/presets-components-models\";\n\nconst AI_TaskItemFile = ({\n children,\n className,\n ...props\n}: AI_TaskItemFileProps): React.JSX.Element => (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.INSET}>\n <div\n className={cn(\n \"inline-flex items-center gap-item-xs rounded-md border bg-secondary px-1.5 py-0.5 text-foreground text-xs\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </Surface>\n);\n\nconst AI_TaskItem = ({ children, className, ...props }: AI_TaskItemProps): React.JSX.Element => {\n const { getRecipe } = useUI();\n const descRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n return (\n <div className={cn(descRecipe.base, className)} {...props}>\n {children}\n </div>\n );\n};\n\nconst AI_TaskRoot = ({\n defaultOpen = true,\n className,\n ...props\n}: AI_TaskProps): React.JSX.Element => (\n <Collapsible className={cn(className)} defaultOpen={defaultOpen} {...props} />\n);\n\nconst AI_TaskTrigger = ({\n children,\n className,\n title,\n ...props\n}: AI_TaskTriggerProps): React.JSX.Element => {\n const { renderIcon } = useIconRegistry();\n const { getRecipe } = useUI();\n const descRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n return (\n <CollapsibleTrigger asChild className={cn(\"group\", className)} {...props}>\n {children ?? (\n <div className={cn(\"flex w-full cursor-pointer items-center gap-element transition-colors hover:text-foreground\", descRecipe.base)}>\n {renderIcon(StandardIconReference.SEARCH, { className: \"size-4\" })}\n <p className=\"text-sm\">{title}</p>\n {renderIcon(StandardIconReference.CHEVRON_DOWN, { className: \"size-4 transition-transform group-data-[state=open]:rotate-180\" })}\n </div>\n )}\n </CollapsibleTrigger>\n );\n};\n\n\n/** The themed nesting guide for the task's revealed items — a hook because a recipe is runtime theme state. */\nfunction useTaskNestingGuide(): string | undefined {\n const { getRecipe } = useUI()\n return getRecipe(UIBehavior.DIVIDER, DividerVariant.NESTING_GUIDE).base\n}\n\nconst AI_TaskContent = ({\n children,\n className,\n ...props\n}: AI_TaskContentProps): React.JSX.Element => {\n const nestingGuide = useTaskNestingGuide()\n return (\n <CollapsibleContent\n className={cn(\n \"data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 text-foreground outline-none data-[state=closed]:animate-out data-[state=open]:animate-in\",\n className\n )}\n {...props}\n >\n {/*\n * The nested-items guide comes from the theme (`DIVIDER` / `NESTING_GUIDE`) rather than the\n * hand-rolled `border-muted border-s-2` it used to be — one meaning, one recipe, restylable per\n * theme. The `ps-card` indent is this component's own structural choice and stays.\n */}\n <div className={cn(nestingGuide, \"mt-field space-y-item ps-card\")}>\n {children}\n </div>\n </CollapsibleContent>\n )\n};\n\nexport const AI_Task = createCompoundPreset<AI_TaskCompound>(AI_TaskRoot, {\n Trigger: AI_TaskTrigger,\n Content: AI_TaskContent,\n Item: AI_TaskItem,\n ItemFile: AI_TaskItemFile,\n});\n"]}
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/execution/task.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AI_TaskProps,\n AI_TaskTriggerProps,\n AI_TaskContentProps,\n AI_TaskItemProps,\n AI_TaskItemFileProps,\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n cn,\n useIconRegistry,\n StandardIconReference,\n useUI,\n createCompoundPreset,\n Surface,\n AI_TaskCompound,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { DividerVariant, FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior } from \"@wildo-ai/presets-components-models\";\n\nconst AI_TaskItemFile = ({\n children,\n className,\n ...props\n}: AI_TaskItemFileProps): React.JSX.Element => (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.INSET}>\n <div\n className={cn(\n \"inline-flex items-center gap-item-xs rounded-md border bg-secondary px-1.5 py-0.5 text-foreground text-xs\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </Surface>\n);\n\nconst AI_TaskItem = ({ children, className, ...props }: AI_TaskItemProps): React.JSX.Element => {\n const { getRecipe } = useUI();\n const descRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n return (\n <div className={cn(descRecipe.base, className)} {...props}>\n {children}\n </div>\n );\n};\n\nconst AI_TaskRoot = ({\n defaultOpen = true,\n className,\n ...props\n}: AI_TaskProps): React.JSX.Element => (\n <Collapsible className={cn(className)} defaultOpen={defaultOpen} {...props} />\n);\n\nconst AI_TaskTrigger = ({\n children,\n className,\n title,\n ...props\n}: AI_TaskTriggerProps): React.JSX.Element => {\n const { renderIcon } = useIconRegistry();\n const { getRecipe } = useUI();\n const descRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n return (\n <CollapsibleTrigger asChild className={cn(\"group\", className)} {...props}>\n {children ?? (\n <div className={cn(\"flex w-full min-w-0 cursor-pointer items-center gap-element transition-colors hover:text-foreground\", descRecipe.base)}>\n {renderIcon(StandardIconReference.SEARCH, { className: \"size-4 shrink-0\" })}\n {/*\n * `min-w-0` + `break-words`, so a title longer than the trigger WRAPS inside it. Without them\n * the paragraph kept its content width and overflowed the trigger into whatever sat beside\n * it — measured on the creation board's split (2026-09-20), where a run's write entry drew\n * its \"playbook\" and \"trace\" links over the playbook ref, and a click on the row landed on\n * the link instead of the row.\n */}\n <p className=\"min-w-0 flex-1 break-words text-sm\">{title}</p>\n {renderIcon(StandardIconReference.CHEVRON_DOWN, { className: \"size-4 transition-transform group-data-[state=open]:rotate-180\" })}\n </div>\n )}\n </CollapsibleTrigger>\n );\n};\n\n\n/** The themed nesting guide for the task's revealed items — a hook because a recipe is runtime theme state. */\nfunction useTaskNestingGuide(): string | undefined {\n const { getRecipe } = useUI()\n return getRecipe(UIBehavior.DIVIDER, DividerVariant.NESTING_GUIDE).base\n}\n\nconst AI_TaskContent = ({\n children,\n className,\n ...props\n}: AI_TaskContentProps): React.JSX.Element => {\n const nestingGuide = useTaskNestingGuide()\n return (\n <CollapsibleContent\n className={cn(\n \"data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 text-foreground outline-none data-[state=closed]:animate-out data-[state=open]:animate-in\",\n className\n )}\n {...props}\n >\n {/*\n * The nested-items guide comes from the theme (`DIVIDER` / `NESTING_GUIDE`) rather than the\n * hand-rolled `border-muted border-s-2` it used to be — one meaning, one recipe, restylable per\n * theme. The `ps-card` indent is this component's own structural choice and stays.\n */}\n <div className={cn(nestingGuide, \"mt-field space-y-item ps-card\")}>\n {children}\n </div>\n </CollapsibleContent>\n )\n};\n\nexport const AI_Task = createCompoundPreset<AI_TaskCompound>(AI_TaskRoot, {\n Trigger: AI_TaskTrigger,\n Content: AI_TaskContent,\n Item: AI_TaskItem,\n ItemFile: AI_TaskItemFile,\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"task.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/ai-elements/execution/task.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,oBAAoB,EAAE,mBAAmB,EAAO,CAAC"}
1
+ {"version":3,"file":"task.labels.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/execution/task.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,oBAAoB,EAAE,mBAAmB,EAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../../../src/components/ai-elements/execution/tool.tsx"],"names":[],"mappings":"AAGA,OAAO,EAmBL,eAAe,EAChB,MAAM,6BAA6B,CAAC;AA6KrC,eAAO,MAAM,OAAO,iBAKlB,CAAC"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/execution/tool.tsx"],"names":[],"mappings":"AAGA,OAAO,EAmBL,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAmLrC,eAAO,MAAM,OAAO,iBAKlB,CAAC"}