@mastra/playground-ui 69.0.0-alpha.0 → 69.0.0-alpha.2

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 (842) hide show
  1. package/components.css +6 -0
  2. package/dist/{CodeEditor-ZoBu3Gjw.js → CodeEditor-BqAM9L7t.js} +5 -2
  3. package/dist/{CodeEditor-ZoBu3Gjw.js.map → CodeEditor-BqAM9L7t.js.map} +1 -1
  4. package/dist/{CodeEditor-DHIDfP5g.cjs → CodeEditor-zMSUzPdX.cjs} +5 -2
  5. package/dist/{CodeEditor-DHIDfP5g.cjs.map → CodeEditor-zMSUzPdX.cjs.map} +1 -1
  6. package/dist/{Comment-rQxuMDQv.cjs → Comment-A07IvOt2.cjs} +3 -3
  7. package/dist/{Comment-rQxuMDQv.cjs.map → Comment-A07IvOt2.cjs.map} +1 -1
  8. package/dist/{Comment-2q9SomE2.js → Comment-D_gSx7oM.js} +3 -3
  9. package/dist/{Comment-2q9SomE2.js.map → Comment-D_gSx7oM.js.map} +1 -1
  10. package/dist/{Composer-u1K6edoZ.cjs → Composer-D2BqRyb5.cjs} +2 -2
  11. package/dist/Composer-D2BqRyb5.cjs.map +1 -0
  12. package/dist/{Composer-bVE8qK52.js → Composer-kjwmlIgL.js} +2 -2
  13. package/dist/Composer-kjwmlIgL.js.map +1 -0
  14. package/dist/{DataCodeSection-CTodi9wg.js → DataCodeSection-CcX8Z68Y.js} +2 -2
  15. package/dist/{DataCodeSection-CTodi9wg.js.map → DataCodeSection-CcX8Z68Y.js.map} +1 -1
  16. package/dist/{DataCodeSection-7SvRJj6f.cjs → DataCodeSection-JPGTWLcL.cjs} +2 -2
  17. package/dist/{DataCodeSection-7SvRJj6f.cjs.map → DataCodeSection-JPGTWLcL.cjs.map} +1 -1
  18. package/dist/{DataDetailsPanel-BDoD6pxx.cjs → DataDetailsPanel-DCMlaG7j.cjs} +2 -2
  19. package/dist/{DataDetailsPanel-BDoD6pxx.cjs.map → DataDetailsPanel-DCMlaG7j.cjs.map} +1 -1
  20. package/dist/{DataDetailsPanel-BU05psHL.js → DataDetailsPanel-mTfbbQho.js} +2 -2
  21. package/dist/{DataDetailsPanel-BU05psHL.js.map → DataDetailsPanel-mTfbbQho.js.map} +1 -1
  22. package/dist/{DataPanel-BRRAvWYQ.cjs → DataPanel-LfExjFpP.cjs} +2 -2
  23. package/dist/{DataPanel-BRRAvWYQ.cjs.map → DataPanel-LfExjFpP.cjs.map} +1 -1
  24. package/dist/{DataPanel-pVr5LVaK.js → DataPanel-Rv5Mb_pf.js} +2 -2
  25. package/dist/{DataPanel-pVr5LVaK.js.map → DataPanel-Rv5Mb_pf.js.map} +1 -1
  26. package/dist/{FilterBar-Kmn6gMgO.js → FilterBar-DgHNtsDI.js} +5 -5
  27. package/dist/FilterBar-DgHNtsDI.js.map +1 -0
  28. package/dist/{FilterBar-jBz6yaNu.cjs → FilterBar-O8SYau_Q.cjs} +5 -5
  29. package/dist/FilterBar-O8SYau_Q.cjs.map +1 -0
  30. package/dist/KnowledgePageGraph.css +1 -3
  31. package/dist/{MarkdownRenderer-CY8LGt-l.js → MarkdownRenderer-BSGb65Ze.js} +2 -2
  32. package/dist/{MarkdownRenderer-CY8LGt-l.js.map → MarkdownRenderer-BSGb65Ze.js.map} +1 -1
  33. package/dist/{MarkdownRenderer-CUYpmuPh.cjs → MarkdownRenderer-CDwlvw0Y.cjs} +2 -2
  34. package/dist/{MarkdownRenderer-CUYpmuPh.cjs.map → MarkdownRenderer-CDwlvw0Y.cjs.map} +1 -1
  35. package/dist/{MetricsCard-DojbLiEx.cjs → MetricsCard-CSJ4TsNq.cjs} +3 -3
  36. package/dist/MetricsCard-CSJ4TsNq.cjs.map +1 -0
  37. package/dist/{MetricsCard-kAqSCPPe.js → MetricsCard-D6bQfynP.js} +3 -3
  38. package/dist/MetricsCard-D6bQfynP.js.map +1 -0
  39. package/dist/{Tree-Caz4FTCU.cjs → Tree-6pubDJLQ.cjs} +4 -3
  40. package/dist/Tree-6pubDJLQ.cjs.map +1 -0
  41. package/dist/{Tree-od43gLMO.js → Tree-DpRLmis3.js} +4 -3
  42. package/dist/Tree-DpRLmis3.js.map +1 -0
  43. package/dist/{Workflow-mIbUYdv0.js → Workflow-BVVYys0W.js} +3 -3
  44. package/dist/{Workflow-mIbUYdv0.js.map → Workflow-BVVYys0W.js.map} +1 -1
  45. package/dist/{Workflow-XR5L-3cJ.cjs → Workflow-CwIjxwC6.cjs} +3 -3
  46. package/dist/{Workflow-XR5L-3cJ.cjs.map → Workflow-CwIjxwC6.cjs.map} +1 -1
  47. package/dist/{activity-ClFChYfl.js → activity-BH_eegMA.js} +2 -2
  48. package/dist/{activity-ClFChYfl.js.map → activity-BH_eegMA.js.map} +1 -1
  49. package/dist/{activity-BprmG6yH.cjs → activity-Ciolopq8.cjs} +2 -2
  50. package/dist/{activity-BprmG6yH.cjs.map → activity-Ciolopq8.cjs.map} +1 -1
  51. package/dist/{ask-user-D4ezQ6pt.js → ask-user-CqzPUD9E.js} +2 -2
  52. package/dist/{ask-user-D4ezQ6pt.js.map → ask-user-CqzPUD9E.js.map} +1 -1
  53. package/dist/{ask-user-DcnUNMM5.cjs → ask-user-DIYcPkoX.cjs} +2 -2
  54. package/dist/{ask-user-DcnUNMM5.cjs.map → ask-user-DIYcPkoX.cjs.map} +1 -1
  55. package/dist/{combobox-lbSxWRMl.js → combobox-DLdInLYm.js} +2 -2
  56. package/dist/{combobox-lbSxWRMl.js.map → combobox-DLdInLYm.js.map} +1 -1
  57. package/dist/{combobox-i723LxeC.cjs → combobox-DU2jsrGa.cjs} +2 -2
  58. package/dist/{combobox-i723LxeC.cjs.map → combobox-DU2jsrGa.cjs.map} +1 -1
  59. package/dist/{combobox-parts-BeNqgCbj.cjs → combobox-parts-C236ZHtn.cjs} +2 -2
  60. package/dist/combobox-parts-C236ZHtn.cjs.map +1 -0
  61. package/dist/{combobox-parts-C9o4UfH_.js → combobox-parts-_m3Qgmci.js} +2 -2
  62. package/dist/combobox-parts-_m3Qgmci.js.map +1 -0
  63. package/dist/components/Breadcrumb.cjs.js.map +1 -1
  64. package/dist/components/Breadcrumb.es.js.map +1 -1
  65. package/dist/components/CodeBlock.cjs.js +1 -1
  66. package/dist/components/CodeBlock.es.js +1 -1
  67. package/dist/components/CodeEditor.cjs.js +1 -1
  68. package/dist/components/CodeEditor.es.js +1 -1
  69. package/dist/components/Combobox.cjs.js +2 -2
  70. package/dist/components/Combobox.es.js +2 -2
  71. package/dist/components/Command.cjs.js +1 -1
  72. package/dist/components/Command.cjs.js.map +1 -1
  73. package/dist/components/Command.es.js +1 -1
  74. package/dist/components/Command.es.js.map +1 -1
  75. package/dist/components/Comment.cjs.js +1 -1
  76. package/dist/components/Comment.es.js +1 -1
  77. package/dist/components/Composer.cjs.js +1 -1
  78. package/dist/components/Composer.es.js +1 -1
  79. package/dist/components/DataCodeSection.cjs.js +1 -1
  80. package/dist/components/DataCodeSection.es.js +1 -1
  81. package/dist/components/DataDetailsPanel.cjs.js +1 -1
  82. package/dist/components/DataDetailsPanel.es.js +1 -1
  83. package/dist/components/DataList.cjs.js +1 -1
  84. package/dist/components/DataList.es.js +1 -1
  85. package/dist/components/DataPanel.cjs.js +1 -1
  86. package/dist/components/DataPanel.es.js +1 -1
  87. package/dist/components/DateTimePicker.cjs.js +1 -1
  88. package/dist/components/DateTimePicker.es.js +1 -1
  89. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  90. package/dist/components/DateTimeRangePicker.es.js +1 -1
  91. package/dist/components/DropdownMenu.cjs.js +1 -1
  92. package/dist/components/DropdownMenu.es.js +1 -1
  93. package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -1
  94. package/dist/components/EnvironmentVariablesEditor.es.js +1 -1
  95. package/dist/components/FilterBar.cjs.js +3 -3
  96. package/dist/components/FilterBar.es.js +3 -3
  97. package/dist/components/FormFieldBlocks.cjs.js +1 -1
  98. package/dist/components/FormFieldBlocks.es.js +1 -1
  99. package/dist/components/Input.cjs.js +1 -1
  100. package/dist/components/Input.es.js +1 -1
  101. package/dist/components/InputGroup.cjs.js +1 -1
  102. package/dist/components/InputGroup.es.js +1 -1
  103. package/dist/components/InputNumber.cjs.js +1 -1
  104. package/dist/components/InputNumber.es.js +1 -1
  105. package/dist/components/JSONSchemaForm.cjs.js +1 -1
  106. package/dist/components/JSONSchemaForm.es.js +1 -1
  107. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  108. package/dist/components/MarkdownRenderer.es.js +1 -1
  109. package/dist/components/MetricsCard.cjs.js +1 -1
  110. package/dist/components/MetricsCard.es.js +1 -1
  111. package/dist/components/PropertyFilter.cjs.js +2 -2
  112. package/dist/components/PropertyFilter.es.js +2 -2
  113. package/dist/components/RuleBuilder.cjs.js +1 -1
  114. package/dist/components/RuleBuilder.es.js +1 -1
  115. package/dist/components/SavedViews.cjs.js +3 -3
  116. package/dist/components/SavedViews.cjs.js.map +1 -1
  117. package/dist/components/SavedViews.es.js +3 -3
  118. package/dist/components/SavedViews.es.js.map +1 -1
  119. package/dist/components/SearchInput.cjs.js +1 -1
  120. package/dist/components/SearchInput.es.js +1 -1
  121. package/dist/components/SideDialog.cjs.js +1 -1
  122. package/dist/components/SideDialog.es.js +1 -1
  123. package/dist/components/Sidebar.cjs.js +1 -1
  124. package/dist/components/Sidebar.es.js +1 -1
  125. package/dist/components/Tabs.cjs.js +2 -2
  126. package/dist/components/Tabs.es.js +2 -2
  127. package/dist/components/Textarea.cjs.js +1 -1
  128. package/dist/components/Textarea.cjs.js.map +1 -1
  129. package/dist/components/Textarea.es.js +1 -1
  130. package/dist/components/Textarea.es.js.map +1 -1
  131. package/dist/components/ThreadRail.cjs.js +2 -0
  132. package/dist/components/ThreadRail.cjs.js.map +1 -1
  133. package/dist/components/ThreadRail.es.js +2 -0
  134. package/dist/components/ThreadRail.es.js.map +1 -1
  135. package/dist/components/Tree.cjs.js +1 -1
  136. package/dist/components/Tree.es.js +1 -1
  137. package/dist/components/Workflow.cjs.js +1 -1
  138. package/dist/components/Workflow.es.js +1 -1
  139. package/dist/components/ai/activity.cjs.js +1 -1
  140. package/dist/components/ai/activity.es.js +1 -1
  141. package/dist/components/ai/ask-user.cjs.js +1 -1
  142. package/dist/components/ai/ask-user.es.js +1 -1
  143. package/dist/components/ai/plan.cjs.js +1 -1
  144. package/dist/components/ai/plan.es.js +1 -1
  145. package/dist/components/ai/tool-approval.cjs.js +1 -1
  146. package/dist/components/ai/tool-approval.es.js +1 -1
  147. package/dist/components/ai/tool-call.cjs.js +1 -1
  148. package/dist/components/ai/tool-call.es.js +1 -1
  149. package/dist/{date-time-range-picker-DdNgKD87.js → date-time-range-picker-CJyhcug7.js} +3 -3
  150. package/dist/{date-time-range-picker-DdNgKD87.js.map → date-time-range-picker-CJyhcug7.js.map} +1 -1
  151. package/dist/{date-time-range-picker-Bq-8IPtS.cjs → date-time-range-picker-Dhnuwa-U.cjs} +3 -3
  152. package/dist/{date-time-range-picker-Bq-8IPtS.cjs.map → date-time-range-picker-Dhnuwa-U.cjs.map} +1 -1
  153. package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
  154. package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
  155. package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
  156. package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
  157. package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
  158. package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
  159. package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
  160. package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
  161. package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
  162. package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
  163. package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
  164. package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
  165. package/dist/domains/chat/activity/model/activity-words.cjs.js +1 -1
  166. package/dist/domains/chat/activity/model/activity-words.es.js +1 -1
  167. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +1 -1
  168. package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
  169. package/dist/domains/chat/attachments/split-message-attachments.cjs.js +4 -1
  170. package/dist/domains/chat/attachments/split-message-attachments.cjs.js.map +1 -1
  171. package/dist/domains/chat/attachments/split-message-attachments.es.js +4 -1
  172. package/dist/domains/chat/attachments/split-message-attachments.es.js.map +1 -1
  173. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  174. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  175. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  176. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  177. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +1 -1
  178. package/dist/domains/chat/knowledge/pinned-knowledge.es.js +1 -1
  179. package/dist/domains/chat/messages/dataset-save-action.cjs.js +1 -1
  180. package/dist/domains/chat/messages/dataset-save-action.es.js +1 -1
  181. package/dist/domains/chat/messages/message-row.cjs.js +2 -2
  182. package/dist/domains/chat/messages/message-row.es.js +2 -2
  183. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  184. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  185. package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
  186. package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
  187. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  188. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  189. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  190. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  191. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  192. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  193. package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
  194. package/dist/domains/chat/messages/skill-message.es.js +2 -2
  195. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  196. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  197. package/dist/domains/chat/messages/tripwire-notice.cjs.js +5 -10
  198. package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
  199. package/dist/domains/chat/messages/tripwire-notice.es.js +5 -10
  200. package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
  201. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  202. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  203. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  204. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  205. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  206. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  207. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  208. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
  209. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
  210. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
  211. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
  212. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  213. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +2 -2
  214. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +2 -2
  215. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
  216. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
  217. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
  218. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
  219. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  220. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  221. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +1 -1
  222. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +1 -1
  223. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  224. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  225. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +2 -2
  226. package/dist/domains/chat/tools/badges/tool-badge.es.js +2 -2
  227. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -2
  228. package/dist/domains/chat/tools/badges/workflow-badge.es.js +2 -2
  229. package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +2 -2
  230. package/dist/domains/chat/tools/mcp-input-request-tool.es.js +2 -2
  231. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  232. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  233. package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
  234. package/dist/domains/chat/tools/tool-groups.es.js +1 -1
  235. package/dist/domains/dashboards/components/connected-widget.cjs.js +55 -0
  236. package/dist/domains/dashboards/components/connected-widget.cjs.js.map +1 -0
  237. package/dist/domains/dashboards/components/connected-widget.d.ts +1 -0
  238. package/dist/domains/dashboards/components/connected-widget.es.js +54 -0
  239. package/dist/domains/dashboards/components/connected-widget.es.js.map +1 -0
  240. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +13 -8
  241. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js.map +1 -1
  242. package/dist/domains/dashboards/components/dashboard-renderer.es.js +13 -8
  243. package/dist/domains/dashboards/components/dashboard-renderer.es.js.map +1 -1
  244. package/dist/domains/dashboards/components/stateless-widget.cjs.js +30 -0
  245. package/dist/domains/dashboards/components/stateless-widget.cjs.js.map +1 -0
  246. package/dist/domains/dashboards/components/stateless-widget.d.ts +1 -0
  247. package/dist/domains/dashboards/components/stateless-widget.es.js +29 -0
  248. package/dist/domains/dashboards/components/stateless-widget.es.js.map +1 -0
  249. package/dist/domains/dashboards/components/view-gate.cjs.js +18 -40
  250. package/dist/domains/dashboards/components/view-gate.cjs.js.map +1 -1
  251. package/dist/domains/dashboards/components/view-gate.es.js +18 -40
  252. package/dist/domains/dashboards/components/view-gate.es.js.map +1 -1
  253. package/dist/domains/dashboards/components/widget-chrome.cjs.js +1 -1
  254. package/dist/domains/dashboards/components/widget-chrome.es.js +1 -1
  255. package/dist/domains/dashboards/components/widget-controls.cjs.js +106 -0
  256. package/dist/domains/dashboards/components/widget-controls.cjs.js.map +1 -1
  257. package/dist/domains/dashboards/components/widget-controls.es.js +107 -3
  258. package/dist/domains/dashboards/components/widget-controls.es.js.map +1 -1
  259. package/dist/domains/dashboards/components/widget-error.cjs.js +1 -1
  260. package/dist/domains/dashboards/components/widget-error.es.js +1 -1
  261. package/dist/domains/dashboards/hooks/use-dashboard-environment.cjs.js +55 -0
  262. package/dist/domains/dashboards/hooks/use-dashboard-environment.cjs.js.map +1 -0
  263. package/dist/domains/dashboards/hooks/use-dashboard-environment.d.ts +1 -0
  264. package/dist/domains/dashboards/hooks/use-dashboard-environment.es.js +53 -0
  265. package/dist/domains/dashboards/hooks/use-dashboard-environment.es.js.map +1 -0
  266. package/dist/domains/dashboards/hooks/use-dashboard-requests.cjs.js +24 -0
  267. package/dist/domains/dashboards/hooks/use-dashboard-requests.cjs.js.map +1 -1
  268. package/dist/domains/dashboards/hooks/use-dashboard-requests.es.js +23 -1
  269. package/dist/domains/dashboards/hooks/use-dashboard-requests.es.js.map +1 -1
  270. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js +10 -6
  271. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js.map +1 -1
  272. package/dist/domains/dashboards/hooks/use-widget-views.es.js +10 -7
  273. package/dist/domains/dashboards/hooks/use-widget-views.es.js.map +1 -1
  274. package/dist/domains/dashboards/kinds/kpis/kpis-plan.cjs.js +11 -0
  275. package/dist/domains/dashboards/kinds/kpis/kpis-plan.cjs.js.map +1 -0
  276. package/dist/domains/dashboards/kinds/kpis/kpis-plan.d.ts +1 -0
  277. package/dist/domains/dashboards/kinds/kpis/kpis-plan.es.js +9 -0
  278. package/dist/domains/dashboards/kinds/kpis/kpis-plan.es.js.map +1 -0
  279. package/dist/domains/dashboards/kinds/kpis/kpis-widget.cjs.js +18 -19
  280. package/dist/domains/dashboards/kinds/kpis/kpis-widget.cjs.js.map +1 -1
  281. package/dist/domains/dashboards/kinds/kpis/kpis-widget.es.js +18 -19
  282. package/dist/domains/dashboards/kinds/kpis/kpis-widget.es.js.map +1 -1
  283. package/dist/domains/dashboards/kinds/kpis.cjs.js +3 -0
  284. package/dist/domains/dashboards/kinds/kpis.cjs.js.map +1 -1
  285. package/dist/domains/dashboards/kinds/kpis.es.js +3 -0
  286. package/dist/domains/dashboards/kinds/kpis.es.js.map +1 -1
  287. package/dist/domains/dashboards/kinds/scores/scores-plan.cjs.js +27 -0
  288. package/dist/domains/dashboards/kinds/scores/scores-plan.cjs.js.map +1 -0
  289. package/dist/domains/dashboards/kinds/scores/scores-plan.d.ts +1 -0
  290. package/dist/domains/dashboards/kinds/scores/scores-plan.es.js +24 -0
  291. package/dist/domains/dashboards/kinds/scores/scores-plan.es.js.map +1 -0
  292. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js +25 -32
  293. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js.map +1 -1
  294. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js +26 -33
  295. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js.map +1 -1
  296. package/dist/domains/dashboards/kinds/scores.cjs.js +4 -0
  297. package/dist/domains/dashboards/kinds/scores.cjs.js.map +1 -1
  298. package/dist/domains/dashboards/kinds/scores.es.js +4 -0
  299. package/dist/domains/dashboards/kinds/scores.es.js.map +1 -1
  300. package/dist/domains/dashboards/kinds/table/table-cells.cjs.js +2 -6
  301. package/dist/domains/dashboards/kinds/table/table-cells.cjs.js.map +1 -1
  302. package/dist/domains/dashboards/kinds/table/table-cells.es.js +2 -6
  303. package/dist/domains/dashboards/kinds/table/table-cells.es.js.map +1 -1
  304. package/dist/domains/dashboards/kinds/table/table-columns.cjs.js +5 -3
  305. package/dist/domains/dashboards/kinds/table/table-columns.cjs.js.map +1 -1
  306. package/dist/domains/dashboards/kinds/table/table-columns.es.js +5 -3
  307. package/dist/domains/dashboards/kinds/table/table-columns.es.js.map +1 -1
  308. package/dist/domains/dashboards/kinds/table/table-plan.cjs.js +47 -0
  309. package/dist/domains/dashboards/kinds/table/table-plan.cjs.js.map +1 -0
  310. package/dist/domains/dashboards/kinds/table/table-plan.d.ts +1 -0
  311. package/dist/domains/dashboards/kinds/table/table-plan.es.js +44 -0
  312. package/dist/domains/dashboards/kinds/table/table-plan.es.js.map +1 -0
  313. package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js +20 -26
  314. package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js.map +1 -1
  315. package/dist/domains/dashboards/kinds/table/table-tabs.es.js +22 -28
  316. package/dist/domains/dashboards/kinds/table/table-tabs.es.js.map +1 -1
  317. package/dist/domains/dashboards/kinds/table/table-view.cjs.js +13 -13
  318. package/dist/domains/dashboards/kinds/table/table-view.cjs.js.map +1 -1
  319. package/dist/domains/dashboards/kinds/table/table-view.es.js +14 -14
  320. package/dist/domains/dashboards/kinds/table/table-view.es.js.map +1 -1
  321. package/dist/domains/dashboards/kinds/table/table-widget.cjs.js +13 -17
  322. package/dist/domains/dashboards/kinds/table/table-widget.cjs.js.map +1 -1
  323. package/dist/domains/dashboards/kinds/table/table-widget.es.js +13 -17
  324. package/dist/domains/dashboards/kinds/table/table-widget.es.js.map +1 -1
  325. package/dist/domains/dashboards/kinds/table.cjs.js +4 -0
  326. package/dist/domains/dashboards/kinds/table.cjs.js.map +1 -1
  327. package/dist/domains/dashboards/kinds/table.es.js +4 -0
  328. package/dist/domains/dashboards/kinds/table.es.js.map +1 -1
  329. package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.cjs.js +18 -0
  330. package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.cjs.js.map +1 -0
  331. package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.d.ts +1 -0
  332. package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.es.js +16 -0
  333. package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.es.js.map +1 -0
  334. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js +22 -22
  335. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js.map +1 -1
  336. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js +25 -25
  337. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js.map +1 -1
  338. package/dist/domains/dashboards/kinds/timeseries.cjs.js +3 -0
  339. package/dist/domains/dashboards/kinds/timeseries.cjs.js.map +1 -1
  340. package/dist/domains/dashboards/kinds/timeseries.es.js +3 -0
  341. package/dist/domains/dashboards/kinds/timeseries.es.js.map +1 -1
  342. package/dist/domains/dashboards/lib/alert-actions.cjs.js +123 -0
  343. package/dist/domains/dashboards/lib/alert-actions.cjs.js.map +1 -0
  344. package/dist/domains/dashboards/lib/alert-actions.d.ts +1 -0
  345. package/dist/domains/dashboards/lib/alert-actions.es.js +118 -0
  346. package/dist/domains/dashboards/lib/alert-actions.es.js.map +1 -0
  347. package/dist/domains/dashboards/lib/gate.cjs.js +62 -0
  348. package/dist/domains/dashboards/lib/gate.cjs.js.map +1 -0
  349. package/dist/domains/dashboards/lib/gate.d.ts +1 -0
  350. package/dist/domains/dashboards/lib/gate.es.js +60 -0
  351. package/dist/domains/dashboards/lib/gate.es.js.map +1 -0
  352. package/dist/domains/dashboards/lib/plan-widget.cjs.js +41 -0
  353. package/dist/domains/dashboards/lib/plan-widget.cjs.js.map +1 -0
  354. package/dist/domains/dashboards/lib/plan-widget.d.ts +1 -0
  355. package/dist/domains/dashboards/lib/plan-widget.es.js +38 -0
  356. package/dist/domains/dashboards/lib/plan-widget.es.js.map +1 -0
  357. package/dist/domains/dashboards/lib/requests.cjs.js +47 -0
  358. package/dist/domains/dashboards/lib/requests.cjs.js.map +1 -1
  359. package/dist/domains/dashboards/lib/requests.es.js +46 -1
  360. package/dist/domains/dashboards/lib/requests.es.js.map +1 -1
  361. package/dist/domains/dashboards/lib/scores.cjs.js +32 -0
  362. package/dist/domains/dashboards/lib/scores.cjs.js.map +1 -1
  363. package/dist/domains/dashboards/lib/scores.es.js +31 -1
  364. package/dist/domains/dashboards/lib/scores.es.js.map +1 -1
  365. package/dist/domains/dashboards/lib/timeseries.cjs.js +17 -0
  366. package/dist/domains/dashboards/lib/timeseries.cjs.js.map +1 -1
  367. package/dist/domains/dashboards/lib/timeseries.es.js +17 -1
  368. package/dist/domains/dashboards/lib/timeseries.es.js.map +1 -1
  369. package/dist/domains/dashboards/lib/values.cjs.js.map +1 -1
  370. package/dist/domains/dashboards/lib/values.es.js.map +1 -1
  371. package/dist/domains/dashboards/widget-kind.cjs.js.map +1 -1
  372. package/dist/domains/dashboards/widget-kind.es.js.map +1 -1
  373. package/dist/domains/dashboards.cjs.js +19 -2
  374. package/dist/domains/dashboards.es.js +9 -5
  375. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +1 -1
  376. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +1 -1
  377. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +2 -2
  378. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +2 -2
  379. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +2 -2
  380. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +2 -2
  381. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +186 -212
  382. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -1
  383. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +188 -215
  384. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -1
  385. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +620 -268
  386. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -1
  387. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +622 -270
  388. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -1
  389. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +544 -454
  390. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -1
  391. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +548 -458
  392. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -1
  393. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +21 -12
  394. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -1
  395. package/dist/domains/knowledge/components/KnowledgePageTree.es.js +22 -13
  396. package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -1
  397. package/dist/domains/knowledge/components/KnowledgeSourceIcon.cjs.js +16 -0
  398. package/dist/domains/knowledge/components/KnowledgeSourceIcon.cjs.js.map +1 -0
  399. package/dist/domains/knowledge/components/KnowledgeSourceIcon.d.ts +1 -0
  400. package/dist/domains/knowledge/components/KnowledgeSourceIcon.es.js +15 -0
  401. package/dist/domains/knowledge/components/KnowledgeSourceIcon.es.js.map +1 -0
  402. package/dist/domains/knowledge/components/KnowledgeTooltip.cjs.js +10 -0
  403. package/dist/domains/knowledge/components/KnowledgeTooltip.cjs.js.map +1 -0
  404. package/dist/domains/knowledge/components/KnowledgeTooltip.d.ts +1 -0
  405. package/dist/domains/knowledge/components/KnowledgeTooltip.es.js +9 -0
  406. package/dist/domains/knowledge/components/KnowledgeTooltip.es.js.map +1 -0
  407. package/dist/domains/knowledge/lib/fitViewport.cjs.js +22 -8
  408. package/dist/domains/knowledge/lib/fitViewport.cjs.js.map +1 -1
  409. package/dist/domains/knowledge/lib/fitViewport.es.js +22 -9
  410. package/dist/domains/knowledge/lib/fitViewport.es.js.map +1 -1
  411. package/dist/domains/knowledge/lib/pageAddress.cjs.js +51 -0
  412. package/dist/domains/knowledge/lib/pageAddress.cjs.js.map +1 -1
  413. package/dist/domains/knowledge/lib/pageAddress.es.js +50 -1
  414. package/dist/domains/knowledge/lib/pageAddress.es.js.map +1 -1
  415. package/dist/domains/knowledge/lib/pageRefs.cjs.js +43 -2
  416. package/dist/domains/knowledge/lib/pageRefs.cjs.js.map +1 -1
  417. package/dist/domains/knowledge/lib/pageRefs.es.js +43 -3
  418. package/dist/domains/knowledge/lib/pageRefs.es.js.map +1 -1
  419. package/dist/domains/knowledge/lib/pagesByRefContext.cjs.js +10 -0
  420. package/dist/domains/knowledge/lib/pagesByRefContext.cjs.js.map +1 -0
  421. package/dist/domains/knowledge/lib/pagesByRefContext.d.ts +1 -0
  422. package/dist/domains/knowledge/lib/pagesByRefContext.es.js +10 -0
  423. package/dist/domains/knowledge/lib/pagesByRefContext.es.js.map +1 -0
  424. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  425. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  426. package/dist/domains/logs/components/logs-saved-views.cjs.js +1 -1
  427. package/dist/domains/logs/components/logs-saved-views.es.js +1 -1
  428. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  429. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  430. package/dist/domains/mcps/components/mcp-app-tool-result.cjs.js +28 -3
  431. package/dist/domains/mcps/components/mcp-app-tool-result.cjs.js.map +1 -1
  432. package/dist/domains/mcps/components/mcp-app-tool-result.es.js +27 -2
  433. package/dist/domains/mcps/components/mcp-app-tool-result.es.js.map +1 -1
  434. package/dist/domains/mcps/components/mcp-app-viewer.cjs.js +163 -2
  435. package/dist/domains/mcps/components/mcp-app-viewer.cjs.js.map +1 -0
  436. package/dist/domains/mcps/components/mcp-app-viewer.es.js +163 -1
  437. package/dist/domains/mcps/components/mcp-app-viewer.es.js.map +1 -0
  438. package/dist/domains/mcps/context/mcp-app-host-context-value.cjs.js +11 -0
  439. package/dist/domains/mcps/context/mcp-app-host-context-value.cjs.js.map +1 -0
  440. package/dist/domains/mcps/context/mcp-app-host-context-value.d.ts +1 -0
  441. package/dist/domains/mcps/context/mcp-app-host-context-value.es.js +9 -0
  442. package/dist/domains/mcps/context/mcp-app-host-context-value.es.js.map +1 -0
  443. package/dist/domains/mcps/context/mcp-app-host-context.cjs.js +14 -0
  444. package/dist/domains/mcps/context/mcp-app-host-context.cjs.js.map +1 -0
  445. package/dist/domains/mcps/context/mcp-app-host-context.d.ts +1 -0
  446. package/dist/domains/mcps/context/mcp-app-host-context.es.js +13 -0
  447. package/dist/domains/mcps/context/mcp-app-host-context.es.js.map +1 -0
  448. package/dist/domains/mcps/hooks/use-mcp-app-tool-call.cjs.js +2 -1
  449. package/dist/domains/mcps/hooks/use-mcp-app-tool-call.cjs.js.map +1 -1
  450. package/dist/domains/mcps/hooks/use-mcp-app-tool-call.es.js +2 -1
  451. package/dist/domains/mcps/hooks/use-mcp-app-tool-call.es.js.map +1 -1
  452. package/dist/domains/mcps.cjs.js +5 -0
  453. package/dist/domains/mcps.d.ts +1 -0
  454. package/dist/domains/mcps.es.js +3 -0
  455. package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
  456. package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
  457. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.cjs.js +1 -1
  458. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.es.js +1 -1
  459. package/dist/domains/metrics/components/breakdown-card.cjs.js +1 -1
  460. package/dist/domains/metrics/components/breakdown-card.es.js +1 -1
  461. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  462. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  463. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  464. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  465. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  466. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  467. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  468. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  469. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js +1 -1
  470. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js +1 -1
  471. package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
  472. package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
  473. package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
  474. package/dist/domains/metrics/components/latency-card.es.js +1 -1
  475. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +1 -1
  476. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +1 -1
  477. package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
  478. package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
  479. package/dist/domains/metrics/components/trace-aggregate-card.cjs.js +1 -1
  480. package/dist/domains/metrics/components/trace-aggregate-card.es.js +1 -1
  481. package/dist/domains/metrics.cjs.js +3 -3
  482. package/dist/domains/metrics.es.js +3 -3
  483. package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +1 -1
  484. package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -1
  485. package/dist/domains/observability/saved-views.cjs.js +1 -1
  486. package/dist/domains/observability/saved-views.es.js +1 -1
  487. package/dist/domains/observability.cjs.js +1 -1
  488. package/dist/domains/observability.es.js +1 -1
  489. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  490. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  491. package/dist/domains/scores/components/span-scoring.cjs.js +1 -1
  492. package/dist/domains/scores/components/span-scoring.es.js +1 -1
  493. package/dist/domains/scores/components/trace-scores-list.cjs.js +1 -1
  494. package/dist/domains/scores/components/trace-scores-list.es.js +1 -1
  495. package/dist/domains/skills/skill-simple-form.cjs.js +3 -3
  496. package/dist/domains/skills/skill-simple-form.es.js +3 -3
  497. package/dist/domains/spans/components/spans-explorer-body.cjs.js +1 -1
  498. package/dist/domains/spans/components/spans-explorer-body.es.js +1 -1
  499. package/dist/domains/spans/components/spans-filter-bar.cjs.js +2 -2
  500. package/dist/domains/spans/components/spans-filter-bar.es.js +2 -2
  501. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
  502. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
  503. package/dist/domains/threads/components/threads-explorer-body.cjs.js +1 -1
  504. package/dist/domains/threads/components/threads-explorer-body.es.js +1 -1
  505. package/dist/domains/threads/components/threads-filter-bar.cjs.js +2 -2
  506. package/dist/domains/threads/components/threads-filter-bar.es.js +2 -2
  507. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
  508. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +1 -1
  509. package/dist/domains/traces/components/feedback-options.cjs.js +0 -0
  510. package/dist/domains/traces/components/feedback-options.d.ts +1 -0
  511. package/dist/domains/traces/components/feedback-options.es.js +0 -0
  512. package/dist/domains/traces/components/feedback-thread.cjs.js +10 -4
  513. package/dist/domains/traces/components/feedback-thread.cjs.js.map +1 -1
  514. package/dist/domains/traces/components/feedback-thread.es.js +10 -4
  515. package/dist/domains/traces/components/feedback-thread.es.js.map +1 -1
  516. package/dist/domains/traces/components/span-data-panel-view.cjs.js +2 -2
  517. package/dist/domains/traces/components/span-data-panel-view.es.js +2 -2
  518. package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
  519. package/dist/domains/traces/components/span-details-view.es.js +1 -1
  520. package/dist/domains/traces/components/span-feedback-tab.cjs.js +8 -5
  521. package/dist/domains/traces/components/span-feedback-tab.cjs.js.map +1 -1
  522. package/dist/domains/traces/components/span-feedback-tab.es.js +8 -5
  523. package/dist/domains/traces/components/span-feedback-tab.es.js.map +1 -1
  524. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  525. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  526. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  527. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  528. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  529. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  530. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
  531. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
  532. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  533. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  534. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  535. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  536. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  537. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  538. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  539. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  540. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
  541. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
  542. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
  543. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
  544. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  545. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  546. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  547. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  548. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +2 -2
  549. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +2 -2
  550. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +1 -1
  551. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +1 -1
  552. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +5 -3
  553. package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
  554. package/dist/domains/traces/components/thread-view-by-trace.es.js +5 -3
  555. package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
  556. package/dist/domains/traces/components/trace-columns-menu.cjs.js +2 -2
  557. package/dist/domains/traces/components/trace-columns-menu.es.js +2 -2
  558. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
  559. package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
  560. package/dist/domains/traces/components/trace-details-view.cjs.js +1 -1
  561. package/dist/domains/traces/components/trace-details-view.es.js +1 -1
  562. package/dist/domains/traces/components/trace-feedback-tab.cjs.js +9 -4
  563. package/dist/domains/traces/components/trace-feedback-tab.cjs.js.map +1 -1
  564. package/dist/domains/traces/components/trace-feedback-tab.es.js +9 -4
  565. package/dist/domains/traces/components/trace-feedback-tab.es.js.map +1 -1
  566. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  567. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  568. package/dist/domains/traces/components/trace-span-panel.cjs.js +2 -1
  569. package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
  570. package/dist/domains/traces/components/trace-span-panel.es.js +2 -1
  571. package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
  572. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  573. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  574. package/dist/domains/traces/components/trace-thread-panel.cjs.js +3 -2
  575. package/dist/domains/traces/components/trace-thread-panel.cjs.js.map +1 -1
  576. package/dist/domains/traces/components/trace-thread-panel.es.js +3 -2
  577. package/dist/domains/traces/components/trace-thread-panel.es.js.map +1 -1
  578. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js.map +1 -1
  579. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js.map +1 -1
  580. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
  581. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
  582. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js +8 -3
  583. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js.map +1 -1
  584. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js +8 -3
  585. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js.map +1 -1
  586. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +14 -1
  587. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js.map +1 -1
  588. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +14 -1
  589. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js.map +1 -1
  590. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +1 -1
  591. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +1 -1
  592. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
  593. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
  594. package/dist/domains/traces/components/traces-explorer.cjs.js.map +1 -1
  595. package/dist/domains/traces/components/traces-explorer.es.js.map +1 -1
  596. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  597. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  598. package/dist/domains/traces/components/traces-list-view.cjs.js +1 -1
  599. package/dist/domains/traces/components/traces-list-view.es.js +1 -1
  600. package/dist/domains/traces/components/traces-spans-switch.cjs.js +1 -1
  601. package/dist/domains/traces/components/traces-spans-switch.es.js +1 -1
  602. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  603. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  604. package/dist/domains/workflows/components/workflow-layout.cjs.js +1 -1
  605. package/dist/domains/workflows/components/workflow-layout.es.js +1 -1
  606. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
  607. package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
  608. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  609. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  610. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +1 -1
  611. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
  612. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  613. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  614. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +1 -1
  615. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
  616. package/dist/domains/workflows/workflow/utils.cjs.js +1 -1
  617. package/dist/domains/workflows/workflow/utils.es.js +1 -1
  618. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
  619. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  620. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  621. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  622. package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
  623. package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
  624. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
  625. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
  626. package/dist/domains/workflows/workflow/workflow-graph-layout.cjs.js +1 -1
  627. package/dist/domains/workflows/workflow/workflow-graph-layout.es.js +1 -1
  628. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +1 -1
  629. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
  630. package/dist/domains/workflows/workflow/workflow-graph.cjs.js +1 -1
  631. package/dist/domains/workflows/workflow/workflow-graph.es.js +1 -1
  632. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  633. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
  634. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +1 -1
  635. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +1 -1
  636. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +3 -3
  637. package/dist/domains/workflows/workflow/workflow-run-data.es.js +3 -3
  638. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  639. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  640. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +1 -1
  641. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +1 -1
  642. package/dist/domains/workflows/workflow/workflow-step-node-utils.cjs.js +1 -1
  643. package/dist/domains/workflows/workflow/workflow-step-node-utils.es.js +1 -1
  644. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +1 -1
  645. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
  646. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
  647. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
  648. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
  649. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
  650. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
  651. package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
  652. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
  653. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
  654. package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
  655. package/dist/domains/workspace/components/workspace-search.es.js +1 -1
  656. package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
  657. package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
  658. package/dist/{dropdown-menu-Dx-jCOIv.cjs → dropdown-menu-D3D8USIY.cjs} +9 -1
  659. package/dist/dropdown-menu-D3D8USIY.cjs.map +1 -0
  660. package/dist/{dropdown-menu-DKoWI8kD.js → dropdown-menu-jsf9D-J_.js} +9 -1
  661. package/dist/dropdown-menu-jsf9D-J_.js.map +1 -0
  662. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  663. package/dist/ee/signals/sankey-signals.es.js +1 -1
  664. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +1 -1
  665. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
  666. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
  667. package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
  668. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  669. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  670. package/dist/{filter-bar-chip-NBtfDca9.js → filter-bar-chip-Cz5GYBWP.js} +2 -2
  671. package/dist/{filter-bar-chip-NBtfDca9.js.map → filter-bar-chip-Cz5GYBWP.js.map} +1 -1
  672. package/dist/{filter-bar-chip-DFsbUZ-V.cjs → filter-bar-chip-q2Zr-cnY.cjs} +2 -2
  673. package/dist/{filter-bar-chip-DFsbUZ-V.cjs.map → filter-bar-chip-q2Zr-cnY.cjs.map} +1 -1
  674. package/dist/{filter-bar-time-range-DlVNjw43.cjs → filter-bar-time-range-D4C3kU0J.cjs} +3 -3
  675. package/dist/{filter-bar-time-range-DlVNjw43.cjs.map → filter-bar-time-range-D4C3kU0J.cjs.map} +1 -1
  676. package/dist/{filter-bar-time-range-D9SnzR2J.js → filter-bar-time-range-ao2YiYEJ.js} +3 -3
  677. package/dist/{filter-bar-time-range-D9SnzR2J.js.map → filter-bar-time-range-ao2YiYEJ.js.map} +1 -1
  678. package/dist/icons/ConfluenceIcon.cjs.js +18 -0
  679. package/dist/icons/ConfluenceIcon.cjs.js.map +1 -0
  680. package/dist/icons/ConfluenceIcon.d.ts +1 -0
  681. package/dist/icons/ConfluenceIcon.es.js +15 -0
  682. package/dist/icons/ConfluenceIcon.es.js.map +1 -0
  683. package/dist/icons/NotionIcon.cjs.js +18 -0
  684. package/dist/icons/NotionIcon.cjs.js.map +1 -0
  685. package/dist/icons/NotionIcon.d.ts +1 -0
  686. package/dist/icons/NotionIcon.es.js +15 -0
  687. package/dist/icons/NotionIcon.es.js.map +1 -0
  688. package/dist/icons/ZendeskIcon.cjs.js +18 -0
  689. package/dist/icons/ZendeskIcon.cjs.js.map +1 -0
  690. package/dist/icons/ZendeskIcon.d.ts +1 -0
  691. package/dist/icons/ZendeskIcon.es.js +15 -0
  692. package/dist/icons/ZendeskIcon.es.js.map +1 -0
  693. package/dist/{input-Cyit5ZSc.js → input-BNykbvOz.js} +2 -2
  694. package/dist/input-BNykbvOz.js.map +1 -0
  695. package/dist/{input-BpnUsQSt.cjs → input-D_V0m95F.cjs} +2 -2
  696. package/dist/input-D_V0m95F.cjs.map +1 -0
  697. package/dist/{input-group-NV4ZzKOk.js → input-group-CCSyY4J5.js} +3 -3
  698. package/dist/{input-group-NV4ZzKOk.js.map → input-group-CCSyY4J5.js.map} +1 -1
  699. package/dist/{input-group-DBCilXjT.cjs → input-group-Da8HBo30.cjs} +3 -3
  700. package/dist/{input-group-DBCilXjT.cjs.map → input-group-Da8HBo30.cjs.map} +1 -1
  701. package/dist/layout/tabbed-container.cjs.js +1 -1
  702. package/dist/layout/tabbed-container.es.js +1 -1
  703. package/dist/lib/form/components/number-field.cjs.js +1 -1
  704. package/dist/lib/form/components/number-field.es.js +1 -1
  705. package/dist/lib/form/components/record-field.cjs.js +1 -1
  706. package/dist/lib/form/components/record-field.es.js +1 -1
  707. package/dist/{observability-saved-views-DgABvgat.cjs → observability-saved-views-CzRPN_9m.cjs} +4 -4
  708. package/dist/{observability-saved-views-DgABvgat.cjs.map → observability-saved-views-CzRPN_9m.cjs.map} +1 -1
  709. package/dist/{observability-saved-views-Ch53fh5_.js → observability-saved-views-hu_hkXVY.js} +4 -4
  710. package/dist/{observability-saved-views-Ch53fh5_.js.map → observability-saved-views-hu_hkXVY.js.map} +1 -1
  711. package/dist/primitives/menu-item.cjs.js +1 -1
  712. package/dist/primitives/menu-item.cjs.js.map +1 -1
  713. package/dist/primitives/menu-item.es.js +1 -1
  714. package/dist/primitives/menu-item.es.js.map +1 -1
  715. package/dist/{property-filter-applied-DuyL4S_K.cjs → property-filter-applied-ML84st6J.cjs} +3 -3
  716. package/dist/{property-filter-applied-DuyL4S_K.cjs.map → property-filter-applied-ML84st6J.cjs.map} +1 -1
  717. package/dist/{property-filter-applied-DoxQHG09.js → property-filter-applied-PaJ7sLsM.js} +3 -3
  718. package/dist/{property-filter-applied-DoxQHG09.js.map → property-filter-applied-PaJ7sLsM.js.map} +1 -1
  719. package/dist/{span-payload-primitives-D2NWznGy.cjs → span-payload-primitives-CL3hlirm.cjs} +3 -3
  720. package/dist/{span-payload-primitives-D2NWznGy.cjs.map → span-payload-primitives-CL3hlirm.cjs.map} +1 -1
  721. package/dist/{span-payload-primitives-BKkRpVVO.js → span-payload-primitives-KxqoXspn.js} +3 -3
  722. package/dist/{span-payload-primitives-BKkRpVVO.js.map → span-payload-primitives-KxqoXspn.js.map} +1 -1
  723. package/dist/src/domains/dashboards/components/connected-widget.d.ts +9 -0
  724. package/dist/src/domains/dashboards/components/dashboard-renderer.d.ts +9 -2
  725. package/dist/src/domains/dashboards/components/stateless-widget.d.ts +40 -0
  726. package/dist/src/domains/dashboards/components/view-gate.d.ts +2 -10
  727. package/dist/src/domains/dashboards/components/widget-controls.d.ts +25 -1
  728. package/dist/src/domains/dashboards/hooks/use-dashboard-environment.d.ts +8 -0
  729. package/dist/src/domains/dashboards/hooks/use-dashboard-requests.d.ts +11 -1
  730. package/dist/src/domains/dashboards/hooks/use-widget-views.d.ts +8 -2
  731. package/dist/src/domains/dashboards/index.d.ts +14 -6
  732. package/dist/src/domains/dashboards/kinds/kpis/kpis-plan.d.ts +355 -0
  733. package/dist/src/domains/dashboards/kinds/kpis/kpis-widget.d.ts +1 -1
  734. package/dist/src/domains/dashboards/kinds/scores/scores-plan.d.ts +358 -0
  735. package/dist/src/domains/dashboards/kinds/scores/scores-widget.d.ts +1 -1
  736. package/dist/src/domains/dashboards/kinds/table/table-cells.d.ts +6 -2
  737. package/dist/src/domains/dashboards/kinds/table/table-columns.d.ts +2 -1
  738. package/dist/src/domains/dashboards/kinds/table/table-plan.d.ts +18 -0
  739. package/dist/src/domains/dashboards/kinds/table/table-tabs.d.ts +1 -1
  740. package/dist/src/domains/dashboards/kinds/table/table-view.d.ts +1 -0
  741. package/dist/src/domains/dashboards/kinds/timeseries/timeseries-plan.d.ts +355 -0
  742. package/dist/src/domains/dashboards/lib/alert-actions.d.ts +36 -0
  743. package/dist/src/domains/dashboards/lib/gate.d.ts +65 -0
  744. package/dist/src/domains/dashboards/lib/plan-widget.d.ts +390 -0
  745. package/dist/src/domains/dashboards/lib/requests.d.ts +22 -0
  746. package/dist/src/domains/dashboards/lib/scores.d.ts +11 -1
  747. package/dist/src/domains/dashboards/lib/timeseries.d.ts +6 -1
  748. package/dist/src/domains/dashboards/lib/values.d.ts +5 -0
  749. package/dist/src/domains/dashboards/widget-kind.d.ts +105 -2
  750. package/dist/src/domains/knowledge/components/KnowledgePageDetail.d.ts +7 -1
  751. package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +4 -1
  752. package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +3 -0
  753. package/dist/src/domains/knowledge/components/KnowledgeSourceIcon.d.ts +5 -0
  754. package/dist/src/domains/knowledge/components/KnowledgeTooltip.d.ts +5 -0
  755. package/dist/src/domains/knowledge/lib/fitViewport.d.ts +9 -2
  756. package/dist/src/domains/knowledge/lib/pageAddress.d.ts +10 -0
  757. package/dist/src/domains/knowledge/lib/pageRefs.d.ts +12 -1
  758. package/dist/src/domains/knowledge/lib/pagesByRefContext.d.ts +6 -0
  759. package/dist/src/domains/mcps/components/mcp-app-tool-result.d.ts +3 -1
  760. package/dist/src/domains/mcps/components/mcp-app-viewer.d.ts +6 -1
  761. package/dist/src/domains/mcps/context/mcp-app-host-context-value.d.ts +23 -0
  762. package/dist/src/domains/mcps/context/mcp-app-host-context.d.ts +7 -0
  763. package/dist/src/domains/mcps/index.d.ts +3 -0
  764. package/dist/src/domains/traces/components/feedback-options.d.ts +8 -0
  765. package/dist/src/domains/traces/components/feedback-thread.d.ts +2 -1
  766. package/dist/src/domains/traces/components/span-feedback-tab.d.ts +4 -2
  767. package/dist/src/domains/traces/components/thread-view-by-trace.d.ts +4 -1
  768. package/dist/src/domains/traces/components/trace-feedback-tab.d.ts +4 -2
  769. package/dist/src/domains/traces/components/trace-span-panel.d.ts +3 -1
  770. package/dist/src/domains/traces/components/trace-thread-panel.d.ts +3 -1
  771. package/dist/src/domains/traces/components/traces-explorer/index.d.ts +1 -0
  772. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-context.d.ts +2 -0
  773. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-root.d.ts +4 -1
  774. package/dist/src/ds/components/Breadcrumb/Breadcrumb.d.ts +2 -0
  775. package/dist/src/ds/components/DropdownMenu/dropdown-menu.d.ts +3 -0
  776. package/dist/src/ds/components/Tree/tree-label.d.ts +1 -1
  777. package/dist/src/ds/icons/ConfluenceIcon.d.ts +2 -0
  778. package/dist/src/ds/icons/NotionIcon.d.ts +2 -0
  779. package/dist/src/ds/icons/ZendeskIcon.d.ts +2 -0
  780. package/dist/src/ds/icons/index.d.ts +3 -0
  781. package/dist/src/utils/mcp-app-context.d.ts +6 -0
  782. package/dist/style.css +85 -35
  783. package/dist/{tabbed-container-Bhfi-DWr.cjs → tabbed-container-BMLD6mvc.cjs} +4 -4
  784. package/dist/{tabbed-container-Bhfi-DWr.cjs.map → tabbed-container-BMLD6mvc.cjs.map} +1 -1
  785. package/dist/{tabbed-container-DOkHshha.js → tabbed-container-CaS8cZCS.js} +4 -4
  786. package/dist/{tabbed-container-DOkHshha.js.map → tabbed-container-CaS8cZCS.js.map} +1 -1
  787. package/dist/{tabs-content-DwU_eA-a.js → tabs-content-BGkPZ5EQ.js} +2 -2
  788. package/dist/{tabs-content-DwU_eA-a.js.map → tabs-content-BGkPZ5EQ.js.map} +1 -1
  789. package/dist/{tabs-content-BACwMrMG.cjs → tabs-content-D_ic2ZqI.cjs} +2 -2
  790. package/dist/{tabs-content-BACwMrMG.cjs.map → tabs-content-D_ic2ZqI.cjs.map} +1 -1
  791. package/dist/{tabs-tab-BHs639jL.js → tabs-tab-CJVS0WED.js} +2 -2
  792. package/dist/{tabs-tab-BHs639jL.js.map → tabs-tab-CJVS0WED.js.map} +1 -1
  793. package/dist/{tabs-tab-CANh2eAD.cjs → tabs-tab-Dj2huH5T.cjs} +2 -2
  794. package/dist/{tabs-tab-CANh2eAD.cjs.map → tabs-tab-Dj2huH5T.cjs.map} +1 -1
  795. package/dist/{tool-approval-CguPaikn.cjs → tool-approval-C4WNL8VD.cjs} +3 -3
  796. package/dist/{tool-approval-CguPaikn.cjs.map → tool-approval-C4WNL8VD.cjs.map} +1 -1
  797. package/dist/{tool-approval-Cjz0yAzw.js → tool-approval-ZfL3-Vvi.js} +3 -3
  798. package/dist/{tool-approval-Cjz0yAzw.js.map → tool-approval-ZfL3-Vvi.js.map} +1 -1
  799. package/dist/{tool-call-ChJKYCfu.js → tool-call-BLzYTI-x.js} +2 -2
  800. package/dist/{tool-call-ChJKYCfu.js.map → tool-call-BLzYTI-x.js.map} +1 -1
  801. package/dist/{tool-call-BqDI9mrY.cjs → tool-call-C4TBpJ6Y.cjs} +2 -2
  802. package/dist/{tool-call-BqDI9mrY.cjs.map → tool-call-C4TBpJ6Y.cjs.map} +1 -1
  803. package/dist/{tool-card-GSiCfxMz.js → tool-card-CM0aHG3p.js} +4 -3
  804. package/dist/{tool-card-GSiCfxMz.js.map → tool-card-CM0aHG3p.js.map} +1 -1
  805. package/dist/{tool-card-Dg4VOYV6.cjs → tool-card-xDlCD0m6.cjs} +4 -3
  806. package/dist/{tool-card-Dg4VOYV6.cjs.map → tool-card-xDlCD0m6.cjs.map} +1 -1
  807. package/dist/{mcp-app-viewer-BV7FI498.js → types-BwdKiX24.js} +2 -144
  808. package/dist/types-BwdKiX24.js.map +1 -0
  809. package/dist/{mcp-app-viewer-M3-pqAlo.cjs → types-KjLUPShK.cjs} +8 -144
  810. package/dist/types-KjLUPShK.cjs.map +1 -0
  811. package/dist/{use-workflow-graph-runtime-BfCL6nd4.cjs → use-workflow-graph-runtime-DEJA9rk4.cjs} +2 -2
  812. package/dist/{use-workflow-graph-runtime-BfCL6nd4.cjs.map → use-workflow-graph-runtime-DEJA9rk4.cjs.map} +1 -1
  813. package/dist/{use-workflow-graph-runtime-B3VUuhUE.js → use-workflow-graph-runtime-DHOsA1DM.js} +2 -2
  814. package/dist/{use-workflow-graph-runtime-B3VUuhUE.js.map → use-workflow-graph-runtime-DHOsA1DM.js.map} +1 -1
  815. package/dist/utils/mcp-app-context.cjs.js +17 -0
  816. package/dist/utils/mcp-app-context.cjs.js.map +1 -0
  817. package/dist/utils/mcp-app-context.d.ts +1 -0
  818. package/dist/utils/mcp-app-context.es.js +15 -0
  819. package/dist/utils/mcp-app-context.es.js.map +1 -0
  820. package/package.json +8 -8
  821. package/dist/Composer-bVE8qK52.js.map +0 -1
  822. package/dist/Composer-u1K6edoZ.cjs.map +0 -1
  823. package/dist/FilterBar-Kmn6gMgO.js.map +0 -1
  824. package/dist/FilterBar-jBz6yaNu.cjs.map +0 -1
  825. package/dist/MetricsCard-DojbLiEx.cjs.map +0 -1
  826. package/dist/MetricsCard-kAqSCPPe.js.map +0 -1
  827. package/dist/Tree-Caz4FTCU.cjs.map +0 -1
  828. package/dist/Tree-od43gLMO.js.map +0 -1
  829. package/dist/combobox-parts-BeNqgCbj.cjs.map +0 -1
  830. package/dist/combobox-parts-C9o4UfH_.js.map +0 -1
  831. package/dist/domains/dashboards/hooks/use-scorers.cjs.js +0 -41
  832. package/dist/domains/dashboards/hooks/use-scorers.cjs.js.map +0 -1
  833. package/dist/domains/dashboards/hooks/use-scorers.d.ts +0 -1
  834. package/dist/domains/dashboards/hooks/use-scorers.es.js +0 -40
  835. package/dist/domains/dashboards/hooks/use-scorers.es.js.map +0 -1
  836. package/dist/dropdown-menu-DKoWI8kD.js.map +0 -1
  837. package/dist/dropdown-menu-Dx-jCOIv.cjs.map +0 -1
  838. package/dist/input-BpnUsQSt.cjs.map +0 -1
  839. package/dist/input-Cyit5ZSc.js.map +0 -1
  840. package/dist/mcp-app-viewer-BV7FI498.js.map +0 -1
  841. package/dist/mcp-app-viewer-M3-pqAlo.cjs.map +0 -1
  842. package/dist/src/domains/dashboards/hooks/use-scorers.d.ts +0 -66
@@ -1 +1 @@
1
- {"version":3,"file":"ask-user-DcnUNMM5.cjs","names":["createContext","useContext","cn","raisedSurfaceStyle","Icon","MessageCircleQuestion","Txt","FieldItem","FieldLabel","Button","Check","Badge","Fieldset","cn","RadioGroup","Checkbox","RadioGroupItem","Input","FieldItem","FieldLabel","Txt","useId","useState","_Fragment","Badge"],"sources":["../src/ds/components/ai/ask-user/ask-user-context.ts","../src/ds/components/ai/ask-user/ask-user-layout.tsx","../src/ds/components/ai/ask-user/ask-user-controls.tsx","../src/ds/components/ai/ask-user/ask-user-root.tsx","../src/ds/components/ai/ask-user/ask-user-card.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { AskUserSelectionMode } from './ask-user-types';\n\ninterface AskUserContextValue {\n questionId: string;\n selectionMode: AskUserSelectionMode;\n disabled: boolean;\n answerText: string;\n selectedOptionLabels: string[];\n isCustomAnswerSelected: boolean;\n canSubmitAnswer: boolean;\n selectOption: (optionLabel: string) => void;\n setCustomAnswerSelected: (selected: boolean) => void;\n changeAnswerText: (text: string) => void;\n unselectEmptyCustomAnswer: () => void;\n submitAnswer: () => void;\n}\n\nexport const AskUserContext = createContext<AskUserContextValue | undefined>(undefined);\n\nexport function useOptionalAskUserContext() {\n return useContext(AskUserContext);\n}\n\nexport function useAskUserContext() {\n const context = useOptionalAskUserContext();\n if (!context) throw new Error('AskUser controls must be rendered inside AskUser.Root.');\n return context;\n}\n","import { Check, MessageCircleQuestion } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useOptionalAskUserContext } from './ask-user-context';\nimport type { AskUserResult } from './ask-user-types';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { FieldItem, FieldLabel } from '@/ds/components/Field';\nimport type { FieldLabelProps } from '@/ds/components/Field';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport const AskUserContainer = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot=\"ask-user\"\n className={cn(raisedSurfaceStyle, 'w-full overflow-hidden rounded-xl', className)}\n {...props}\n />\n);\n\nexport const AskUserLabel = ({ children = 'Question', className, ...props }: ComponentProps<'div'>) => (\n <div data-slot=\"ask-user-label\" className={cn('flex min-h-10 items-center gap-2 px-4 pt-3', className)} {...props}>\n <Icon size=\"xs\" className=\"text-muted-foreground\">\n <MessageCircleQuestion />\n </Icon>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {children}\n </Txt>\n </div>\n);\n\nexport const AskUserBody = ({ className, ...props }: ComponentProps<'div'>) => (\n <div data-slot=\"ask-user-body\" className={cn('p-4', className)} {...props} />\n);\n\nconst AskUserQuestionTitle = ({ children }: { children: ReactNode }) => (\n <span className=\"flex items-start gap-2\">\n <Icon size=\"xs\" className={cn('mt-1 shrink-0', 'text-muted-foreground')} aria-hidden>\n <MessageCircleQuestion />\n </Icon>\n <span className=\"min-w-0\">{children}</span>\n </span>\n);\n\nexport const AskUserQuestion = ({ children, className, ...props }: ComponentProps<typeof Txt>) => {\n const context = useOptionalAskUserContext();\n return (\n <Txt\n as=\"p\"\n variant=\"subheading\"\n tone=\"ink\"\n {...props}\n id={context?.questionId ?? props.id}\n className={cn('mb-3', className)}\n >\n <AskUserQuestionTitle>{children}</AskUserQuestionTitle>\n </Txt>\n );\n};\n\nexport interface AskUserOptionRowProps extends Omit<FieldLabelProps, 'children'> {\n control: ReactNode;\n label: ReactNode;\n description?: string;\n disabled?: boolean;\n}\n\nexport const AskUserOptionRow = ({\n control,\n label,\n description,\n disabled = false,\n className,\n ...props\n}: AskUserOptionRowProps) => (\n <FieldItem disabled={disabled} className=\"contents\">\n <FieldLabel\n // state-layer's wash only stops at :disabled/aria-disabled, and a <label> is neither\n aria-disabled={disabled || undefined}\n className={cn('state-layer flex items-start gap-2.5 rounded-lg px-3 py-2 data-disabled:opacity-50', className)}\n {...props}\n >\n {control}\n <span className=\"grid gap-0.5\">\n <Txt as=\"span\" variant=\"body\" tone=\"ink\">\n {label}\n </Txt>\n {description ? (\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {description}\n </Txt>\n ) : null}\n </span>\n </FieldLabel>\n </FieldItem>\n);\n\nexport type AskUserSubmitButtonProps = Omit<ComponentProps<typeof Button>, 'children'> & { children?: ReactNode };\n\nexport const AskUserSubmitButton = ({ children = 'Submit answer', ...props }: AskUserSubmitButtonProps) => (\n <Button icon={<Check />} type=\"button\" size=\"sm\" variant=\"primary\" {...props}>\n {children}\n </Button>\n);\n\nexport const AskUserPending = ({ children = 'Submitting…', ...props }: ComponentProps<typeof Txt>) => (\n <Txt as=\"span\" role=\"status\" variant=\"caption\" tone=\"muted\" {...props}>\n {children}\n </Txt>\n);\n\nexport interface AskUserOutputProps extends ComponentProps<'div'> {\n result: AskUserResult;\n}\n\nexport const AskUserOutput = ({ result, className, ...props }: AskUserOutputProps) => (\n <div\n data-slot=\"ask-user-output\"\n role={result.isError ? 'alert' : 'status'}\n className={cn('grid gap-2 rounded-lg bg-fill p-3', className)}\n {...props}\n >\n <Badge size=\"xs\" variant={result.isError ? 'destructive' : 'success'} className=\"justify-self-start\">\n {result.isError ? 'Error' : 'Answered'}\n </Badge>\n <Txt as=\"p\" variant=\"body\" tone=\"ink\" className={cn(result.isError && 'text-destructive-foreground')}>\n {result.content}\n </Txt>\n </div>\n);\n","import type { ChangeEvent, ComponentProps, KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useAskUserContext, useOptionalAskUserContext } from './ask-user-context';\nimport { AskUserOptionRow, AskUserSubmitButton } from './ask-user-layout';\nimport { Checkbox } from '@/ds/components/Checkbox';\nimport { FieldItem, FieldLabel, Fieldset } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { RadioGroup, RadioGroupItem } from '@/ds/components/RadioGroup';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\n// Keep the UI-only custom choice separate from suggested answer values.\nconst customAnswerValue = 'custom';\nconst optionValuePrefix = 'option:';\n\nfunction getOptionRadioValue(optionLabel: string): string {\n return `${optionValuePrefix}${optionLabel}`;\n}\n\nexport function AskUserOptions({ children, className, ...props }: ComponentProps<typeof Fieldset>) {\n const context = useAskUserContext();\n\n const handleSingleSelectChange = (radioValue: unknown) => {\n if (radioValue === customAnswerValue) {\n context.setCustomAnswerSelected(true);\n return;\n }\n if (typeof radioValue !== 'string' || !radioValue.startsWith(optionValuePrefix)) return;\n context.selectOption(radioValue.slice(optionValuePrefix.length));\n };\n\n if (context.selectionMode === 'multi_select') {\n return (\n <Fieldset aria-label=\"Answer options\" {...props} className={cn('gap-2', className)}>\n {children}\n </Fieldset>\n );\n }\n\n const selectedOptionLabel = context.selectedOptionLabels[0];\n const selectedOptionValue = selectedOptionLabel === undefined ? '' : getOptionRadioValue(selectedOptionLabel);\n const selectedRadioValue = context.isCustomAnswerSelected ? customAnswerValue : selectedOptionValue;\n\n return (\n <Fieldset\n {...props}\n className={cn('gap-2', className)}\n render={\n <RadioGroup\n aria-labelledby={context.questionId}\n disabled={context.disabled}\n value={selectedRadioValue}\n onValueChange={handleSingleSelectChange}\n />\n }\n >\n {children}\n </Fieldset>\n );\n}\n\nexport interface AskUserOptionItemProps {\n value: string;\n children: ReactNode;\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function AskUserOptionItem({\n value,\n children,\n description,\n disabled = false,\n className,\n}: AskUserOptionItemProps) {\n const context = useAskUserContext();\n const isDisabled = context.disabled || disabled;\n\n const handleOptionToggle = () => {\n if (!isDisabled) context.selectOption(value);\n };\n\n return (\n <AskUserOptionRow\n label={children}\n description={description}\n disabled={isDisabled}\n className={className}\n control={\n context.selectionMode === 'multi_select' ? (\n <Checkbox\n className=\"mt-0.5\"\n disabled={isDisabled}\n checked={context.selectedOptionLabels.includes(value)}\n onCheckedChange={handleOptionToggle}\n />\n ) : (\n <RadioGroupItem className=\"mt-0.5\" disabled={isDisabled} value={getOptionRadioValue(value)} />\n )\n }\n />\n );\n}\n\nexport type AskUserTextAnswerProps = Omit<\n ComponentProps<typeof Input>,\n 'value' | 'defaultValue' | 'onChange' | 'onKeyDown'\n>;\n\nexport function AskUserTextAnswer({ disabled = false, ...props }: AskUserTextAnswerProps) {\n const context = useAskUserContext();\n\n const handleAnswerTextChange = (event: ChangeEvent<HTMLInputElement>) => {\n context.changeAnswerText(event.target.value);\n };\n\n const handleAnswerTextKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n context.submitAnswer();\n }\n };\n\n return (\n <Input\n type=\"text\"\n aria-labelledby={props['aria-label'] ? undefined : context.questionId}\n placeholder=\"Type your answer\"\n size=\"sm\"\n {...props}\n disabled={context.disabled || disabled}\n value={context.answerText}\n onChange={handleAnswerTextChange}\n onKeyDown={handleAnswerTextKeyDown}\n />\n );\n}\n\nexport interface AskUserCustomAnswerProps {\n className?: string;\n label?: string;\n inputLabel?: string;\n}\n\nexport function AskUserCustomAnswer({\n className,\n label = 'Other…',\n inputLabel = 'Your answer',\n}: AskUserCustomAnswerProps) {\n const context = useAskUserContext();\n\n const handleRowClick = (event: MouseEvent<HTMLDivElement>) => {\n if (context.disabled || event.target !== event.currentTarget) return;\n if (context.isCustomAnswerSelected) {\n event.currentTarget.querySelector<HTMLInputElement>('input[type=\"text\"]')?.focus();\n return;\n }\n event.currentTarget.querySelector<HTMLElement>('[role=\"radio\"], [role=\"checkbox\"]')?.click();\n };\n\n const handleControlMouseDown = (event: MouseEvent<HTMLSpanElement>) => {\n // Let the checkbox click unselect it before blur resets its controlled value.\n if (context.isCustomAnswerSelected && !context.answerText.trim()) event.preventDefault();\n };\n\n return (\n <FieldItem\n role=\"group\"\n aria-label=\"Custom answer\"\n aria-disabled={context.disabled || undefined}\n disabled={context.disabled}\n onClick={handleRowClick}\n className={cn(\n 'items-start gap-2.5 rounded-lg px-3 py-2 data-disabled:opacity-50',\n !context.isCustomAnswerSelected && 'state-layer',\n className,\n )}\n >\n {context.selectionMode === 'multi_select' ? (\n <Checkbox\n className=\"mt-0.5\"\n aria-label={label}\n disabled={context.disabled}\n checked={context.isCustomAnswerSelected}\n onMouseDown={handleControlMouseDown}\n onCheckedChange={context.setCustomAnswerSelected}\n />\n ) : (\n <RadioGroupItem aria-label={label} className=\"mt-0.5\" value={customAnswerValue} />\n )}\n {context.isCustomAnswerSelected ? (\n <AskUserTextAnswer\n aria-label={inputLabel}\n onBlur={context.unselectEmptyCustomAnswer}\n placeholder={label}\n variant=\"unstyled\"\n className={cn('h-auto min-w-0 flex-1 px-0', 'text-body')}\n autoFocus\n />\n ) : (\n <FieldLabel className=\"flex-1\">\n <Txt as=\"span\" variant=\"body\" tone=\"ink\">\n {label}\n </Txt>\n </FieldLabel>\n )}\n </FieldItem>\n );\n}\n\nexport type AskUserSubmitProps = ComponentProps<typeof AskUserSubmitButton> & {\n when?: 'always' | 'custom-answer';\n};\n\nexport function AskUserSubmit({ when = 'always', disabled = false, onClick, ...props }: AskUserSubmitProps) {\n const context = useOptionalAskUserContext();\n\n const handleSubmitClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented && !disabled) context?.submitAnswer();\n };\n\n if (when === 'custom-answer' && !context?.isCustomAnswerSelected) return null;\n\n return (\n <AskUserSubmitButton\n {...props}\n disabled={disabled || (context !== undefined && !context.canSubmitAnswer)}\n onClick={handleSubmitClick}\n />\n );\n}\n","import { useId, useState } from 'react';\nimport type { ComponentProps } from 'react';\nimport { AskUserContext } from './ask-user-context';\nimport { AskUserContainer } from './ask-user-layout';\nimport type { AskUserAnswer, AskUserSelectionMode } from './ask-user-types';\n\nexport interface AskUserRootProps extends Omit<ComponentProps<typeof AskUserContainer>, 'onSubmit'> {\n selectionMode?: AskUserSelectionMode;\n disabled?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n}\n\ninterface AskUserAnswerDraft {\n answerText: string;\n selectedOptionLabels: string[];\n selectionMode: AskUserSelectionMode;\n isCustomAnswerSelected: boolean;\n}\n\nfunction getAnswerToSubmit({\n answerText,\n selectedOptionLabels,\n selectionMode,\n isCustomAnswerSelected,\n}: AskUserAnswerDraft): AskUserAnswer | undefined {\n const trimmedAnswerText = answerText.trim();\n if (isCustomAnswerSelected && !trimmedAnswerText) return undefined;\n if (selectionMode === 'single_select') {\n // Suggested single-select answers already submit when selected.\n if (!isCustomAnswerSelected && selectedOptionLabels.length > 0) return undefined;\n return trimmedAnswerText || undefined;\n }\n\n const answerLabels = isCustomAnswerSelected ? [...selectedOptionLabels, trimmedAnswerText] : selectedOptionLabels;\n return answerLabels.length > 0 ? answerLabels : undefined;\n}\n\nfunction toggleSelectedOptionLabel(selectedOptionLabels: string[], optionLabel: string): string[] {\n if (selectedOptionLabels.includes(optionLabel)) {\n return selectedOptionLabels.filter(selectedLabel => selectedLabel !== optionLabel);\n }\n return [...selectedOptionLabels, optionLabel];\n}\n\nexport function AskUserRoot({\n selectionMode = 'single_select',\n disabled = false,\n onSubmit,\n children,\n ...props\n}: AskUserRootProps) {\n const questionId = useId();\n const [answerText, setAnswerText] = useState('');\n const [selectedOptionLabels, setSelectedOptionLabels] = useState<string[]>([]);\n const [isCustomAnswerSelected, setIsCustomAnswerSelected] = useState(false);\n const answerToSubmit = getAnswerToSubmit({\n answerText,\n selectedOptionLabels,\n selectionMode,\n isCustomAnswerSelected,\n });\n const canSubmitAnswer = !disabled && answerToSubmit !== undefined;\n\n const selectOption = (optionLabel: string) => {\n if (disabled) return;\n if (selectionMode === 'multi_select') {\n setSelectedOptionLabels(currentLabels => toggleSelectedOptionLabel(currentLabels, optionLabel));\n return;\n }\n setIsCustomAnswerSelected(false);\n setSelectedOptionLabels([optionLabel]);\n onSubmit(optionLabel);\n };\n\n const setCustomAnswerSelected = (selected: boolean) => {\n if (disabled) return;\n setIsCustomAnswerSelected(selected);\n if (selected && selectionMode === 'single_select') setSelectedOptionLabels([]);\n };\n\n const changeAnswerText = (text: string) => {\n if (!disabled) setAnswerText(text);\n };\n\n const unselectEmptyCustomAnswer = () => {\n if (!disabled && !answerText.trim()) setIsCustomAnswerSelected(false);\n };\n\n const submitAnswer = () => {\n if (disabled || answerToSubmit === undefined) return;\n onSubmit(answerToSubmit);\n };\n\n return (\n <AskUserContext.Provider\n value={{\n questionId,\n selectionMode,\n disabled,\n answerText,\n selectedOptionLabels,\n isCustomAnswerSelected,\n canSubmitAnswer,\n selectOption,\n setCustomAnswerSelected,\n changeAnswerText,\n unselectEmptyCustomAnswer,\n submitAnswer,\n }}\n >\n <AskUserContainer role=\"group\" aria-labelledby={questionId} {...props}>\n {children}\n </AskUserContainer>\n </AskUserContext.Provider>\n );\n}\n","import type { ComponentProps, ReactNode } from 'react';\nimport { useAskUserContext } from './ask-user-context';\nimport {\n AskUserCustomAnswer,\n AskUserOptionItem,\n AskUserOptions,\n AskUserSubmit,\n AskUserTextAnswer,\n} from './ask-user-controls';\nimport type { AskUserContainer } from './ask-user-layout';\nimport { AskUserBody, AskUserOutput, AskUserPending, AskUserQuestion } from './ask-user-layout';\nimport { AskUserRoot } from './ask-user-root';\nimport type { AskUserAnswer, AskUserOption, AskUserPayload, AskUserResult } from './ask-user-types';\nimport { Badge } from '@/ds/components/Badge';\n\nexport interface AskUserProps extends Omit<ComponentProps<typeof AskUserContainer>, 'children' | 'onSubmit'> {\n payload: AskUserPayload;\n result?: AskUserResult;\n isAnswered?: boolean;\n isSubmitting?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n footer?: ReactNode;\n}\n\nfunction getValidOptions(options: AskUserPayload['options']): AskUserOption[] {\n return (\n options?.filter((option): option is AskUserOption =>\n Boolean(option && typeof option.label === 'string' && option.label),\n ) ?? []\n );\n}\n\nfunction AskUserAnswerControls({ options }: { options: AskUserOption[] }) {\n const { selectionMode } = useAskUserContext();\n const isMultiSelect = selectionMode === 'multi_select';\n if (options.length === 0) {\n return (\n <div className=\"flex items-center gap-2\">\n <AskUserTextAnswer />\n <AskUserSubmit className=\"shrink-0 whitespace-nowrap\" />\n </div>\n );\n }\n\n return (\n <>\n <AskUserOptions>\n {options.map(option => (\n <AskUserOptionItem key={option.label} value={option.label} description={option.description}>\n {option.label}\n </AskUserOptionItem>\n ))}\n <AskUserCustomAnswer />\n {isMultiSelect ? <AskUserSubmit className=\"mt-1 justify-self-start\" /> : null}\n </AskUserOptions>\n {!isMultiSelect ? <AskUserSubmit when=\"custom-answer\" className=\"mt-2\" /> : null}\n </>\n );\n}\n\ninterface AskUserCardContentProps extends Pick<AskUserProps, 'result' | 'isAnswered' | 'isSubmitting' | 'footer'> {\n options: AskUserOption[];\n}\n\nfunction AskUserCardContent({ result, isAnswered, isSubmitting, options, footer }: AskUserCardContentProps) {\n if (result) return <AskUserOutput result={result} />;\n if (isAnswered) return <Badge variant=\"success\">Answered</Badge>;\n\n return (\n <>\n <AskUserAnswerControls options={options} />\n {isSubmitting ? <AskUserPending className=\"mt-3 block\" /> : null}\n {footer}\n </>\n );\n}\n\nexport function AskUser({\n payload,\n result,\n isAnswered = false,\n isSubmitting = false,\n onSubmit,\n footer,\n ...props\n}: AskUserProps) {\n const options = getValidOptions(payload.options);\n const isMultiSelect = options.length > 0 && payload.selectionMode === 'multi_select';\n const payloadKey = JSON.stringify([payload.question, options.map(option => option.label), payload.selectionMode]);\n const hasAnswer = result !== undefined || isAnswered;\n\n return (\n <AskUserRoot\n key={payloadKey}\n data-testid=\"ask-user\"\n selectionMode={isMultiSelect ? 'multi_select' : 'single_select'}\n disabled={isSubmitting || hasAnswer}\n onSubmit={onSubmit}\n {...props}\n >\n <AskUserBody>\n <AskUserQuestion>{payload.question}</AskUserQuestion>\n <AskUserCardContent\n result={result}\n isAnswered={isAnswered}\n isSubmitting={isSubmitting}\n options={options}\n footer={footer}\n />\n </AskUserBody>\n </AskUserRoot>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ask-user-DIYcPkoX.cjs","names":["createContext","useContext","cn","raisedSurfaceStyle","Icon","MessageCircleQuestion","Txt","FieldItem","FieldLabel","Button","Check","Badge","Fieldset","cn","RadioGroup","Checkbox","RadioGroupItem","Input","FieldItem","FieldLabel","Txt","useId","useState","_Fragment","Badge"],"sources":["../src/ds/components/ai/ask-user/ask-user-context.ts","../src/ds/components/ai/ask-user/ask-user-layout.tsx","../src/ds/components/ai/ask-user/ask-user-controls.tsx","../src/ds/components/ai/ask-user/ask-user-root.tsx","../src/ds/components/ai/ask-user/ask-user-card.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { AskUserSelectionMode } from './ask-user-types';\n\ninterface AskUserContextValue {\n questionId: string;\n selectionMode: AskUserSelectionMode;\n disabled: boolean;\n answerText: string;\n selectedOptionLabels: string[];\n isCustomAnswerSelected: boolean;\n canSubmitAnswer: boolean;\n selectOption: (optionLabel: string) => void;\n setCustomAnswerSelected: (selected: boolean) => void;\n changeAnswerText: (text: string) => void;\n unselectEmptyCustomAnswer: () => void;\n submitAnswer: () => void;\n}\n\nexport const AskUserContext = createContext<AskUserContextValue | undefined>(undefined);\n\nexport function useOptionalAskUserContext() {\n return useContext(AskUserContext);\n}\n\nexport function useAskUserContext() {\n const context = useOptionalAskUserContext();\n if (!context) throw new Error('AskUser controls must be rendered inside AskUser.Root.');\n return context;\n}\n","import { Check, MessageCircleQuestion } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useOptionalAskUserContext } from './ask-user-context';\nimport type { AskUserResult } from './ask-user-types';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { FieldItem, FieldLabel } from '@/ds/components/Field';\nimport type { FieldLabelProps } from '@/ds/components/Field';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport const AskUserContainer = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot=\"ask-user\"\n className={cn(raisedSurfaceStyle, 'w-full overflow-hidden rounded-xl', className)}\n {...props}\n />\n);\n\nexport const AskUserLabel = ({ children = 'Question', className, ...props }: ComponentProps<'div'>) => (\n <div data-slot=\"ask-user-label\" className={cn('flex min-h-10 items-center gap-2 px-4 pt-3', className)} {...props}>\n <Icon size=\"xs\" className=\"text-muted-foreground\">\n <MessageCircleQuestion />\n </Icon>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {children}\n </Txt>\n </div>\n);\n\nexport const AskUserBody = ({ className, ...props }: ComponentProps<'div'>) => (\n <div data-slot=\"ask-user-body\" className={cn('p-4', className)} {...props} />\n);\n\nconst AskUserQuestionTitle = ({ children }: { children: ReactNode }) => (\n <span className=\"flex items-start gap-2\">\n <Icon size=\"xs\" className={cn('mt-1 shrink-0', 'text-muted-foreground')} aria-hidden>\n <MessageCircleQuestion />\n </Icon>\n <span className=\"min-w-0\">{children}</span>\n </span>\n);\n\nexport const AskUserQuestion = ({ children, className, ...props }: ComponentProps<typeof Txt>) => {\n const context = useOptionalAskUserContext();\n return (\n <Txt\n as=\"p\"\n variant=\"subheading\"\n tone=\"ink\"\n {...props}\n id={context?.questionId ?? props.id}\n className={cn('mb-3', className)}\n >\n <AskUserQuestionTitle>{children}</AskUserQuestionTitle>\n </Txt>\n );\n};\n\nexport interface AskUserOptionRowProps extends Omit<FieldLabelProps, 'children'> {\n control: ReactNode;\n label: ReactNode;\n description?: string;\n disabled?: boolean;\n}\n\nexport const AskUserOptionRow = ({\n control,\n label,\n description,\n disabled = false,\n className,\n ...props\n}: AskUserOptionRowProps) => (\n <FieldItem disabled={disabled} className=\"contents\">\n <FieldLabel\n // state-layer's wash only stops at :disabled/aria-disabled, and a <label> is neither\n aria-disabled={disabled || undefined}\n className={cn('state-layer flex items-start gap-2.5 rounded-lg px-3 py-2 data-disabled:opacity-50', className)}\n {...props}\n >\n {control}\n <span className=\"grid gap-0.5\">\n <Txt as=\"span\" variant=\"body\" tone=\"ink\">\n {label}\n </Txt>\n {description ? (\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {description}\n </Txt>\n ) : null}\n </span>\n </FieldLabel>\n </FieldItem>\n);\n\nexport type AskUserSubmitButtonProps = Omit<ComponentProps<typeof Button>, 'children'> & { children?: ReactNode };\n\nexport const AskUserSubmitButton = ({ children = 'Submit answer', ...props }: AskUserSubmitButtonProps) => (\n <Button icon={<Check />} type=\"button\" size=\"sm\" variant=\"primary\" {...props}>\n {children}\n </Button>\n);\n\nexport const AskUserPending = ({ children = 'Submitting…', ...props }: ComponentProps<typeof Txt>) => (\n <Txt as=\"span\" role=\"status\" variant=\"caption\" tone=\"muted\" {...props}>\n {children}\n </Txt>\n);\n\nexport interface AskUserOutputProps extends ComponentProps<'div'> {\n result: AskUserResult;\n}\n\nexport const AskUserOutput = ({ result, className, ...props }: AskUserOutputProps) => (\n <div\n data-slot=\"ask-user-output\"\n role={result.isError ? 'alert' : 'status'}\n className={cn('grid gap-2 rounded-lg bg-fill p-3', className)}\n {...props}\n >\n <Badge size=\"xs\" variant={result.isError ? 'destructive' : 'success'} className=\"justify-self-start\">\n {result.isError ? 'Error' : 'Answered'}\n </Badge>\n <Txt as=\"p\" variant=\"body\" tone=\"ink\" className={cn(result.isError && 'text-destructive-foreground')}>\n {result.content}\n </Txt>\n </div>\n);\n","import type { ChangeEvent, ComponentProps, KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useAskUserContext, useOptionalAskUserContext } from './ask-user-context';\nimport { AskUserOptionRow, AskUserSubmitButton } from './ask-user-layout';\nimport { Checkbox } from '@/ds/components/Checkbox';\nimport { FieldItem, FieldLabel, Fieldset } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { RadioGroup, RadioGroupItem } from '@/ds/components/RadioGroup';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\n// Keep the UI-only custom choice separate from suggested answer values.\nconst customAnswerValue = 'custom';\nconst optionValuePrefix = 'option:';\n\nfunction getOptionRadioValue(optionLabel: string): string {\n return `${optionValuePrefix}${optionLabel}`;\n}\n\nexport function AskUserOptions({ children, className, ...props }: ComponentProps<typeof Fieldset>) {\n const context = useAskUserContext();\n\n const handleSingleSelectChange = (radioValue: unknown) => {\n if (radioValue === customAnswerValue) {\n context.setCustomAnswerSelected(true);\n return;\n }\n if (typeof radioValue !== 'string' || !radioValue.startsWith(optionValuePrefix)) return;\n context.selectOption(radioValue.slice(optionValuePrefix.length));\n };\n\n if (context.selectionMode === 'multi_select') {\n return (\n <Fieldset aria-label=\"Answer options\" {...props} className={cn('gap-2', className)}>\n {children}\n </Fieldset>\n );\n }\n\n const selectedOptionLabel = context.selectedOptionLabels[0];\n const selectedOptionValue = selectedOptionLabel === undefined ? '' : getOptionRadioValue(selectedOptionLabel);\n const selectedRadioValue = context.isCustomAnswerSelected ? customAnswerValue : selectedOptionValue;\n\n return (\n <Fieldset\n {...props}\n className={cn('gap-2', className)}\n render={\n <RadioGroup\n aria-labelledby={context.questionId}\n disabled={context.disabled}\n value={selectedRadioValue}\n onValueChange={handleSingleSelectChange}\n />\n }\n >\n {children}\n </Fieldset>\n );\n}\n\nexport interface AskUserOptionItemProps {\n value: string;\n children: ReactNode;\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function AskUserOptionItem({\n value,\n children,\n description,\n disabled = false,\n className,\n}: AskUserOptionItemProps) {\n const context = useAskUserContext();\n const isDisabled = context.disabled || disabled;\n\n const handleOptionToggle = () => {\n if (!isDisabled) context.selectOption(value);\n };\n\n return (\n <AskUserOptionRow\n label={children}\n description={description}\n disabled={isDisabled}\n className={className}\n control={\n context.selectionMode === 'multi_select' ? (\n <Checkbox\n className=\"mt-0.5\"\n disabled={isDisabled}\n checked={context.selectedOptionLabels.includes(value)}\n onCheckedChange={handleOptionToggle}\n />\n ) : (\n <RadioGroupItem className=\"mt-0.5\" disabled={isDisabled} value={getOptionRadioValue(value)} />\n )\n }\n />\n );\n}\n\nexport type AskUserTextAnswerProps = Omit<\n ComponentProps<typeof Input>,\n 'value' | 'defaultValue' | 'onChange' | 'onKeyDown'\n>;\n\nexport function AskUserTextAnswer({ disabled = false, ...props }: AskUserTextAnswerProps) {\n const context = useAskUserContext();\n\n const handleAnswerTextChange = (event: ChangeEvent<HTMLInputElement>) => {\n context.changeAnswerText(event.target.value);\n };\n\n const handleAnswerTextKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n context.submitAnswer();\n }\n };\n\n return (\n <Input\n type=\"text\"\n aria-labelledby={props['aria-label'] ? undefined : context.questionId}\n placeholder=\"Type your answer\"\n size=\"sm\"\n {...props}\n disabled={context.disabled || disabled}\n value={context.answerText}\n onChange={handleAnswerTextChange}\n onKeyDown={handleAnswerTextKeyDown}\n />\n );\n}\n\nexport interface AskUserCustomAnswerProps {\n className?: string;\n label?: string;\n inputLabel?: string;\n}\n\nexport function AskUserCustomAnswer({\n className,\n label = 'Other…',\n inputLabel = 'Your answer',\n}: AskUserCustomAnswerProps) {\n const context = useAskUserContext();\n\n const handleRowClick = (event: MouseEvent<HTMLDivElement>) => {\n if (context.disabled || event.target !== event.currentTarget) return;\n if (context.isCustomAnswerSelected) {\n event.currentTarget.querySelector<HTMLInputElement>('input[type=\"text\"]')?.focus();\n return;\n }\n event.currentTarget.querySelector<HTMLElement>('[role=\"radio\"], [role=\"checkbox\"]')?.click();\n };\n\n const handleControlMouseDown = (event: MouseEvent<HTMLSpanElement>) => {\n // Let the checkbox click unselect it before blur resets its controlled value.\n if (context.isCustomAnswerSelected && !context.answerText.trim()) event.preventDefault();\n };\n\n return (\n <FieldItem\n role=\"group\"\n aria-label=\"Custom answer\"\n aria-disabled={context.disabled || undefined}\n disabled={context.disabled}\n onClick={handleRowClick}\n className={cn(\n 'items-start gap-2.5 rounded-lg px-3 py-2 data-disabled:opacity-50',\n !context.isCustomAnswerSelected && 'state-layer',\n className,\n )}\n >\n {context.selectionMode === 'multi_select' ? (\n <Checkbox\n className=\"mt-0.5\"\n aria-label={label}\n disabled={context.disabled}\n checked={context.isCustomAnswerSelected}\n onMouseDown={handleControlMouseDown}\n onCheckedChange={context.setCustomAnswerSelected}\n />\n ) : (\n <RadioGroupItem aria-label={label} className=\"mt-0.5\" value={customAnswerValue} />\n )}\n {context.isCustomAnswerSelected ? (\n <AskUserTextAnswer\n aria-label={inputLabel}\n onBlur={context.unselectEmptyCustomAnswer}\n placeholder={label}\n variant=\"unstyled\"\n className={cn('h-auto min-w-0 flex-1 px-0', 'text-body')}\n autoFocus\n />\n ) : (\n <FieldLabel className=\"flex-1\">\n <Txt as=\"span\" variant=\"body\" tone=\"ink\">\n {label}\n </Txt>\n </FieldLabel>\n )}\n </FieldItem>\n );\n}\n\nexport type AskUserSubmitProps = ComponentProps<typeof AskUserSubmitButton> & {\n when?: 'always' | 'custom-answer';\n};\n\nexport function AskUserSubmit({ when = 'always', disabled = false, onClick, ...props }: AskUserSubmitProps) {\n const context = useOptionalAskUserContext();\n\n const handleSubmitClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented && !disabled) context?.submitAnswer();\n };\n\n if (when === 'custom-answer' && !context?.isCustomAnswerSelected) return null;\n\n return (\n <AskUserSubmitButton\n {...props}\n disabled={disabled || (context !== undefined && !context.canSubmitAnswer)}\n onClick={handleSubmitClick}\n />\n );\n}\n","import { useId, useState } from 'react';\nimport type { ComponentProps } from 'react';\nimport { AskUserContext } from './ask-user-context';\nimport { AskUserContainer } from './ask-user-layout';\nimport type { AskUserAnswer, AskUserSelectionMode } from './ask-user-types';\n\nexport interface AskUserRootProps extends Omit<ComponentProps<typeof AskUserContainer>, 'onSubmit'> {\n selectionMode?: AskUserSelectionMode;\n disabled?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n}\n\ninterface AskUserAnswerDraft {\n answerText: string;\n selectedOptionLabels: string[];\n selectionMode: AskUserSelectionMode;\n isCustomAnswerSelected: boolean;\n}\n\nfunction getAnswerToSubmit({\n answerText,\n selectedOptionLabels,\n selectionMode,\n isCustomAnswerSelected,\n}: AskUserAnswerDraft): AskUserAnswer | undefined {\n const trimmedAnswerText = answerText.trim();\n if (isCustomAnswerSelected && !trimmedAnswerText) return undefined;\n if (selectionMode === 'single_select') {\n // Suggested single-select answers already submit when selected.\n if (!isCustomAnswerSelected && selectedOptionLabels.length > 0) return undefined;\n return trimmedAnswerText || undefined;\n }\n\n const answerLabels = isCustomAnswerSelected ? [...selectedOptionLabels, trimmedAnswerText] : selectedOptionLabels;\n return answerLabels.length > 0 ? answerLabels : undefined;\n}\n\nfunction toggleSelectedOptionLabel(selectedOptionLabels: string[], optionLabel: string): string[] {\n if (selectedOptionLabels.includes(optionLabel)) {\n return selectedOptionLabels.filter(selectedLabel => selectedLabel !== optionLabel);\n }\n return [...selectedOptionLabels, optionLabel];\n}\n\nexport function AskUserRoot({\n selectionMode = 'single_select',\n disabled = false,\n onSubmit,\n children,\n ...props\n}: AskUserRootProps) {\n const questionId = useId();\n const [answerText, setAnswerText] = useState('');\n const [selectedOptionLabels, setSelectedOptionLabels] = useState<string[]>([]);\n const [isCustomAnswerSelected, setIsCustomAnswerSelected] = useState(false);\n const answerToSubmit = getAnswerToSubmit({\n answerText,\n selectedOptionLabels,\n selectionMode,\n isCustomAnswerSelected,\n });\n const canSubmitAnswer = !disabled && answerToSubmit !== undefined;\n\n const selectOption = (optionLabel: string) => {\n if (disabled) return;\n if (selectionMode === 'multi_select') {\n setSelectedOptionLabels(currentLabels => toggleSelectedOptionLabel(currentLabels, optionLabel));\n return;\n }\n setIsCustomAnswerSelected(false);\n setSelectedOptionLabels([optionLabel]);\n onSubmit(optionLabel);\n };\n\n const setCustomAnswerSelected = (selected: boolean) => {\n if (disabled) return;\n setIsCustomAnswerSelected(selected);\n if (selected && selectionMode === 'single_select') setSelectedOptionLabels([]);\n };\n\n const changeAnswerText = (text: string) => {\n if (!disabled) setAnswerText(text);\n };\n\n const unselectEmptyCustomAnswer = () => {\n if (!disabled && !answerText.trim()) setIsCustomAnswerSelected(false);\n };\n\n const submitAnswer = () => {\n if (disabled || answerToSubmit === undefined) return;\n onSubmit(answerToSubmit);\n };\n\n return (\n <AskUserContext.Provider\n value={{\n questionId,\n selectionMode,\n disabled,\n answerText,\n selectedOptionLabels,\n isCustomAnswerSelected,\n canSubmitAnswer,\n selectOption,\n setCustomAnswerSelected,\n changeAnswerText,\n unselectEmptyCustomAnswer,\n submitAnswer,\n }}\n >\n <AskUserContainer role=\"group\" aria-labelledby={questionId} {...props}>\n {children}\n </AskUserContainer>\n </AskUserContext.Provider>\n );\n}\n","import type { ComponentProps, ReactNode } from 'react';\nimport { useAskUserContext } from './ask-user-context';\nimport {\n AskUserCustomAnswer,\n AskUserOptionItem,\n AskUserOptions,\n AskUserSubmit,\n AskUserTextAnswer,\n} from './ask-user-controls';\nimport type { AskUserContainer } from './ask-user-layout';\nimport { AskUserBody, AskUserOutput, AskUserPending, AskUserQuestion } from './ask-user-layout';\nimport { AskUserRoot } from './ask-user-root';\nimport type { AskUserAnswer, AskUserOption, AskUserPayload, AskUserResult } from './ask-user-types';\nimport { Badge } from '@/ds/components/Badge';\n\nexport interface AskUserProps extends Omit<ComponentProps<typeof AskUserContainer>, 'children' | 'onSubmit'> {\n payload: AskUserPayload;\n result?: AskUserResult;\n isAnswered?: boolean;\n isSubmitting?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n footer?: ReactNode;\n}\n\nfunction getValidOptions(options: AskUserPayload['options']): AskUserOption[] {\n return (\n options?.filter((option): option is AskUserOption =>\n Boolean(option && typeof option.label === 'string' && option.label),\n ) ?? []\n );\n}\n\nfunction AskUserAnswerControls({ options }: { options: AskUserOption[] }) {\n const { selectionMode } = useAskUserContext();\n const isMultiSelect = selectionMode === 'multi_select';\n if (options.length === 0) {\n return (\n <div className=\"flex items-center gap-2\">\n <AskUserTextAnswer />\n <AskUserSubmit className=\"shrink-0 whitespace-nowrap\" />\n </div>\n );\n }\n\n return (\n <>\n <AskUserOptions>\n {options.map(option => (\n <AskUserOptionItem key={option.label} value={option.label} description={option.description}>\n {option.label}\n </AskUserOptionItem>\n ))}\n <AskUserCustomAnswer />\n {isMultiSelect ? <AskUserSubmit className=\"mt-1 justify-self-start\" /> : null}\n </AskUserOptions>\n {!isMultiSelect ? <AskUserSubmit when=\"custom-answer\" className=\"mt-2\" /> : null}\n </>\n );\n}\n\ninterface AskUserCardContentProps extends Pick<AskUserProps, 'result' | 'isAnswered' | 'isSubmitting' | 'footer'> {\n options: AskUserOption[];\n}\n\nfunction AskUserCardContent({ result, isAnswered, isSubmitting, options, footer }: AskUserCardContentProps) {\n if (result) return <AskUserOutput result={result} />;\n if (isAnswered) return <Badge variant=\"success\">Answered</Badge>;\n\n return (\n <>\n <AskUserAnswerControls options={options} />\n {isSubmitting ? <AskUserPending className=\"mt-3 block\" /> : null}\n {footer}\n </>\n );\n}\n\nexport function AskUser({\n payload,\n result,\n isAnswered = false,\n isSubmitting = false,\n onSubmit,\n footer,\n ...props\n}: AskUserProps) {\n const options = getValidOptions(payload.options);\n const isMultiSelect = options.length > 0 && payload.selectionMode === 'multi_select';\n const payloadKey = JSON.stringify([payload.question, options.map(option => option.label), payload.selectionMode]);\n const hasAnswer = result !== undefined || isAnswered;\n\n return (\n <AskUserRoot\n key={payloadKey}\n data-testid=\"ask-user\"\n selectionMode={isMultiSelect ? 'multi_select' : 'single_select'}\n disabled={isSubmitting || hasAnswer}\n onSubmit={onSubmit}\n {...props}\n >\n <AskUserBody>\n <AskUserQuestion>{payload.question}</AskUserQuestion>\n <AskUserCardContent\n result={result}\n isAnswered={isAnswered}\n isSubmitting={isSubmitting}\n options={options}\n footer={footer}\n />\n </AskUserBody>\n </AskUserRoot>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAkBA,IAAa,kBAAA,GAAiBA,MAAAA,cAAAA,CAA+C,KAAA,CAAS;AAEtF,SAAgB,4BAA4B;CAC1C,QAAA,GAAOC,MAAAA,WAAAA,CAAW,cAAc;AAClC;AAEA,SAAgB,oBAAoB;CAClC,MAAM,UAAU,0BAA0B;CAC1C,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,wDAAwD;CACtF,OAAO;AACT;;ACfA,IAAa,oBAAoB,EAAE,WAAW,GAAG,YAC/C,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;CACE,aAAU;CACV,WAAWC,cAAAA,GAAGC,kCAAAA,oBAAoB,qCAAqC,SAAS;CAChF,GAAI;AACL,CAAA;AAGH,IAAa,gBAAgB,EAAE,WAAW,YAAY,WAAW,GAAG,YAClE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;CAAK,aAAU;CAAiB,WAAWD,cAAAA,GAAG,8CAA8C,SAAS;CAAG,GAAI;CAA5G,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,mBAAAA,MAAD;EAAM,MAAK;EAAK,WAAU;EACxB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,uBAAD,CAAwB,CAAA;CACpB,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;EAAK,IAAG;EAAO,SAAQ;EAAU,MAAK;EACnC;CACE,CAAA,CACF;;AAGP,IAAa,eAAe,EAAE,WAAW,GAAG,YAC1C,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;CAAK,aAAU;CAAgB,WAAWJ,cAAAA,GAAG,OAAO,SAAS;CAAG,GAAI;AAAQ,CAAA;AAG9E,IAAM,wBAAwB,EAAE,eAC9B,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;CAAM,WAAU;CAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,mBAAAA,MAAD;EAAM,MAAK;EAAK,WAAWF,cAAAA,GAAG,iBAAiB,uBAAuB;EAAG,eAAA;EACvE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACG,aAAAA,uBAAD,CAAwB,CAAA;CACpB,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAW;CAAe,CAAA,CACtC;;AAGR,IAAa,mBAAmB,EAAE,UAAU,WAAW,GAAG,YAAwC;CAChG,MAAM,UAAU,0BAA0B;CAC1C,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;EACE,IAAG;EACH,SAAQ;EACR,MAAK;EACL,GAAI;EACJ,IAAI,SAAS,cAAc,MAAM;EACjC,WAAWJ,cAAAA,GAAG,QAAQ,SAAS;EAE/B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAD,EAAuB,SAA+B,CAAA;CACnD,CAAA;AAET;AASA,IAAa,oBAAoB,EAC/B,SACA,OACA,aACA,WAAW,OACX,WACA,GAAG,YAEH,iBAAA,GAAA,kBAAA,IAAA,CAACK,yBAAAA,WAAD;CAAqB;CAAU,WAAU;CACvC,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAACC,yBAAAA,YAAD;EAEE,iBAAe,YAAY,KAAA;EAC3B,WAAWN,cAAAA,GAAG,sFAAsF,SAAS;EAC7G,GAAI;EAJN,UAAA,CAMG,SACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACI,YAAAA,KAAD;IAAK,IAAG;IAAO,SAAQ;IAAO,MAAK;IAChC,UAAA;GACE,CAAA,GACJ,cACC,iBAAA,GAAA,kBAAA,IAAA,CAACA,YAAAA,KAAD;IAAK,IAAG;IAAO,SAAQ;IAAU,MAAK;IACnC,UAAA;GACE,CAAA,IACH,IACA;EACI,CAAA,CAAA;;AACH,CAAA;AAKb,IAAa,uBAAuB,EAAE,WAAW,iBAAiB,GAAG,YACnE,iBAAA,GAAA,kBAAA,IAAA,CAACG,eAAAA,QAAD;CAAQ,MAAM,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,OAAD,CAAQ,CAAA;CAAG,MAAK;CAAS,MAAK;CAAK,SAAQ;CAAU,GAAI;CACpE;AACK,CAAA;AAGV,IAAa,kBAAkB,EAAE,WAAW,eAAe,GAAG,YAC5D,iBAAA,GAAA,kBAAA,IAAA,CAACJ,YAAAA,KAAD;CAAK,IAAG;CAAO,MAAK;CAAS,SAAQ;CAAU,MAAK;CAAQ,GAAI;CAC7D;AACE,CAAA;AAOP,IAAa,iBAAiB,EAAE,QAAQ,WAAW,GAAG,YACpD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;CACE,aAAU;CACV,MAAM,OAAO,UAAU,UAAU;CACjC,WAAWJ,cAAAA,GAAG,qCAAqC,SAAS;CAC5D,GAAI;CAJN,UAAA,CAME,iBAAA,GAAA,kBAAA,IAAA,CAACS,cAAAA,OAAD;EAAO,MAAK;EAAK,SAAS,OAAO,UAAU,gBAAgB;EAAW,WAAU;EAC7E,UAAA,OAAO,UAAU,UAAU;CACvB,CAAA,GACP,iBAAA,GAAA,kBAAA,IAAA,CAACL,YAAAA,KAAD;EAAK,IAAG;EAAI,SAAQ;EAAO,MAAK;EAAM,WAAWJ,cAAAA,GAAG,OAAO,WAAW,6BAA6B;EAChG,UAAA,OAAO;CACL,CAAA,CACF;;;ACtHP,IAAM,oBAAoB;AAC1B,IAAM,oBAAoB;AAE1B,SAAS,oBAAoB,aAA6B;CACxD,OAAO,GAAG,oBAAoB;AAChC;AAEA,SAAgB,eAAe,EAAE,UAAU,WAAW,GAAG,SAA0C;CACjG,MAAM,UAAU,kBAAkB;CAElC,MAAM,4BAA4B,eAAwB;EACxD,IAAI,eAAe,mBAAmB;GACpC,QAAQ,wBAAwB,IAAI;GACpC;EACF;EACA,IAAI,OAAO,eAAe,YAAY,CAAC,WAAW,WAAW,iBAAiB,GAAG;EACjF,QAAQ,aAAa,WAAW,MAAM,CAAwB,CAAC;CACjE;CAEA,IAAI,QAAQ,kBAAkB,gBAC5B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACU,yBAAAA,UAAD;EAAU,cAAW;EAAiB,GAAI;EAAO,WAAWC,cAAAA,GAAG,SAAS,SAAS;EAC9E;CACO,CAAA;CAId,MAAM,sBAAsB,QAAQ,qBAAqB;CACzD,MAAM,sBAAsB,wBAAwB,KAAA,IAAY,KAAK,oBAAoB,mBAAmB;CAC5G,MAAM,qBAAqB,QAAQ,yBAAyB,oBAAoB;CAEhF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,yBAAAA,UAAD;EACE,GAAI;EACJ,WAAWC,cAAAA,GAAG,SAAS,SAAS;EAChC,QACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,8BAAAA,YAAD;GACE,mBAAiB,QAAQ;GACzB,UAAU,QAAQ;GAClB,OAAO;GACP,eAAe;EAChB,CAAA;EAGF;CACO,CAAA;AAEd;AAUA,SAAgB,kBAAkB,EAChC,OACA,UACA,aACA,WAAW,OACX,aACyB;CACzB,MAAM,UAAU,kBAAkB;CAClC,MAAM,aAAa,QAAQ,YAAY;CAEvC,MAAM,2BAA2B;EAC/B,IAAI,CAAC,YAAY,QAAQ,aAAa,KAAK;CAC7C;CAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,kBAAD;EACE,OAAO;EACM;EACb,UAAU;EACC;EACX,SACE,QAAQ,kBAAkB,iBACxB,iBAAA,GAAA,kBAAA,IAAA,CAACC,4BAAAA,UAAD;GACE,WAAU;GACV,UAAU;GACV,SAAS,QAAQ,qBAAqB,SAAS,KAAK;GACpD,iBAAiB;EAClB,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAACC,8BAAAA,gBAAD;GAAgB,WAAU;GAAS,UAAU;GAAY,OAAO,oBAAoB,KAAK;EAAI,CAAA;CAGlG,CAAA;AAEL;AAOA,SAAgB,kBAAkB,EAAE,WAAW,OAAO,GAAG,SAAiC;CACxF,MAAM,UAAU,kBAAkB;CAElC,MAAM,0BAA0B,UAAyC;EACvE,QAAQ,iBAAiB,MAAM,OAAO,KAAK;CAC7C;CAEA,MAAM,2BAA2B,UAA2C;EAC1E,IAAI,MAAM,QAAQ,WAAW,CAAC,MAAM,YAAY,aAAa;GAC3D,MAAM,eAAe;GACrB,QAAQ,aAAa;EACvB;CACF;CAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;EACE,MAAK;EACL,mBAAiB,MAAM,gBAAgB,KAAA,IAAY,QAAQ;EAC3D,aAAY;EACZ,MAAK;EACL,GAAI;EACJ,UAAU,QAAQ,YAAY;EAC9B,OAAO,QAAQ;EACf,UAAU;EACV,WAAW;CACZ,CAAA;AAEL;AAQA,SAAgB,oBAAoB,EAClC,WACA,QAAQ,UACR,aAAa,iBACc;CAC3B,MAAM,UAAU,kBAAkB;CAElC,MAAM,kBAAkB,UAAsC;EAC5D,IAAI,QAAQ,YAAY,MAAM,WAAW,MAAM,eAAe;EAC9D,IAAI,QAAQ,wBAAwB;GAClC,MAAM,cAAc,cAAgC,sBAAoB,CAAC,EAAE,MAAM;GACjF;EACF;EACA,MAAM,cAAc,cAA2B,uCAAmC,CAAC,EAAE,MAAM;CAC7F;CAEA,MAAM,0BAA0B,UAAuC;EAErE,IAAI,QAAQ,0BAA0B,CAAC,QAAQ,WAAW,KAAK,GAAG,MAAM,eAAe;CACzF;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,yBAAAA,WAAD;EACE,MAAK;EACL,cAAW;EACX,iBAAe,QAAQ,YAAY,KAAA;EACnC,UAAU,QAAQ;EAClB,SAAS;EACT,WAAWL,cAAAA,GACT,qEACA,CAAC,QAAQ,0BAA0B,eACnC,SACF;EAVF,UAAA,CAYG,QAAQ,kBAAkB,iBACzB,iBAAA,GAAA,kBAAA,IAAA,CAACE,4BAAAA,UAAD;GACE,WAAU;GACV,cAAY;GACZ,UAAU,QAAQ;GAClB,SAAS,QAAQ;GACjB,aAAa;GACb,iBAAiB,QAAQ;EAC1B,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAACC,8BAAAA,gBAAD;GAAgB,cAAY;GAAO,WAAU;GAAS,OAAO;EAAoB,CAAA,GAElF,QAAQ,yBACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAD;GACE,cAAY;GACZ,QAAQ,QAAQ;GAChB,aAAa;GACb,SAAQ;GACR,WAAWH,cAAAA,GAAG,8BAA8B,WAAW;GACvD,WAAA;EACD,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAACM,yBAAAA,YAAD;GAAY,WAAU;GACpB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;IAAK,IAAG;IAAO,SAAQ;IAAO,MAAK;IAChC,UAAA;GACE,CAAA;EACK,CAAA,CAEL;;AAEf;AAMA,SAAgB,cAAc,EAAE,OAAO,UAAU,WAAW,OAAO,SAAS,GAAG,SAA6B;CAC1G,MAAM,UAAU,0BAA0B;CAE1C,MAAM,qBAAqB,UAAyC;EAClE,UAAU,KAAK;EACf,IAAI,CAAC,MAAM,oBAAoB,CAAC,UAAU,SAAS,aAAa;CAClE;CAEA,IAAI,SAAS,mBAAmB,CAAC,SAAS,wBAAwB,OAAO;CAEzE,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAD;EACE,GAAI;EACJ,UAAU,YAAa,YAAY,KAAA,KAAa,CAAC,QAAQ;EACzD,SAAS;CACV,CAAA;AAEL;;ACpNA,SAAS,kBAAkB,EACzB,YACA,sBACA,eACA,0BACgD;CAChD,MAAM,oBAAoB,WAAW,KAAK;CAC1C,IAAI,0BAA0B,CAAC,mBAAmB,OAAO,KAAA;CACzD,IAAI,kBAAkB,iBAAiB;EAErC,IAAI,CAAC,0BAA0B,qBAAqB,SAAS,GAAG,OAAO,KAAA;EACvE,OAAO,qBAAqB,KAAA;CAC9B;CAEA,MAAM,eAAe,yBAAyB,CAAC,GAAG,sBAAsB,iBAAiB,IAAI;CAC7F,OAAO,aAAa,SAAS,IAAI,eAAe,KAAA;AAClD;AAEA,SAAS,0BAA0B,sBAAgC,aAA+B;CAChG,IAAI,qBAAqB,SAAS,WAAW,GAC3C,OAAO,qBAAqB,QAAO,kBAAiB,kBAAkB,WAAW;CAEnF,OAAO,CAAC,GAAG,sBAAsB,WAAW;AAC9C;AAEA,SAAgB,YAAY,EAC1B,gBAAgB,iBAChB,WAAW,OACX,UACA,UACA,GAAG,SACgB;CACnB,MAAM,cAAA,GAAaC,MAAAA,MAAAA,CAAM;CACzB,MAAM,CAAC,YAAY,kBAAA,GAAiBC,MAAAA,SAAAA,CAAS,EAAE;CAC/C,MAAM,CAAC,sBAAsB,4BAAA,GAA2BA,MAAAA,SAAAA,CAAmB,CAAC,CAAC;CAC7E,MAAM,CAAC,wBAAwB,8BAAA,GAA6BA,MAAAA,SAAAA,CAAS,KAAK;CAC1E,MAAM,iBAAiB,kBAAkB;EACvC;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,kBAAkB,CAAC,YAAY,mBAAmB,KAAA;CAExD,MAAM,gBAAgB,gBAAwB;EAC5C,IAAI,UAAU;EACd,IAAI,kBAAkB,gBAAgB;GACpC,yBAAwB,kBAAiB,0BAA0B,eAAe,WAAW,CAAC;GAC9F;EACF;EACA,0BAA0B,KAAK;EAC/B,wBAAwB,CAAC,WAAW,CAAC;EACrC,SAAS,WAAW;CACtB;CAEA,MAAM,2BAA2B,aAAsB;EACrD,IAAI,UAAU;EACd,0BAA0B,QAAQ;EAClC,IAAI,YAAY,kBAAkB,iBAAiB,wBAAwB,CAAC,CAAC;CAC/E;CAEA,MAAM,oBAAoB,SAAiB;EACzC,IAAI,CAAC,UAAU,cAAc,IAAI;CACnC;CAEA,MAAM,kCAAkC;EACtC,IAAI,CAAC,YAAY,CAAC,WAAW,KAAK,GAAG,0BAA0B,KAAK;CACtE;CAEA,MAAM,qBAAqB;EACzB,IAAI,YAAY,mBAAmB,KAAA,GAAW;EAC9C,SAAS,cAAc;CACzB;CAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAe,UAAhB;EACE,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,kBAAD;GAAkB,MAAK;GAAQ,mBAAiB;GAAY,GAAI;GAC7D;EACe,CAAA;CACK,CAAA;AAE7B;;AC3FA,SAAS,gBAAgB,SAAqD;CAC5E,OACE,SAAS,QAAQ,WACf,QAAQ,UAAU,OAAO,OAAO,UAAU,YAAY,OAAO,KAAK,CACpE,KAAK,CAAC;AAEV;AAEA,SAAS,sBAAsB,EAAE,WAAyC;CACxE,MAAM,EAAE,kBAAkB,kBAAkB;CAC5C,MAAM,gBAAgB,kBAAkB;CACxC,IAAI,QAAQ,WAAW,GACrB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAD,CAAoB,CAAA,GACpB,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,EAAe,WAAU,6BAA8B,CAAA,CACpD;;CAIT,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,gBAAD,EAAA,UAAA;EACG,QAAQ,KAAI,WACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAD;GAAsC,OAAO,OAAO;GAAO,aAAa,OAAO;GAC5E,UAAA,OAAO;EACS,GAFK,OAAO,KAEZ,CACpB;EACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAD,CAAsB,CAAA;EACrB,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,EAAe,WAAU,0BAA2B,CAAA,IAAI;CAC3D,EAAA,CAAA,GACf,CAAC,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;EAAe,MAAK;EAAgB,WAAU;CAAQ,CAAA,IAAI,IAC5E,EAAA,CAAA;AAEN;AAMA,SAAS,mBAAmB,EAAE,QAAQ,YAAY,cAAc,SAAS,UAAmC;CAC1G,IAAI,QAAQ,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,EAAuB,OAAS,CAAA;CACnD,IAAI,YAAY,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;EAAO,SAAQ;EAAU,UAAA;CAAe,CAAA;CAE/D,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAD,kBAAAA,UAAA,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAD,EAAgC,QAAU,CAAA;EACzC,eAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD,EAAgB,WAAU,aAAc,CAAA,IAAI;EAC3D;CACD,EAAA,CAAA;AAEN;AAEA,SAAgB,QAAQ,EACtB,SACA,QACA,aAAa,OACb,eAAe,OACf,UACA,QACA,GAAG,SACY;CACf,MAAM,UAAU,gBAAgB,QAAQ,OAAO;CAC/C,MAAM,gBAAgB,QAAQ,SAAS,KAAK,QAAQ,kBAAkB;CACtE,MAAM,aAAa,KAAK,UAAU;EAAC,QAAQ;EAAU,QAAQ,KAAI,WAAU,OAAO,KAAK;EAAG,QAAQ;CAAa,CAAC;CAGhH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;EAEE,eAAY;EACZ,eAAe,gBAAgB,iBAAiB;EAChD,UAAU,gBAPI,WAAW,KAAA,KAAa;EAQ5B;EACV,GAAI;EAEJ,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,aAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAA,UAAkB,QAAQ,SAA0B,CAAA,GACpD,iBAAA,GAAA,kBAAA,IAAA,CAAC,oBAAD;GACU;GACI;GACE;GACL;GACD;EACT,CAAA,CACU,EAAA,CAAA;CACF,GAjBN,UAiBM;AAEjB"}
@@ -1,4 +1,4 @@
1
- import { C as comboboxStyles, S as comboboxPopupWidthClass, _ as ComboboxRoot, b as ComboboxTrigger, g as ComboboxList, l as ComboboxInput, n as ComboboxChips, o as ComboboxContent, r as ComboboxChipsInput, s as ComboboxEmpty, t as ComboboxChip, u as ComboboxItem, v as ComboboxSearch, x as ComboboxValue } from "./combobox-parts-C9o4UfH_.js";
1
+ import { C as comboboxStyles, S as comboboxPopupWidthClass, _ as ComboboxRoot, b as ComboboxTrigger, g as ComboboxList, l as ComboboxInput, n as ComboboxChips, o as ComboboxContent, r as ComboboxChipsInput, s as ComboboxEmpty, t as ComboboxChip, u as ComboboxItem, v as ComboboxSearch, x as ComboboxValue } from "./combobox-parts-_m3Qgmci.js";
2
2
  import { s as isIconButtonSize, t as Button } from "./Button-Bi7aXd_G.js";
3
3
  import { n as keepOwnAccessibleName, r as useFieldAriaIds } from "./field-control-aria-BaRSUUMR.js";
4
4
  import { n as FieldBlock, t as fieldErrorId } from "./field-error-id-6ZynvsRO.js";
@@ -303,4 +303,4 @@ function Combobox$1(props) {
303
303
  }
304
304
  export { Combobox$1 as t };
305
305
 
306
- //# sourceMappingURL=combobox-lbSxWRMl.js.map
306
+ //# sourceMappingURL=combobox-DLdInLYm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"combobox-lbSxWRMl.js","names":["BaseCombobox","_Fragment","React","Combobox"],"sources":["../src/ds/components/Combobox/combobox.tsx"],"sourcesContent":["import { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\nimport {\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n ComboboxRoot,\n ComboboxSearch,\n ComboboxTrigger,\n ComboboxValue,\n} from './combobox-parts';\nimport { comboboxPopupWidthClass, comboboxStyles } from './combobox-styles';\nimport type { ComboboxPopupWidth, ComboboxVariant } from './combobox-styles';\nimport { Button, isIconButtonSize } from '@/ds/components/Button/Button';\nimport type { ButtonSize } from '@/ds/components/Button/Button';\nimport { keepOwnAccessibleName, useFieldAriaIds } from '@/ds/components/Field/field-control-aria';\nimport { FieldBlock } from '@/ds/components/FormFieldBlocks/block/field-block';\nimport { fieldErrorId } from '@/ds/components/FormFieldBlocks/block/field-error-id';\nimport { deprecatedErrorAria } from '@/ds/primitives/form-element';\nimport type { PortalContainer } from '@/ds/primitives/portal-container';\nimport { cn } from '@/lib/utils';\n\nexport type { ComboboxPopupWidth, ComboboxVariant } from './combobox-styles';\n\nexport type ComboboxOption = {\n label: string;\n value: string;\n description?: string;\n displayLabel?: React.ReactNode;\n start?: React.ReactNode;\n end?: React.ReactNode;\n /** Extra terms the search matches besides `label` (aliases, ids, a provider name). Never displayed. */\n keywords?: readonly string[];\n};\n\ntype ComboboxSharedProps = {\n options: ComboboxOption[];\n placeholder?: React.ReactNode;\n /** The search row's placeholder for compact triggers. A field (inside a `Field`) searches in itself and shows `placeholder`. */\n searchPlaceholder?: string;\n emptyText?: string;\n className?: string;\n disabled?: boolean;\n /**\n * `default` inside a `Field` is a form field you type in to search. `ghost` (and the legacy `outline`/`link`),\n * or any variant outside a `Field`, is a compact trigger with the search inside the popup.\n */\n variant?: ComboboxVariant;\n /** Icon sizes (`icon-*`) render a chevron-only trigger with the search in the popup; pass `aria-label` to name it. */\n size?: ButtonSize;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n container?: PortalContainer;\n id?: string;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n /** Which edge of the trigger the popup lines up with. `end` opens it leftwards (e.g. an icon trigger at the end of a row). */\n align?: 'start' | 'center' | 'end';\n /** A fixed popup width for long options (e.g. model ids). Without it the popup takes the trigger's width, at least 11rem. */\n popupWidth?: ComboboxPopupWidth;\n showChevron?: boolean;\n iconOnlyValue?: boolean;\n allowCustomValue?: boolean;\n /** Called with the search text as it changes (and with `''` after a compact trigger's selection resets it). */\n onInputValueChange?: (value: string) => void;\n /** @deprecated Wrap the combobox in `<Field invalid>` with a `FieldError`. */\n error?: string;\n /** @deprecated Only keyed the `error` message id; a `Field` links its error without one. */\n name?: string;\n};\n\nexport type ComboboxSingleProps = ComboboxSharedProps & {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n};\n\nexport type ComboboxMultipleProps = ComboboxSharedProps & {\n multiple: true;\n value?: readonly string[];\n onValueChange?: (value: string[]) => void;\n clearLabel?: string;\n};\n\nexport type ComboboxProps = ComboboxSingleProps | ComboboxMultipleProps;\n\nconst EMPTY_VALUES: readonly string[] = [];\n\nfunction isMultipleCombobox(props: ComboboxProps): props is ComboboxMultipleProps {\n return props.multiple === true;\n}\n\n/** The text a field shows for its value: a plain-text `displayLabel` wins over `label`. */\nfunction optionText(option: ComboboxOption) {\n return typeof option.displayLabel === 'string' ? option.displayLabel : option.label;\n}\n\n/** Inputs take a text placeholder only; a ReactNode placeholder keeps the compact trigger. */\nfunction textPlaceholder(placeholder: React.ReactNode) {\n return typeof placeholder === 'string' ? placeholder : undefined;\n}\n\n/**\n * How the combobox renders:\n * - `field`: a single select inside a `Field` searches in the field, like a text input.\n * - `chips`: a multiple select inside a `Field` shows its picks as chips and searches in the field.\n * - `trigger`: everything else (toolbars, breadcrumbs, inline pickers that callers lay out as a button)\n * keeps a compact trigger with the search inside the popup.\n */\ntype ComboboxShape = 'field' | 'chips' | 'trigger';\n\nfunction getComboboxShape({\n inFieldContext,\n multiple,\n variant,\n size,\n iconOnlyValue,\n showChevron,\n placeholder,\n}: {\n inFieldContext: boolean;\n multiple: boolean;\n variant: ComboboxVariant;\n size: ButtonSize;\n iconOnlyValue: boolean;\n showChevron: boolean;\n placeholder: React.ReactNode;\n}): ComboboxShape {\n if (!inFieldContext) return 'trigger';\n if (variant !== 'default') return 'trigger';\n if (isIconButtonSize(size)) return 'trigger';\n if (iconOnlyValue || !showChevron) return 'trigger';\n if (placeholder !== undefined && textPlaceholder(placeholder) === undefined) return 'trigger';\n if (!multiple) return 'field';\n // The chips field is tuned to the medium control height.\n if (size !== 'md') return 'trigger';\n return 'chips';\n}\n\n/** A \"Use “text”\" option for typed text that isn't one of the options yet. */\nfunction getCustomOption(options: ComboboxOption[], inputValue: string): ComboboxOption | undefined {\n const value = inputValue.trim();\n if (!value) return undefined;\n // A field shows the selected option's text while it's closed; that isn't a new value.\n if (options.some(option => option.value === value || optionText(option) === value)) return undefined;\n return { label: `Use “${value}”`, value };\n}\n\n/** Matches the label like Base UI's default filter, the text a field shows, and any keywords. */\nfunction useOptionFilter() {\n const { contains } = BaseCombobox.useFilter();\n return (option: ComboboxOption, query: string) =>\n [option.label, optionText(option), ...(option.keywords ?? [])].some(text => contains(text, query));\n}\n\n/** Names the control when nothing else does: an `id` or a `Field` links a label to it instead. */\nfunction getFallbackAriaLabel({ hasLabel, multiple }: { hasLabel: boolean; multiple: boolean }) {\n if (hasLabel) return undefined;\n return multiple ? 'Select options' : 'Select option';\n}\n\nfunction getControlProps({\n id,\n ariaLabel,\n ariaDescribedBy,\n hasLabel,\n multiple,\n error,\n errorName,\n}: {\n id?: string;\n ariaLabel?: string;\n ariaDescribedBy?: string;\n hasLabel: boolean;\n multiple: boolean;\n error?: string;\n errorName: string;\n}) {\n const describedBy = [ariaDescribedBy, error ? fieldErrorId(errorName) : undefined].filter(Boolean).join(' ');\n return {\n id,\n 'aria-label': ariaLabel ?? getFallbackAriaLabel({ hasLabel, multiple }),\n ...keepOwnAccessibleName({ 'aria-label': ariaLabel }),\n ...deprecatedErrorAria(Boolean(error)),\n 'aria-describedby': describedBy || undefined,\n };\n}\n\ntype ControlProps = ReturnType<typeof getControlProps>;\n\nfunction triggerClassName({ iconOnlyValue, className }: { iconOnlyValue: boolean; className?: string }) {\n return cn(iconOnlyValue && 'w-auto px-2.5', className);\n}\n\n/** An option row's content: start slot, label over description, end slot. */\nfunction ComboboxOptionContent({ option }: { option: ComboboxOption }) {\n return (\n <>\n {option.start}\n <span className={comboboxStyles.optionText}>\n <span className={comboboxStyles.optionLabel}>{option.label}</span>\n {option.description && <span className={comboboxStyles.optionDescription}>{option.description}</span>}\n </span>\n {option.end ? <span className={comboboxStyles.optionEnd}>{option.end}</span> : null}\n </>\n );\n}\n\nfunction ComboboxClearFooter({ label, onClear }: { label: string; onClear: () => void }) {\n return (\n <div className=\"border-t border-border p-1\">\n <Button\n type=\"button\"\n variant=\"destructive-ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={onClear}\n icon={<X />}\n >\n {label}\n </Button>\n </div>\n );\n}\n\n/** The popup: the search row for a compact trigger (a field searches in itself), then the options. */\nfunction ComboboxOptionsContent({\n popupWidth,\n showSearch,\n searchPlaceholder,\n emptyText,\n align,\n container,\n footer,\n}: {\n popupWidth?: ComboboxPopupWidth;\n showSearch: boolean;\n searchPlaceholder: string;\n emptyText: string;\n align: 'start' | 'center' | 'end';\n container?: PortalContainer;\n footer?: React.ReactNode;\n}) {\n return (\n <ComboboxContent align={align} container={container} className={popupWidth && comboboxPopupWidthClass[popupWidth]}>\n {showSearch ? <ComboboxSearch placeholder={searchPlaceholder} /> : null}\n <ComboboxEmpty>{emptyText}</ComboboxEmpty>\n <ComboboxList>\n {(option: ComboboxOption) => (\n <ComboboxItem key={option.value} value={option}>\n <ComboboxOptionContent option={option} />\n </ComboboxItem>\n )}\n </ComboboxList>\n {footer}\n </ComboboxContent>\n );\n}\n\ntype TriggerLookProps = {\n variant: ComboboxVariant;\n size: ButtonSize;\n showChevron: boolean;\n iconOnlyValue: boolean;\n className?: string;\n};\n\nfunction SingleComboboxControl({\n shape,\n controlProps,\n placeholder,\n selectedOption,\n look,\n}: {\n shape: ComboboxShape;\n controlProps: ControlProps;\n placeholder: React.ReactNode;\n selectedOption?: ComboboxOption;\n look: TriggerLookProps;\n}) {\n if (shape === 'field') {\n return (\n <ComboboxInput\n {...controlProps}\n size={isIconButtonSize(look.size) ? undefined : look.size}\n placeholder={textPlaceholder(placeholder)}\n start={selectedOption?.start}\n className={look.className}\n />\n );\n }\n\n return (\n <ComboboxTrigger\n {...controlProps}\n variant={look.variant}\n size={look.size}\n showChevron={look.showChevron}\n icon={isIconButtonSize(look.size) ? undefined : selectedOption?.start}\n className={triggerClassName(look)}\n >\n {selectedOption?.displayLabel ?? <ComboboxValue placeholder={placeholder} />}\n </ComboboxTrigger>\n );\n}\n\nfunction MultipleComboboxControl({\n shape,\n controlProps,\n placeholder,\n selectedCount,\n look,\n}: {\n shape: ComboboxShape;\n controlProps: ControlProps;\n placeholder: React.ReactNode;\n selectedCount: number;\n look: TriggerLookProps;\n}) {\n if (shape === 'chips') {\n return (\n <ComboboxChips className={look.className}>\n <ComboboxValue>\n {(items: ComboboxOption[]) => (\n <>\n {items.map(item => (\n <ComboboxChip key={item.value}>{item.label}</ComboboxChip>\n ))}\n <ComboboxChipsInput\n {...controlProps}\n placeholder={items.length === 0 ? textPlaceholder(placeholder) : undefined}\n />\n </>\n )}\n </ComboboxValue>\n </ComboboxChips>\n );\n }\n\n const text = selectedCount === 0 ? placeholder : `${selectedCount} selected`;\n return (\n <ComboboxTrigger\n {...controlProps}\n variant={look.variant}\n size={look.size}\n showChevron={look.showChevron}\n className={triggerClassName(look)}\n >\n <span className={cn(selectedCount === 0 && comboboxStyles.placeholder)}>{text}</span>\n </ComboboxTrigger>\n );\n}\n\ntype ShapeProps = { shape: ComboboxShape; controlProps: ControlProps };\n\nfunction SingleCombobox({\n shape,\n controlProps,\n options,\n value,\n onValueChange,\n placeholder = 'Select option',\n searchPlaceholder = 'Search',\n emptyText = 'No option found.',\n className,\n disabled = false,\n variant = 'default',\n size = 'md',\n open,\n onOpenChange,\n container,\n align = 'start',\n popupWidth,\n showChevron = true,\n iconOnlyValue = false,\n allowCustomValue = false,\n onInputValueChange,\n}: ComboboxSingleProps & ShapeProps) {\n // The search text: a field's own text, or the compact trigger's popup search.\n const [inputValue, setInputValue] = React.useState('');\n const filter = useOptionFilter();\n const inField = shape === 'field';\n const selectedOption = options.find(option => option.value === value);\n const customOption = allowCustomValue ? getCustomOption(options, inputValue) : undefined;\n const items = customOption ? [customOption, ...options] : options;\n\n function handleInputValueChange(next: string) {\n setInputValue(next);\n onInputValueChange?.(next);\n }\n\n function handleValueChange(item: ComboboxOption | null) {\n if (!item) return;\n onValueChange?.(item.value);\n // A field shows the picked option; a compact trigger's popup search starts empty next time.\n if (!inField) handleInputValueChange('');\n }\n\n return (\n <ComboboxRoot\n autoHighlight\n items={items}\n filter={filter}\n itemToStringLabel={optionText}\n // Base UI's \"nothing selected\" is null.\n value={selectedOption ?? null}\n // A field owns its text (the selected option's, or the search); a compact trigger's search is reset here.\n inputValue={inField ? undefined : inputValue}\n onInputValueChange={handleInputValueChange}\n onValueChange={handleValueChange}\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n >\n <SingleComboboxControl\n shape={shape}\n controlProps={controlProps}\n placeholder={placeholder}\n selectedOption={selectedOption}\n look={{ variant, size, showChevron, iconOnlyValue, className }}\n />\n <ComboboxOptionsContent\n popupWidth={popupWidth}\n showSearch={!inField}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n align={align}\n container={container}\n />\n </ComboboxRoot>\n );\n}\n\nfunction MultipleCombobox({\n shape,\n controlProps,\n options,\n value = EMPTY_VALUES,\n onValueChange,\n clearLabel,\n placeholder = 'Select options',\n searchPlaceholder = 'Search',\n emptyText = 'No option found.',\n className,\n disabled = false,\n variant = 'default',\n size = 'md',\n open,\n onOpenChange,\n container,\n align = 'start',\n popupWidth,\n showChevron = true,\n iconOnlyValue = false,\n}: ComboboxMultipleProps & ShapeProps) {\n const filter = useOptionFilter();\n const selectedValues = new Set(value);\n const selectedOptions = options.filter(option => selectedValues.has(option.value));\n const footer =\n clearLabel && selectedOptions.length > 0 ? (\n <ComboboxClearFooter label={clearLabel} onClear={() => onValueChange?.([])} />\n ) : undefined;\n\n return (\n <ComboboxRoot\n multiple\n autoHighlight\n items={options}\n filter={filter}\n value={selectedOptions}\n onValueChange={items => onValueChange?.(items.map(item => item.value))}\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n >\n <MultipleComboboxControl\n shape={shape}\n controlProps={controlProps}\n placeholder={placeholder}\n selectedCount={selectedOptions.length}\n look={{ variant, size, showChevron, iconOnlyValue, className }}\n />\n <ComboboxOptionsContent\n popupWidth={popupWidth}\n showSearch={shape !== 'chips'}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n align={align}\n container={container}\n footer={footer}\n />\n </ComboboxRoot>\n );\n}\n\n/**\n * A searchable select driven by `options`, built on the Combobox parts.\n *\n * Inside a `Field`, a `default` combobox searches right in the field: a text field for a single value,\n * removable chips for `multiple`. Everywhere else (outside a `Field`, `ghost` and icon-size triggers,\n * custom non-text placeholders) it keeps a compact trigger with the search inside the popup. For anything\n * these props don't cover (groups, rich items), compose the parts directly (`ComboboxRoot`, ...).\n */\nexport function Combobox(props: ComboboxProps) {\n const field = useFieldAriaIds();\n const generatedName = React.useId();\n const multiple = isMultipleCombobox(props);\n const shape = getComboboxShape({\n inFieldContext: Boolean(field),\n multiple,\n variant: props.variant ?? 'default',\n size: props.size ?? 'md',\n iconOnlyValue: props.iconOnlyValue ?? false,\n showChevron: props.showChevron ?? true,\n placeholder: props.placeholder,\n });\n const errorName = props.name ?? generatedName;\n const controlProps = getControlProps({\n id: props.id,\n ariaLabel: props['aria-label'],\n ariaDescribedBy: props['aria-describedby'],\n hasLabel: Boolean(props.id || field),\n multiple,\n error: props.error,\n errorName,\n });\n\n const root = isMultipleCombobox(props) ? (\n <MultipleCombobox {...props} shape={shape} controlProps={controlProps} />\n ) : (\n <SingleCombobox {...props} shape={shape} controlProps={controlProps} />\n );\n\n if (!props.error) return root;\n\n return (\n <div className={comboboxStyles.root}>\n {root}\n <FieldBlock.ErrorMsg name={errorName}>{props.error}</FieldBlock.ErrorMsg>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AA4FA,IAAM,eAAkC,CAAC;AAEzC,SAAS,mBAAmB,OAAsD;CAChF,OAAO,MAAM,aAAa;AAC5B;;AAGA,SAAS,WAAW,QAAwB;CAC1C,OAAO,OAAO,OAAO,iBAAiB,WAAW,OAAO,eAAe,OAAO;AAChF;;AAGA,SAAS,gBAAgB,aAA8B;CACrD,OAAO,OAAO,gBAAgB,WAAW,cAAc,KAAA;AACzD;AAWA,SAAS,iBAAiB,EACxB,gBACA,UACA,SACA,MACA,eACA,aACA,eASgB;CAChB,IAAI,CAAC,gBAAgB,OAAO;CAC5B,IAAI,YAAY,WAAW,OAAO;CAClC,IAAI,iBAAiB,IAAI,GAAG,OAAO;CACnC,IAAI,iBAAiB,CAAC,aAAa,OAAO;CAC1C,IAAI,gBAAgB,KAAA,KAAa,gBAAgB,WAAW,MAAM,KAAA,GAAW,OAAO;CACpF,IAAI,CAAC,UAAU,OAAO;CAEtB,IAAI,SAAS,MAAM,OAAO;CAC1B,OAAO;AACT;;AAGA,SAAS,gBAAgB,SAA2B,YAAgD;CAClG,MAAM,QAAQ,WAAW,KAAK;CAC9B,IAAI,CAAC,OAAO,OAAO,KAAA;CAEnB,IAAI,QAAQ,MAAK,WAAU,OAAO,UAAU,SAAS,WAAW,MAAM,MAAM,KAAK,GAAG,OAAO,KAAA;CAC3F,OAAO;EAAE,OAAO,QAAQ,MAAM;EAAI;CAAM;AAC1C;;AAGA,SAAS,kBAAkB;CACzB,MAAM,EAAE,aAAaA,SAAa,UAAU;CAC5C,QAAQ,QAAwB,UAC9B;EAAC,OAAO;EAAO,WAAW,MAAM;EAAG,GAAI,OAAO,YAAY,CAAC;CAAE,CAAC,CAAC,MAAK,SAAQ,SAAS,MAAM,KAAK,CAAC;AACrG;;AAGA,SAAS,qBAAqB,EAAE,UAAU,YAAsD;CAC9F,IAAI,UAAU,OAAO,KAAA;CACrB,OAAO,WAAW,mBAAmB;AACvC;AAEA,SAAS,gBAAgB,EACvB,IACA,WACA,iBACA,UACA,UACA,OACA,aASC;CACD,MAAM,cAAc,CAAC,iBAAiB,QAAQ,aAAa,SAAS,IAAI,KAAA,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAC3G,OAAO;EACL;EACA,cAAc,aAAa,qBAAqB;GAAE;GAAU;EAAS,CAAC;EACtE,GAAG,sBAAsB,EAAE,cAAc,UAAU,CAAC;EACpD,GAAG,oBAAoB,QAAQ,KAAK,CAAC;EACrC,oBAAoB,eAAe,KAAA;CACrC;AACF;AAIA,SAAS,iBAAiB,EAAE,eAAe,aAA6D;CACtG,OAAO,GAAG,iBAAiB,iBAAiB,SAAS;AACvD;;AAGA,SAAS,sBAAsB,EAAE,UAAsC;CACrE,OACE,qBAAAC,YAAA,EAAA,UAAA;EACG,OAAO;EACR,qBAAC,QAAD;GAAM,WAAW,eAAe;GAAhC,UAAA,CACE,oBAAC,QAAD;IAAM,WAAW,eAAe;IAAc,UAAA,OAAO;GAAY,CAAA,GAChE,OAAO,eAAe,oBAAC,QAAD;IAAM,WAAW,eAAe;IAAoB,UAAA,OAAO;GAAkB,CAAA,CAChG;;EACL,OAAO,MAAM,oBAAC,QAAD;GAAM,WAAW,eAAe;GAAY,UAAA,OAAO;EAAU,CAAA,IAAI;CAC/E,EAAA,CAAA;AAEN;AAEA,SAAS,oBAAoB,EAAE,OAAO,WAAmD;CACvF,OACE,oBAAC,OAAD;EAAK,WAAU;EACb,UAAA,oBAAC,QAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,WAAU;GACV,SAAS;GACT,MAAM,oBAAC,GAAD,CAAI,CAAA;GAET,UAAA;EACK,CAAA;CACL,CAAA;AAET;;AAGA,SAAS,uBAAuB,EAC9B,YACA,YACA,mBACA,WACA,OACA,WACA,UASC;CACD,OACE,qBAAC,iBAAD;EAAwB;EAAkB;EAAW,WAAW,cAAc,wBAAwB;EAAtG,UAAA;GACG,aAAa,oBAAC,gBAAD,EAAgB,aAAa,kBAAoB,CAAA,IAAI;GACnE,oBAAC,eAAD,EAAA,UAAgB,UAAyB,CAAA;GACzC,oBAAC,cAAD,EAAA,WACI,WACA,oBAAC,cAAD;IAAiC,OAAO;IACtC,UAAA,oBAAC,uBAAD,EAA+B,OAAS,CAAA;GAC5B,GAFK,OAAO,KAEZ,EAEJ,CAAA;GACb;EACc;;AAErB;AAUA,SAAS,sBAAsB,EAC7B,OACA,cACA,aACA,gBACA,QAOC;CACD,IAAI,UAAU,SACZ,OACE,oBAAC,eAAD;EACE,GAAI;EACJ,MAAM,iBAAiB,KAAK,IAAI,IAAI,KAAA,IAAY,KAAK;EACrD,aAAa,gBAAgB,WAAW;EACxC,OAAO,gBAAgB;EACvB,WAAW,KAAK;CACjB,CAAA;CAIL,OACE,oBAAC,iBAAD;EACE,GAAI;EACJ,SAAS,KAAK;EACd,MAAM,KAAK;EACX,aAAa,KAAK;EAClB,MAAM,iBAAiB,KAAK,IAAI,IAAI,KAAA,IAAY,gBAAgB;EAChE,WAAW,iBAAiB,IAAI;EAE/B,UAAA,gBAAgB,gBAAgB,oBAAC,eAAD,EAA4B,YAAc,CAAA;CAC5D,CAAA;AAErB;AAEA,SAAS,wBAAwB,EAC/B,OACA,cACA,aACA,eACA,QAOC;CACD,IAAI,UAAU,SACZ,OACE,oBAAC,eAAD;EAAe,WAAW,KAAK;EAC7B,UAAA,oBAAC,eAAD,EAAA,WACI,UACA,qBAAAA,YAAA,EAAA,UAAA,CACG,MAAM,KAAI,SACT,oBAAC,cAAD,EAAA,UAAgC,KAAK,MAAoB,GAAtC,KAAK,KAAiC,CAC1D,GACD,oBAAC,oBAAD;GACE,GAAI;GACJ,aAAa,MAAM,WAAW,IAAI,gBAAgB,WAAW,IAAI,KAAA;EAClE,CAAA,CACD,EAAA,CAAA,EAES,CAAA;CACF,CAAA;CAInB,MAAM,OAAO,kBAAkB,IAAI,cAAc,GAAG,cAAc;CAClE,OACE,oBAAC,iBAAD;EACE,GAAI;EACJ,SAAS,KAAK;EACd,MAAM,KAAK;EACX,aAAa,KAAK;EAClB,WAAW,iBAAiB,IAAI;EAEhC,UAAA,oBAAC,QAAD;GAAM,WAAW,GAAG,kBAAkB,KAAK,eAAe,WAAW;GAAI,UAAA;EAAW,CAAA;CACrE,CAAA;AAErB;AAIA,SAAS,eAAe,EACtB,OACA,cACA,SACA,OACA,eACA,cAAc,iBACd,oBAAoB,UACpB,YAAY,oBACZ,WACA,WAAW,OACX,UAAU,WACV,OAAO,MACP,MACA,cACA,WACA,QAAQ,SACR,YACA,cAAc,MACd,gBAAgB,OAChB,mBAAmB,OACnB,sBACmC;CAEnC,MAAM,CAAC,YAAY,iBAAiBC,QAAM,SAAS,EAAE;CACrD,MAAM,SAAS,gBAAgB;CAC/B,MAAM,UAAU,UAAU;CAC1B,MAAM,iBAAiB,QAAQ,MAAK,WAAU,OAAO,UAAU,KAAK;CACpE,MAAM,eAAe,mBAAmB,gBAAgB,SAAS,UAAU,IAAI,KAAA;CAC/E,MAAM,QAAQ,eAAe,CAAC,cAAc,GAAG,OAAO,IAAI;CAE1D,SAAS,uBAAuB,MAAc;EAC5C,cAAc,IAAI;EAClB,qBAAqB,IAAI;CAC3B;CAEA,SAAS,kBAAkB,MAA6B;EACtD,IAAI,CAAC,MAAM;EACX,gBAAgB,KAAK,KAAK;EAE1B,IAAI,CAAC,SAAS,uBAAuB,EAAE;CACzC;CAEA,OACE,qBAAC,cAAD;EACE,eAAA;EACO;EACC;EACR,mBAAmB;EAEnB,OAAO,kBAAkB;EAEzB,YAAY,UAAU,KAAA,IAAY;EAClC,oBAAoB;EACpB,eAAe;EACL;EACJ;EACQ;EAbhB,UAAA,CAeE,oBAAC,uBAAD;GACS;GACO;GACD;GACG;GAChB,MAAM;IAAE;IAAS;IAAM;IAAa;IAAe;GAAU;EAC9D,CAAA,GACD,oBAAC,wBAAD;GACc;GACZ,YAAY,CAAC;GACM;GACR;GACJ;GACI;EACZ,CAAA,CACW;;AAElB;AAEA,SAAS,iBAAiB,EACxB,OACA,cACA,SACA,QAAQ,cACR,eACA,YACA,cAAc,kBACd,oBAAoB,UACpB,YAAY,oBACZ,WACA,WAAW,OACX,UAAU,WACV,OAAO,MACP,MACA,cACA,WACA,QAAQ,SACR,YACA,cAAc,MACd,gBAAgB,SACqB;CACrC,MAAM,SAAS,gBAAgB;CAC/B,MAAM,iBAAiB,IAAI,IAAI,KAAK;CACpC,MAAM,kBAAkB,QAAQ,QAAO,WAAU,eAAe,IAAI,OAAO,KAAK,CAAC;CACjF,MAAM,SACJ,cAAc,gBAAgB,SAAS,IACrC,oBAAC,qBAAD;EAAqB,OAAO;EAAY,eAAe,gBAAgB,CAAC,CAAC;CAAI,CAAA,IAC3E,KAAA;CAEN,OACE,qBAAC,cAAD;EACE,UAAA;EACA,eAAA;EACA,OAAO;EACC;EACR,OAAO;EACP,gBAAe,UAAS,gBAAgB,MAAM,KAAI,SAAQ,KAAK,KAAK,CAAC;EAC3D;EACJ;EACQ;EAThB,UAAA,CAWE,oBAAC,yBAAD;GACS;GACO;GACD;GACb,eAAe,gBAAgB;GAC/B,MAAM;IAAE;IAAS;IAAM;IAAa;IAAe;GAAU;EAC9D,CAAA,GACD,oBAAC,wBAAD;GACc;GACZ,YAAY,UAAU;GACH;GACR;GACJ;GACI;GACH;EACT,CAAA,CACW;;AAElB;;;;;;;;;AAUA,SAAgBC,WAAS,OAAsB;CAC7C,MAAM,QAAQ,gBAAgB;CAC9B,MAAM,gBAAgBD,QAAM,MAAM;CAClC,MAAM,WAAW,mBAAmB,KAAK;CACzC,MAAM,QAAQ,iBAAiB;EAC7B,gBAAgB,QAAQ,KAAK;EAC7B;EACA,SAAS,MAAM,WAAW;EAC1B,MAAM,MAAM,QAAQ;EACpB,eAAe,MAAM,iBAAiB;EACtC,aAAa,MAAM,eAAe;EAClC,aAAa,MAAM;CACrB,CAAC;CACD,MAAM,YAAY,MAAM,QAAQ;CAChC,MAAM,eAAe,gBAAgB;EACnC,IAAI,MAAM;EACV,WAAW,MAAM;EACjB,iBAAiB,MAAM;EACvB,UAAU,QAAQ,MAAM,MAAM,KAAK;EACnC;EACA,OAAO,MAAM;EACb;CACF,CAAC;CAED,MAAM,OAAO,mBAAmB,KAAK,IACnC,oBAAC,kBAAD;EAAkB,GAAI;EAAc;EAAqB;CAAe,CAAA,IAExE,oBAAC,gBAAD;EAAgB,GAAI;EAAc;EAAqB;CAAe,CAAA;CAGxE,IAAI,CAAC,MAAM,OAAO,OAAO;CAEzB,OACE,qBAAC,OAAD;EAAK,WAAW,eAAe;EAA/B,UAAA,CACG,MACD,oBAAC,WAAW,UAAZ;GAAqB,MAAM;GAAY,UAAA,MAAM;EAA2B,CAAA,CACrE;;AAET"}
1
+ {"version":3,"file":"combobox-DLdInLYm.js","names":["BaseCombobox","_Fragment","React","Combobox"],"sources":["../src/ds/components/Combobox/combobox.tsx"],"sourcesContent":["import { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\nimport {\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n ComboboxRoot,\n ComboboxSearch,\n ComboboxTrigger,\n ComboboxValue,\n} from './combobox-parts';\nimport { comboboxPopupWidthClass, comboboxStyles } from './combobox-styles';\nimport type { ComboboxPopupWidth, ComboboxVariant } from './combobox-styles';\nimport { Button, isIconButtonSize } from '@/ds/components/Button/Button';\nimport type { ButtonSize } from '@/ds/components/Button/Button';\nimport { keepOwnAccessibleName, useFieldAriaIds } from '@/ds/components/Field/field-control-aria';\nimport { FieldBlock } from '@/ds/components/FormFieldBlocks/block/field-block';\nimport { fieldErrorId } from '@/ds/components/FormFieldBlocks/block/field-error-id';\nimport { deprecatedErrorAria } from '@/ds/primitives/form-element';\nimport type { PortalContainer } from '@/ds/primitives/portal-container';\nimport { cn } from '@/lib/utils';\n\nexport type { ComboboxPopupWidth, ComboboxVariant } from './combobox-styles';\n\nexport type ComboboxOption = {\n label: string;\n value: string;\n description?: string;\n displayLabel?: React.ReactNode;\n start?: React.ReactNode;\n end?: React.ReactNode;\n /** Extra terms the search matches besides `label` (aliases, ids, a provider name). Never displayed. */\n keywords?: readonly string[];\n};\n\ntype ComboboxSharedProps = {\n options: ComboboxOption[];\n placeholder?: React.ReactNode;\n /** The search row's placeholder for compact triggers. A field (inside a `Field`) searches in itself and shows `placeholder`. */\n searchPlaceholder?: string;\n emptyText?: string;\n className?: string;\n disabled?: boolean;\n /**\n * `default` inside a `Field` is a form field you type in to search. `ghost` (and the legacy `outline`/`link`),\n * or any variant outside a `Field`, is a compact trigger with the search inside the popup.\n */\n variant?: ComboboxVariant;\n /** Icon sizes (`icon-*`) render a chevron-only trigger with the search in the popup; pass `aria-label` to name it. */\n size?: ButtonSize;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n container?: PortalContainer;\n id?: string;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n /** Which edge of the trigger the popup lines up with. `end` opens it leftwards (e.g. an icon trigger at the end of a row). */\n align?: 'start' | 'center' | 'end';\n /** A fixed popup width for long options (e.g. model ids). Without it the popup takes the trigger's width, at least 11rem. */\n popupWidth?: ComboboxPopupWidth;\n showChevron?: boolean;\n iconOnlyValue?: boolean;\n allowCustomValue?: boolean;\n /** Called with the search text as it changes (and with `''` after a compact trigger's selection resets it). */\n onInputValueChange?: (value: string) => void;\n /** @deprecated Wrap the combobox in `<Field invalid>` with a `FieldError`. */\n error?: string;\n /** @deprecated Only keyed the `error` message id; a `Field` links its error without one. */\n name?: string;\n};\n\nexport type ComboboxSingleProps = ComboboxSharedProps & {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n};\n\nexport type ComboboxMultipleProps = ComboboxSharedProps & {\n multiple: true;\n value?: readonly string[];\n onValueChange?: (value: string[]) => void;\n clearLabel?: string;\n};\n\nexport type ComboboxProps = ComboboxSingleProps | ComboboxMultipleProps;\n\nconst EMPTY_VALUES: readonly string[] = [];\n\nfunction isMultipleCombobox(props: ComboboxProps): props is ComboboxMultipleProps {\n return props.multiple === true;\n}\n\n/** The text a field shows for its value: a plain-text `displayLabel` wins over `label`. */\nfunction optionText(option: ComboboxOption) {\n return typeof option.displayLabel === 'string' ? option.displayLabel : option.label;\n}\n\n/** Inputs take a text placeholder only; a ReactNode placeholder keeps the compact trigger. */\nfunction textPlaceholder(placeholder: React.ReactNode) {\n return typeof placeholder === 'string' ? placeholder : undefined;\n}\n\n/**\n * How the combobox renders:\n * - `field`: a single select inside a `Field` searches in the field, like a text input.\n * - `chips`: a multiple select inside a `Field` shows its picks as chips and searches in the field.\n * - `trigger`: everything else (toolbars, breadcrumbs, inline pickers that callers lay out as a button)\n * keeps a compact trigger with the search inside the popup.\n */\ntype ComboboxShape = 'field' | 'chips' | 'trigger';\n\nfunction getComboboxShape({\n inFieldContext,\n multiple,\n variant,\n size,\n iconOnlyValue,\n showChevron,\n placeholder,\n}: {\n inFieldContext: boolean;\n multiple: boolean;\n variant: ComboboxVariant;\n size: ButtonSize;\n iconOnlyValue: boolean;\n showChevron: boolean;\n placeholder: React.ReactNode;\n}): ComboboxShape {\n if (!inFieldContext) return 'trigger';\n if (variant !== 'default') return 'trigger';\n if (isIconButtonSize(size)) return 'trigger';\n if (iconOnlyValue || !showChevron) return 'trigger';\n if (placeholder !== undefined && textPlaceholder(placeholder) === undefined) return 'trigger';\n if (!multiple) return 'field';\n // The chips field is tuned to the medium control height.\n if (size !== 'md') return 'trigger';\n return 'chips';\n}\n\n/** A \"Use “text”\" option for typed text that isn't one of the options yet. */\nfunction getCustomOption(options: ComboboxOption[], inputValue: string): ComboboxOption | undefined {\n const value = inputValue.trim();\n if (!value) return undefined;\n // A field shows the selected option's text while it's closed; that isn't a new value.\n if (options.some(option => option.value === value || optionText(option) === value)) return undefined;\n return { label: `Use “${value}”`, value };\n}\n\n/** Matches the label like Base UI's default filter, the text a field shows, and any keywords. */\nfunction useOptionFilter() {\n const { contains } = BaseCombobox.useFilter();\n return (option: ComboboxOption, query: string) =>\n [option.label, optionText(option), ...(option.keywords ?? [])].some(text => contains(text, query));\n}\n\n/** Names the control when nothing else does: an `id` or a `Field` links a label to it instead. */\nfunction getFallbackAriaLabel({ hasLabel, multiple }: { hasLabel: boolean; multiple: boolean }) {\n if (hasLabel) return undefined;\n return multiple ? 'Select options' : 'Select option';\n}\n\nfunction getControlProps({\n id,\n ariaLabel,\n ariaDescribedBy,\n hasLabel,\n multiple,\n error,\n errorName,\n}: {\n id?: string;\n ariaLabel?: string;\n ariaDescribedBy?: string;\n hasLabel: boolean;\n multiple: boolean;\n error?: string;\n errorName: string;\n}) {\n const describedBy = [ariaDescribedBy, error ? fieldErrorId(errorName) : undefined].filter(Boolean).join(' ');\n return {\n id,\n 'aria-label': ariaLabel ?? getFallbackAriaLabel({ hasLabel, multiple }),\n ...keepOwnAccessibleName({ 'aria-label': ariaLabel }),\n ...deprecatedErrorAria(Boolean(error)),\n 'aria-describedby': describedBy || undefined,\n };\n}\n\ntype ControlProps = ReturnType<typeof getControlProps>;\n\nfunction triggerClassName({ iconOnlyValue, className }: { iconOnlyValue: boolean; className?: string }) {\n return cn(iconOnlyValue && 'w-auto px-2.5', className);\n}\n\n/** An option row's content: start slot, label over description, end slot. */\nfunction ComboboxOptionContent({ option }: { option: ComboboxOption }) {\n return (\n <>\n {option.start}\n <span className={comboboxStyles.optionText}>\n <span className={comboboxStyles.optionLabel}>{option.label}</span>\n {option.description && <span className={comboboxStyles.optionDescription}>{option.description}</span>}\n </span>\n {option.end ? <span className={comboboxStyles.optionEnd}>{option.end}</span> : null}\n </>\n );\n}\n\nfunction ComboboxClearFooter({ label, onClear }: { label: string; onClear: () => void }) {\n return (\n <div className=\"border-t border-border p-1\">\n <Button\n type=\"button\"\n variant=\"destructive-ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={onClear}\n icon={<X />}\n >\n {label}\n </Button>\n </div>\n );\n}\n\n/** The popup: the search row for a compact trigger (a field searches in itself), then the options. */\nfunction ComboboxOptionsContent({\n popupWidth,\n showSearch,\n searchPlaceholder,\n emptyText,\n align,\n container,\n footer,\n}: {\n popupWidth?: ComboboxPopupWidth;\n showSearch: boolean;\n searchPlaceholder: string;\n emptyText: string;\n align: 'start' | 'center' | 'end';\n container?: PortalContainer;\n footer?: React.ReactNode;\n}) {\n return (\n <ComboboxContent align={align} container={container} className={popupWidth && comboboxPopupWidthClass[popupWidth]}>\n {showSearch ? <ComboboxSearch placeholder={searchPlaceholder} /> : null}\n <ComboboxEmpty>{emptyText}</ComboboxEmpty>\n <ComboboxList>\n {(option: ComboboxOption) => (\n <ComboboxItem key={option.value} value={option}>\n <ComboboxOptionContent option={option} />\n </ComboboxItem>\n )}\n </ComboboxList>\n {footer}\n </ComboboxContent>\n );\n}\n\ntype TriggerLookProps = {\n variant: ComboboxVariant;\n size: ButtonSize;\n showChevron: boolean;\n iconOnlyValue: boolean;\n className?: string;\n};\n\nfunction SingleComboboxControl({\n shape,\n controlProps,\n placeholder,\n selectedOption,\n look,\n}: {\n shape: ComboboxShape;\n controlProps: ControlProps;\n placeholder: React.ReactNode;\n selectedOption?: ComboboxOption;\n look: TriggerLookProps;\n}) {\n if (shape === 'field') {\n return (\n <ComboboxInput\n {...controlProps}\n size={isIconButtonSize(look.size) ? undefined : look.size}\n placeholder={textPlaceholder(placeholder)}\n start={selectedOption?.start}\n className={look.className}\n />\n );\n }\n\n return (\n <ComboboxTrigger\n {...controlProps}\n variant={look.variant}\n size={look.size}\n showChevron={look.showChevron}\n icon={isIconButtonSize(look.size) ? undefined : selectedOption?.start}\n className={triggerClassName(look)}\n >\n {selectedOption?.displayLabel ?? <ComboboxValue placeholder={placeholder} />}\n </ComboboxTrigger>\n );\n}\n\nfunction MultipleComboboxControl({\n shape,\n controlProps,\n placeholder,\n selectedCount,\n look,\n}: {\n shape: ComboboxShape;\n controlProps: ControlProps;\n placeholder: React.ReactNode;\n selectedCount: number;\n look: TriggerLookProps;\n}) {\n if (shape === 'chips') {\n return (\n <ComboboxChips className={look.className}>\n <ComboboxValue>\n {(items: ComboboxOption[]) => (\n <>\n {items.map(item => (\n <ComboboxChip key={item.value}>{item.label}</ComboboxChip>\n ))}\n <ComboboxChipsInput\n {...controlProps}\n placeholder={items.length === 0 ? textPlaceholder(placeholder) : undefined}\n />\n </>\n )}\n </ComboboxValue>\n </ComboboxChips>\n );\n }\n\n const text = selectedCount === 0 ? placeholder : `${selectedCount} selected`;\n return (\n <ComboboxTrigger\n {...controlProps}\n variant={look.variant}\n size={look.size}\n showChevron={look.showChevron}\n className={triggerClassName(look)}\n >\n <span className={cn(selectedCount === 0 && comboboxStyles.placeholder)}>{text}</span>\n </ComboboxTrigger>\n );\n}\n\ntype ShapeProps = { shape: ComboboxShape; controlProps: ControlProps };\n\nfunction SingleCombobox({\n shape,\n controlProps,\n options,\n value,\n onValueChange,\n placeholder = 'Select option',\n searchPlaceholder = 'Search',\n emptyText = 'No option found.',\n className,\n disabled = false,\n variant = 'default',\n size = 'md',\n open,\n onOpenChange,\n container,\n align = 'start',\n popupWidth,\n showChevron = true,\n iconOnlyValue = false,\n allowCustomValue = false,\n onInputValueChange,\n}: ComboboxSingleProps & ShapeProps) {\n // The search text: a field's own text, or the compact trigger's popup search.\n const [inputValue, setInputValue] = React.useState('');\n const filter = useOptionFilter();\n const inField = shape === 'field';\n const selectedOption = options.find(option => option.value === value);\n const customOption = allowCustomValue ? getCustomOption(options, inputValue) : undefined;\n const items = customOption ? [customOption, ...options] : options;\n\n function handleInputValueChange(next: string) {\n setInputValue(next);\n onInputValueChange?.(next);\n }\n\n function handleValueChange(item: ComboboxOption | null) {\n if (!item) return;\n onValueChange?.(item.value);\n // A field shows the picked option; a compact trigger's popup search starts empty next time.\n if (!inField) handleInputValueChange('');\n }\n\n return (\n <ComboboxRoot\n autoHighlight\n items={items}\n filter={filter}\n itemToStringLabel={optionText}\n // Base UI's \"nothing selected\" is null.\n value={selectedOption ?? null}\n // A field owns its text (the selected option's, or the search); a compact trigger's search is reset here.\n inputValue={inField ? undefined : inputValue}\n onInputValueChange={handleInputValueChange}\n onValueChange={handleValueChange}\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n >\n <SingleComboboxControl\n shape={shape}\n controlProps={controlProps}\n placeholder={placeholder}\n selectedOption={selectedOption}\n look={{ variant, size, showChevron, iconOnlyValue, className }}\n />\n <ComboboxOptionsContent\n popupWidth={popupWidth}\n showSearch={!inField}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n align={align}\n container={container}\n />\n </ComboboxRoot>\n );\n}\n\nfunction MultipleCombobox({\n shape,\n controlProps,\n options,\n value = EMPTY_VALUES,\n onValueChange,\n clearLabel,\n placeholder = 'Select options',\n searchPlaceholder = 'Search',\n emptyText = 'No option found.',\n className,\n disabled = false,\n variant = 'default',\n size = 'md',\n open,\n onOpenChange,\n container,\n align = 'start',\n popupWidth,\n showChevron = true,\n iconOnlyValue = false,\n}: ComboboxMultipleProps & ShapeProps) {\n const filter = useOptionFilter();\n const selectedValues = new Set(value);\n const selectedOptions = options.filter(option => selectedValues.has(option.value));\n const footer =\n clearLabel && selectedOptions.length > 0 ? (\n <ComboboxClearFooter label={clearLabel} onClear={() => onValueChange?.([])} />\n ) : undefined;\n\n return (\n <ComboboxRoot\n multiple\n autoHighlight\n items={options}\n filter={filter}\n value={selectedOptions}\n onValueChange={items => onValueChange?.(items.map(item => item.value))}\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n >\n <MultipleComboboxControl\n shape={shape}\n controlProps={controlProps}\n placeholder={placeholder}\n selectedCount={selectedOptions.length}\n look={{ variant, size, showChevron, iconOnlyValue, className }}\n />\n <ComboboxOptionsContent\n popupWidth={popupWidth}\n showSearch={shape !== 'chips'}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n align={align}\n container={container}\n footer={footer}\n />\n </ComboboxRoot>\n );\n}\n\n/**\n * A searchable select driven by `options`, built on the Combobox parts.\n *\n * Inside a `Field`, a `default` combobox searches right in the field: a text field for a single value,\n * removable chips for `multiple`. Everywhere else (outside a `Field`, `ghost` and icon-size triggers,\n * custom non-text placeholders) it keeps a compact trigger with the search inside the popup. For anything\n * these props don't cover (groups, rich items), compose the parts directly (`ComboboxRoot`, ...).\n */\nexport function Combobox(props: ComboboxProps) {\n const field = useFieldAriaIds();\n const generatedName = React.useId();\n const multiple = isMultipleCombobox(props);\n const shape = getComboboxShape({\n inFieldContext: Boolean(field),\n multiple,\n variant: props.variant ?? 'default',\n size: props.size ?? 'md',\n iconOnlyValue: props.iconOnlyValue ?? false,\n showChevron: props.showChevron ?? true,\n placeholder: props.placeholder,\n });\n const errorName = props.name ?? generatedName;\n const controlProps = getControlProps({\n id: props.id,\n ariaLabel: props['aria-label'],\n ariaDescribedBy: props['aria-describedby'],\n hasLabel: Boolean(props.id || field),\n multiple,\n error: props.error,\n errorName,\n });\n\n const root = isMultipleCombobox(props) ? (\n <MultipleCombobox {...props} shape={shape} controlProps={controlProps} />\n ) : (\n <SingleCombobox {...props} shape={shape} controlProps={controlProps} />\n );\n\n if (!props.error) return root;\n\n return (\n <div className={comboboxStyles.root}>\n {root}\n <FieldBlock.ErrorMsg name={errorName}>{props.error}</FieldBlock.ErrorMsg>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-CmQyd0Gu.cjs");
2
- const require_combobox_parts = require("./combobox-parts-BeNqgCbj.cjs");
2
+ const require_combobox_parts = require("./combobox-parts-C236ZHtn.cjs");
3
3
  const require_Button = require("./Button-BfICfyxD.cjs");
4
4
  const require_field_control_aria = require("./field-control-aria-Dw0_ObOU.cjs");
5
5
  const require_field_error_id = require("./field-error-id-VimPQI_b.cjs");
@@ -310,4 +310,4 @@ Object.defineProperty(exports, "Combobox", {
310
310
  }
311
311
  });
312
312
 
313
- //# sourceMappingURL=combobox-i723LxeC.cjs.map
313
+ //# sourceMappingURL=combobox-DU2jsrGa.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"combobox-i723LxeC.cjs","names":["isIconButtonSize","BaseCombobox","fieldErrorId","keepOwnAccessibleName","deprecatedErrorAria","cn","_Fragment","comboboxStyles","Button","X","ComboboxContent","comboboxPopupWidthClass","ComboboxSearch","ComboboxEmpty","ComboboxList","ComboboxItem","ComboboxInput","ComboboxTrigger","ComboboxValue","ComboboxChips","ComboboxChip","ComboboxChipsInput","React","ComboboxRoot","useFieldAriaIds","FieldBlock"],"sources":["../src/ds/components/Combobox/combobox.tsx"],"sourcesContent":["import { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\nimport {\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n ComboboxRoot,\n ComboboxSearch,\n ComboboxTrigger,\n ComboboxValue,\n} from './combobox-parts';\nimport { comboboxPopupWidthClass, comboboxStyles } from './combobox-styles';\nimport type { ComboboxPopupWidth, ComboboxVariant } from './combobox-styles';\nimport { Button, isIconButtonSize } from '@/ds/components/Button/Button';\nimport type { ButtonSize } from '@/ds/components/Button/Button';\nimport { keepOwnAccessibleName, useFieldAriaIds } from '@/ds/components/Field/field-control-aria';\nimport { FieldBlock } from '@/ds/components/FormFieldBlocks/block/field-block';\nimport { fieldErrorId } from '@/ds/components/FormFieldBlocks/block/field-error-id';\nimport { deprecatedErrorAria } from '@/ds/primitives/form-element';\nimport type { PortalContainer } from '@/ds/primitives/portal-container';\nimport { cn } from '@/lib/utils';\n\nexport type { ComboboxPopupWidth, ComboboxVariant } from './combobox-styles';\n\nexport type ComboboxOption = {\n label: string;\n value: string;\n description?: string;\n displayLabel?: React.ReactNode;\n start?: React.ReactNode;\n end?: React.ReactNode;\n /** Extra terms the search matches besides `label` (aliases, ids, a provider name). Never displayed. */\n keywords?: readonly string[];\n};\n\ntype ComboboxSharedProps = {\n options: ComboboxOption[];\n placeholder?: React.ReactNode;\n /** The search row's placeholder for compact triggers. A field (inside a `Field`) searches in itself and shows `placeholder`. */\n searchPlaceholder?: string;\n emptyText?: string;\n className?: string;\n disabled?: boolean;\n /**\n * `default` inside a `Field` is a form field you type in to search. `ghost` (and the legacy `outline`/`link`),\n * or any variant outside a `Field`, is a compact trigger with the search inside the popup.\n */\n variant?: ComboboxVariant;\n /** Icon sizes (`icon-*`) render a chevron-only trigger with the search in the popup; pass `aria-label` to name it. */\n size?: ButtonSize;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n container?: PortalContainer;\n id?: string;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n /** Which edge of the trigger the popup lines up with. `end` opens it leftwards (e.g. an icon trigger at the end of a row). */\n align?: 'start' | 'center' | 'end';\n /** A fixed popup width for long options (e.g. model ids). Without it the popup takes the trigger's width, at least 11rem. */\n popupWidth?: ComboboxPopupWidth;\n showChevron?: boolean;\n iconOnlyValue?: boolean;\n allowCustomValue?: boolean;\n /** Called with the search text as it changes (and with `''` after a compact trigger's selection resets it). */\n onInputValueChange?: (value: string) => void;\n /** @deprecated Wrap the combobox in `<Field invalid>` with a `FieldError`. */\n error?: string;\n /** @deprecated Only keyed the `error` message id; a `Field` links its error without one. */\n name?: string;\n};\n\nexport type ComboboxSingleProps = ComboboxSharedProps & {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n};\n\nexport type ComboboxMultipleProps = ComboboxSharedProps & {\n multiple: true;\n value?: readonly string[];\n onValueChange?: (value: string[]) => void;\n clearLabel?: string;\n};\n\nexport type ComboboxProps = ComboboxSingleProps | ComboboxMultipleProps;\n\nconst EMPTY_VALUES: readonly string[] = [];\n\nfunction isMultipleCombobox(props: ComboboxProps): props is ComboboxMultipleProps {\n return props.multiple === true;\n}\n\n/** The text a field shows for its value: a plain-text `displayLabel` wins over `label`. */\nfunction optionText(option: ComboboxOption) {\n return typeof option.displayLabel === 'string' ? option.displayLabel : option.label;\n}\n\n/** Inputs take a text placeholder only; a ReactNode placeholder keeps the compact trigger. */\nfunction textPlaceholder(placeholder: React.ReactNode) {\n return typeof placeholder === 'string' ? placeholder : undefined;\n}\n\n/**\n * How the combobox renders:\n * - `field`: a single select inside a `Field` searches in the field, like a text input.\n * - `chips`: a multiple select inside a `Field` shows its picks as chips and searches in the field.\n * - `trigger`: everything else (toolbars, breadcrumbs, inline pickers that callers lay out as a button)\n * keeps a compact trigger with the search inside the popup.\n */\ntype ComboboxShape = 'field' | 'chips' | 'trigger';\n\nfunction getComboboxShape({\n inFieldContext,\n multiple,\n variant,\n size,\n iconOnlyValue,\n showChevron,\n placeholder,\n}: {\n inFieldContext: boolean;\n multiple: boolean;\n variant: ComboboxVariant;\n size: ButtonSize;\n iconOnlyValue: boolean;\n showChevron: boolean;\n placeholder: React.ReactNode;\n}): ComboboxShape {\n if (!inFieldContext) return 'trigger';\n if (variant !== 'default') return 'trigger';\n if (isIconButtonSize(size)) return 'trigger';\n if (iconOnlyValue || !showChevron) return 'trigger';\n if (placeholder !== undefined && textPlaceholder(placeholder) === undefined) return 'trigger';\n if (!multiple) return 'field';\n // The chips field is tuned to the medium control height.\n if (size !== 'md') return 'trigger';\n return 'chips';\n}\n\n/** A \"Use “text”\" option for typed text that isn't one of the options yet. */\nfunction getCustomOption(options: ComboboxOption[], inputValue: string): ComboboxOption | undefined {\n const value = inputValue.trim();\n if (!value) return undefined;\n // A field shows the selected option's text while it's closed; that isn't a new value.\n if (options.some(option => option.value === value || optionText(option) === value)) return undefined;\n return { label: `Use “${value}”`, value };\n}\n\n/** Matches the label like Base UI's default filter, the text a field shows, and any keywords. */\nfunction useOptionFilter() {\n const { contains } = BaseCombobox.useFilter();\n return (option: ComboboxOption, query: string) =>\n [option.label, optionText(option), ...(option.keywords ?? [])].some(text => contains(text, query));\n}\n\n/** Names the control when nothing else does: an `id` or a `Field` links a label to it instead. */\nfunction getFallbackAriaLabel({ hasLabel, multiple }: { hasLabel: boolean; multiple: boolean }) {\n if (hasLabel) return undefined;\n return multiple ? 'Select options' : 'Select option';\n}\n\nfunction getControlProps({\n id,\n ariaLabel,\n ariaDescribedBy,\n hasLabel,\n multiple,\n error,\n errorName,\n}: {\n id?: string;\n ariaLabel?: string;\n ariaDescribedBy?: string;\n hasLabel: boolean;\n multiple: boolean;\n error?: string;\n errorName: string;\n}) {\n const describedBy = [ariaDescribedBy, error ? fieldErrorId(errorName) : undefined].filter(Boolean).join(' ');\n return {\n id,\n 'aria-label': ariaLabel ?? getFallbackAriaLabel({ hasLabel, multiple }),\n ...keepOwnAccessibleName({ 'aria-label': ariaLabel }),\n ...deprecatedErrorAria(Boolean(error)),\n 'aria-describedby': describedBy || undefined,\n };\n}\n\ntype ControlProps = ReturnType<typeof getControlProps>;\n\nfunction triggerClassName({ iconOnlyValue, className }: { iconOnlyValue: boolean; className?: string }) {\n return cn(iconOnlyValue && 'w-auto px-2.5', className);\n}\n\n/** An option row's content: start slot, label over description, end slot. */\nfunction ComboboxOptionContent({ option }: { option: ComboboxOption }) {\n return (\n <>\n {option.start}\n <span className={comboboxStyles.optionText}>\n <span className={comboboxStyles.optionLabel}>{option.label}</span>\n {option.description && <span className={comboboxStyles.optionDescription}>{option.description}</span>}\n </span>\n {option.end ? <span className={comboboxStyles.optionEnd}>{option.end}</span> : null}\n </>\n );\n}\n\nfunction ComboboxClearFooter({ label, onClear }: { label: string; onClear: () => void }) {\n return (\n <div className=\"border-t border-border p-1\">\n <Button\n type=\"button\"\n variant=\"destructive-ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={onClear}\n icon={<X />}\n >\n {label}\n </Button>\n </div>\n );\n}\n\n/** The popup: the search row for a compact trigger (a field searches in itself), then the options. */\nfunction ComboboxOptionsContent({\n popupWidth,\n showSearch,\n searchPlaceholder,\n emptyText,\n align,\n container,\n footer,\n}: {\n popupWidth?: ComboboxPopupWidth;\n showSearch: boolean;\n searchPlaceholder: string;\n emptyText: string;\n align: 'start' | 'center' | 'end';\n container?: PortalContainer;\n footer?: React.ReactNode;\n}) {\n return (\n <ComboboxContent align={align} container={container} className={popupWidth && comboboxPopupWidthClass[popupWidth]}>\n {showSearch ? <ComboboxSearch placeholder={searchPlaceholder} /> : null}\n <ComboboxEmpty>{emptyText}</ComboboxEmpty>\n <ComboboxList>\n {(option: ComboboxOption) => (\n <ComboboxItem key={option.value} value={option}>\n <ComboboxOptionContent option={option} />\n </ComboboxItem>\n )}\n </ComboboxList>\n {footer}\n </ComboboxContent>\n );\n}\n\ntype TriggerLookProps = {\n variant: ComboboxVariant;\n size: ButtonSize;\n showChevron: boolean;\n iconOnlyValue: boolean;\n className?: string;\n};\n\nfunction SingleComboboxControl({\n shape,\n controlProps,\n placeholder,\n selectedOption,\n look,\n}: {\n shape: ComboboxShape;\n controlProps: ControlProps;\n placeholder: React.ReactNode;\n selectedOption?: ComboboxOption;\n look: TriggerLookProps;\n}) {\n if (shape === 'field') {\n return (\n <ComboboxInput\n {...controlProps}\n size={isIconButtonSize(look.size) ? undefined : look.size}\n placeholder={textPlaceholder(placeholder)}\n start={selectedOption?.start}\n className={look.className}\n />\n );\n }\n\n return (\n <ComboboxTrigger\n {...controlProps}\n variant={look.variant}\n size={look.size}\n showChevron={look.showChevron}\n icon={isIconButtonSize(look.size) ? undefined : selectedOption?.start}\n className={triggerClassName(look)}\n >\n {selectedOption?.displayLabel ?? <ComboboxValue placeholder={placeholder} />}\n </ComboboxTrigger>\n );\n}\n\nfunction MultipleComboboxControl({\n shape,\n controlProps,\n placeholder,\n selectedCount,\n look,\n}: {\n shape: ComboboxShape;\n controlProps: ControlProps;\n placeholder: React.ReactNode;\n selectedCount: number;\n look: TriggerLookProps;\n}) {\n if (shape === 'chips') {\n return (\n <ComboboxChips className={look.className}>\n <ComboboxValue>\n {(items: ComboboxOption[]) => (\n <>\n {items.map(item => (\n <ComboboxChip key={item.value}>{item.label}</ComboboxChip>\n ))}\n <ComboboxChipsInput\n {...controlProps}\n placeholder={items.length === 0 ? textPlaceholder(placeholder) : undefined}\n />\n </>\n )}\n </ComboboxValue>\n </ComboboxChips>\n );\n }\n\n const text = selectedCount === 0 ? placeholder : `${selectedCount} selected`;\n return (\n <ComboboxTrigger\n {...controlProps}\n variant={look.variant}\n size={look.size}\n showChevron={look.showChevron}\n className={triggerClassName(look)}\n >\n <span className={cn(selectedCount === 0 && comboboxStyles.placeholder)}>{text}</span>\n </ComboboxTrigger>\n );\n}\n\ntype ShapeProps = { shape: ComboboxShape; controlProps: ControlProps };\n\nfunction SingleCombobox({\n shape,\n controlProps,\n options,\n value,\n onValueChange,\n placeholder = 'Select option',\n searchPlaceholder = 'Search',\n emptyText = 'No option found.',\n className,\n disabled = false,\n variant = 'default',\n size = 'md',\n open,\n onOpenChange,\n container,\n align = 'start',\n popupWidth,\n showChevron = true,\n iconOnlyValue = false,\n allowCustomValue = false,\n onInputValueChange,\n}: ComboboxSingleProps & ShapeProps) {\n // The search text: a field's own text, or the compact trigger's popup search.\n const [inputValue, setInputValue] = React.useState('');\n const filter = useOptionFilter();\n const inField = shape === 'field';\n const selectedOption = options.find(option => option.value === value);\n const customOption = allowCustomValue ? getCustomOption(options, inputValue) : undefined;\n const items = customOption ? [customOption, ...options] : options;\n\n function handleInputValueChange(next: string) {\n setInputValue(next);\n onInputValueChange?.(next);\n }\n\n function handleValueChange(item: ComboboxOption | null) {\n if (!item) return;\n onValueChange?.(item.value);\n // A field shows the picked option; a compact trigger's popup search starts empty next time.\n if (!inField) handleInputValueChange('');\n }\n\n return (\n <ComboboxRoot\n autoHighlight\n items={items}\n filter={filter}\n itemToStringLabel={optionText}\n // Base UI's \"nothing selected\" is null.\n value={selectedOption ?? null}\n // A field owns its text (the selected option's, or the search); a compact trigger's search is reset here.\n inputValue={inField ? undefined : inputValue}\n onInputValueChange={handleInputValueChange}\n onValueChange={handleValueChange}\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n >\n <SingleComboboxControl\n shape={shape}\n controlProps={controlProps}\n placeholder={placeholder}\n selectedOption={selectedOption}\n look={{ variant, size, showChevron, iconOnlyValue, className }}\n />\n <ComboboxOptionsContent\n popupWidth={popupWidth}\n showSearch={!inField}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n align={align}\n container={container}\n />\n </ComboboxRoot>\n );\n}\n\nfunction MultipleCombobox({\n shape,\n controlProps,\n options,\n value = EMPTY_VALUES,\n onValueChange,\n clearLabel,\n placeholder = 'Select options',\n searchPlaceholder = 'Search',\n emptyText = 'No option found.',\n className,\n disabled = false,\n variant = 'default',\n size = 'md',\n open,\n onOpenChange,\n container,\n align = 'start',\n popupWidth,\n showChevron = true,\n iconOnlyValue = false,\n}: ComboboxMultipleProps & ShapeProps) {\n const filter = useOptionFilter();\n const selectedValues = new Set(value);\n const selectedOptions = options.filter(option => selectedValues.has(option.value));\n const footer =\n clearLabel && selectedOptions.length > 0 ? (\n <ComboboxClearFooter label={clearLabel} onClear={() => onValueChange?.([])} />\n ) : undefined;\n\n return (\n <ComboboxRoot\n multiple\n autoHighlight\n items={options}\n filter={filter}\n value={selectedOptions}\n onValueChange={items => onValueChange?.(items.map(item => item.value))}\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n >\n <MultipleComboboxControl\n shape={shape}\n controlProps={controlProps}\n placeholder={placeholder}\n selectedCount={selectedOptions.length}\n look={{ variant, size, showChevron, iconOnlyValue, className }}\n />\n <ComboboxOptionsContent\n popupWidth={popupWidth}\n showSearch={shape !== 'chips'}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n align={align}\n container={container}\n footer={footer}\n />\n </ComboboxRoot>\n );\n}\n\n/**\n * A searchable select driven by `options`, built on the Combobox parts.\n *\n * Inside a `Field`, a `default` combobox searches right in the field: a text field for a single value,\n * removable chips for `multiple`. Everywhere else (outside a `Field`, `ghost` and icon-size triggers,\n * custom non-text placeholders) it keeps a compact trigger with the search inside the popup. For anything\n * these props don't cover (groups, rich items), compose the parts directly (`ComboboxRoot`, ...).\n */\nexport function Combobox(props: ComboboxProps) {\n const field = useFieldAriaIds();\n const generatedName = React.useId();\n const multiple = isMultipleCombobox(props);\n const shape = getComboboxShape({\n inFieldContext: Boolean(field),\n multiple,\n variant: props.variant ?? 'default',\n size: props.size ?? 'md',\n iconOnlyValue: props.iconOnlyValue ?? false,\n showChevron: props.showChevron ?? true,\n placeholder: props.placeholder,\n });\n const errorName = props.name ?? generatedName;\n const controlProps = getControlProps({\n id: props.id,\n ariaLabel: props['aria-label'],\n ariaDescribedBy: props['aria-describedby'],\n hasLabel: Boolean(props.id || field),\n multiple,\n error: props.error,\n errorName,\n });\n\n const root = isMultipleCombobox(props) ? (\n <MultipleCombobox {...props} shape={shape} controlProps={controlProps} />\n ) : (\n <SingleCombobox {...props} shape={shape} controlProps={controlProps} />\n );\n\n if (!props.error) return root;\n\n return (\n <div className={comboboxStyles.root}>\n {root}\n <FieldBlock.ErrorMsg name={errorName}>{props.error}</FieldBlock.ErrorMsg>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"combobox-DU2jsrGa.cjs","names":["isIconButtonSize","BaseCombobox","fieldErrorId","keepOwnAccessibleName","deprecatedErrorAria","cn","_Fragment","comboboxStyles","Button","X","ComboboxContent","comboboxPopupWidthClass","ComboboxSearch","ComboboxEmpty","ComboboxList","ComboboxItem","ComboboxInput","ComboboxTrigger","ComboboxValue","ComboboxChips","ComboboxChip","ComboboxChipsInput","React","ComboboxRoot","useFieldAriaIds","FieldBlock"],"sources":["../src/ds/components/Combobox/combobox.tsx"],"sourcesContent":["import { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\nimport {\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n ComboboxRoot,\n ComboboxSearch,\n ComboboxTrigger,\n ComboboxValue,\n} from './combobox-parts';\nimport { comboboxPopupWidthClass, comboboxStyles } from './combobox-styles';\nimport type { ComboboxPopupWidth, ComboboxVariant } from './combobox-styles';\nimport { Button, isIconButtonSize } from '@/ds/components/Button/Button';\nimport type { ButtonSize } from '@/ds/components/Button/Button';\nimport { keepOwnAccessibleName, useFieldAriaIds } from '@/ds/components/Field/field-control-aria';\nimport { FieldBlock } from '@/ds/components/FormFieldBlocks/block/field-block';\nimport { fieldErrorId } from '@/ds/components/FormFieldBlocks/block/field-error-id';\nimport { deprecatedErrorAria } from '@/ds/primitives/form-element';\nimport type { PortalContainer } from '@/ds/primitives/portal-container';\nimport { cn } from '@/lib/utils';\n\nexport type { ComboboxPopupWidth, ComboboxVariant } from './combobox-styles';\n\nexport type ComboboxOption = {\n label: string;\n value: string;\n description?: string;\n displayLabel?: React.ReactNode;\n start?: React.ReactNode;\n end?: React.ReactNode;\n /** Extra terms the search matches besides `label` (aliases, ids, a provider name). Never displayed. */\n keywords?: readonly string[];\n};\n\ntype ComboboxSharedProps = {\n options: ComboboxOption[];\n placeholder?: React.ReactNode;\n /** The search row's placeholder for compact triggers. A field (inside a `Field`) searches in itself and shows `placeholder`. */\n searchPlaceholder?: string;\n emptyText?: string;\n className?: string;\n disabled?: boolean;\n /**\n * `default` inside a `Field` is a form field you type in to search. `ghost` (and the legacy `outline`/`link`),\n * or any variant outside a `Field`, is a compact trigger with the search inside the popup.\n */\n variant?: ComboboxVariant;\n /** Icon sizes (`icon-*`) render a chevron-only trigger with the search in the popup; pass `aria-label` to name it. */\n size?: ButtonSize;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n container?: PortalContainer;\n id?: string;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n /** Which edge of the trigger the popup lines up with. `end` opens it leftwards (e.g. an icon trigger at the end of a row). */\n align?: 'start' | 'center' | 'end';\n /** A fixed popup width for long options (e.g. model ids). Without it the popup takes the trigger's width, at least 11rem. */\n popupWidth?: ComboboxPopupWidth;\n showChevron?: boolean;\n iconOnlyValue?: boolean;\n allowCustomValue?: boolean;\n /** Called with the search text as it changes (and with `''` after a compact trigger's selection resets it). */\n onInputValueChange?: (value: string) => void;\n /** @deprecated Wrap the combobox in `<Field invalid>` with a `FieldError`. */\n error?: string;\n /** @deprecated Only keyed the `error` message id; a `Field` links its error without one. */\n name?: string;\n};\n\nexport type ComboboxSingleProps = ComboboxSharedProps & {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n};\n\nexport type ComboboxMultipleProps = ComboboxSharedProps & {\n multiple: true;\n value?: readonly string[];\n onValueChange?: (value: string[]) => void;\n clearLabel?: string;\n};\n\nexport type ComboboxProps = ComboboxSingleProps | ComboboxMultipleProps;\n\nconst EMPTY_VALUES: readonly string[] = [];\n\nfunction isMultipleCombobox(props: ComboboxProps): props is ComboboxMultipleProps {\n return props.multiple === true;\n}\n\n/** The text a field shows for its value: a plain-text `displayLabel` wins over `label`. */\nfunction optionText(option: ComboboxOption) {\n return typeof option.displayLabel === 'string' ? option.displayLabel : option.label;\n}\n\n/** Inputs take a text placeholder only; a ReactNode placeholder keeps the compact trigger. */\nfunction textPlaceholder(placeholder: React.ReactNode) {\n return typeof placeholder === 'string' ? placeholder : undefined;\n}\n\n/**\n * How the combobox renders:\n * - `field`: a single select inside a `Field` searches in the field, like a text input.\n * - `chips`: a multiple select inside a `Field` shows its picks as chips and searches in the field.\n * - `trigger`: everything else (toolbars, breadcrumbs, inline pickers that callers lay out as a button)\n * keeps a compact trigger with the search inside the popup.\n */\ntype ComboboxShape = 'field' | 'chips' | 'trigger';\n\nfunction getComboboxShape({\n inFieldContext,\n multiple,\n variant,\n size,\n iconOnlyValue,\n showChevron,\n placeholder,\n}: {\n inFieldContext: boolean;\n multiple: boolean;\n variant: ComboboxVariant;\n size: ButtonSize;\n iconOnlyValue: boolean;\n showChevron: boolean;\n placeholder: React.ReactNode;\n}): ComboboxShape {\n if (!inFieldContext) return 'trigger';\n if (variant !== 'default') return 'trigger';\n if (isIconButtonSize(size)) return 'trigger';\n if (iconOnlyValue || !showChevron) return 'trigger';\n if (placeholder !== undefined && textPlaceholder(placeholder) === undefined) return 'trigger';\n if (!multiple) return 'field';\n // The chips field is tuned to the medium control height.\n if (size !== 'md') return 'trigger';\n return 'chips';\n}\n\n/** A \"Use “text”\" option for typed text that isn't one of the options yet. */\nfunction getCustomOption(options: ComboboxOption[], inputValue: string): ComboboxOption | undefined {\n const value = inputValue.trim();\n if (!value) return undefined;\n // A field shows the selected option's text while it's closed; that isn't a new value.\n if (options.some(option => option.value === value || optionText(option) === value)) return undefined;\n return { label: `Use “${value}”`, value };\n}\n\n/** Matches the label like Base UI's default filter, the text a field shows, and any keywords. */\nfunction useOptionFilter() {\n const { contains } = BaseCombobox.useFilter();\n return (option: ComboboxOption, query: string) =>\n [option.label, optionText(option), ...(option.keywords ?? [])].some(text => contains(text, query));\n}\n\n/** Names the control when nothing else does: an `id` or a `Field` links a label to it instead. */\nfunction getFallbackAriaLabel({ hasLabel, multiple }: { hasLabel: boolean; multiple: boolean }) {\n if (hasLabel) return undefined;\n return multiple ? 'Select options' : 'Select option';\n}\n\nfunction getControlProps({\n id,\n ariaLabel,\n ariaDescribedBy,\n hasLabel,\n multiple,\n error,\n errorName,\n}: {\n id?: string;\n ariaLabel?: string;\n ariaDescribedBy?: string;\n hasLabel: boolean;\n multiple: boolean;\n error?: string;\n errorName: string;\n}) {\n const describedBy = [ariaDescribedBy, error ? fieldErrorId(errorName) : undefined].filter(Boolean).join(' ');\n return {\n id,\n 'aria-label': ariaLabel ?? getFallbackAriaLabel({ hasLabel, multiple }),\n ...keepOwnAccessibleName({ 'aria-label': ariaLabel }),\n ...deprecatedErrorAria(Boolean(error)),\n 'aria-describedby': describedBy || undefined,\n };\n}\n\ntype ControlProps = ReturnType<typeof getControlProps>;\n\nfunction triggerClassName({ iconOnlyValue, className }: { iconOnlyValue: boolean; className?: string }) {\n return cn(iconOnlyValue && 'w-auto px-2.5', className);\n}\n\n/** An option row's content: start slot, label over description, end slot. */\nfunction ComboboxOptionContent({ option }: { option: ComboboxOption }) {\n return (\n <>\n {option.start}\n <span className={comboboxStyles.optionText}>\n <span className={comboboxStyles.optionLabel}>{option.label}</span>\n {option.description && <span className={comboboxStyles.optionDescription}>{option.description}</span>}\n </span>\n {option.end ? <span className={comboboxStyles.optionEnd}>{option.end}</span> : null}\n </>\n );\n}\n\nfunction ComboboxClearFooter({ label, onClear }: { label: string; onClear: () => void }) {\n return (\n <div className=\"border-t border-border p-1\">\n <Button\n type=\"button\"\n variant=\"destructive-ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={onClear}\n icon={<X />}\n >\n {label}\n </Button>\n </div>\n );\n}\n\n/** The popup: the search row for a compact trigger (a field searches in itself), then the options. */\nfunction ComboboxOptionsContent({\n popupWidth,\n showSearch,\n searchPlaceholder,\n emptyText,\n align,\n container,\n footer,\n}: {\n popupWidth?: ComboboxPopupWidth;\n showSearch: boolean;\n searchPlaceholder: string;\n emptyText: string;\n align: 'start' | 'center' | 'end';\n container?: PortalContainer;\n footer?: React.ReactNode;\n}) {\n return (\n <ComboboxContent align={align} container={container} className={popupWidth && comboboxPopupWidthClass[popupWidth]}>\n {showSearch ? <ComboboxSearch placeholder={searchPlaceholder} /> : null}\n <ComboboxEmpty>{emptyText}</ComboboxEmpty>\n <ComboboxList>\n {(option: ComboboxOption) => (\n <ComboboxItem key={option.value} value={option}>\n <ComboboxOptionContent option={option} />\n </ComboboxItem>\n )}\n </ComboboxList>\n {footer}\n </ComboboxContent>\n );\n}\n\ntype TriggerLookProps = {\n variant: ComboboxVariant;\n size: ButtonSize;\n showChevron: boolean;\n iconOnlyValue: boolean;\n className?: string;\n};\n\nfunction SingleComboboxControl({\n shape,\n controlProps,\n placeholder,\n selectedOption,\n look,\n}: {\n shape: ComboboxShape;\n controlProps: ControlProps;\n placeholder: React.ReactNode;\n selectedOption?: ComboboxOption;\n look: TriggerLookProps;\n}) {\n if (shape === 'field') {\n return (\n <ComboboxInput\n {...controlProps}\n size={isIconButtonSize(look.size) ? undefined : look.size}\n placeholder={textPlaceholder(placeholder)}\n start={selectedOption?.start}\n className={look.className}\n />\n );\n }\n\n return (\n <ComboboxTrigger\n {...controlProps}\n variant={look.variant}\n size={look.size}\n showChevron={look.showChevron}\n icon={isIconButtonSize(look.size) ? undefined : selectedOption?.start}\n className={triggerClassName(look)}\n >\n {selectedOption?.displayLabel ?? <ComboboxValue placeholder={placeholder} />}\n </ComboboxTrigger>\n );\n}\n\nfunction MultipleComboboxControl({\n shape,\n controlProps,\n placeholder,\n selectedCount,\n look,\n}: {\n shape: ComboboxShape;\n controlProps: ControlProps;\n placeholder: React.ReactNode;\n selectedCount: number;\n look: TriggerLookProps;\n}) {\n if (shape === 'chips') {\n return (\n <ComboboxChips className={look.className}>\n <ComboboxValue>\n {(items: ComboboxOption[]) => (\n <>\n {items.map(item => (\n <ComboboxChip key={item.value}>{item.label}</ComboboxChip>\n ))}\n <ComboboxChipsInput\n {...controlProps}\n placeholder={items.length === 0 ? textPlaceholder(placeholder) : undefined}\n />\n </>\n )}\n </ComboboxValue>\n </ComboboxChips>\n );\n }\n\n const text = selectedCount === 0 ? placeholder : `${selectedCount} selected`;\n return (\n <ComboboxTrigger\n {...controlProps}\n variant={look.variant}\n size={look.size}\n showChevron={look.showChevron}\n className={triggerClassName(look)}\n >\n <span className={cn(selectedCount === 0 && comboboxStyles.placeholder)}>{text}</span>\n </ComboboxTrigger>\n );\n}\n\ntype ShapeProps = { shape: ComboboxShape; controlProps: ControlProps };\n\nfunction SingleCombobox({\n shape,\n controlProps,\n options,\n value,\n onValueChange,\n placeholder = 'Select option',\n searchPlaceholder = 'Search',\n emptyText = 'No option found.',\n className,\n disabled = false,\n variant = 'default',\n size = 'md',\n open,\n onOpenChange,\n container,\n align = 'start',\n popupWidth,\n showChevron = true,\n iconOnlyValue = false,\n allowCustomValue = false,\n onInputValueChange,\n}: ComboboxSingleProps & ShapeProps) {\n // The search text: a field's own text, or the compact trigger's popup search.\n const [inputValue, setInputValue] = React.useState('');\n const filter = useOptionFilter();\n const inField = shape === 'field';\n const selectedOption = options.find(option => option.value === value);\n const customOption = allowCustomValue ? getCustomOption(options, inputValue) : undefined;\n const items = customOption ? [customOption, ...options] : options;\n\n function handleInputValueChange(next: string) {\n setInputValue(next);\n onInputValueChange?.(next);\n }\n\n function handleValueChange(item: ComboboxOption | null) {\n if (!item) return;\n onValueChange?.(item.value);\n // A field shows the picked option; a compact trigger's popup search starts empty next time.\n if (!inField) handleInputValueChange('');\n }\n\n return (\n <ComboboxRoot\n autoHighlight\n items={items}\n filter={filter}\n itemToStringLabel={optionText}\n // Base UI's \"nothing selected\" is null.\n value={selectedOption ?? null}\n // A field owns its text (the selected option's, or the search); a compact trigger's search is reset here.\n inputValue={inField ? undefined : inputValue}\n onInputValueChange={handleInputValueChange}\n onValueChange={handleValueChange}\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n >\n <SingleComboboxControl\n shape={shape}\n controlProps={controlProps}\n placeholder={placeholder}\n selectedOption={selectedOption}\n look={{ variant, size, showChevron, iconOnlyValue, className }}\n />\n <ComboboxOptionsContent\n popupWidth={popupWidth}\n showSearch={!inField}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n align={align}\n container={container}\n />\n </ComboboxRoot>\n );\n}\n\nfunction MultipleCombobox({\n shape,\n controlProps,\n options,\n value = EMPTY_VALUES,\n onValueChange,\n clearLabel,\n placeholder = 'Select options',\n searchPlaceholder = 'Search',\n emptyText = 'No option found.',\n className,\n disabled = false,\n variant = 'default',\n size = 'md',\n open,\n onOpenChange,\n container,\n align = 'start',\n popupWidth,\n showChevron = true,\n iconOnlyValue = false,\n}: ComboboxMultipleProps & ShapeProps) {\n const filter = useOptionFilter();\n const selectedValues = new Set(value);\n const selectedOptions = options.filter(option => selectedValues.has(option.value));\n const footer =\n clearLabel && selectedOptions.length > 0 ? (\n <ComboboxClearFooter label={clearLabel} onClear={() => onValueChange?.([])} />\n ) : undefined;\n\n return (\n <ComboboxRoot\n multiple\n autoHighlight\n items={options}\n filter={filter}\n value={selectedOptions}\n onValueChange={items => onValueChange?.(items.map(item => item.value))}\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n >\n <MultipleComboboxControl\n shape={shape}\n controlProps={controlProps}\n placeholder={placeholder}\n selectedCount={selectedOptions.length}\n look={{ variant, size, showChevron, iconOnlyValue, className }}\n />\n <ComboboxOptionsContent\n popupWidth={popupWidth}\n showSearch={shape !== 'chips'}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n align={align}\n container={container}\n footer={footer}\n />\n </ComboboxRoot>\n );\n}\n\n/**\n * A searchable select driven by `options`, built on the Combobox parts.\n *\n * Inside a `Field`, a `default` combobox searches right in the field: a text field for a single value,\n * removable chips for `multiple`. Everywhere else (outside a `Field`, `ghost` and icon-size triggers,\n * custom non-text placeholders) it keeps a compact trigger with the search inside the popup. For anything\n * these props don't cover (groups, rich items), compose the parts directly (`ComboboxRoot`, ...).\n */\nexport function Combobox(props: ComboboxProps) {\n const field = useFieldAriaIds();\n const generatedName = React.useId();\n const multiple = isMultipleCombobox(props);\n const shape = getComboboxShape({\n inFieldContext: Boolean(field),\n multiple,\n variant: props.variant ?? 'default',\n size: props.size ?? 'md',\n iconOnlyValue: props.iconOnlyValue ?? false,\n showChevron: props.showChevron ?? true,\n placeholder: props.placeholder,\n });\n const errorName = props.name ?? generatedName;\n const controlProps = getControlProps({\n id: props.id,\n ariaLabel: props['aria-label'],\n ariaDescribedBy: props['aria-describedby'],\n hasLabel: Boolean(props.id || field),\n multiple,\n error: props.error,\n errorName,\n });\n\n const root = isMultipleCombobox(props) ? (\n <MultipleCombobox {...props} shape={shape} controlProps={controlProps} />\n ) : (\n <SingleCombobox {...props} shape={shape} controlProps={controlProps} />\n );\n\n if (!props.error) return root;\n\n return (\n <div className={comboboxStyles.root}>\n {root}\n <FieldBlock.ErrorMsg name={errorName}>{props.error}</FieldBlock.ErrorMsg>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -135,7 +135,7 @@ var chipsFieldStyle = {
135
135
  paddingInlineStart: "4px",
136
136
  paddingInlineEnd: fieldStyle.paddingInlineEnd
137
137
  };
138
- var inputClass = "h-full w-0 min-w-0 flex-1 bg-transparent text-foreground outline-none placeholder:text-muted-foreground";
138
+ var inputClass = "h-full w-0 min-w-0 flex-1 bg-transparent text-foreground outline-none zoom-safe-text placeholder:text-muted-foreground";
139
139
  /** Caret at the end of the value instead of selecting it, the way a text field behaves. */
140
140
  function moveCaretToEnd(event) {
141
141
  const input = event.currentTarget;
@@ -579,4 +579,4 @@ Object.defineProperty(exports, "comboboxTriggerClass", {
579
579
  }
580
580
  });
581
581
 
582
- //# sourceMappingURL=combobox-parts-BeNqgCbj.cjs.map
582
+ //# sourceMappingURL=combobox-parts-C236ZHtn.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox-parts-C236ZHtn.cjs","names":["cn","buttonVariants","isIconButtonSize","controlTriggerOpenState","fieldTriggerErrorBorder","cva","menuItemClass","menuPopupClass","menuPositionerClass","menuSearchClasses","menuEmptyClass","menuItemCheckClass","BaseCombobox","cn","ChevronDown","isIconButtonSize","_Fragment","ButtonIcon","ButtonChevron","X","passwordManagerOptOutProps","Search","usePopupAnchor","usePortalContainer","FLOATING_POSITION_METHOD","ScrollArea","ScrollAreaViewport","Check","menuLabelClass","menuSeparatorClass","React"],"sources":["../src/ds/components/Combobox/combobox-styles.ts","../src/ds/components/Combobox/combobox-parts.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport { buttonVariants, isIconButtonSize } from '../Button/Button';\nimport type { ButtonSize } from '../Button/Button';\nimport { controlTriggerOpenState } from '@/ds/primitives/control-size';\nimport type { ControlTriggerVisualVariant } from '@/ds/primitives/control-size';\nimport { fieldTriggerErrorBorder, fieldTriggerStyle, fieldTriggerWidthStyle } from '@/ds/primitives/form-element';\nimport {\n menuItemCheckClass,\n menuItemClass,\n menuPopupClass,\n menuPositionerClass,\n menuSearchClasses,\n menuEmptyClass,\n} from '@/ds/primitives/menu-item';\nimport { cn } from '@/lib/utils';\n\n/**\n * A combobox is a form field, so it reuses the Button's size/shape recipe,\n * mirroring `SelectTrigger`: `default` (the Input's overlay surface — the\n * default here too) and `ghost` (borderless, for breadcrumbs/inline pickers). Only the high-emphasis `primary`\n * look is intentionally NOT offered (a field is not a call-to-action).\n */\nexport type ComboboxVisualVariant = ControlTriggerVisualVariant;\nexport type ComboboxLegacyVariant = 'link';\nexport type ComboboxVariant = ComboboxVisualVariant | ComboboxLegacyVariant;\n\nfunction normalizeComboboxVariant(variant: ComboboxVariant): ComboboxVisualVariant {\n return variant === 'link' ? 'ghost' : variant;\n}\n\n/**\n * Single source of truth for both the single- and multi-select combobox\n * triggers. A combobox = a button + a trailing chevron, so it reuses the Button\n * recipe (variant colors, size = height/text/padding/radius, unified border\n * focus, disabled) and layers only the combobox-specific extras — exactly like\n * `SelectTrigger`.\n */\nexport function comboboxTriggerClass({\n variant,\n size,\n className,\n}: {\n variant: ComboboxVariant;\n size: ButtonSize;\n className?: string;\n}): string {\n const visualVariant = normalizeComboboxVariant(variant);\n\n return cn(\n buttonVariants({ variant: visualVariant, size }),\n visualVariant === 'default' && fieldTriggerStyle,\n // Fill the field and push the value left / chevron right (Button's base\n // centers its content with `justify-center`). Icon sizes are a fixed square\n // showing only the chevron, so they keep Button's centering.\n !isIconButtonSize(size) && cn(fieldTriggerWidthStyle, 'justify-between'),\n // Read as \"active\" while the popup is open, per variant (see map above).\n controlTriggerOpenState[visualVariant],\n 'data-[placeholder]:text-muted-foreground',\n fieldTriggerErrorBorder,\n className,\n );\n}\n\n/** Options are shared menu items, which already grow to fit a second line. */\nexport const comboboxItemClass = cva(menuItemClass, {\n variants: {\n multiple: {\n false: '',\n true: '',\n },\n },\n defaultVariants: {\n multiple: false,\n },\n});\n\n/** Fixed popup widths a call site can pick; without one the popup takes the trigger's width. Never narrower than the trigger or wider than the screen. */\nexport type ComboboxPopupWidth = 'sm' | 'md' | 'lg' | 'xl';\n\nexport const comboboxPopupWidthClass: Record<ComboboxPopupWidth, string> = {\n sm: 'w-48',\n md: 'w-64',\n lg: 'w-80',\n xl: 'w-96',\n};\n\nexport const comboboxStyles = {\n /** @deprecated A `Field` lays out the combobox and its error. */\n root: 'flex flex-col gap-1.5',\n\n /** Chevron icon in trigger — decorative icon token shared by every field. */\n\n /** Placeholder text color */\n placeholder: 'text-muted-foreground',\n\n /**\n * Popup container — shared menu popup, but the search row sits edge-to-edge\n * above the list, so padding/scrolling move to the list itself.\n */\n popup: cn(menuPopupClass, 'max-h-none overflow-hidden p-0'),\n\n /** Positioner */\n positioner: cn(menuPositionerClass, 'pointer-events-auto'),\n\n /** Search input container — borderless top section, hairline divider below. */\n searchContainer: menuSearchClasses.container,\n\n /** Search icon */\n searchIcon: menuSearchClasses.icon,\n\n /** Search input */\n searchInput: cn(menuSearchClasses.input, 'disabled:cursor-not-allowed disabled:opacity-50'),\n\n /** Empty state */\n empty: cn(menuEmptyClass, 'empty:hidden'),\n\n /** Options list */\n // `empty:p-0` — Empty renders outside the List, so an empty List must not leave its padding behind.\n list: 'p-1 empty:p-0',\n\n /** Scroll container around the List. */\n listScroller: 'max-h-dropdown overflow-y-auto overflow-x-hidden',\n\n /** Option item base — rounded-lg sits concentrically inside rounded-xl + p-1. */\n item: comboboxItemClass({ multiple: false }),\n\n /** An item's content beside its check: start slot, text, end slot. */\n itemContent: 'flex min-w-0 flex-1 items-center gap-2',\n\n /** Multi-select item — same item rhythm with a right-aligned selected check. */\n itemMulti: comboboxItemClass({ multiple: true }),\n\n /** Right-aligned slot grouping end content + selection check. */\n itemRightSlot: 'ml-auto flex items-center gap-2 shrink-0',\n\n /** Check indicator container — inline, shown only when item is selected. */\n checkContainer: cn(menuItemCheckClass, 'ml-0'),\n\n /** Check icon (single select) */\n checkIcon: 'size-full',\n\n /** Option label/description wrapper */\n optionText: 'flex flex-col gap-0.5 min-w-0',\n\n /** Option label: wraps (ids break anywhere) and clamps at two lines, so a long label stays readable without growing the row. */\n optionLabel: 'line-clamp-2 whitespace-normal wrap-anywhere',\n\n /** Option description: same two-line clamp as the label. */\n optionDescription: 'text-caption text-muted-foreground line-clamp-2 whitespace-normal wrap-anywhere',\n\n /** Option end slot — `ml-auto` makes it push right inside flex containers (used by multi-select). */\n optionEnd: 'ml-auto flex items-center shrink-0',\n\n /** @deprecated A `FieldError` colors the error. */\n error: 'text-body-sm text-destructive-foreground',\n} as const;\n","// Composable Combobox parts: shadcn's structure and names (https://ui.shadcn.com/docs/components/combobox),\n// built on Base UI like theirs, styled with our design system. The root is `ComboboxRoot` because\n// `Combobox` is the options-driven component in combobox.tsx.\nimport { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport { Check, ChevronDown, Search, X } from 'lucide-react';\nimport * as React from 'react';\nimport { comboboxItemClass, comboboxStyles, comboboxTriggerClass } from './combobox-styles';\nimport type { ComboboxVariant } from './combobox-styles';\nimport { ButtonChevron, ButtonIcon, isIconButtonSize } from '@/ds/components/Button/Button';\nimport type { ButtonSize, TextButtonSize } from '@/ds/components/Button/Button';\nimport { ScrollArea, ScrollAreaViewport } from '@/ds/components/ScrollArea';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport { menuLabelClass, menuSeparatorClass } from '@/ds/primitives/menu-item';\nimport { passwordManagerOptOutProps } from '@/ds/primitives/password-manager-autofill';\nimport { usePopupAnchor } from '@/ds/primitives/popup-anchor';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport type { PortalContainer } from '@/ds/primitives/portal-container';\nimport { cn } from '@/lib/utils';\n\n/**\n * Root. Same props as Base UI's `Combobox.Root` (`items`, `value`, `onValueChange`, `multiple`,\n * `autoHighlight`, `filter`, ...). Pick one of three shapes:\n * - Search in the field: `ComboboxInput` + `ComboboxContent`.\n * - Multiple, chips in the field: `ComboboxChips` (chips + `ComboboxChipsInput`) + `ComboboxContent`.\n * - Compact trigger, search in the popup: `ComboboxTrigger` + `ComboboxContent` starting with\n * `ComboboxSearch`. For small triggers (an icon, a ghost button in a toolbar).\n */\nfunction ComboboxRoot<Value, Multiple extends boolean | undefined = false>(\n props: BaseCombobox.Root.Props<Value, Multiple>,\n) {\n return <BaseCombobox.Root {...props} />;\n}\n\n/**\n * The field surface: today's trigger look, focus shown while the input inside has focus. The\n * chevron ends every field, at the same padding as today's Combobox trigger.\n */\nconst fieldClass = (size: TextButtonSize = 'md') =>\n cn(\n comboboxTriggerClass({ variant: 'default', size }),\n 'cursor-text gap-2 focus-within:[--surface-rim:var(--field-rim-focus)]',\n // Disabled like other form elements (muted text, not-allowed cursor), keyed off the input.\n 'has-[input:disabled]:cursor-not-allowed has-[input:disabled]:bg-field-disabled has-[input:disabled]:[&_*]:cursor-not-allowed has-[input:disabled]:[&_*]:text-muted-foreground',\n // The input inside carries `aria-invalid`; the field shows it like other invalid fields.\n 'has-[[aria-invalid=true]]:[--field-rim-focus:var(--destructive-indicator)] has-[[aria-invalid=true]]:[--field-rim:var(--destructive-indicator)]',\n );\n\n/**\n * Text starts 0.9em in (the Button recipe's padding, shared with Select and today's Combobox).\n * The chevron is a 22px circle; its arrow's ink sits 6.33px inside the circle's edge (3px circle\n * inset + 3.33px icon inset), so the end padding puts that ink 0.9em from the end, like the text.\n */\nconst fieldPx = '0.9em';\n\n/** Inline so it wins over the Button recipe's `px` (same layer, later in the sheet). */\nconst fieldStyle: React.CSSProperties = {\n paddingInlineStart: fieldPx,\n paddingInlineEnd: `calc(${fieldPx} - 6.33px)`,\n};\n\n/**\n * Chips sit 4px from the field's edge on top, bottom and left: 3px visible inside the 1px rim,\n * the same 3px as the gap between chips. A chip is the field height minus that padding (22px).\n */\nconst chipsFieldStyle: React.CSSProperties = {\n // Longhands only: a `padding` shorthand here would also reset the chevron's end padding.\n paddingBlock: '4px',\n paddingInlineStart: '4px',\n paddingInlineEnd: fieldStyle.paddingInlineEnd,\n};\n\n// `w-0` + `flex-1`: an input's default width (about 20 characters) would otherwise set the field's\n// minimum width, so it couldn't shrink into a narrow column.\nconst inputClass =\n 'h-full w-0 min-w-0 flex-1 bg-transparent text-foreground outline-none zoom-safe-text placeholder:text-muted-foreground';\n\n/** Caret at the end of the value instead of selecting it, the way a text field behaves. */\nfunction moveCaretToEnd(event: React.FocusEvent<HTMLInputElement>) {\n const input = event.currentTarget;\n // Deferred one frame so it runs after the click places the caret; clicking the label lands here too.\n requestAnimationFrame(() => input.setSelectionRange(input.value.length, input.value.length));\n}\n\n/**\n * The selected value, for a compact `ComboboxTrigger` or a custom display. `children` can be a\n * function of the value; `placeholder` shows while nothing is selected.\n */\nfunction ComboboxValue(props: BaseCombobox.Value.Props) {\n return <BaseCombobox.Value data-slot=\"combobox-value\" {...props} />;\n}\n\n/** The round chevron button that ends ComboboxInput and ComboboxChips. */\nfunction ComboboxFieldTrigger() {\n return (\n <BaseCombobox.Trigger\n data-slot=\"combobox-field-trigger\"\n aria-label=\"Show options\"\n // A round button target: the circle fills on hover, the chevron keeps its color.\n className=\"flex size-5.5 shrink-0 cursor-pointer items-center justify-center rounded-full text-muted-foreground not-data-disabled:hover:bg-fill\"\n >\n {/* Sized like Select's chevron: outside the icon rung, so it keeps Lucide's default stroke\n (1.33px at 16px) instead of the rung's 1px. */}\n <ChevronDown className=\"size-4\" />\n </BaseCombobox.Trigger>\n );\n}\n\ntype ComboboxTriggerProps = Omit<BaseCombobox.Trigger.Props, 'className'> & {\n className?: string;\n /** The Button-recipe look, like Select: `default` (field surface), `outline` or `ghost`. */\n variant?: ComboboxVariant;\n /** Icon sizes (`icon-*`) show only `icon` (or the chevron); `children` stay as accessible text. */\n size?: ButtonSize;\n /** Shown before the value, or alone at icon sizes (e.g. a filter icon), replacing the chevron there. */\n icon?: React.ReactNode;\n showChevron?: boolean;\n};\n\n/**\n * A compact trigger that opens the list, with the search inside the popup (`ComboboxSearch`). For\n * small triggers such as an icon or a ghost button; a form field uses ComboboxInput instead.\n * `children` is what the trigger shows, usually `<ComboboxValue placeholder=\"…\" />`.\n */\nfunction ComboboxTrigger({\n className,\n children,\n variant = 'default',\n size = 'md',\n icon,\n showChevron = !(icon && isIconButtonSize(size)),\n ...props\n}: ComboboxTriggerProps) {\n const iconOnly = isIconButtonSize(size);\n return (\n <BaseCombobox.Trigger\n data-slot=\"combobox-trigger\"\n data-shape={iconOnly ? 'icon' : undefined}\n className={comboboxTriggerClass({ variant, size, className })}\n {...props}\n >\n {isIconButtonSize(size) ? (\n <>\n {icon}\n <span className=\"sr-only\">{children}</span>\n </>\n ) : (\n <>\n {icon && <ButtonIcon size={size}>{icon}</ButtonIcon>}\n <span className=\"min-w-0 flex-1 truncate text-left\">{children}</span>\n </>\n )}\n {showChevron && <ButtonChevron size={size} />}\n </BaseCombobox.Trigger>\n );\n}\n\n/** An × that clears the value. ComboboxInput renders it with `showClear`. */\nfunction ComboboxClear({ className, ...props }: BaseCombobox.Clear.Props) {\n return (\n <BaseCombobox.Clear\n data-slot=\"combobox-clear\"\n aria-label=\"Clear\"\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center rounded-full text-muted-foreground hover:text-foreground',\n className,\n )}\n {...props}\n >\n <X className=\"size-3.5\" />\n </BaseCombobox.Clear>\n );\n}\n\ntype ComboboxInputProps = Omit<BaseCombobox.Input.Props, 'size'> & {\n /** The field height, from the control sizes. `md` by default. */\n size?: TextButtonSize;\n /** Shown before the text, e.g. the selected item's icon. */\n start?: React.ReactNode;\n /** The chevron button at the end. On by default. */\n showTrigger?: boolean;\n /** An × before the chevron that clears the value. */\n showClear?: boolean;\n};\n\n/**\n * The field you type in to filter, showing the selected value while it's closed. `children` render\n * inside the field before the chevron (e.g. a muted \"4 items\" detail). The list opens at the\n * field's width. Inside a `Field`, the label and errors link to it.\n */\nfunction ComboboxInput({\n className,\n children,\n showTrigger = true,\n showClear = false,\n size,\n start,\n onFocus,\n ...props\n}: ComboboxInputProps) {\n return (\n <BaseCombobox.InputGroup data-slot=\"combobox-input\" className={cn(fieldClass(size), className)} style={fieldStyle}>\n {start ? <span className=\"flex shrink-0 items-center\">{start}</span> : null}\n <BaseCombobox.Input\n onFocus={event => {\n moveCaretToEnd(event);\n onFocus?.(event);\n }}\n className={inputClass}\n {...passwordManagerOptOutProps}\n {...props}\n />\n {children ? <span className=\"flex shrink-0 items-center gap-2 text-muted-foreground\">{children}</span> : null}\n {showClear ? <ComboboxClear /> : null}\n {showTrigger ? <ComboboxFieldTrigger /> : null}\n </BaseCombobox.InputGroup>\n );\n}\n\n/**\n * The search row at the top of the popup, for a compact `ComboboxTrigger`. The same row as today's\n * Combobox: a search icon, a borderless input and a hairline under it.\n */\nfunction ComboboxSearch({ className, ...props }: BaseCombobox.Input.Props) {\n return (\n <div data-slot=\"combobox-search\" className={comboboxStyles.searchContainer}>\n <Search className={comboboxStyles.searchIcon} />\n <BaseCombobox.Input\n className={cn(comboboxStyles.searchInput, className)}\n {...passwordManagerOptOutProps}\n {...props}\n />\n </div>\n );\n}\n\ntype ComboboxContentProps = BaseCombobox.Popup.Props &\n Pick<BaseCombobox.Positioner.Props, 'side' | 'align' | 'sideOffset' | 'alignOffset' | 'anchor'> & {\n /** Where the popup portals to. Defaults to the nearest dialog or drawer, so it stays interactive there. */\n container?: PortalContainer;\n };\n\n/**\n * The popup. Under a field (ComboboxInput or ComboboxChips) it opens at the field's width; under a\n * compact ComboboxTrigger it takes the trigger's width, at least 11rem. Either way the width never\n * follows the filtered items, so it holds still while you type. (`Combobox`'s `popupWidth` picks a\n * fixed, wider width for long options instead.)\n */\nfunction ComboboxContent({\n className,\n side = 'bottom',\n sideOffset = 4,\n align = 'start',\n alignOffset = 0,\n anchor,\n container,\n ...props\n}: ComboboxContentProps) {\n const popupAnchor = usePopupAnchor();\n const resolvedContainer = usePortalContainer(container);\n return (\n <BaseCombobox.Portal container={resolvedContainer}>\n <BaseCombobox.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n // Base UI anchors to the field (the InputGroup of ComboboxInput or ComboboxChips), or to the\n // trigger when the input is in the popup; a crumb switcher anchors to the whole crumb.\n anchor={anchor ?? popupAnchor}\n positionMethod={FLOATING_POSITION_METHOD}\n className={comboboxStyles.positioner}\n >\n <BaseCombobox.Popup\n data-slot=\"combobox-content\"\n // With the popup's `min-w-[max(11rem,var(--anchor-width))]`: the anchor's width, at least 11rem.\n className={cn(comboboxStyles.popup, 'w-(--anchor-width)', className)}\n {...props}\n />\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n );\n}\n\n/** The scrolling list. Children: a render function per item (or per group), like Base UI's List. */\nfunction ComboboxList({ className, ...props }: BaseCombobox.List.Props) {\n return (\n <ScrollArea maxHeight=\"var(--spacing-dropdown)\">\n <ScrollAreaViewport className=\"scroll-py-8\">\n <BaseCombobox.List data-slot=\"combobox-list\" className={cn(comboboxStyles.list, className)} {...props} />\n </ScrollAreaViewport>\n </ScrollArea>\n );\n}\n\n/** One option. A check shows on the right while it's selected. */\nfunction ComboboxItem({ className, children, ref, ...props }: BaseCombobox.Item.Props) {\n return (\n <BaseCombobox.Item ref={ref} data-slot=\"combobox-item\" className={cn(comboboxItemClass({}), className)} {...props}>\n <span className={comboboxStyles.itemContent}>{children}</span>\n <span className={comboboxStyles.checkContainer}>\n <BaseCombobox.ItemIndicator>\n <Check className={comboboxStyles.checkIcon} />\n </BaseCombobox.ItemIndicator>\n </span>\n </BaseCombobox.Item>\n );\n}\n\n/** Title over a description inside an item (shadcn's Item / ItemTitle / ItemDescription). */\nfunction ComboboxItemContent({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span data-slot=\"combobox-item-content\" className={cn('flex min-w-0 flex-col gap-0.5', className)} {...props} />\n );\n}\n\nfunction ComboboxItemTitle({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"combobox-item-title\" className={cn('truncate', className)} {...props} />;\n}\n\n/** Muted, up to two lines. */\nfunction ComboboxItemDescription({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"combobox-item-description\"\n // `whitespace-normal`: the item recipe's `[&>span]:truncate` makes its content `nowrap`, which\n // would cut the description off mid-word on one line instead of clamping it at two.\n className={cn('line-clamp-2 text-caption whitespace-normal text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\n/** Muted text at the end of an item, e.g. its kind (\"Agent\"). */\nfunction ComboboxItemEnd({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"combobox-item-end\"\n className={cn('ml-auto shrink-0 text-caption text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\n/** A section of items. Pass the section's `items`; render them with ComboboxCollection. */\nfunction ComboboxGroup(props: BaseCombobox.Group.Props) {\n return <BaseCombobox.Group data-slot=\"combobox-group\" {...props} />;\n}\n\n/** A group's heading, styled like menu section labels. */\nfunction ComboboxLabel({ className, ...props }: BaseCombobox.GroupLabel.Props) {\n return <BaseCombobox.GroupLabel data-slot=\"combobox-label\" className={cn(menuLabelClass, className)} {...props} />;\n}\n\n/** Renders a group's filtered items, one render function call per item. */\nfunction ComboboxCollection(props: BaseCombobox.Collection.Props) {\n return <BaseCombobox.Collection data-slot=\"combobox-collection\" {...props} />;\n}\n\n/** Shows its children only when the filter matches nothing. */\nfunction ComboboxEmpty({ className, ...props }: BaseCombobox.Empty.Props) {\n return <BaseCombobox.Empty data-slot=\"combobox-empty\" className={cn(comboboxStyles.empty, className)} {...props} />;\n}\n\nfunction ComboboxSeparator({ className, ...props }: BaseCombobox.Separator.Props) {\n return (\n <BaseCombobox.Separator data-slot=\"combobox-separator\" className={cn(menuSeparatorClass, className)} {...props} />\n );\n}\n\n/**\n * Multi-select field: chips for the picked items, then ComboboxChipsInput. The chips and input wrap\n * inside their own area so the chevron keeps its place on the first row. While the field is one\n * line it keeps the pill shape of every other field; once chips wrap it takes the Textarea corner.\n */\nfunction ComboboxChips({ className, children, 'aria-label': ariaLabel, ...props }: BaseCombobox.InputGroup.Props) {\n // On the inner chips area, so a caller's `ref` reaches the field without merging refs.\n const chipsRef = React.useRef<HTMLDivElement>(null);\n const [multiline, setMultiline] = React.useState(false);\n\n React.useLayoutEffect(() => {\n const field = chipsRef.current?.parentElement;\n // No observer (e.g. jsdom in tests): the field keeps its one-row shape.\n if (!field || typeof ResizeObserver === 'undefined') return;\n // One row is the control height (the field's `min-height`); anything taller means the chips wrapped.\n // The 1px slack absorbs subpixel rounding.\n const rowHeight = parseFloat(getComputedStyle(field).minHeight) || 0;\n const observer = new ResizeObserver(() => setMultiline(field.offsetHeight > rowHeight + 1));\n observer.observe(field);\n return () => observer.disconnect();\n }, []);\n\n // Chips inside an InputGroup, like Base UI's multi-select example: the popup anchors to the group.\n return (\n <BaseCombobox.InputGroup\n data-slot=\"combobox-chips\"\n data-multiline={multiline ? '' : undefined}\n style={chipsFieldStyle}\n className={cn(\n fieldClass(),\n 'h-auto min-h-control-md items-start data-multiline:rounded-xl',\n // The chips field keeps its resting look: no open tint, no placeholder color. InputGroup sets those\n // attributes, which the trigger recipe styles.\n 'data-[placeholder]:text-foreground data-[popup-open]:[--surface-tint:transparent]',\n className,\n )}\n {...props}\n >\n {/* The label names the chips toolbar, as it did when Chips was the outer element. */}\n <BaseCombobox.Chips ref={chipsRef} aria-label={ariaLabel} className=\"flex min-w-0 flex-1 flex-wrap gap-[3px]\">\n {children}\n </BaseCombobox.Chips>\n {/* Same height as a chip, so the chevron centers on the first row. */}\n <span className=\"flex h-5.5 shrink-0 items-center\">\n <ComboboxFieldTrigger />\n </span>\n </BaseCombobox.InputGroup>\n );\n}\n\n/** One picked item inside ComboboxChips. The × (or Backspace in the input) removes it. */\nfunction ComboboxChip({\n className,\n children,\n showRemove = true,\n ...props\n}: BaseCombobox.Chip.Props & { showRemove?: boolean }) {\n return (\n <BaseCombobox.Chip\n data-slot=\"combobox-chip\"\n className={cn(\n // 8px from the left edge to the text, 6px from the text to the ×'s ink, 8px from the ink to\n // the right edge. Text in the controls' role (`text-label`), like the field value.\n 'flex h-5.5 items-center rounded-full bg-fill pl-2 text-label text-foreground',\n !showRemove && 'pr-2',\n className,\n )}\n {...props}\n >\n {children}\n {showRemove ? (\n <BaseCombobox.ChipRemove\n data-slot=\"combobox-chip-remove\"\n aria-label={typeof children === 'string' ? `Remove ${children}` : 'Remove'}\n // The whole right end is the hit area: full height, from the gap to the chip's edge. The ×'s\n // ink sits 2.5px inside its 12px icon, so 3.5px / 5.5px padding put it 6px / 8px out.\n className=\"flex h-full cursor-pointer items-center rounded-r-full pr-[5.5px] pl-[3.5px] text-muted-foreground not-data-disabled:hover:text-foreground\"\n >\n {/* Inline so the button's color wins over the field's `[&_svg]` icon colors. */}\n <X className=\"size-3\" style={{ color: 'inherit' }} />\n </BaseCombobox.ChipRemove>\n ) : null}\n </BaseCombobox.Chip>\n );\n}\n\n/** The text input after the chips in ComboboxChips. */\nfunction ComboboxChipsInput({ className, onFocus, ...props }: BaseCombobox.Input.Props) {\n return (\n <BaseCombobox.Input\n data-slot=\"combobox-chip-input\"\n onFocus={event => {\n moveCaretToEnd(event);\n onFocus?.(event);\n }}\n className={cn(\n inputClass,\n // Text lines up with other fields' text when there are no chips; 4px after a chip otherwise.\n // Not `first:`: Base UI inserts a hidden Dismiss element before the input while open.\n 'h-5.5 w-0 min-w-12 flex-1 pl-[calc(0.9em_-_4px)] [[data-slot=combobox-chip]~&]:pl-1',\n className,\n )}\n {...passwordManagerOptOutProps}\n {...props}\n />\n );\n}\n\nexport type { ComboboxTriggerProps, ComboboxInputProps, ComboboxContentProps };\n\nexport {\n ComboboxRoot,\n ComboboxInput,\n ComboboxTrigger,\n ComboboxSearch,\n ComboboxValue,\n ComboboxClear,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxItemContent,\n ComboboxItemTitle,\n ComboboxItemDescription,\n ComboboxItemEnd,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n ComboboxSeparator,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n};\n"],"mappings":"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"}
@@ -133,7 +133,7 @@ var chipsFieldStyle = {
133
133
  paddingInlineStart: "4px",
134
134
  paddingInlineEnd: fieldStyle.paddingInlineEnd
135
135
  };
136
- var inputClass = "h-full w-0 min-w-0 flex-1 bg-transparent text-foreground outline-none placeholder:text-muted-foreground";
136
+ var inputClass = "h-full w-0 min-w-0 flex-1 bg-transparent text-foreground outline-none zoom-safe-text placeholder:text-muted-foreground";
137
137
  /** Caret at the end of the value instead of selecting it, the way a text field behaves. */
138
138
  function moveCaretToEnd(event) {
139
139
  const input = event.currentTarget;
@@ -434,4 +434,4 @@ function ComboboxChipsInput({ className, onFocus, ...props }) {
434
434
  }
435
435
  export { comboboxStyles as C, comboboxPopupWidthClass as S, ComboboxRoot as _, ComboboxCollection as a, ComboboxTrigger as b, ComboboxGroup as c, ComboboxItemContent as d, ComboboxItemDescription as f, ComboboxList as g, ComboboxLabel as h, ComboboxClear as i, ComboboxInput as l, ComboboxItemTitle as m, ComboboxChips as n, ComboboxContent as o, ComboboxItemEnd as p, ComboboxChipsInput as r, ComboboxEmpty as s, ComboboxChip as t, ComboboxItem as u, ComboboxSearch as v, comboboxTriggerClass as w, ComboboxValue as x, ComboboxSeparator as y };
436
436
 
437
- //# sourceMappingURL=combobox-parts-C9o4UfH_.js.map
437
+ //# sourceMappingURL=combobox-parts-_m3Qgmci.js.map