@mastra/playground-ui 55.0.0-alpha.5 → 55.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) hide show
  1. package/dist/{Button-BsHGVRjh.cjs → Button-BJOVwaxp.cjs} +13 -12
  2. package/dist/Button-BJOVwaxp.cjs.map +1 -0
  3. package/dist/{Button-DsTY88Xz.js → Button-BVGwYwHT.js} +14 -13
  4. package/dist/Button-BVGwYwHT.js.map +1 -0
  5. package/dist/{Notice-B5khVt-8.js → Notice-CMZ86f1g.js} +2 -2
  6. package/dist/{Notice-B5khVt-8.js.map → Notice-CMZ86f1g.js.map} +1 -1
  7. package/dist/{Notice-BUSAcuH-.cjs → Notice-D0Mvqvr0.cjs} +2 -2
  8. package/dist/{Notice-BUSAcuH-.cjs.map → Notice-D0Mvqvr0.cjs.map} +1 -1
  9. package/dist/{SessionExpired-C4w2ai5-.cjs → SessionExpired-CAOgb-6E.cjs} +2 -2
  10. package/dist/{SessionExpired-C4w2ai5-.cjs.map → SessionExpired-CAOgb-6E.cjs.map} +1 -1
  11. package/dist/{SessionExpired-oy5tS_51.js → SessionExpired-DSPFseGA.js} +2 -2
  12. package/dist/{SessionExpired-oy5tS_51.js.map → SessionExpired-DSPFseGA.js.map} +1 -1
  13. package/dist/{ask-user-DWUWXbS7.cjs → ask-user-DQGe7ZTv.cjs} +3 -3
  14. package/dist/{ask-user-DWUWXbS7.cjs.map → ask-user-DQGe7ZTv.cjs.map} +1 -1
  15. package/dist/{ask-user-D7MeXylO.js → ask-user-Dh9YowL4.js} +3 -3
  16. package/dist/{ask-user-D7MeXylO.js.map → ask-user-Dh9YowL4.js.map} +1 -1
  17. package/dist/{buttons-group-B5TBWfs6.js → buttons-group-CHyXDQBp.js} +5 -5
  18. package/dist/buttons-group-CHyXDQBp.js.map +1 -0
  19. package/dist/{buttons-group-PqYxKznc.cjs → buttons-group-jq7kUVlX.cjs} +5 -5
  20. package/dist/buttons-group-jq7kUVlX.cjs.map +1 -0
  21. package/dist/{checkbox-pvYvwDUy.js → checkbox-CC39oYEv.js} +5 -5
  22. package/dist/checkbox-CC39oYEv.js.map +1 -0
  23. package/dist/{checkbox-BNOCksit.cjs → checkbox-DWXCTy8y.cjs} +6 -6
  24. package/dist/checkbox-DWXCTy8y.cjs.map +1 -0
  25. package/dist/{code-block-CyHjdW02.js → code-block-BdzrmA-p.js} +5 -5
  26. package/dist/{code-block-CyHjdW02.js.map → code-block-BdzrmA-p.js.map} +1 -1
  27. package/dist/{code-block-I7b2Wt_Y.cjs → code-block-D1RequlX.cjs} +5 -5
  28. package/dist/{code-block-I7b2Wt_Y.cjs.map → code-block-D1RequlX.cjs.map} +1 -1
  29. package/dist/{code-editor-BeosH5J-.cjs → code-editor-CopnXVKT.cjs} +2 -2
  30. package/dist/{code-editor-BeosH5J-.cjs.map → code-editor-CopnXVKT.cjs.map} +1 -1
  31. package/dist/{code-editor-DPYAjQUV.js → code-editor-D7BftGSx.js} +2 -2
  32. package/dist/{code-editor-DPYAjQUV.js.map → code-editor-D7BftGSx.js.map} +1 -1
  33. package/dist/{combobox-Cg-7UwwL.cjs → combobox-DO__6QlF.cjs} +4 -5
  34. package/dist/combobox-DO__6QlF.cjs.map +1 -0
  35. package/dist/{combobox-8GoJaMs1.js → combobox-Ua6bvpM8.js} +3 -4
  36. package/dist/combobox-Ua6bvpM8.js.map +1 -0
  37. package/dist/{command-OXbUDxUu.js → command-CNKdcyyr.js} +4 -11
  38. package/dist/command-CNKdcyyr.js.map +1 -0
  39. package/dist/{command-C6cIgH_n.cjs → command-Cva4qgS9.cjs} +5 -12
  40. package/dist/command-Cva4qgS9.cjs.map +1 -0
  41. package/dist/components/AlertDialog.cjs.js +1 -1
  42. package/dist/components/AlertDialog.es.js +1 -1
  43. package/dist/components/Button.cjs.js +1 -1
  44. package/dist/components/Button.es.js +2 -2
  45. package/dist/components/ButtonsGroup.cjs.js +1 -1
  46. package/dist/components/ButtonsGroup.es.js +1 -1
  47. package/dist/components/Checkbox.cjs.js +1 -1
  48. package/dist/components/Checkbox.es.js +1 -1
  49. package/dist/components/ClampedText.cjs.js +1 -1
  50. package/dist/components/ClampedText.es.js +1 -1
  51. package/dist/components/CodeBlock.cjs.js +1 -1
  52. package/dist/components/CodeBlock.es.js +1 -1
  53. package/dist/components/CodeEditor.cjs.js +1 -1
  54. package/dist/components/CodeEditor.es.js +1 -1
  55. package/dist/components/Columns.cjs.js +1 -1
  56. package/dist/components/Columns.es.js +1 -1
  57. package/dist/components/Combobox.cjs.js +1 -1
  58. package/dist/components/Combobox.es.js +1 -1
  59. package/dist/components/Command.cjs.js +1 -1
  60. package/dist/components/Command.es.js +1 -1
  61. package/dist/components/CommandPalette.cjs.js +1 -1
  62. package/dist/components/CommandPalette.es.js +1 -1
  63. package/dist/components/Comment.cjs.js +2 -2
  64. package/dist/components/Comment.es.js +2 -2
  65. package/dist/components/CopyButton.cjs.js +1 -1
  66. package/dist/components/CopyButton.es.js +1 -1
  67. package/dist/components/DataCodeSection.cjs.js +1 -1
  68. package/dist/components/DataCodeSection.es.js +1 -1
  69. package/dist/components/DataDetailsPanel.cjs.js +3 -3
  70. package/dist/components/DataDetailsPanel.es.js +3 -3
  71. package/dist/components/DataFilter.cjs.js +2 -2
  72. package/dist/components/DataFilter.es.js +2 -2
  73. package/dist/components/DataList.cjs.js +4 -4
  74. package/dist/components/DataList.es.js +4 -4
  75. package/dist/components/DataPanel.cjs.js +1 -1
  76. package/dist/components/DataPanel.es.js +1 -1
  77. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  78. package/dist/components/DateRangeTimeline.es.js +1 -1
  79. package/dist/components/DateTimePicker.cjs.js +3 -3
  80. package/dist/components/DateTimePicker.es.js +3 -3
  81. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  82. package/dist/components/DateTimeRangePicker.es.js +1 -1
  83. package/dist/components/Dialog.cjs.js +2 -2
  84. package/dist/components/Dialog.es.js +3 -3
  85. package/dist/components/Drawer.cjs.js +1 -1
  86. package/dist/components/Drawer.es.js +1 -1
  87. package/dist/components/DropdownMenu.cjs.js +1 -1
  88. package/dist/components/DropdownMenu.es.js +1 -1
  89. package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
  90. package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
  91. package/dist/components/ErrorBoundary.cjs.js +1 -1
  92. package/dist/components/ErrorBoundary.es.js +1 -1
  93. package/dist/components/FormFieldBlocks.cjs.js +3 -3
  94. package/dist/components/FormFieldBlocks.es.js +3 -3
  95. package/dist/components/Input.cjs.js +1 -1
  96. package/dist/components/Input.es.js +1 -1
  97. package/dist/components/InputGroup.cjs.js +1 -1
  98. package/dist/components/InputGroup.es.js +1 -1
  99. package/dist/components/IntegrationDialog.cjs.js +2 -2
  100. package/dist/components/IntegrationDialog.es.js +4 -4
  101. package/dist/components/IntegrationDialog.es.js.map +1 -1
  102. package/dist/components/JSONSchemaForm.cjs.js +4 -4
  103. package/dist/components/JSONSchemaForm.es.js +4 -4
  104. package/dist/components/ListSearch.cjs.js +1 -1
  105. package/dist/components/ListSearch.es.js +1 -1
  106. package/dist/components/LogsDataList.cjs.js +2 -4
  107. package/dist/components/LogsDataList.cjs.js.map +1 -1
  108. package/dist/components/LogsDataList.es.js +2 -4
  109. package/dist/components/LogsDataList.es.js.map +1 -1
  110. package/dist/components/MainSidebar.cjs.js +1 -1
  111. package/dist/components/MainSidebar.es.js +1 -1
  112. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  113. package/dist/components/MarkdownRenderer.es.js +1 -1
  114. package/dist/components/Notice.cjs.js +1 -1
  115. package/dist/components/Notice.es.js +1 -1
  116. package/dist/components/PageHeader.cjs.js +1 -1
  117. package/dist/components/PageHeader.es.js +1 -1
  118. package/dist/components/PrevNextNav.cjs.js +2 -2
  119. package/dist/components/PrevNextNav.es.js +2 -2
  120. package/dist/components/PropertyFilter.cjs.js +3 -3
  121. package/dist/components/PropertyFilter.es.js +4 -4
  122. package/dist/components/RadioGroup.cjs.js +4 -4
  123. package/dist/components/RadioGroup.cjs.js.map +1 -1
  124. package/dist/components/RadioGroup.es.js +3 -3
  125. package/dist/components/RadioGroup.es.js.map +1 -1
  126. package/dist/components/RuleBuilder.cjs.js +3 -3
  127. package/dist/components/RuleBuilder.es.js +3 -3
  128. package/dist/components/Select.cjs.js +1 -1
  129. package/dist/components/Select.es.js +1 -1
  130. package/dist/components/SessionExpired.cjs.js +1 -1
  131. package/dist/components/SessionExpired.es.js +1 -1
  132. package/dist/components/SideDialog.cjs.js +4 -4
  133. package/dist/components/SideDialog.es.js +4 -4
  134. package/dist/components/Slider.cjs.js +1 -1
  135. package/dist/components/Slider.es.js +1 -1
  136. package/dist/components/Switch.cjs.js +1 -1
  137. package/dist/components/Switch.es.js +1 -1
  138. package/dist/components/Table.cjs.js +4 -3
  139. package/dist/components/Table.cjs.js.map +1 -1
  140. package/dist/components/Table.es.js +3 -2
  141. package/dist/components/Table.es.js.map +1 -1
  142. package/dist/components/Tabs.cjs.js +3 -3
  143. package/dist/components/Tabs.es.js +3 -3
  144. package/dist/components/Textarea.cjs.js +1 -1
  145. package/dist/components/Textarea.es.js +1 -1
  146. package/dist/components/ThreadList.cjs.js +1 -1
  147. package/dist/components/ThreadList.es.js +1 -1
  148. package/dist/components/Truncate.cjs.js +1 -1
  149. package/dist/components/Truncate.es.js +1 -1
  150. package/dist/components/Workflow.cjs.js +6 -6
  151. package/dist/components/Workflow.es.js +6 -6
  152. package/dist/components/ai/ask-user.cjs.js +1 -1
  153. package/dist/components/ai/ask-user.es.js +1 -1
  154. package/dist/components/ai/plan.cjs.js +2 -2
  155. package/dist/components/ai/plan.es.js +2 -2
  156. package/dist/components/ai/tool-call.cjs.js +16 -6
  157. package/dist/components/ai/tool-call.cjs.js.map +1 -1
  158. package/dist/components/ai/tool-call.es.js +17 -7
  159. package/dist/components/ai/tool-call.es.js.map +1 -1
  160. package/dist/{copy-button-BW1CfolI.js → copy-button-ChUCFd-x.js} +2 -2
  161. package/dist/{copy-button-BW1CfolI.js.map → copy-button-ChUCFd-x.js.map} +1 -1
  162. package/dist/{copy-button-CC4JTC90.cjs → copy-button-zLZfswrj.cjs} +2 -2
  163. package/dist/{copy-button-CC4JTC90.cjs.map → copy-button-zLZfswrj.cjs.map} +1 -1
  164. package/dist/{data-code-section-BWaPQ6JT.cjs → data-code-section-BLvh46xK.cjs} +6 -6
  165. package/dist/{data-code-section-BWaPQ6JT.cjs.map → data-code-section-BLvh46xK.cjs.map} +1 -1
  166. package/dist/{data-code-section-EmqjYVh1.js → data-code-section-DSelBhmP.js} +6 -6
  167. package/dist/{data-code-section-EmqjYVh1.js.map → data-code-section-DSelBhmP.js.map} +1 -1
  168. package/dist/{data-list-BSezaRoI.cjs → data-list-4_cVlINT.cjs} +3 -3
  169. package/dist/{data-list-BSezaRoI.cjs.map → data-list-4_cVlINT.cjs.map} +1 -1
  170. package/dist/{data-list-DJ7DgVuH.js → data-list-Bm70XKg_.js} +3 -3
  171. package/dist/{data-list-DJ7DgVuH.js.map → data-list-Bm70XKg_.js.map} +1 -1
  172. package/dist/{data-list-skeleton-BiletsX0.cjs → data-list-skeleton-B7flrjdA.cjs} +2 -2
  173. package/dist/{data-list-skeleton-BiletsX0.cjs.map → data-list-skeleton-B7flrjdA.cjs.map} +1 -1
  174. package/dist/{data-list-skeleton-QvifQhmC.js → data-list-skeleton-BJVs8rDE.js} +2 -2
  175. package/dist/{data-list-skeleton-QvifQhmC.js.map → data-list-skeleton-BJVs8rDE.js.map} +1 -1
  176. package/dist/{data-list-top-0BrqoQba.js → data-list-top-BeUxfGy2.js} +2 -2
  177. package/dist/{data-list-top-0BrqoQba.js.map → data-list-top-BeUxfGy2.js.map} +1 -1
  178. package/dist/{data-list-top-D8r8M8JA.cjs → data-list-top-D9zFnKEi.cjs} +2 -2
  179. package/dist/{data-list-top-D8r8M8JA.cjs.map → data-list-top-D9zFnKEi.cjs.map} +1 -1
  180. package/dist/{data-panel-C3FczohB.js → data-panel-5iuux0r_.js} +4 -4
  181. package/dist/{data-panel-C3FczohB.js.map → data-panel-5iuux0r_.js.map} +1 -1
  182. package/dist/{data-panel-KjzePv5_.cjs → data-panel-tSErqolu.cjs} +4 -4
  183. package/dist/{data-panel-KjzePv5_.cjs.map → data-panel-tSErqolu.cjs.map} +1 -1
  184. package/dist/{date-time-range-picker-DU4ynAjj.cjs → date-time-range-picker-C0J7p78l.cjs} +4 -4
  185. package/dist/{date-time-range-picker-DU4ynAjj.cjs.map → date-time-range-picker-C0J7p78l.cjs.map} +1 -1
  186. package/dist/{date-time-range-picker-CMzJwQ_s.js → date-time-range-picker-CcoU5-2_.js} +4 -4
  187. package/dist/{date-time-range-picker-CMzJwQ_s.js.map → date-time-range-picker-CcoU5-2_.js.map} +1 -1
  188. package/dist/{dialog-CUeeMxRo.cjs → dialog-B1DwyLJJ.cjs} +10 -26
  189. package/dist/dialog-B1DwyLJJ.cjs.map +1 -0
  190. package/dist/{dialog-KvPRmHPW.js → dialog-Dfrt_JCJ.js} +10 -26
  191. package/dist/dialog-Dfrt_JCJ.js.map +1 -0
  192. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
  193. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
  194. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  195. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  196. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
  197. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
  198. package/dist/domains/chat/context/chat-context.cjs.js.map +1 -1
  199. package/dist/domains/chat/context/chat-context.es.js.map +1 -1
  200. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  201. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  202. package/dist/domains/chat/messages/renderers/assistant-text-part-renderer.cjs.js +9 -1
  203. package/dist/domains/chat/messages/renderers/assistant-text-part-renderer.cjs.js.map +1 -1
  204. package/dist/domains/chat/messages/renderers/assistant-text-part-renderer.es.js +9 -1
  205. package/dist/domains/chat/messages/renderers/assistant-text-part-renderer.es.js.map +1 -1
  206. package/dist/domains/chat/messages/renderers/message-text.cjs.js +12 -4
  207. package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
  208. package/dist/domains/chat/messages/renderers/message-text.es.js +12 -4
  209. package/dist/domains/chat/messages/renderers/message-text.es.js.map +1 -1
  210. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
  211. package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
  212. package/dist/domains/chat/messages/renderers/tool-part.cjs.js +1 -1
  213. package/dist/domains/chat/messages/renderers/tool-part.cjs.js.map +1 -1
  214. package/dist/domains/chat/messages/renderers/tool-part.es.js +1 -1
  215. package/dist/domains/chat/messages/renderers/tool-part.es.js.map +1 -1
  216. package/dist/domains/chat/messages/tripwire-notice.cjs.js +1 -1
  217. package/dist/domains/chat/messages/tripwire-notice.es.js +1 -1
  218. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  219. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  220. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
  221. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
  222. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
  223. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
  224. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  225. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  226. package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +1 -1
  227. package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +1 -1
  228. package/dist/domains/logs/components/log-details-view.cjs.js +3 -3
  229. package/dist/domains/logs/components/log-details-view.es.js +3 -3
  230. package/dist/domains/logs/components/logs-error-content.cjs.js +1 -1
  231. package/dist/domains/logs/components/logs-error-content.es.js +1 -1
  232. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  233. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  234. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  235. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  236. package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
  237. package/dist/domains/logs/components/no-logs-info.es.js +1 -1
  238. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  239. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  240. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  241. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  242. package/dist/domains/memory/components/observation-detail-view.cjs.js +1 -1
  243. package/dist/domains/memory/components/observation-detail-view.es.js +1 -1
  244. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  245. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  246. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  247. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  248. package/dist/domains/metrics/components/latency-card-view.cjs.js +3 -3
  249. package/dist/domains/metrics/components/latency-card-view.es.js +3 -3
  250. package/dist/domains/metrics/components/memory-card-view.cjs.js +4 -4
  251. package/dist/domains/metrics/components/memory-card-view.es.js +4 -4
  252. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +1 -1
  253. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +1 -1
  254. package/dist/domains/metrics/components/scores-card-view.cjs.js +4 -4
  255. package/dist/domains/metrics/components/scores-card-view.es.js +4 -4
  256. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +3 -3
  257. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +3 -3
  258. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +3 -3
  259. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +3 -3
  260. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +3 -3
  261. package/dist/domains/metrics/components/traces-volume-card-view.es.js +3 -3
  262. package/dist/domains/traces/components/span-data-panel-view.cjs.js +6 -6
  263. package/dist/domains/traces/components/span-data-panel-view.es.js +6 -6
  264. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +4 -4
  265. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +4 -4
  266. package/dist/domains/traces/components/thread-trace/thread-trace-spans-tab.cjs.js +2 -2
  267. package/dist/domains/traces/components/thread-trace/thread-trace-spans-tab.es.js +2 -2
  268. package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
  269. package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
  270. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +9 -9
  271. package/dist/domains/traces/components/trace-data-panel-view.es.js +9 -9
  272. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  273. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  274. package/dist/domains/traces/components/traces-error-content.cjs.js +1 -1
  275. package/dist/domains/traces/components/traces-error-content.es.js +1 -1
  276. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +2 -2
  277. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +2 -2
  278. package/dist/domains/traces/components/traces-list-view.cjs.js +3 -3
  279. package/dist/domains/traces/components/traces-list-view.es.js +3 -3
  280. package/dist/domains/traces/components/traces-toolbar.cjs.js +1 -1
  281. package/dist/domains/traces/components/traces-toolbar.es.js +1 -1
  282. package/dist/{drawer-BXOkhFYI.cjs → drawer-Bq7j_MiM.cjs} +2 -2
  283. package/dist/{drawer-BXOkhFYI.cjs.map → drawer-Bq7j_MiM.cjs.map} +1 -1
  284. package/dist/{drawer-DUhKiF6i.js → drawer-D1m2faHU.js} +2 -2
  285. package/dist/{drawer-DUhKiF6i.js.map → drawer-D1m2faHU.js.map} +1 -1
  286. package/dist/{dropdown-menu-Bj9vR0Md.cjs → dropdown-menu-Bfh5ROWe.cjs} +6 -5
  287. package/dist/dropdown-menu-Bfh5ROWe.cjs.map +1 -0
  288. package/dist/{dropdown-menu-GAD50kMK.js → dropdown-menu-C853KwJJ.js} +5 -4
  289. package/dist/dropdown-menu-C853KwJJ.js.map +1 -0
  290. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -3
  291. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  292. package/dist/ee/signals/components/entity-index-list.es.js +1 -3
  293. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  294. package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
  295. package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
  296. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +6 -7
  297. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  298. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +6 -7
  299. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  300. package/dist/ee/signals/examples-pager.cjs.js +1 -1
  301. package/dist/ee/signals/examples-pager.es.js +1 -1
  302. package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
  303. package/dist/ee/signals/noise-detail-panel.es.js +1 -1
  304. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  305. package/dist/ee/signals/sankey-signals.es.js +1 -1
  306. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +4 -4
  307. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +4 -4
  308. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +3 -3
  309. package/dist/ee/signals/settings/trace-signal-settings.es.js +3 -3
  310. package/dist/ee/signals/signals-error-state.cjs.js +1 -1
  311. package/dist/ee/signals/signals-error-state.es.js +1 -1
  312. package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
  313. package/dist/ee/signals/snapshot-timeline.es.js +1 -1
  314. package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
  315. package/dist/ee/signals/theme-detail-panel.es.js +1 -1
  316. package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
  317. package/dist/ee/signals/theme-filter-banner.es.js +1 -1
  318. package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
  319. package/dist/ee/signals/trace-insight-view.es.js +1 -1
  320. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  321. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  322. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  323. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  324. package/dist/hooks/use-local-storage-state.cjs.js +35 -0
  325. package/dist/hooks/use-local-storage-state.cjs.js.map +1 -0
  326. package/dist/hooks/use-local-storage-state.d.ts +2 -0
  327. package/dist/hooks/use-local-storage-state.es.js +31 -0
  328. package/dist/hooks/use-local-storage-state.es.js.map +1 -0
  329. package/dist/{input-BXl_-87K.cjs → input-D3SUXvgI.cjs} +9 -10
  330. package/dist/input-D3SUXvgI.cjs.map +1 -0
  331. package/dist/{input-KNga7Y7g.js → input-DinpgQXj.js} +8 -9
  332. package/dist/input-DinpgQXj.js.map +1 -0
  333. package/dist/{input-group-BW3PBfmX.cjs → input-group-CBuqhxnJ.cjs} +30 -11
  334. package/dist/input-group-CBuqhxnJ.cjs.map +1 -0
  335. package/dist/{input-group-CC3FsOEL.js → input-group-Dv1YsFDZ.js} +30 -11
  336. package/dist/input-group-Dv1YsFDZ.js.map +1 -0
  337. package/dist/layout/tabbed-container.cjs.js +6 -6
  338. package/dist/layout/tabbed-container.es.js +6 -6
  339. package/dist/{list-search-D_Q34jSU.cjs → list-search-BwcO9d9M.cjs} +2 -2
  340. package/dist/{list-search-D_Q34jSU.cjs.map → list-search-BwcO9d9M.cjs.map} +1 -1
  341. package/dist/{list-search-C9wdyGVJ.js → list-search-C8FBcDpo.js} +2 -2
  342. package/dist/{list-search-C9wdyGVJ.js.map → list-search-C8FBcDpo.js.map} +1 -1
  343. package/dist/{logs-data-list-CBCCnmWl.cjs → logs-data-list-B0hzHq0b.cjs} +2 -2
  344. package/dist/{logs-data-list-CBCCnmWl.cjs.map → logs-data-list-B0hzHq0b.cjs.map} +1 -1
  345. package/dist/{logs-data-list-BEC39Y_v.js → logs-data-list-CWu83qI7.js} +2 -2
  346. package/dist/{logs-data-list-BEC39Y_v.js.map → logs-data-list-CWu83qI7.js.map} +1 -1
  347. package/dist/{markdown-renderer-Wmdi_oR8.js → markdown-renderer-Dp1fJwUB.js} +175 -8
  348. package/dist/markdown-renderer-Dp1fJwUB.js.map +1 -0
  349. package/dist/{markdown-renderer-Ds3PaLdR.cjs → markdown-renderer-hBiN_N_-.cjs} +174 -7
  350. package/dist/markdown-renderer-hBiN_N_-.cjs.map +1 -0
  351. package/dist/new/layout/app-shell.cjs.js +53 -0
  352. package/dist/new/layout/app-shell.cjs.js.map +1 -0
  353. package/dist/new/layout/app-shell.d.ts +2 -0
  354. package/dist/new/layout/app-shell.es.js +49 -0
  355. package/dist/new/layout/app-shell.es.js.map +1 -0
  356. package/dist/new/layout/page-header.cjs.js +1 -1
  357. package/dist/new/layout/page-header.es.js +1 -1
  358. package/dist/{page-header-ComQfwIQ.js → page-header-CGRV1f_f.js} +11 -7
  359. package/dist/page-header-CGRV1f_f.js.map +1 -0
  360. package/dist/{page-header-hRxyKAlN.cjs → page-header-CTdBcOWK.cjs} +11 -7
  361. package/dist/page-header-CTdBcOWK.cjs.map +1 -0
  362. package/dist/primitives/control-size.cjs.js +1 -1
  363. package/dist/primitives/control-size.cjs.js.map +1 -1
  364. package/dist/primitives/control-size.es.js +1 -1
  365. package/dist/primitives/control-size.es.js.map +1 -1
  366. package/dist/primitives/form-element.cjs.js +8 -21
  367. package/dist/primitives/form-element.cjs.js.map +1 -1
  368. package/dist/primitives/form-element.es.js +8 -20
  369. package/dist/primitives/form-element.es.js.map +1 -1
  370. package/dist/primitives/menu-item.cjs.js +7 -10
  371. package/dist/primitives/menu-item.cjs.js.map +1 -1
  372. package/dist/primitives/menu-item.es.js +7 -10
  373. package/dist/primitives/menu-item.es.js.map +1 -1
  374. package/dist/primitives/trigger-button.cjs.js +1 -1
  375. package/dist/primitives/trigger-button.es.js +1 -1
  376. package/dist/{property-filter-applied-CTcWC5Hv.js → property-filter-applied-CF-InSu-.js} +5 -5
  377. package/dist/{property-filter-applied-CTcWC5Hv.js.map → property-filter-applied-CF-InSu-.js.map} +1 -1
  378. package/dist/{property-filter-applied-DCffRXYU.cjs → property-filter-applied-D35zWa7S.cjs} +5 -5
  379. package/dist/{property-filter-applied-DCffRXYU.cjs.map → property-filter-applied-D35zWa7S.cjs.map} +1 -1
  380. package/dist/resize/panel-drawer.cjs.js +1 -1
  381. package/dist/resize/panel-drawer.es.js +1 -1
  382. package/dist/{search-field-block-BH_zDJIt.js → search-field-block-DhgD7NhZ.js} +3 -3
  383. package/dist/{search-field-block-BH_zDJIt.js.map → search-field-block-DhgD7NhZ.js.map} +1 -1
  384. package/dist/{search-field-block-WP6PODTo.cjs → search-field-block-DnJYUEGi.cjs} +3 -3
  385. package/dist/{search-field-block-WP6PODTo.cjs.map → search-field-block-DnJYUEGi.cjs.map} +1 -1
  386. package/dist/{select-VqANzntV.js → select-3GcRJGtd.js} +5 -3
  387. package/dist/select-3GcRJGtd.js.map +1 -0
  388. package/dist/{select-Dhox-EJ2.cjs → select-4dVGVp0V.cjs} +6 -4
  389. package/dist/select-4dVGVp0V.cjs.map +1 -0
  390. package/dist/{select-field-block-C3OTHj2n.js → select-field-block-BEyjBDiB.js} +2 -2
  391. package/dist/{select-field-block-C3OTHj2n.js.map → select-field-block-BEyjBDiB.js.map} +1 -1
  392. package/dist/{select-field-block-DBv-cFoz.cjs → select-field-block-By8NfJoe.cjs} +2 -2
  393. package/dist/{select-field-block-DBv-cFoz.cjs.map → select-field-block-By8NfJoe.cjs.map} +1 -1
  394. package/dist/{slider-Cx_ZwlQU.js → slider-AfRJ3a4W.js} +2 -7
  395. package/dist/slider-AfRJ3a4W.js.map +1 -0
  396. package/dist/{slider-DyNnS3a7.cjs → slider-BXYQmaQy.cjs} +3 -8
  397. package/dist/slider-BXYQmaQy.cjs.map +1 -0
  398. package/dist/src/domains/chat/context/chat-context.d.ts +2 -0
  399. package/dist/src/domains/chat/messages/renderers/message-text.d.ts +2 -1
  400. package/dist/src/domains/chat/stories/messages.stories.d.ts +1 -1
  401. package/dist/src/ds/components/Button/Button.d.ts +1 -1
  402. package/dist/src/ds/components/Checkbox/checkbox.d.ts +10 -1
  403. package/dist/src/ds/components/Combobox/combobox.d.ts +3 -2
  404. package/dist/src/ds/components/DropdownMenu/dropdown-menu.d.ts +9 -1
  405. package/dist/src/ds/components/DropdownMenu/dropdown-menu.stories.d.ts +1 -0
  406. package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +3 -1
  407. package/dist/src/ds/components/MarkdownRenderer/markdown-table.d.ts +3 -0
  408. package/dist/src/ds/components/MarkdownRenderer/table-csv.d.ts +2 -0
  409. package/dist/src/ds/components/MarkdownRenderer/table-markdown.d.ts +5 -0
  410. package/dist/src/ds/components/Select/select.d.ts +24 -2
  411. package/dist/src/ds/components/Slider/slider.d.ts +1 -1
  412. package/dist/src/ds/components/Table/Table.d.ts +1 -1
  413. package/dist/src/ds/components/ai/tool-call/tool-call-group.d.ts +2 -0
  414. package/dist/src/ds/new/layout/app-shell/app-shell.d.ts +13 -0
  415. package/dist/src/ds/new/layout/app-shell/app-shell.stories.d.ts +22 -0
  416. package/dist/src/ds/new/layout/app-shell/index.d.ts +1 -0
  417. package/dist/src/ds/primitives/form-element.d.ts +5 -6
  418. package/dist/src/ds/primitives/menu-item.d.ts +1 -0
  419. package/dist/src/hooks/use-local-storage-state.d.ts +10 -0
  420. package/dist/style.css +144 -35
  421. package/dist/{switch-CRgSw0D1.js → switch-A-j7GDcX.js} +3 -4
  422. package/dist/switch-A-j7GDcX.js.map +1 -0
  423. package/dist/{switch-CsnP5CNn.cjs → switch-BROLIeGF.cjs} +3 -4
  424. package/dist/switch-BROLIeGF.cjs.map +1 -0
  425. package/dist/{tabs-content-Bf28p8Au.cjs → tabs-content-CV7YrtD1.cjs} +4 -4
  426. package/dist/tabs-content-CV7YrtD1.cjs.map +1 -0
  427. package/dist/{tabs-content-vrO_NM42.js → tabs-content-CW6RtAEV.js} +3 -3
  428. package/dist/tabs-content-CW6RtAEV.js.map +1 -0
  429. package/dist/{tabs-root-B4G-ywup.js → tabs-root-BAy8m6GO.js} +2 -2
  430. package/dist/{tabs-root-B4G-ywup.js.map → tabs-root-BAy8m6GO.js.map} +1 -1
  431. package/dist/{tabs-root-BAJYWOrk.cjs → tabs-root-Dw7gHsnZ.cjs} +2 -2
  432. package/dist/{tabs-root-BAJYWOrk.cjs.map → tabs-root-Dw7gHsnZ.cjs.map} +1 -1
  433. package/dist/{tabs-tab-Br-jck-B.cjs → tabs-tab-CP-kzlvB.cjs} +5 -6
  434. package/dist/tabs-tab-CP-kzlvB.cjs.map +1 -0
  435. package/dist/{tabs-tab-CvlCl9kD.js → tabs-tab-K5mQhs7r.js} +6 -7
  436. package/dist/tabs-tab-K5mQhs7r.js.map +1 -0
  437. package/dist/{text-field-block-BVhQGWYw.js → text-field-block-CUN9gL4j.js} +2 -2
  438. package/dist/{text-field-block-BVhQGWYw.js.map → text-field-block-CUN9gL4j.js.map} +1 -1
  439. package/dist/{text-field-block-DBEXulUE.cjs → text-field-block-WuwrSNEX.cjs} +2 -2
  440. package/dist/{text-field-block-DBEXulUE.cjs.map → text-field-block-WuwrSNEX.cjs.map} +1 -1
  441. package/dist/{textarea-BcaFNmji.js → textarea-BCVPeJzr.js} +7 -3
  442. package/dist/textarea-BCVPeJzr.js.map +1 -0
  443. package/dist/{textarea-C_saJE6T.cjs → textarea-D9XsLoN5.cjs} +8 -4
  444. package/dist/textarea-D9XsLoN5.cjs.map +1 -0
  445. package/dist/{time-picker-CMUki2R2.cjs → time-picker-BKpmCbXS.cjs} +2 -2
  446. package/dist/{time-picker-CMUki2R2.cjs.map → time-picker-BKpmCbXS.cjs.map} +1 -1
  447. package/dist/{time-picker-CfdcBPyS.js → time-picker-SgrQvt0V.js} +2 -2
  448. package/dist/{time-picker-CfdcBPyS.js.map → time-picker-SgrQvt0V.js.map} +1 -1
  449. package/dist/{tool-call-DfLe6Hu5.js → tool-call-BlKbOYRH.js} +2 -2
  450. package/dist/{tool-call-DfLe6Hu5.js.map → tool-call-BlKbOYRH.js.map} +1 -1
  451. package/dist/{tool-call-Pi3V0LP3.cjs → tool-call-DVh_yWov.cjs} +2 -2
  452. package/dist/{tool-call-Pi3V0LP3.cjs.map → tool-call-DVh_yWov.cjs.map} +1 -1
  453. package/dist/{traces-data-list-BPrExzSX.cjs → traces-data-list-0WfYCKdc.cjs} +3 -3
  454. package/dist/{traces-data-list-BPrExzSX.cjs.map → traces-data-list-0WfYCKdc.cjs.map} +1 -1
  455. package/dist/{traces-data-list-CfW_M5yW.js → traces-data-list-BOiAOwYM.js} +3 -3
  456. package/dist/{traces-data-list-CfW_M5yW.js.map → traces-data-list-BOiAOwYM.js.map} +1 -1
  457. package/package.json +18 -8
  458. package/theme.css +12 -0
  459. package/dist/Button-BsHGVRjh.cjs.map +0 -1
  460. package/dist/Button-DsTY88Xz.js.map +0 -1
  461. package/dist/buttons-group-B5TBWfs6.js.map +0 -1
  462. package/dist/buttons-group-PqYxKznc.cjs.map +0 -1
  463. package/dist/checkbox-BNOCksit.cjs.map +0 -1
  464. package/dist/checkbox-pvYvwDUy.js.map +0 -1
  465. package/dist/combobox-8GoJaMs1.js.map +0 -1
  466. package/dist/combobox-Cg-7UwwL.cjs.map +0 -1
  467. package/dist/command-C6cIgH_n.cjs.map +0 -1
  468. package/dist/command-OXbUDxUu.js.map +0 -1
  469. package/dist/dialog-CUeeMxRo.cjs.map +0 -1
  470. package/dist/dialog-KvPRmHPW.js.map +0 -1
  471. package/dist/dropdown-menu-Bj9vR0Md.cjs.map +0 -1
  472. package/dist/dropdown-menu-GAD50kMK.js.map +0 -1
  473. package/dist/focus.css +0 -176
  474. package/dist/input-BXl_-87K.cjs.map +0 -1
  475. package/dist/input-KNga7Y7g.js.map +0 -1
  476. package/dist/input-group-BW3PBfmX.cjs.map +0 -1
  477. package/dist/input-group-CC3FsOEL.js.map +0 -1
  478. package/dist/markdown-renderer-Ds3PaLdR.cjs.map +0 -1
  479. package/dist/markdown-renderer-Wmdi_oR8.js.map +0 -1
  480. package/dist/page-header-ComQfwIQ.js.map +0 -1
  481. package/dist/page-header-hRxyKAlN.cjs.map +0 -1
  482. package/dist/select-Dhox-EJ2.cjs.map +0 -1
  483. package/dist/select-VqANzntV.js.map +0 -1
  484. package/dist/slider-Cx_ZwlQU.js.map +0 -1
  485. package/dist/slider-DyNnS3a7.cjs.map +0 -1
  486. package/dist/switch-CRgSw0D1.js.map +0 -1
  487. package/dist/switch-CsnP5CNn.cjs.map +0 -1
  488. package/dist/tabs-content-Bf28p8Au.cjs.map +0 -1
  489. package/dist/tabs-content-vrO_NM42.js.map +0 -1
  490. package/dist/tabs-tab-Br-jck-B.cjs.map +0 -1
  491. package/dist/tabs-tab-CvlCl9kD.js.map +0 -1
  492. package/dist/textarea-BcaFNmji.js.map +0 -1
  493. package/dist/textarea-C_saJE6T.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown-menu-Bj9vR0Md.cjs","sources":["../src/ds/components/DropdownMenu/dropdown-menu.tsx"],"sourcesContent":["import { Menu as MenuPrimitive } from '@base-ui/react/menu';\nimport type { MenuPopupProps, MenuPositionerProps } from '@base-ui/react/menu';\nimport { CheckIcon, ChevronDown } from 'lucide-react';\nimport * as React from 'react';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport '@/ds/primitives/focus.css';\nimport {\n MENU_SIDE_OFFSET,\n menuItemCheckClass,\n menuItemClass,\n menuItemDestructiveClass,\n menuItemInsetClass,\n menuItemTrailingIconClass,\n menuLabelClass,\n menuPopupClass,\n menuPositionerClass,\n menuSeparatorClass,\n menuShortcutClass,\n} from '@/ds/primitives/menu-item';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport { resolveTriggerRender } from '@/ds/primitives/trigger-button';\nimport type { TriggerButtonProps } from '@/ds/primitives/trigger-button';\nimport { cn } from '@/lib/utils';\n\nconst DropdownMenuRoot = MenuPrimitive.Root;\n\nconst DropdownMenuGroup = MenuPrimitive.Group;\n\nconst DropdownMenuPortal = MenuPrimitive.Portal;\n\nconst DropdownMenuSub = MenuPrimitive.SubmenuRoot;\n\nconst DropdownMenuRadioGroup = MenuPrimitive.RadioGroup;\n\nexport type DropdownMenuTriggerProps = Omit<MenuPrimitive.Trigger.Props, 'className'> & TriggerButtonProps;\n\nconst DropdownMenuTrigger = React.forwardRef<HTMLButtonElement, DropdownMenuTriggerProps>(\n ({ className, asChild, render, children, variant, size, tooltip, ...props }, ref) => {\n const resolved = resolveTriggerRender({ render, asChild, children, variant, size, tooltip, className });\n\n return (\n <MenuPrimitive.Trigger ref={ref} className={resolved.className} render={resolved.render} {...props}>\n {resolved.children}\n </MenuPrimitive.Trigger>\n );\n },\n);\nDropdownMenuTrigger.displayName = 'DropdownMenuTrigger';\n\ntype DropdownMenuSubTriggerProps = MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean;\n};\n\nconst DropdownMenuSubTrigger = React.forwardRef<HTMLDivElement, DropdownMenuSubTriggerProps>(\n ({ className, inset, children, ...props }, ref) => (\n <MenuPrimitive.SubmenuTrigger\n ref={ref}\n className={cn(\n menuItemClass,\n 'data-[popup-open]:bg-neutral6/5 data-[popup-open]:text-neutral6',\n inset && menuItemInsetClass,\n className,\n )}\n {...props}\n >\n {children}\n <span className={cn(menuItemTrailingIconClass, 'opacity-50')}>\n <ChevronDown className=\"-rotate-90\" />\n </span>\n </MenuPrimitive.SubmenuTrigger>\n ),\n);\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';\n\ntype DropdownMenuContentPositionerProps = Omit<MenuPositionerProps, keyof MenuPopupProps>;\n\ntype DropdownMenuSubContentProps = MenuPopupProps & DropdownMenuContentPositionerProps;\n\nconst DropdownMenuSubContent = React.forwardRef<HTMLDivElement, DropdownMenuSubContentProps>(\n (\n {\n className,\n align = 'start',\n alignOffset = -4,\n side = 'right',\n sideOffset = MENU_SIDE_OFFSET,\n anchor,\n positionMethod = FLOATING_POSITION_METHOD,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n ...props\n },\n ref,\n ) => {\n // Keep the submenu inside the modal's interaction boundary.\n const resolvedContainer = usePortalContainer();\n const positionerProps: DropdownMenuContentPositionerProps = {\n align,\n alignOffset,\n side,\n sideOffset,\n anchor,\n positionMethod,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n };\n\n return (\n <MenuPrimitive.Portal container={resolvedContainer}>\n <MenuPrimitive.Positioner className={menuPositionerClass} {...positionerProps}>\n <MenuPrimitive.Popup\n ref={ref}\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(menuPopupClass, className)}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n },\n);\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent';\n\ntype DropdownMenuContentProps = MenuPopupProps &\n DropdownMenuContentPositionerProps & {\n container?: HTMLElement;\n };\n\nconst DropdownMenuContent = React.forwardRef<HTMLDivElement, DropdownMenuContentProps>(\n (\n {\n className,\n container,\n align = 'start',\n alignOffset = 0,\n side = 'bottom',\n sideOffset = MENU_SIDE_OFFSET,\n anchor,\n positionMethod = FLOATING_POSITION_METHOD,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n ...props\n },\n ref,\n ) => {\n // Keep the menu inside the modal's interaction boundary unless a container overrides it.\n const resolvedContainer = usePortalContainer(container);\n const positionerProps: DropdownMenuContentPositionerProps = {\n align,\n alignOffset,\n side,\n sideOffset,\n anchor,\n positionMethod,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n };\n\n return (\n <MenuPrimitive.Portal container={resolvedContainer}>\n <MenuPrimitive.Positioner className={menuPositionerClass} {...positionerProps}>\n <MenuPrimitive.Popup\n ref={ref}\n data-slot=\"dropdown-menu-content\"\n className={cn(menuPopupClass, className)}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n },\n);\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\ntype DropdownMenuItemProps = MenuPrimitive.Item.Props & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n /** Compatibility alias for onClick from the previous Radix API. */\n onSelect?: MenuPrimitive.Item.Props['onClick'];\n};\n\nconst DropdownMenuItem = React.forwardRef<HTMLDivElement, DropdownMenuItemProps>(\n ({ className, inset, variant = 'default', onSelect, onClick, ...props }, ref) => (\n <MenuPrimitive.Item\n ref={ref}\n data-inset={inset ? '' : undefined}\n data-variant={variant}\n onClick={event => {\n onClick?.(event);\n onSelect?.(event);\n }}\n className={cn(\n variant === 'destructive' ? menuItemDestructiveClass : menuItemClass,\n inset && menuItemInsetClass,\n className,\n )}\n {...props}\n />\n ),\n);\nDropdownMenuItem.displayName = 'DropdownMenuItem';\n\nconst DropdownMenuCheckboxItem = React.forwardRef<HTMLDivElement, MenuPrimitive.CheckboxItem.Props>(\n ({ className, children, checked, ...props }, ref) => (\n <MenuPrimitive.CheckboxItem ref={ref} className={cn(menuItemClass, className)} checked={checked} {...props}>\n {children}\n <MenuPrimitive.CheckboxItemIndicator className={menuItemCheckClass}>\n <CheckIcon />\n </MenuPrimitive.CheckboxItemIndicator>\n </MenuPrimitive.CheckboxItem>\n ),\n);\nDropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem';\n\nconst DropdownMenuRadioItem = React.forwardRef<HTMLDivElement, MenuPrimitive.RadioItem.Props>(\n ({ className, children, ...props }, ref) => (\n <MenuPrimitive.RadioItem ref={ref} className={cn(menuItemClass, className)} {...props}>\n {children}\n <MenuPrimitive.RadioItemIndicator className={menuItemCheckClass}>\n <CheckIcon />\n </MenuPrimitive.RadioItemIndicator>\n </MenuPrimitive.RadioItem>\n ),\n);\nDropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem';\n\ntype DropdownMenuLabelProps = React.HTMLAttributes<HTMLDivElement> & {\n inset?: boolean;\n};\n\nconst DropdownMenuLabel = React.forwardRef<HTMLDivElement, DropdownMenuLabelProps>(\n ({ className, inset, ...props }, ref) => (\n <div ref={ref} className={cn(menuLabelClass, inset && menuItemInsetClass, className)} {...props} />\n ),\n);\nDropdownMenuLabel.displayName = 'DropdownMenuLabel';\n\nconst DropdownMenuSeparator = React.forwardRef<HTMLDivElement, MenuPrimitive.Separator.Props>(\n ({ className, ...props }, ref) => (\n <MenuPrimitive.Separator ref={ref} className={cn(menuSeparatorClass, className)} {...props} />\n ),\n);\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator';\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn(menuShortcutClass, className)} {...props} />;\n};\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nfunction DropdownMenu({\n open,\n defaultOpen,\n onOpenChange,\n children,\n modal,\n}: {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: MenuPrimitive.Root.Props['onOpenChange'];\n children: React.ReactNode;\n modal?: boolean;\n}) {\n return (\n <DropdownMenuRoot modal={modal} open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n {children}\n </DropdownMenuRoot>\n );\n}\n\nDropdownMenu.Trigger = DropdownMenuTrigger;\nDropdownMenu.Content = DropdownMenuContent;\nDropdownMenu.Group = DropdownMenuGroup;\nDropdownMenu.Portal = DropdownMenuPortal;\nDropdownMenu.Item = DropdownMenuItem;\nDropdownMenu.CheckboxItem = DropdownMenuCheckboxItem;\nDropdownMenu.RadioItem = DropdownMenuRadioItem;\nDropdownMenu.Label = DropdownMenuLabel;\nDropdownMenu.Separator = DropdownMenuSeparator;\nDropdownMenu.Shortcut = DropdownMenuShortcut;\nDropdownMenu.Sub = DropdownMenuSub;\nDropdownMenu.SubContent = DropdownMenuSubContent;\nDropdownMenu.SubTrigger = DropdownMenuSubTrigger;\nDropdownMenu.RadioGroup = DropdownMenuRadioGroup;\n\nexport { DropdownMenu };\n"],"names":["MenuPrimitive","React","resolveTriggerRender","jsx","jsxs","cn","menuItemClass","menuItemInsetClass","menuItemTrailingIconClass","ChevronDown","MENU_SIDE_OFFSET","FLOATING_POSITION_METHOD","usePortalContainer","menuPositionerClass","menuPopupClass","menuItemDestructiveClass","menuItemCheckClass","CheckIcon","menuLabelClass","menuSeparatorClass","menuShortcutClass"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown-menu-GAD50kMK.js","sources":["../src/ds/components/DropdownMenu/dropdown-menu.tsx"],"sourcesContent":["import { Menu as MenuPrimitive } from '@base-ui/react/menu';\nimport type { MenuPopupProps, MenuPositionerProps } from '@base-ui/react/menu';\nimport { CheckIcon, ChevronDown } from 'lucide-react';\nimport * as React from 'react';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport '@/ds/primitives/focus.css';\nimport {\n MENU_SIDE_OFFSET,\n menuItemCheckClass,\n menuItemClass,\n menuItemDestructiveClass,\n menuItemInsetClass,\n menuItemTrailingIconClass,\n menuLabelClass,\n menuPopupClass,\n menuPositionerClass,\n menuSeparatorClass,\n menuShortcutClass,\n} from '@/ds/primitives/menu-item';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport { resolveTriggerRender } from '@/ds/primitives/trigger-button';\nimport type { TriggerButtonProps } from '@/ds/primitives/trigger-button';\nimport { cn } from '@/lib/utils';\n\nconst DropdownMenuRoot = MenuPrimitive.Root;\n\nconst DropdownMenuGroup = MenuPrimitive.Group;\n\nconst DropdownMenuPortal = MenuPrimitive.Portal;\n\nconst DropdownMenuSub = MenuPrimitive.SubmenuRoot;\n\nconst DropdownMenuRadioGroup = MenuPrimitive.RadioGroup;\n\nexport type DropdownMenuTriggerProps = Omit<MenuPrimitive.Trigger.Props, 'className'> & TriggerButtonProps;\n\nconst DropdownMenuTrigger = React.forwardRef<HTMLButtonElement, DropdownMenuTriggerProps>(\n ({ className, asChild, render, children, variant, size, tooltip, ...props }, ref) => {\n const resolved = resolveTriggerRender({ render, asChild, children, variant, size, tooltip, className });\n\n return (\n <MenuPrimitive.Trigger ref={ref} className={resolved.className} render={resolved.render} {...props}>\n {resolved.children}\n </MenuPrimitive.Trigger>\n );\n },\n);\nDropdownMenuTrigger.displayName = 'DropdownMenuTrigger';\n\ntype DropdownMenuSubTriggerProps = MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean;\n};\n\nconst DropdownMenuSubTrigger = React.forwardRef<HTMLDivElement, DropdownMenuSubTriggerProps>(\n ({ className, inset, children, ...props }, ref) => (\n <MenuPrimitive.SubmenuTrigger\n ref={ref}\n className={cn(\n menuItemClass,\n 'data-[popup-open]:bg-neutral6/5 data-[popup-open]:text-neutral6',\n inset && menuItemInsetClass,\n className,\n )}\n {...props}\n >\n {children}\n <span className={cn(menuItemTrailingIconClass, 'opacity-50')}>\n <ChevronDown className=\"-rotate-90\" />\n </span>\n </MenuPrimitive.SubmenuTrigger>\n ),\n);\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';\n\ntype DropdownMenuContentPositionerProps = Omit<MenuPositionerProps, keyof MenuPopupProps>;\n\ntype DropdownMenuSubContentProps = MenuPopupProps & DropdownMenuContentPositionerProps;\n\nconst DropdownMenuSubContent = React.forwardRef<HTMLDivElement, DropdownMenuSubContentProps>(\n (\n {\n className,\n align = 'start',\n alignOffset = -4,\n side = 'right',\n sideOffset = MENU_SIDE_OFFSET,\n anchor,\n positionMethod = FLOATING_POSITION_METHOD,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n ...props\n },\n ref,\n ) => {\n // Keep the submenu inside the modal's interaction boundary.\n const resolvedContainer = usePortalContainer();\n const positionerProps: DropdownMenuContentPositionerProps = {\n align,\n alignOffset,\n side,\n sideOffset,\n anchor,\n positionMethod,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n };\n\n return (\n <MenuPrimitive.Portal container={resolvedContainer}>\n <MenuPrimitive.Positioner className={menuPositionerClass} {...positionerProps}>\n <MenuPrimitive.Popup\n ref={ref}\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(menuPopupClass, className)}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n },\n);\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent';\n\ntype DropdownMenuContentProps = MenuPopupProps &\n DropdownMenuContentPositionerProps & {\n container?: HTMLElement;\n };\n\nconst DropdownMenuContent = React.forwardRef<HTMLDivElement, DropdownMenuContentProps>(\n (\n {\n className,\n container,\n align = 'start',\n alignOffset = 0,\n side = 'bottom',\n sideOffset = MENU_SIDE_OFFSET,\n anchor,\n positionMethod = FLOATING_POSITION_METHOD,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n ...props\n },\n ref,\n ) => {\n // Keep the menu inside the modal's interaction boundary unless a container overrides it.\n const resolvedContainer = usePortalContainer(container);\n const positionerProps: DropdownMenuContentPositionerProps = {\n align,\n alignOffset,\n side,\n sideOffset,\n anchor,\n positionMethod,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n };\n\n return (\n <MenuPrimitive.Portal container={resolvedContainer}>\n <MenuPrimitive.Positioner className={menuPositionerClass} {...positionerProps}>\n <MenuPrimitive.Popup\n ref={ref}\n data-slot=\"dropdown-menu-content\"\n className={cn(menuPopupClass, className)}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n },\n);\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\ntype DropdownMenuItemProps = MenuPrimitive.Item.Props & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n /** Compatibility alias for onClick from the previous Radix API. */\n onSelect?: MenuPrimitive.Item.Props['onClick'];\n};\n\nconst DropdownMenuItem = React.forwardRef<HTMLDivElement, DropdownMenuItemProps>(\n ({ className, inset, variant = 'default', onSelect, onClick, ...props }, ref) => (\n <MenuPrimitive.Item\n ref={ref}\n data-inset={inset ? '' : undefined}\n data-variant={variant}\n onClick={event => {\n onClick?.(event);\n onSelect?.(event);\n }}\n className={cn(\n variant === 'destructive' ? menuItemDestructiveClass : menuItemClass,\n inset && menuItemInsetClass,\n className,\n )}\n {...props}\n />\n ),\n);\nDropdownMenuItem.displayName = 'DropdownMenuItem';\n\nconst DropdownMenuCheckboxItem = React.forwardRef<HTMLDivElement, MenuPrimitive.CheckboxItem.Props>(\n ({ className, children, checked, ...props }, ref) => (\n <MenuPrimitive.CheckboxItem ref={ref} className={cn(menuItemClass, className)} checked={checked} {...props}>\n {children}\n <MenuPrimitive.CheckboxItemIndicator className={menuItemCheckClass}>\n <CheckIcon />\n </MenuPrimitive.CheckboxItemIndicator>\n </MenuPrimitive.CheckboxItem>\n ),\n);\nDropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem';\n\nconst DropdownMenuRadioItem = React.forwardRef<HTMLDivElement, MenuPrimitive.RadioItem.Props>(\n ({ className, children, ...props }, ref) => (\n <MenuPrimitive.RadioItem ref={ref} className={cn(menuItemClass, className)} {...props}>\n {children}\n <MenuPrimitive.RadioItemIndicator className={menuItemCheckClass}>\n <CheckIcon />\n </MenuPrimitive.RadioItemIndicator>\n </MenuPrimitive.RadioItem>\n ),\n);\nDropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem';\n\ntype DropdownMenuLabelProps = React.HTMLAttributes<HTMLDivElement> & {\n inset?: boolean;\n};\n\nconst DropdownMenuLabel = React.forwardRef<HTMLDivElement, DropdownMenuLabelProps>(\n ({ className, inset, ...props }, ref) => (\n <div ref={ref} className={cn(menuLabelClass, inset && menuItemInsetClass, className)} {...props} />\n ),\n);\nDropdownMenuLabel.displayName = 'DropdownMenuLabel';\n\nconst DropdownMenuSeparator = React.forwardRef<HTMLDivElement, MenuPrimitive.Separator.Props>(\n ({ className, ...props }, ref) => (\n <MenuPrimitive.Separator ref={ref} className={cn(menuSeparatorClass, className)} {...props} />\n ),\n);\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator';\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn(menuShortcutClass, className)} {...props} />;\n};\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\nfunction DropdownMenu({\n open,\n defaultOpen,\n onOpenChange,\n children,\n modal,\n}: {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: MenuPrimitive.Root.Props['onOpenChange'];\n children: React.ReactNode;\n modal?: boolean;\n}) {\n return (\n <DropdownMenuRoot modal={modal} open={open} defaultOpen={defaultOpen} onOpenChange={onOpenChange}>\n {children}\n </DropdownMenuRoot>\n );\n}\n\nDropdownMenu.Trigger = DropdownMenuTrigger;\nDropdownMenu.Content = DropdownMenuContent;\nDropdownMenu.Group = DropdownMenuGroup;\nDropdownMenu.Portal = DropdownMenuPortal;\nDropdownMenu.Item = DropdownMenuItem;\nDropdownMenu.CheckboxItem = DropdownMenuCheckboxItem;\nDropdownMenu.RadioItem = DropdownMenuRadioItem;\nDropdownMenu.Label = DropdownMenuLabel;\nDropdownMenu.Separator = DropdownMenuSeparator;\nDropdownMenu.Shortcut = DropdownMenuShortcut;\nDropdownMenu.Sub = DropdownMenuSub;\nDropdownMenu.SubContent = DropdownMenuSubContent;\nDropdownMenu.SubTrigger = DropdownMenuSubTrigger;\nDropdownMenu.RadioGroup = DropdownMenuRadioGroup;\n\nexport { DropdownMenu };\n"],"names":["MenuPrimitive"],"mappings":";;;;;;;;;;;AAwBA,MAAM,mBAAmBA,IAAA,CAAc,IAAA;AAEvC,MAAM,oBAAoBA,IAAA,CAAc,KAAA;AAExC,MAAM,qBAAqBA,IAAA,CAAc,MAAA;AAEzC,MAAM,kBAAkBA,IAAA,CAAc,WAAA;AAEtC,MAAM,yBAAyBA,IAAA,CAAc,UAAA;AAI7C,MAAM,sBAAsB,KAAA,CAAM,UAAA;AAAA,EAChC,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACnF,IAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,EAAE,MAAA,EAAQ,OAAA,EAAS,UAAU,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,CAAA;AAEtG,IAAA,uBACE,GAAA,CAACA,IAAA,CAAc,OAAA,EAAd,EAAsB,KAAU,SAAA,EAAW,QAAA,CAAS,SAAA,EAAW,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAS,GAAG,KAAA,EAC1F,mBAAS,QAAA,EACZ,CAAA;AAAA,EAEJ;AACF,CAAA;AACA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AAMlC,MAAM,yBAAyB,KAAA,CAAM,UAAA;AAAA,EACnC,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,UAAU,GAAG,KAAA,IAAS,GAAA,qBACzC,IAAA;AAAA,IAACA,IAAA,CAAc,cAAA;AAAA,IAAd;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,aAAA;AAAA,QACA,iEAAA;AAAA,QACA,KAAA,IAAS,kBAAA;AAAA,QACT;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,YAAY,CAAA,EACzD,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,YAAA,EAAa,CAAA,EACtC;AAAA;AAAA;AAAA;AAGN,CAAA;AACA,sBAAA,CAAuB,WAAA,GAAc,wBAAA;AAMrC,MAAM,yBAAyB,KAAA,CAAM,UAAA;AAAA,EACnC,CACE;AAAA,IACE,SAAA;AAAA,IACA,KAAA,GAAQ,OAAA;AAAA,IACR,WAAA,GAAc,EAAA;AAAA,IACd,IAAA,GAAO,OAAA;AAAA,IACP,UAAA,GAAa,gBAAA;AAAA,IACb,MAAA;AAAA,IACA,cAAA,GAAiB,wBAAA;AAAA,IACjB,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,qBAAA;AAAA,IACA,kBAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AAEH,IAAA,MAAM,oBAAoB,kBAAA,EAAmB;AAC7C,IAAA,MAAM,eAAA,GAAsD;AAAA,MAC1D,KAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,qBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,uBACE,GAAA,CAACA,IAAA,CAAc,MAAA,EAAd,EAAqB,SAAA,EAAW,iBAAA,EAC/B,QAAA,kBAAA,GAAA,CAACA,IAAA,CAAc,UAAA,EAAd,EAAyB,SAAA,EAAW,mBAAA,EAAsB,GAAG,eAAA,EAC5D,QAAA,kBAAA,GAAA;AAAA,MAACA,IAAA,CAAc,KAAA;AAAA,MAAd;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,2BAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAS,CAAA;AAAA,QACtC,GAAG;AAAA;AAAA,OAER,CAAA,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AACA,sBAAA,CAAuB,WAAA,GAAc,wBAAA;AAOrC,MAAM,sBAAsB,KAAA,CAAM,UAAA;AAAA,EAChC,CACE;AAAA,IACE,SAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA,GAAQ,OAAA;AAAA,IACR,WAAA,GAAc,CAAA;AAAA,IACd,IAAA,GAAO,QAAA;AAAA,IACP,UAAA,GAAa,gBAAA;AAAA,IACb,MAAA;AAAA,IACA,cAAA,GAAiB,wBAAA;AAAA,IACjB,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,qBAAA;AAAA,IACA,kBAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AAEH,IAAA,MAAM,iBAAA,GAAoB,mBAAmB,SAAS,CAAA;AACtD,IAAA,MAAM,eAAA,GAAsD;AAAA,MAC1D,KAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,qBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,uBACE,GAAA,CAACA,IAAA,CAAc,MAAA,EAAd,EAAqB,SAAA,EAAW,iBAAA,EAC/B,QAAA,kBAAA,GAAA,CAACA,IAAA,CAAc,UAAA,EAAd,EAAyB,SAAA,EAAW,mBAAA,EAAsB,GAAG,eAAA,EAC5D,QAAA,kBAAA,GAAA;AAAA,MAACA,IAAA,CAAc,KAAA;AAAA,MAAd;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,uBAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAS,CAAA;AAAA,QACtC,GAAG;AAAA;AAAA,OAER,CAAA,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AACA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AASlC,MAAM,mBAAmB,KAAA,CAAM,UAAA;AAAA,EAC7B,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,OAAA,GAAU,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBACvE,GAAA;AAAA,IAACA,IAAA,CAAc,IAAA;AAAA,IAAd;AAAA,MACC,GAAA;AAAA,MACA,YAAA,EAAY,QAAQ,EAAA,GAAK,MAAA;AAAA,MACzB,cAAA,EAAc,OAAA;AAAA,MACd,SAAS,CAAA,KAAA,KAAS;AAChB,QAAA,OAAA,GAAU,KAAK,CAAA;AACf,QAAA,QAAA,GAAW,KAAK,CAAA;AAAA,MAClB,CAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,OAAA,KAAY,gBAAgB,wBAAA,GAA2B,aAAA;AAAA,QACvD,KAAA,IAAS,kBAAA;AAAA,QACT;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA;AAGV,CAAA;AACA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;AAE/B,MAAM,2BAA2B,KAAA,CAAM,UAAA;AAAA,EACrC,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,SAAS,GAAG,KAAA,IAAS,GAAA,qBAC3C,IAAA,CAACA,KAAc,YAAA,EAAd,EAA2B,KAAU,SAAA,EAAW,EAAA,CAAG,eAAe,SAAS,CAAA,EAAG,OAAA,EAAmB,GAAG,KAAA,EAClG,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,oBACD,GAAA,CAACA,KAAc,qBAAA,EAAd,EAAoC,WAAW,kBAAA,EAC9C,QAAA,kBAAA,GAAA,CAAC,aAAU,CAAA,EACb;AAAA,GAAA,EACF;AAEJ,CAAA;AACA,wBAAA,CAAyB,WAAA,GAAc,0BAAA;AAEvC,MAAM,wBAAwB,KAAA,CAAM,UAAA;AAAA,EAClC,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,qBAClC,IAAA,CAACA,KAAc,SAAA,EAAd,EAAwB,KAAU,SAAA,EAAW,EAAA,CAAG,eAAe,SAAS,CAAA,EAAI,GAAG,KAAA,EAC7E,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,oBACD,GAAA,CAACA,KAAc,kBAAA,EAAd,EAAiC,WAAW,kBAAA,EAC3C,QAAA,kBAAA,GAAA,CAAC,aAAU,CAAA,EACb;AAAA,GAAA,EACF;AAEJ,CAAA;AACA,qBAAA,CAAsB,WAAA,GAAc,uBAAA;AAMpC,MAAM,oBAAoB,KAAA,CAAM,UAAA;AAAA,EAC9B,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,IAAS,GAAA,qBAC/B,GAAA,CAAC,SAAI,GAAA,EAAU,SAAA,EAAW,GAAG,cAAA,EAAgB,KAAA,IAAS,oBAAoB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAErG,CAAA;AACA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAEhC,MAAM,wBAAwB,KAAA,CAAM,UAAA;AAAA,EAClC,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxB,GAAA,CAACA,IAAA,CAAc,SAAA,EAAd,EAAwB,KAAU,SAAA,EAAW,EAAA,CAAG,oBAAoB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEhG,CAAA;AACA,qBAAA,CAAsB,WAAA,GAAc,uBAAA;AAEpC,MAAM,uBAAuB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,KAA6C;AAC/F,EAAA,uBAAO,GAAA,CAAC,UAAK,SAAA,EAAW,EAAA,CAAG,mBAAmB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACvE,CAAA;AACA,oBAAA,CAAqB,WAAA,GAAc,sBAAA;AAEnC,SAAS,YAAA,CAAa;AAAA,EACpB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,2BACG,gBAAA,EAAA,EAAiB,KAAA,EAAc,IAAA,EAAY,WAAA,EAA0B,cACnE,QAAA,EACH,CAAA;AAEJ;AAEA,YAAA,CAAa,OAAA,GAAU,mBAAA;AACvB,YAAA,CAAa,OAAA,GAAU,mBAAA;AACvB,YAAA,CAAa,KAAA,GAAQ,iBAAA;AACrB,YAAA,CAAa,MAAA,GAAS,kBAAA;AACtB,YAAA,CAAa,IAAA,GAAO,gBAAA;AACpB,YAAA,CAAa,YAAA,GAAe,wBAAA;AAC5B,YAAA,CAAa,SAAA,GAAY,qBAAA;AACzB,YAAA,CAAa,KAAA,GAAQ,iBAAA;AACrB,YAAA,CAAa,SAAA,GAAY,qBAAA;AACzB,YAAA,CAAa,QAAA,GAAW,oBAAA;AACxB,YAAA,CAAa,GAAA,GAAM,eAAA;AACnB,YAAA,CAAa,UAAA,GAAa,sBAAA;AAC1B,YAAA,CAAa,UAAA,GAAa,sBAAA;AAC1B,YAAA,CAAa,UAAA,GAAa,sBAAA;;;;"}
package/dist/focus.css DELETED
@@ -1,176 +0,0 @@
1
- .ds-focus {
2
- --ds-focus-progress: 0;
3
- --ds-focus-color: var(--neutral5);
4
- --ds-focus-line-gradient: linear-gradient(90deg, transparent 5%, var(--ds-focus-color) 50%, transparent 95%);
5
- outline: none;
6
- }
7
-
8
- .ds-focus:focus-visible,
9
- .ds-focus-within:has(:focus-visible),
10
- .ds-focus-menu:is(:focus-visible, :has(:focus-visible)) .ds-focus-item[data-highlighted],
11
- [cmdk-root]:has([cmdk-input]:focus-visible) .ds-focus-command-item[data-selected='true'] {
12
- --ds-focus-progress: 1;
13
- }
14
-
15
- .ds-focus-line {
16
- --ds-focus-color: currentColor;
17
- background-image: var(--ds-focus-line-gradient);
18
- background-repeat: no-repeat;
19
- background-position: center calc(100% - 1px);
20
- /* Keep clear of rounded ends without collapsing the line on compact pills. */
21
- background-size: calc(var(--ds-focus-progress) * max(60%, 100% - 2em)) 1px;
22
- transition:
23
- background-size 240ms cubic-bezier(0.2, 0.7, 0.2, 1),
24
- background-color 180ms,
25
- color 180ms,
26
- border-color 180ms;
27
- }
28
-
29
- .ds-focus-orbit,
30
- .ds-focus-notch,
31
- .ds-focus-contour {
32
- position: relative;
33
- }
34
-
35
- .ds-focus-orbit::before,
36
- .ds-focus-notch::before,
37
- .ds-focus-contour > [data-slot='focus-decoration'] {
38
- position: absolute;
39
- pointer-events: none;
40
- content: '';
41
- opacity: var(--ds-focus-progress);
42
- transition:
43
- opacity 180ms ease-out,
44
- transform 280ms cubic-bezier(0.2, 0.7, 0.2, 1),
45
- clip-path 280ms ease-out;
46
- }
47
-
48
- .ds-focus-orbit::before {
49
- inset: -7px;
50
- background:
51
- radial-gradient(circle at 50% 3px, var(--ds-focus-color) 0 1.5px, transparent 3px),
52
- radial-gradient(circle at 50% calc(100% - 3px), var(--ds-focus-color) 0 1.5px, transparent 3px);
53
- transform: rotate(calc(-65deg + var(--ds-focus-progress) * 90deg)) scale(calc(0.8 + var(--ds-focus-progress) * 0.2));
54
- }
55
-
56
- .ds-focus-orbit {
57
- --ds-focus-color: var(--neutral5);
58
- background-image: none;
59
- }
60
-
61
- .ds-focus-notch::before {
62
- inset: auto -12px -11px;
63
- height: 6px;
64
- background: linear-gradient(90deg, transparent, var(--ds-focus-color) 40% 60%, transparent);
65
- clip-path: polygon(
66
- 0 0,
67
- 30% 0,
68
- 50% calc(var(--ds-focus-progress) * 4px),
69
- 70% 0,
70
- 100% 0,
71
- 100% 2px,
72
- 70% 2px,
73
- 50% calc(2px + var(--ds-focus-progress) * 4px),
74
- 30% 2px,
75
- 0 2px
76
- );
77
- transform: scaleX(calc(0.35 + var(--ds-focus-progress) * 0.65));
78
- }
79
-
80
- .ds-focus-notch[data-orientation='vertical']::before {
81
- inset: -12px -11px -12px auto;
82
- width: 6px;
83
- height: auto;
84
- background: linear-gradient(180deg, transparent, var(--ds-focus-color) 40% 60%, transparent);
85
- clip-path: polygon(
86
- 0 0,
87
- 0 30%,
88
- calc(var(--ds-focus-progress) * 4px) 50%,
89
- 0 70%,
90
- 0 100%,
91
- 2px 100%,
92
- 2px 70%,
93
- calc(2px + var(--ds-focus-progress) * 4px) 50%,
94
- 2px 30%,
95
- 2px 0
96
- );
97
- transform: scaleY(calc(0.35 + var(--ds-focus-progress) * 0.65));
98
- }
99
-
100
- .ds-focus-contour {
101
- --ds-focus-color: var(--neutral5);
102
- background-image: none;
103
- }
104
-
105
- .ds-focus-contour > [data-slot='focus-decoration'] {
106
- inset: 1px;
107
- z-index: 2;
108
- padding: 1.5px;
109
- border-radius: inherit;
110
- background: conic-gradient(
111
- from 25deg,
112
- transparent,
113
- var(--ds-focus-color) 70deg,
114
- transparent 140deg 180deg,
115
- var(--ds-focus-color) 250deg,
116
- transparent 320deg 360deg
117
- );
118
- mask:
119
- linear-gradient(#fff 0 0) content-box,
120
- linear-gradient(#fff 0 0);
121
- mask-composite: exclude;
122
- transform: scale(calc(0.94 + var(--ds-focus-progress) * 0.06));
123
- }
124
-
125
- .ds-focus-row {
126
- background-image: var(--ds-focus-line-gradient), var(--ds-focus-line-gradient);
127
- background-position:
128
- center 1px,
129
- center calc(100% - 1px);
130
- background-repeat: no-repeat;
131
- background-size: calc(var(--ds-focus-progress) * 100%) 1px;
132
- transition:
133
- background-size 240ms cubic-bezier(0.2, 0.7, 0.2, 1),
134
- background-color 180ms;
135
- }
136
-
137
- .ds-focus-row:has([data-slot='checkbox']:focus-visible, [data-slot='checkbox'] :focus-visible) {
138
- --ds-focus-progress: 1;
139
- }
140
-
141
- .ds-focus-row [data-slot='checkbox']::before {
142
- display: none;
143
- }
144
-
145
- .ds-focus:disabled,
146
- .ds-focus[data-disabled]:not([data-disabled='false']),
147
- .ds-focus[aria-disabled='true'] {
148
- --ds-focus-progress: 0;
149
- }
150
-
151
- @media (prefers-reduced-motion: reduce) {
152
- .ds-focus,
153
- .ds-focus::before,
154
- .ds-focus::after,
155
- [data-slot='focus-decoration'] {
156
- transition: none;
157
- }
158
- }
159
-
160
- @media (forced-colors: active) {
161
- .ds-focus-line,
162
- .ds-focus-row {
163
- background-image: none;
164
- }
165
-
166
- .ds-focus::before,
167
- .ds-focus::after,
168
- [data-slot='focus-decoration'] {
169
- display: none;
170
- }
171
-
172
- .ds-focus {
173
- outline: calc(2px * var(--ds-focus-progress)) solid Highlight;
174
- outline-offset: -2px;
175
- }
176
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-BXl_-87K.cjs","sources":["../src/ds/components/Input/input.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { controlSizeClasses } from '@/ds/primitives/control-size';\nimport '@/ds/primitives/focus.css';\nimport {\n inputOutlineAndFocusStyle,\n inputSurfaceAndFocusStyle,\n sharedFormElementDisabledStyle,\n unstyledFormElementStyle,\n} from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\nconst inputVariants = cva(\n cn(\n 'flex w-full border bg-transparent text-neutral6',\n 'transition-all duration-normal ease-out-custom',\n 'placeholder:text-neutral2 placeholder:transition-opacity placeholder:duration-normal',\n 'focus:placeholder:opacity-70',\n // Native number spinners clip pill corners; compose InputGroup buttons for a stepper.\n '[&::-webkit-outer-spin-button]:m-0 [&::-webkit-outer-spin-button]:appearance-none',\n '[&::-webkit-inner-spin-button]:m-0 [&::-webkit-inner-spin-button]:appearance-none',\n '[&[type=number]]:[appearance:textfield]',\n // Custom InputGroup clear buttons replace the browser's search-clear control.\n '[&::-webkit-search-cancel-button]:appearance-none',\n ),\n {\n variants: {\n variant: {\n default: cn(inputSurfaceAndFocusStyle, 'rounded-full', sharedFormElementDisabledStyle),\n filled: cn(inputSurfaceAndFocusStyle, 'rounded-full', sharedFormElementDisabledStyle),\n outline: cn(inputOutlineAndFocusStyle, 'rounded-full', sharedFormElementDisabledStyle),\n unstyled: unstyledFormElementStyle,\n },\n size: {\n xs: cn(controlSizeClasses.xs, 'px-[.75em]'),\n sm: cn(controlSizeClasses.sm, 'px-[.75em]'),\n md: cn(controlSizeClasses.md, 'px-[.75em]'),\n lg: cn(controlSizeClasses.lg, 'px-[.85em]'),\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nexport type InputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> &\n VariantProps<typeof inputVariants> & {\n testId?: string;\n error?: boolean;\n };\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, size, testId, variant, type, error, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n inputVariants({ variant, size }),\n error && 'border-error hover:border-error focus-visible:border-error',\n className,\n )}\n data-testid={testId}\n ref={ref}\n aria-invalid={error}\n {...props}\n />\n );\n },\n);\nInput.displayName = 'Input';\n\nexport { Input };\n"],"names":["cva","cn","inputSurfaceAndFocusStyle","sharedFormElementDisabledStyle","inputOutlineAndFocusStyle","unstyledFormElementStyle","controlSizeClasses","React","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,aAAA,GAAgBA,SAAA;AAAA,EACpBC,WAAA;AAAA,IACE,iDAAA;AAAA,IACA,gDAAA;AAAA,IACA,sFAAA;AAAA,IACA,8BAAA;AAAA;AAAA,IAEA,mFAAA;AAAA,IACA,mFAAA;AAAA,IACA,yCAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAASA,WAAA,CAAGC,gDAAA,EAA2B,cAAA,EAAgBC,qDAA8B,CAAA;AAAA,QACrF,MAAA,EAAQF,WAAA,CAAGC,gDAAA,EAA2B,cAAA,EAAgBC,qDAA8B,CAAA;AAAA,QACpF,OAAA,EAASF,WAAA,CAAGG,gDAAA,EAA2B,cAAA,EAAgBD,qDAA8B,CAAA;AAAA,QACrF,QAAA,EAAUE;AAAA,OACZ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAIJ,WAAA,CAAGK,yCAAA,CAAmB,EAAA,EAAI,YAAY,CAAA;AAAA,QAC1C,EAAA,EAAIL,WAAA,CAAGK,yCAAA,CAAmB,EAAA,EAAI,YAAY,CAAA;AAAA,QAC1C,EAAA,EAAIL,WAAA,CAAGK,yCAAA,CAAmB,EAAA,EAAI,YAAY,CAAA;AAAA,QAC1C,EAAA,EAAIL,WAAA,CAAGK,yCAAA,CAAmB,EAAA,EAAI,YAAY;AAAA;AAC5C,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAQA,MAAM,QAAQC,gBAAA,CAAM,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACpE,IAAA,uBACEC,cAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAWP,WAAA;AAAA,UACT,aAAA,CAAc,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,UAC/B,KAAA,IAAS,4DAAA;AAAA,UACT;AAAA,SACF;AAAA,QACA,aAAA,EAAa,MAAA;AAAA,QACb,GAAA;AAAA,QACA,cAAA,EAAc,KAAA;AAAA,QACb,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-KNga7Y7g.js","sources":["../src/ds/components/Input/input.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { controlSizeClasses } from '@/ds/primitives/control-size';\nimport '@/ds/primitives/focus.css';\nimport {\n inputOutlineAndFocusStyle,\n inputSurfaceAndFocusStyle,\n sharedFormElementDisabledStyle,\n unstyledFormElementStyle,\n} from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\nconst inputVariants = cva(\n cn(\n 'flex w-full border bg-transparent text-neutral6',\n 'transition-all duration-normal ease-out-custom',\n 'placeholder:text-neutral2 placeholder:transition-opacity placeholder:duration-normal',\n 'focus:placeholder:opacity-70',\n // Native number spinners clip pill corners; compose InputGroup buttons for a stepper.\n '[&::-webkit-outer-spin-button]:m-0 [&::-webkit-outer-spin-button]:appearance-none',\n '[&::-webkit-inner-spin-button]:m-0 [&::-webkit-inner-spin-button]:appearance-none',\n '[&[type=number]]:[appearance:textfield]',\n // Custom InputGroup clear buttons replace the browser's search-clear control.\n '[&::-webkit-search-cancel-button]:appearance-none',\n ),\n {\n variants: {\n variant: {\n default: cn(inputSurfaceAndFocusStyle, 'rounded-full', sharedFormElementDisabledStyle),\n filled: cn(inputSurfaceAndFocusStyle, 'rounded-full', sharedFormElementDisabledStyle),\n outline: cn(inputOutlineAndFocusStyle, 'rounded-full', sharedFormElementDisabledStyle),\n unstyled: unstyledFormElementStyle,\n },\n size: {\n xs: cn(controlSizeClasses.xs, 'px-[.75em]'),\n sm: cn(controlSizeClasses.sm, 'px-[.75em]'),\n md: cn(controlSizeClasses.md, 'px-[.75em]'),\n lg: cn(controlSizeClasses.lg, 'px-[.85em]'),\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\nexport type InputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> &\n VariantProps<typeof inputVariants> & {\n testId?: string;\n error?: boolean;\n };\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, size, testId, variant, type, error, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n inputVariants({ variant, size }),\n error && 'border-error hover:border-error focus-visible:border-error',\n className,\n )}\n data-testid={testId}\n ref={ref}\n aria-invalid={error}\n {...props}\n />\n );\n },\n);\nInput.displayName = 'Input';\n\nexport { Input };\n"],"names":[],"mappings":";;;;;;;;AAcA,MAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,EAAA;AAAA,IACE,iDAAA;AAAA,IACA,gDAAA;AAAA,IACA,sFAAA;AAAA,IACA,8BAAA;AAAA;AAAA,IAEA,mFAAA;AAAA,IACA,mFAAA;AAAA,IACA,yCAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,EAAA,CAAG,yBAAA,EAA2B,cAAA,EAAgB,8BAA8B,CAAA;AAAA,QACrF,MAAA,EAAQ,EAAA,CAAG,yBAAA,EAA2B,cAAA,EAAgB,8BAA8B,CAAA;AAAA,QACpF,OAAA,EAAS,EAAA,CAAG,yBAAA,EAA2B,cAAA,EAAgB,8BAA8B,CAAA;AAAA,QACrF,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,EAAA,CAAG,kBAAA,CAAmB,EAAA,EAAI,YAAY,CAAA;AAAA,QAC1C,EAAA,EAAI,EAAA,CAAG,kBAAA,CAAmB,EAAA,EAAI,YAAY,CAAA;AAAA,QAC1C,EAAA,EAAI,EAAA,CAAG,kBAAA,CAAmB,EAAA,EAAI,YAAY,CAAA;AAAA,QAC1C,EAAA,EAAI,EAAA,CAAG,kBAAA,CAAmB,EAAA,EAAI,YAAY;AAAA;AAC5C,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAQA,MAAM,QAAQ,KAAA,CAAM,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACpE,IAAA,uBACE,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,aAAA,CAAc,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,UAC/B,KAAA,IAAS,4DAAA;AAAA,UACT;AAAA,SACF;AAAA,QACA,aAAA,EAAa,MAAA;AAAA,QACb,GAAA;AAAA,QACA,cAAA,EAAc,KAAA;AAAA,QACb,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-group-BW3PBfmX.cjs","sources":["../src/ds/components/InputGroup/input-group.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { Button } from '@/ds/components/Button';\nimport type { ButtonProps } from '@/ds/components/Button/Button';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport '@/ds/primitives/focus.css';\nimport { inputFocusBorderWithin, inputHoverBorderWithin } from '@/ds/primitives/form-element';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\n// Preserve the root's content minimum so flex layouts cannot collapse the control.\nconst inputGroupBaseClassName = cn(\n 'group/input-group relative flex w-full flex-1 items-center',\n 'ds-focus ds-focus-within border border-border1 text-neutral6',\n inputFocusBorderWithin,\n transitions.all,\n 'has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50',\n 'has-[[aria-invalid=true]]:border-error',\n 'has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col',\n 'has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col',\n 'has-[textarea]:h-auto',\n 'has-[>[data-align=inline-start]]:[&>[data-slot=input-group-control]]:pl-0',\n 'has-[>[data-align=inline-end]]:[&>[data-slot=input-group-control]]:pr-0',\n // Vertical groups need flex-none because flex-basis: 0% would collapse the control's height.\n 'has-[>[data-align=block-start]]:[&>[data-slot=input-group-control]]:w-full has-[>[data-align=block-start]]:[&>[data-slot=input-group-control]]:flex-none',\n 'has-[>[data-align=block-end]]:[&>[data-slot=input-group-control]]:w-full has-[>[data-align=block-end]]:[&>[data-slot=input-group-control]]:flex-none',\n);\n\nconst inputGroupRoundedTextareaClassName = cn(\n 'has-[>[data-align=block-start]]:rounded-xl',\n 'has-[>[data-align=block-end]]:rounded-xl',\n 'has-[textarea]:rounded-xl',\n);\n\nconst inputGroupFilledVariant = cn(\n 'rounded-full bg-surface-overlay-soft',\n 'hover:bg-surface-overlay-strong has-[:focus-visible]:bg-surface-overlay-strong',\n inputHoverBorderWithin,\n inputGroupRoundedTextareaClassName,\n);\n\nconst inputGroupVariants = cva(inputGroupBaseClassName, {\n variants: {\n variant: {\n default: inputGroupFilledVariant,\n filled: inputGroupFilledVariant,\n outline: cn('rounded-full bg-transparent', inputHoverBorderWithin, inputGroupRoundedTextareaClassName),\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport type InputGroupProps = React.ComponentPropsWithoutRef<'div'> & {\n size?: ControlSize;\n} & VariantProps<typeof inputGroupVariants>;\n\nconst InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\n ({ className, size = 'md', variant, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"input-group\"\n data-size={size}\n className={cn(inputGroupVariants({ variant }), controlHeight[size], className)}\n {...props}\n />\n );\n },\n);\nInputGroup.displayName = 'InputGroup';\n\nconst inputGroupAddonVariants = cva(\n cn(\n 'flex items-center justify-center gap-2 text-neutral3 select-none',\n 'group-has-[:disabled]/input-group:opacity-50',\n \"[&>svg:not([class*='size-'])]:size-4\",\n ),\n {\n variants: {\n align: {\n 'inline-start': 'order-first pr-1 pl-3 has-[>button]:pl-1',\n 'inline-end': 'order-last pr-3 pl-1 has-[>button]:pr-1',\n 'block-start': 'order-first w-full justify-start border-b border-border1 px-3 pt-2 pb-1',\n 'block-end': 'order-last w-full justify-start border-t border-border1 px-3 pt-1 pb-2',\n },\n },\n defaultVariants: {\n align: 'inline-start',\n },\n },\n);\n\nexport type InputGroupAddonProps = React.ComponentPropsWithoutRef<'div'> & VariantProps<typeof inputGroupAddonVariants>;\n\nconst InputGroupAddon = React.forwardRef<HTMLDivElement, InputGroupAddonProps>(\n ({ className, align = 'inline-start', onClick, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={event => {\n const target = event.target;\n if (target instanceof Element && !target.closest('button, input, textarea, [role=\"button\"]')) {\n event.currentTarget.parentElement\n ?.querySelector<HTMLInputElement | HTMLTextAreaElement>('[data-slot=input-group-control]')\n ?.focus();\n }\n onClick?.(event);\n }}\n {...props}\n />\n );\n },\n);\nInputGroupAddon.displayName = 'InputGroupAddon';\n\n// Subtract the root's two 1px borders so nested controls cannot grow the group past its size token.\nconst inputGroupControlHeightBySize = cn(\n 'group-data-[size=xs]/input-group:h-[calc(var(--spacing-form-xs)-2px)]',\n 'group-data-[size=sm]/input-group:h-[calc(var(--spacing-form-sm)-2px)]',\n 'group-data-[size=md]/input-group:h-[calc(var(--spacing-form-md)-2px)]',\n 'group-data-[size=lg]/input-group:h-[calc(var(--spacing-form-lg)-2px)]',\n);\nconst inputGroupControlTextBySize = cn(\n 'group-data-[size=xs]/input-group:text-ui-xs',\n 'group-data-[size=sm]/input-group:text-ui-sm',\n 'group-data-[size=md]/input-group:text-ui-smd',\n 'group-data-[size=lg]/input-group:text-ui-md',\n);\n\nexport type InputGroupInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> & {\n testId?: string;\n error?: boolean;\n};\n\nconst InputGroupInput = React.forwardRef<HTMLInputElement, InputGroupInputProps>(\n ({ className, testId, error, type = 'text', ...props }, ref) => {\n return (\n <input\n ref={ref}\n type={type}\n data-slot=\"input-group-control\"\n data-testid={testId}\n aria-invalid={error}\n className={cn(\n 'min-w-0 flex-1 bg-transparent px-3 text-neutral6 outline-hidden',\n inputGroupControlHeightBySize,\n inputGroupControlTextBySize,\n 'placeholder:text-neutral2 placeholder:transition-opacity placeholder:duration-normal',\n 'focus:placeholder:opacity-70',\n 'disabled:cursor-not-allowed',\n // Custom steppers and clear buttons replace native number/search controls.\n '[&::-webkit-outer-spin-button]:m-0 [&::-webkit-outer-spin-button]:appearance-none',\n '[&::-webkit-inner-spin-button]:m-0 [&::-webkit-inner-spin-button]:appearance-none',\n '[&[type=number]]:[appearance:textfield]',\n '[&::-webkit-search-cancel-button]:appearance-none',\n className,\n )}\n {...props}\n />\n );\n },\n);\nInputGroupInput.displayName = 'InputGroupInput';\n\nexport type InputGroupTextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement> & {\n testId?: string;\n error?: boolean;\n};\n\nconst InputGroupTextarea = React.forwardRef<HTMLTextAreaElement, InputGroupTextareaProps>(\n ({ className, testId, error, ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n data-slot=\"input-group-control\"\n data-testid={testId}\n aria-invalid={error}\n className={cn(\n 'min-h-15 min-w-0 flex-1 resize-y bg-transparent px-3 py-2 text-neutral6 outline-hidden',\n inputGroupControlTextBySize,\n 'placeholder:text-neutral2 placeholder:transition-opacity placeholder:duration-normal',\n 'focus:placeholder:opacity-70',\n 'disabled:cursor-not-allowed',\n className,\n )}\n {...props}\n />\n );\n },\n);\nInputGroupTextarea.displayName = 'InputGroupTextarea';\n\nexport type InputGroupTextProps = React.ComponentPropsWithoutRef<'span'>;\n\nconst InputGroupText = React.forwardRef<HTMLSpanElement, InputGroupTextProps>(({ className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n 'flex items-center gap-2 text-ui-sm text-neutral3 [&_svg]:pointer-events-none',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n});\nInputGroupText.displayName = 'InputGroupText';\n\nexport type InputGroupButtonProps = Omit<ButtonProps, 'size' | 'variant'> & {\n size?: ButtonProps['size'];\n variant?: ButtonProps['variant'];\n};\n\nconst InputGroupButton = React.forwardRef<HTMLButtonElement, InputGroupButtonProps>(\n ({ size = 'icon-sm', variant = 'ghost', type = 'button', ...props }, ref) => {\n return <Button ref={ref} type={type} size={size} variant={variant} {...props} />;\n },\n);\nInputGroupButton.displayName = 'InputGroupButton';\n\nexport { InputGroup, InputGroupAddon, InputGroupInput, InputGroupTextarea, InputGroupText, InputGroupButton };\n"],"names":["cn","inputFocusBorderWithin","transitions","inputHoverBorderWithin","cva","React","jsx","controlHeight","Button"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-group-CC3FsOEL.js","sources":["../src/ds/components/InputGroup/input-group.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { Button } from '@/ds/components/Button';\nimport type { ButtonProps } from '@/ds/components/Button/Button';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport '@/ds/primitives/focus.css';\nimport { inputFocusBorderWithin, inputHoverBorderWithin } from '@/ds/primitives/form-element';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\n// Preserve the root's content minimum so flex layouts cannot collapse the control.\nconst inputGroupBaseClassName = cn(\n 'group/input-group relative flex w-full flex-1 items-center',\n 'ds-focus ds-focus-within border border-border1 text-neutral6',\n inputFocusBorderWithin,\n transitions.all,\n 'has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50',\n 'has-[[aria-invalid=true]]:border-error',\n 'has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col',\n 'has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col',\n 'has-[textarea]:h-auto',\n 'has-[>[data-align=inline-start]]:[&>[data-slot=input-group-control]]:pl-0',\n 'has-[>[data-align=inline-end]]:[&>[data-slot=input-group-control]]:pr-0',\n // Vertical groups need flex-none because flex-basis: 0% would collapse the control's height.\n 'has-[>[data-align=block-start]]:[&>[data-slot=input-group-control]]:w-full has-[>[data-align=block-start]]:[&>[data-slot=input-group-control]]:flex-none',\n 'has-[>[data-align=block-end]]:[&>[data-slot=input-group-control]]:w-full has-[>[data-align=block-end]]:[&>[data-slot=input-group-control]]:flex-none',\n);\n\nconst inputGroupRoundedTextareaClassName = cn(\n 'has-[>[data-align=block-start]]:rounded-xl',\n 'has-[>[data-align=block-end]]:rounded-xl',\n 'has-[textarea]:rounded-xl',\n);\n\nconst inputGroupFilledVariant = cn(\n 'rounded-full bg-surface-overlay-soft',\n 'hover:bg-surface-overlay-strong has-[:focus-visible]:bg-surface-overlay-strong',\n inputHoverBorderWithin,\n inputGroupRoundedTextareaClassName,\n);\n\nconst inputGroupVariants = cva(inputGroupBaseClassName, {\n variants: {\n variant: {\n default: inputGroupFilledVariant,\n filled: inputGroupFilledVariant,\n outline: cn('rounded-full bg-transparent', inputHoverBorderWithin, inputGroupRoundedTextareaClassName),\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport type InputGroupProps = React.ComponentPropsWithoutRef<'div'> & {\n size?: ControlSize;\n} & VariantProps<typeof inputGroupVariants>;\n\nconst InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\n ({ className, size = 'md', variant, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"input-group\"\n data-size={size}\n className={cn(inputGroupVariants({ variant }), controlHeight[size], className)}\n {...props}\n />\n );\n },\n);\nInputGroup.displayName = 'InputGroup';\n\nconst inputGroupAddonVariants = cva(\n cn(\n 'flex items-center justify-center gap-2 text-neutral3 select-none',\n 'group-has-[:disabled]/input-group:opacity-50',\n \"[&>svg:not([class*='size-'])]:size-4\",\n ),\n {\n variants: {\n align: {\n 'inline-start': 'order-first pr-1 pl-3 has-[>button]:pl-1',\n 'inline-end': 'order-last pr-3 pl-1 has-[>button]:pr-1',\n 'block-start': 'order-first w-full justify-start border-b border-border1 px-3 pt-2 pb-1',\n 'block-end': 'order-last w-full justify-start border-t border-border1 px-3 pt-1 pb-2',\n },\n },\n defaultVariants: {\n align: 'inline-start',\n },\n },\n);\n\nexport type InputGroupAddonProps = React.ComponentPropsWithoutRef<'div'> & VariantProps<typeof inputGroupAddonVariants>;\n\nconst InputGroupAddon = React.forwardRef<HTMLDivElement, InputGroupAddonProps>(\n ({ className, align = 'inline-start', onClick, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={event => {\n const target = event.target;\n if (target instanceof Element && !target.closest('button, input, textarea, [role=\"button\"]')) {\n event.currentTarget.parentElement\n ?.querySelector<HTMLInputElement | HTMLTextAreaElement>('[data-slot=input-group-control]')\n ?.focus();\n }\n onClick?.(event);\n }}\n {...props}\n />\n );\n },\n);\nInputGroupAddon.displayName = 'InputGroupAddon';\n\n// Subtract the root's two 1px borders so nested controls cannot grow the group past its size token.\nconst inputGroupControlHeightBySize = cn(\n 'group-data-[size=xs]/input-group:h-[calc(var(--spacing-form-xs)-2px)]',\n 'group-data-[size=sm]/input-group:h-[calc(var(--spacing-form-sm)-2px)]',\n 'group-data-[size=md]/input-group:h-[calc(var(--spacing-form-md)-2px)]',\n 'group-data-[size=lg]/input-group:h-[calc(var(--spacing-form-lg)-2px)]',\n);\nconst inputGroupControlTextBySize = cn(\n 'group-data-[size=xs]/input-group:text-ui-xs',\n 'group-data-[size=sm]/input-group:text-ui-sm',\n 'group-data-[size=md]/input-group:text-ui-smd',\n 'group-data-[size=lg]/input-group:text-ui-md',\n);\n\nexport type InputGroupInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> & {\n testId?: string;\n error?: boolean;\n};\n\nconst InputGroupInput = React.forwardRef<HTMLInputElement, InputGroupInputProps>(\n ({ className, testId, error, type = 'text', ...props }, ref) => {\n return (\n <input\n ref={ref}\n type={type}\n data-slot=\"input-group-control\"\n data-testid={testId}\n aria-invalid={error}\n className={cn(\n 'min-w-0 flex-1 bg-transparent px-3 text-neutral6 outline-hidden',\n inputGroupControlHeightBySize,\n inputGroupControlTextBySize,\n 'placeholder:text-neutral2 placeholder:transition-opacity placeholder:duration-normal',\n 'focus:placeholder:opacity-70',\n 'disabled:cursor-not-allowed',\n // Custom steppers and clear buttons replace native number/search controls.\n '[&::-webkit-outer-spin-button]:m-0 [&::-webkit-outer-spin-button]:appearance-none',\n '[&::-webkit-inner-spin-button]:m-0 [&::-webkit-inner-spin-button]:appearance-none',\n '[&[type=number]]:[appearance:textfield]',\n '[&::-webkit-search-cancel-button]:appearance-none',\n className,\n )}\n {...props}\n />\n );\n },\n);\nInputGroupInput.displayName = 'InputGroupInput';\n\nexport type InputGroupTextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement> & {\n testId?: string;\n error?: boolean;\n};\n\nconst InputGroupTextarea = React.forwardRef<HTMLTextAreaElement, InputGroupTextareaProps>(\n ({ className, testId, error, ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n data-slot=\"input-group-control\"\n data-testid={testId}\n aria-invalid={error}\n className={cn(\n 'min-h-15 min-w-0 flex-1 resize-y bg-transparent px-3 py-2 text-neutral6 outline-hidden',\n inputGroupControlTextBySize,\n 'placeholder:text-neutral2 placeholder:transition-opacity placeholder:duration-normal',\n 'focus:placeholder:opacity-70',\n 'disabled:cursor-not-allowed',\n className,\n )}\n {...props}\n />\n );\n },\n);\nInputGroupTextarea.displayName = 'InputGroupTextarea';\n\nexport type InputGroupTextProps = React.ComponentPropsWithoutRef<'span'>;\n\nconst InputGroupText = React.forwardRef<HTMLSpanElement, InputGroupTextProps>(({ className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n 'flex items-center gap-2 text-ui-sm text-neutral3 [&_svg]:pointer-events-none',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n});\nInputGroupText.displayName = 'InputGroupText';\n\nexport type InputGroupButtonProps = Omit<ButtonProps, 'size' | 'variant'> & {\n size?: ButtonProps['size'];\n variant?: ButtonProps['variant'];\n};\n\nconst InputGroupButton = React.forwardRef<HTMLButtonElement, InputGroupButtonProps>(\n ({ size = 'icon-sm', variant = 'ghost', type = 'button', ...props }, ref) => {\n return <Button ref={ref} type={type} size={size} variant={variant} {...props} />;\n },\n);\nInputGroupButton.displayName = 'InputGroupButton';\n\nexport { InputGroup, InputGroupAddon, InputGroupInput, InputGroupTextarea, InputGroupText, InputGroupButton };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-renderer-Ds3PaLdR.cjs","sources":["../src/ds/components/MarkdownRenderer/arriving.ts","../src/ds/components/MarkdownRenderer/blocks.ts","../src/ds/components/MarkdownRenderer/use-settled.ts","../src/ds/components/MarkdownRenderer/markdown-renderer.tsx"],"sourcesContent":["import type { ExtraProps } from 'react-markdown';\n\nimport { ARRIVING_CLASS } from '@/ds/tokens';\n\nimport '@/ds/components/Arrival/arrival.css';\n\ntype MarkdownElement = NonNullable<ExtraProps['node']>;\ntype MarkdownChild = MarkdownElement['children'][number];\n\n/** Fades whole: a fence renders through `CodeBlock`, and inline code carries a background. */\nconst UNBROKEN = new Set(['pre', 'code']);\n\nconst wrap = (value: string, arriving: boolean): MarkdownChild => ({\n type: 'element',\n tagName: 'span',\n properties: arriving ? { className: [ARRIVING_CLASS] } : {},\n children: [{ type: 'text', value }],\n});\n\nfunction markArriving(node: MarkdownElement): void {\n const classes = node.properties.className;\n\n node.properties.className = Array.isArray(classes) ? [...classes, ARRIVING_CLASS] : [ARRIVING_CLASS];\n}\n\nfunction rebuild(nodes: MarkdownChild[], arriving: () => boolean): MarkdownChild[] {\n const out: MarkdownChild[] = [];\n\n for (const node of nodes) {\n if (node.type === 'text') {\n for (const piece of node.value.match(/\\S+|\\s+/g) ?? []) {\n if (/\\S/.test(piece)) out.push(wrap(piece, arriving()));\n else out.push({ type: 'text', value: piece });\n }\n\n continue;\n }\n\n out.push(node);\n\n if (node.type !== 'element') continue;\n\n if (!UNBROKEN.has(node.tagName)) node.children = rebuild(node.children, arriving);\n else if (arriving()) markArriving(node);\n }\n\n return out;\n}\n\n/**\n * Gives every word of a block an element of its own, and the entrance class to\n * those past the first `settled` — the words that were not on screen yet when\n * the reader joined this reply.\n *\n * Every word, not just the arriving ones: react-markdown parses afresh on each\n * landing and React matches the children it already mounted by position, so a\n * wrapper that came and went would land where a bare text node used to be and\n * remount half the paragraph, replaying entrances that had long finished.\n * Wrapping the lot keeps every position fixed — a new word only ever appends —\n * and a word never gains the class it did not mount with, so nothing replays.\n */\nexport function rehypeArriving(settled: number) {\n return function attach() {\n return (tree: { children: MarkdownChild[] }) => {\n let word = 0;\n\n tree.children = rebuild(tree.children, () => word++ >= settled);\n };\n };\n}\n","const FENCE_OPEN = /^ {0,3}(`{3,}|~{3,})/;\nconst FENCE_CLOSE = /^ {0,3}(`{3,}|~{3,})[ \\t]*$/;\nconst LIST_ITEM = /^ {0,3}(?:[-*+]|\\d{1,9}[.)])(?:[ \\t]|$)/;\nconst INDENTED = /^(?:\\t| {2,})/;\nconst DEFINITION = /^ {0,3}\\[[^\\]]+\\]:/;\n\nfunction fenceOpenedBy(line: string): string | undefined {\n return FENCE_OPEN.exec(line)?.[1];\n}\n\n// Both are runs of one character, so `startsWith` is \"same marker, at least as long\".\nfunction closesFence(line: string, marker: string): boolean {\n return FENCE_CLOSE.exec(line)?.[1]?.startsWith(marker) ?? false;\n}\n\nfunction startsBlock(line: string, inList: boolean): boolean {\n if (INDENTED.test(line)) return false;\n\n return !(inList && LIST_ITEM.test(line));\n}\n\n/**\n * Cuts markdown into top-level blocks so a growing reply re-parses its last\n * block instead of all of them. Rejoining the result returns the input, and\n * every block renders as it would have inside the whole.\n *\n * Each rule only ever merges: over-merging costs a re-parse, while cutting a\n * construct in two changes what it renders as. Link reference and footnote\n * definitions resolve across blank lines, which no line-level rule can see, so\n * reaching one outside a fence abandons the split for the whole text.\n */\nexport function splitBlocks(markdown: string): string[] {\n const lines = markdown.split('\\n');\n const starts = [0];\n let fence: string | undefined;\n let started = false;\n let broken = false;\n let inList = false;\n\n for (const [index, line] of lines.entries()) {\n if (fence) {\n if (closesFence(line, fence)) fence = undefined;\n continue;\n }\n\n if (line.trim() === '') {\n broken = started;\n continue;\n }\n\n if (DEFINITION.test(line)) return [markdown];\n\n if (broken && startsBlock(line, inList)) {\n starts.push(index);\n started = false;\n }\n\n if (!started) inList = LIST_ITEM.test(line);\n\n started = true;\n broken = false;\n fence = fenceOpenedBy(line);\n }\n\n return starts.map((start, position) => {\n const end = starts[position + 1];\n const block = lines.slice(start, end ?? lines.length).join('\\n');\n\n return end === undefined ? block : `${block}\\n`;\n });\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { useWatched } from '@/ds/components/Arrival';\nimport { ARRIVING_MS } from '@/ds/tokens';\n\ninterface Landing {\n words: number;\n at: number;\n}\n\n/**\n * How many of a reply's words have been on screen long enough that their entrance is over.\n *\n * The entrance plays on whatever mounts carrying the class, so it replays every time a\n * word's element is rebuilt — and markdown rebuilds a growing tail constantly: a `-`\n * turns a paragraph into a list item, a closing `**` splits it around a `<strong>`, the\n * stream ends and the mend comes off. Each of those swaps the element a settled word\n * lives in, which is what makes a word already read fade in again.\n *\n * Ageing them out is the whole answer: a word carries the class only while it is new,\n * so however often the tail is rebuilt, only what is genuinely arriving animates.\n *\n * What counts as new at mount is not this hook's call. A reply the reader was handed\n * is already there, and a block that mounts complete — a card's output, an expanded\n * body — enters with its container. Only a passage born streaming under the reader's\n * eyes is new from its first word: the reveal often lands several words in its first\n * commit, and they enter like every word after them.\n */\nexport function useSettledWords(words: number, streaming: boolean): number {\n const watched = useWatched();\n const [settled, setSettled] = useState(() => (watched && streaming ? 0 : words));\n const landings = useRef<Landing[]>([]);\n const recorded = useRef(settled);\n\n useEffect(() => {\n if (recorded.current !== words) {\n landings.current.push({ words, at: performance.now() });\n recorded.current = words;\n }\n\n const waiting = landings.current[0];\n if (!waiting) return;\n\n const timer = setTimeout(\n () => {\n landings.current.shift();\n setSettled(waiting.words);\n },\n Math.max(0, waiting.at + ARRIVING_MS - performance.now()),\n );\n\n return () => clearTimeout(timer);\n }, [settled, words]);\n\n // A shorter reply replacing the one on screen settles at once: nothing of it is new.\n return Math.min(settled, words);\n}\n","import { memo, useMemo } from 'react';\nimport type { MouseEvent, MouseEventHandler, ReactNode } from 'react';\nimport Markdown from 'react-markdown';\nimport type { Components, ExtraProps, Options } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remend from 'remend';\n\nimport { rehypeArriving } from './arriving';\nimport { splitBlocks } from './blocks';\nimport { useSettledWords } from './use-settled';\nimport { CodeBlock } from '@/ds/components/CodeBlock';\nimport { cn } from '@/lib/utils';\n\nimport './markdown-renderer.css';\n\nexport type MarkdownExternalLinkTarget = 'tab' | 'window';\n\nexport interface MarkdownRendererProps {\n children: string;\n className?: string;\n externalLinkTarget?: MarkdownExternalLinkTarget;\n /** The text is a prefix of one still being written: close the markers the stream has not reached. */\n streaming?: boolean;\n}\n\n/**\n * Renders a markdown string. Agent output can carry attacker-influenced text\n * (file contents, tool output, web pages): react-markdown escapes raw HTML and\n * drops dangerous link schemes, so nothing here reaches the DOM as markup.\n *\n * react-markdown re-parses on every render, and a streaming reply re-renders\n * its whole transcript on every delta. Memoizing spares the settled messages;\n * rendering block by block — streaming or not — spares every block of the live\n * one but the last, and lets a reply settle without remounting what is already\n * on screen.\n *\n * The text is drawn as given: pacing a stream is `useRevealedText`, and belongs to\n * whoever owns the whole of what is being laid down — a reply is prose, tool rows\n * and cards, and they have to arrive in the order they were written. Only what\n * lands after the reader joined plays an entrance, and only while it is still new:\n * a reply opened part-written is already there, and fading in what someone is\n * halfway through reading would be both a lie and a screenful of animations at\n * once.\n */\nexport const MarkdownRenderer = memo(function MarkdownRenderer({\n children,\n className,\n externalLinkTarget = 'tab',\n streaming = false,\n}: MarkdownRendererProps) {\n const shown = decodeEscapedNewlines(children);\n const blocks = useMemo(() => splitBlocks(shown), [shown]);\n const last = blocks.length - 1;\n const components = externalLinkTarget === 'window' ? WINDOW_COMPONENTS : COMPONENTS;\n\n const spans = wordSpans(blocks);\n const settled = useSettledWords(spans.at(-1)?.end ?? 0, streaming);\n\n // A block whose words have all finished their entrance has nothing left to play,\n // which is what `undefined` says: leave it as plain text, no spans at all.\n const settledWords = (span: WordSpan | undefined): number | undefined =>\n !span || settled >= span.end ? undefined : Math.max(0, settled - span.start);\n\n const tail = blocks[last] ?? '';\n const mended = useMemo(() => (streaming ? remend(tail, REMEND_OPTIONS) : tail), [streaming, tail]);\n\n return (\n <div className={cn('mastra-markdown', className)}>\n {blocks.map((block, index) => (\n <MarkdownBlock\n key={index}\n content={index === last ? mended : block}\n settledWords={settledWords(spans[index])}\n components={components}\n />\n ))}\n </div>\n );\n});\n\n/** Keyed by position at the call site: a content key remounts on every character. */\nconst MarkdownBlock = memo(function MarkdownBlock({\n components,\n content,\n settledWords,\n}: {\n components: Components;\n content: string;\n settledWords?: number;\n}) {\n const rehypePlugins = useMemo(\n () => (settledWords === undefined ? SETTLED : [rehypeArriving(settledWords)]),\n [settledWords],\n );\n\n return (\n <Markdown remarkPlugins={REMARK_PLUGINS} rehypePlugins={rehypePlugins} components={components}>\n {content}\n </Markdown>\n );\n});\n\nconst SETTLED: Options['rehypePlugins'] = [];\n\ninterface WordSpan {\n start: number;\n end: number;\n}\n\n/**\n * Where each block's words fall in the reply's own count, so one settled count covers\n * them all. Counting the source counts its markers too, so the boundary only ever errs\n * towards leaving a word unanimated.\n */\nfunction wordSpans(blocks: string[]): WordSpan[] {\n let read = 0;\n\n return blocks.map(block => {\n const span = { start: read, end: read + countWords(block) };\n read = span.end;\n\n return span;\n });\n}\n\nfunction countWords(text: string): number {\n return text.match(/\\S+/g)?.length ?? 0;\n}\n\n// Agent networks emit their text with literal `\\n`. Only unescape when the text\n// has no real newline, otherwise a `\"a\\nb\"` inside a code fence gets shredded.\nfunction decodeEscapedNewlines(text: string): string {\n return text.includes('\\n') ? text : text.replace(/\\\\n/g, '\\n');\n}\n\ntype MarkdownNode = NonNullable<ExtraProps['node']>;\n\nfunction languageOf(node: MarkdownNode): string | undefined {\n const classNames = node.properties.className;\n if (!Array.isArray(classNames)) return undefined;\n\n const language = classNames.find(entry => typeof entry === 'string' && entry.startsWith('language-'));\n return typeof language === 'string' ? language.slice('language-'.length) : undefined;\n}\n\nfunction fencedCode(node: MarkdownNode | undefined): { code: string; language?: string } | undefined {\n const child = node?.children.find(entry => entry.type === 'element' && entry.tagName === 'code');\n if (child?.type !== 'element') return undefined;\n\n const code = child.children.map(entry => (entry.type === 'text' ? entry.value : '')).join('');\n return { code: code.replace(/\\n$/, ''), language: languageOf(child) };\n}\n\nfunction MarkdownCodeBlock({\n node,\n children,\n className,\n}: {\n node?: MarkdownNode;\n children?: ReactNode;\n className?: string;\n}) {\n const fenced = fencedCode(node);\n if (!fenced) return <pre className={className}>{children}</pre>;\n\n return (\n <CodeBlock\n code={fenced.code}\n lang={fenced.language}\n overflow=\"scroll\"\n className={cn('my-3 bg-surface1', className)}\n copyMessage=\"Copied code to clipboard\"\n />\n );\n}\n\nconst POPUP_WINDOW_FEATURES = 'popup=yes,width=720,height=800,resizable=yes,scrollbars=yes';\n\nfunction isPlainLeftClick(event: MouseEvent): boolean {\n return event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;\n}\n\nfunction markdownLink(externalLinkTarget: MarkdownExternalLinkTarget): NonNullable<Components['a']> {\n return function MarkdownLink({ href, title, children }) {\n const isExternal = /^https?:\\/\\//i.test(href ?? '');\n\n const openInPopup: MouseEventHandler<HTMLAnchorElement> = event => {\n if (!isExternal || externalLinkTarget !== 'window' || !isPlainLeftClick(event)) return;\n\n const popup = window.open(href, '_blank', POPUP_WINDOW_FEATURES);\n if (!popup) return;\n\n popup.opener = null;\n event.preventDefault();\n };\n\n return (\n <a\n href={href}\n title={title}\n onClick={openInPopup}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n >\n {children}\n </a>\n );\n };\n}\n\nconst REMARK_PLUGINS = [remarkGfm];\n\n// Links stay text until their URL lands: remend's placeholder href would render\n// a live anchor to nowhere. No math is rendered here, so pairing `$$` would only\n// turn one literal into another.\nconst REMEND_OPTIONS = { katex: false, linkMode: 'text-only' } as const;\n\n// Elements are listed one by one: react-markdown also passes its `node`, which\n// React would forward to the DOM as a stray attribute. Everything else is\n// styled from markdown-renderer.css.\nconst COMPONENTS: Components = {\n pre: MarkdownCodeBlock,\n a: markdownLink('tab'),\n};\n\nconst WINDOW_COMPONENTS: Components = {\n ...COMPONENTS,\n a: markdownLink('window'),\n};\n"],"names":["ARRIVING_CLASS","useWatched","useState","useRef","useEffect","ARRIVING_MS","memo","MarkdownRenderer","useMemo","jsx","cn","MarkdownBlock","CodeBlock"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-renderer-Wmdi_oR8.js","sources":["../src/ds/components/MarkdownRenderer/arriving.ts","../src/ds/components/MarkdownRenderer/blocks.ts","../src/ds/components/MarkdownRenderer/use-settled.ts","../src/ds/components/MarkdownRenderer/markdown-renderer.tsx"],"sourcesContent":["import type { ExtraProps } from 'react-markdown';\n\nimport { ARRIVING_CLASS } from '@/ds/tokens';\n\nimport '@/ds/components/Arrival/arrival.css';\n\ntype MarkdownElement = NonNullable<ExtraProps['node']>;\ntype MarkdownChild = MarkdownElement['children'][number];\n\n/** Fades whole: a fence renders through `CodeBlock`, and inline code carries a background. */\nconst UNBROKEN = new Set(['pre', 'code']);\n\nconst wrap = (value: string, arriving: boolean): MarkdownChild => ({\n type: 'element',\n tagName: 'span',\n properties: arriving ? { className: [ARRIVING_CLASS] } : {},\n children: [{ type: 'text', value }],\n});\n\nfunction markArriving(node: MarkdownElement): void {\n const classes = node.properties.className;\n\n node.properties.className = Array.isArray(classes) ? [...classes, ARRIVING_CLASS] : [ARRIVING_CLASS];\n}\n\nfunction rebuild(nodes: MarkdownChild[], arriving: () => boolean): MarkdownChild[] {\n const out: MarkdownChild[] = [];\n\n for (const node of nodes) {\n if (node.type === 'text') {\n for (const piece of node.value.match(/\\S+|\\s+/g) ?? []) {\n if (/\\S/.test(piece)) out.push(wrap(piece, arriving()));\n else out.push({ type: 'text', value: piece });\n }\n\n continue;\n }\n\n out.push(node);\n\n if (node.type !== 'element') continue;\n\n if (!UNBROKEN.has(node.tagName)) node.children = rebuild(node.children, arriving);\n else if (arriving()) markArriving(node);\n }\n\n return out;\n}\n\n/**\n * Gives every word of a block an element of its own, and the entrance class to\n * those past the first `settled` — the words that were not on screen yet when\n * the reader joined this reply.\n *\n * Every word, not just the arriving ones: react-markdown parses afresh on each\n * landing and React matches the children it already mounted by position, so a\n * wrapper that came and went would land where a bare text node used to be and\n * remount half the paragraph, replaying entrances that had long finished.\n * Wrapping the lot keeps every position fixed — a new word only ever appends —\n * and a word never gains the class it did not mount with, so nothing replays.\n */\nexport function rehypeArriving(settled: number) {\n return function attach() {\n return (tree: { children: MarkdownChild[] }) => {\n let word = 0;\n\n tree.children = rebuild(tree.children, () => word++ >= settled);\n };\n };\n}\n","const FENCE_OPEN = /^ {0,3}(`{3,}|~{3,})/;\nconst FENCE_CLOSE = /^ {0,3}(`{3,}|~{3,})[ \\t]*$/;\nconst LIST_ITEM = /^ {0,3}(?:[-*+]|\\d{1,9}[.)])(?:[ \\t]|$)/;\nconst INDENTED = /^(?:\\t| {2,})/;\nconst DEFINITION = /^ {0,3}\\[[^\\]]+\\]:/;\n\nfunction fenceOpenedBy(line: string): string | undefined {\n return FENCE_OPEN.exec(line)?.[1];\n}\n\n// Both are runs of one character, so `startsWith` is \"same marker, at least as long\".\nfunction closesFence(line: string, marker: string): boolean {\n return FENCE_CLOSE.exec(line)?.[1]?.startsWith(marker) ?? false;\n}\n\nfunction startsBlock(line: string, inList: boolean): boolean {\n if (INDENTED.test(line)) return false;\n\n return !(inList && LIST_ITEM.test(line));\n}\n\n/**\n * Cuts markdown into top-level blocks so a growing reply re-parses its last\n * block instead of all of them. Rejoining the result returns the input, and\n * every block renders as it would have inside the whole.\n *\n * Each rule only ever merges: over-merging costs a re-parse, while cutting a\n * construct in two changes what it renders as. Link reference and footnote\n * definitions resolve across blank lines, which no line-level rule can see, so\n * reaching one outside a fence abandons the split for the whole text.\n */\nexport function splitBlocks(markdown: string): string[] {\n const lines = markdown.split('\\n');\n const starts = [0];\n let fence: string | undefined;\n let started = false;\n let broken = false;\n let inList = false;\n\n for (const [index, line] of lines.entries()) {\n if (fence) {\n if (closesFence(line, fence)) fence = undefined;\n continue;\n }\n\n if (line.trim() === '') {\n broken = started;\n continue;\n }\n\n if (DEFINITION.test(line)) return [markdown];\n\n if (broken && startsBlock(line, inList)) {\n starts.push(index);\n started = false;\n }\n\n if (!started) inList = LIST_ITEM.test(line);\n\n started = true;\n broken = false;\n fence = fenceOpenedBy(line);\n }\n\n return starts.map((start, position) => {\n const end = starts[position + 1];\n const block = lines.slice(start, end ?? lines.length).join('\\n');\n\n return end === undefined ? block : `${block}\\n`;\n });\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport { useWatched } from '@/ds/components/Arrival';\nimport { ARRIVING_MS } from '@/ds/tokens';\n\ninterface Landing {\n words: number;\n at: number;\n}\n\n/**\n * How many of a reply's words have been on screen long enough that their entrance is over.\n *\n * The entrance plays on whatever mounts carrying the class, so it replays every time a\n * word's element is rebuilt — and markdown rebuilds a growing tail constantly: a `-`\n * turns a paragraph into a list item, a closing `**` splits it around a `<strong>`, the\n * stream ends and the mend comes off. Each of those swaps the element a settled word\n * lives in, which is what makes a word already read fade in again.\n *\n * Ageing them out is the whole answer: a word carries the class only while it is new,\n * so however often the tail is rebuilt, only what is genuinely arriving animates.\n *\n * What counts as new at mount is not this hook's call. A reply the reader was handed\n * is already there, and a block that mounts complete — a card's output, an expanded\n * body — enters with its container. Only a passage born streaming under the reader's\n * eyes is new from its first word: the reveal often lands several words in its first\n * commit, and they enter like every word after them.\n */\nexport function useSettledWords(words: number, streaming: boolean): number {\n const watched = useWatched();\n const [settled, setSettled] = useState(() => (watched && streaming ? 0 : words));\n const landings = useRef<Landing[]>([]);\n const recorded = useRef(settled);\n\n useEffect(() => {\n if (recorded.current !== words) {\n landings.current.push({ words, at: performance.now() });\n recorded.current = words;\n }\n\n const waiting = landings.current[0];\n if (!waiting) return;\n\n const timer = setTimeout(\n () => {\n landings.current.shift();\n setSettled(waiting.words);\n },\n Math.max(0, waiting.at + ARRIVING_MS - performance.now()),\n );\n\n return () => clearTimeout(timer);\n }, [settled, words]);\n\n // A shorter reply replacing the one on screen settles at once: nothing of it is new.\n return Math.min(settled, words);\n}\n","import { memo, useMemo } from 'react';\nimport type { MouseEvent, MouseEventHandler, ReactNode } from 'react';\nimport Markdown from 'react-markdown';\nimport type { Components, ExtraProps, Options } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remend from 'remend';\n\nimport { rehypeArriving } from './arriving';\nimport { splitBlocks } from './blocks';\nimport { useSettledWords } from './use-settled';\nimport { CodeBlock } from '@/ds/components/CodeBlock';\nimport { cn } from '@/lib/utils';\n\nimport './markdown-renderer.css';\n\nexport type MarkdownExternalLinkTarget = 'tab' | 'window';\n\nexport interface MarkdownRendererProps {\n children: string;\n className?: string;\n externalLinkTarget?: MarkdownExternalLinkTarget;\n /** The text is a prefix of one still being written: close the markers the stream has not reached. */\n streaming?: boolean;\n}\n\n/**\n * Renders a markdown string. Agent output can carry attacker-influenced text\n * (file contents, tool output, web pages): react-markdown escapes raw HTML and\n * drops dangerous link schemes, so nothing here reaches the DOM as markup.\n *\n * react-markdown re-parses on every render, and a streaming reply re-renders\n * its whole transcript on every delta. Memoizing spares the settled messages;\n * rendering block by block — streaming or not — spares every block of the live\n * one but the last, and lets a reply settle without remounting what is already\n * on screen.\n *\n * The text is drawn as given: pacing a stream is `useRevealedText`, and belongs to\n * whoever owns the whole of what is being laid down — a reply is prose, tool rows\n * and cards, and they have to arrive in the order they were written. Only what\n * lands after the reader joined plays an entrance, and only while it is still new:\n * a reply opened part-written is already there, and fading in what someone is\n * halfway through reading would be both a lie and a screenful of animations at\n * once.\n */\nexport const MarkdownRenderer = memo(function MarkdownRenderer({\n children,\n className,\n externalLinkTarget = 'tab',\n streaming = false,\n}: MarkdownRendererProps) {\n const shown = decodeEscapedNewlines(children);\n const blocks = useMemo(() => splitBlocks(shown), [shown]);\n const last = blocks.length - 1;\n const components = externalLinkTarget === 'window' ? WINDOW_COMPONENTS : COMPONENTS;\n\n const spans = wordSpans(blocks);\n const settled = useSettledWords(spans.at(-1)?.end ?? 0, streaming);\n\n // A block whose words have all finished their entrance has nothing left to play,\n // which is what `undefined` says: leave it as plain text, no spans at all.\n const settledWords = (span: WordSpan | undefined): number | undefined =>\n !span || settled >= span.end ? undefined : Math.max(0, settled - span.start);\n\n const tail = blocks[last] ?? '';\n const mended = useMemo(() => (streaming ? remend(tail, REMEND_OPTIONS) : tail), [streaming, tail]);\n\n return (\n <div className={cn('mastra-markdown', className)}>\n {blocks.map((block, index) => (\n <MarkdownBlock\n key={index}\n content={index === last ? mended : block}\n settledWords={settledWords(spans[index])}\n components={components}\n />\n ))}\n </div>\n );\n});\n\n/** Keyed by position at the call site: a content key remounts on every character. */\nconst MarkdownBlock = memo(function MarkdownBlock({\n components,\n content,\n settledWords,\n}: {\n components: Components;\n content: string;\n settledWords?: number;\n}) {\n const rehypePlugins = useMemo(\n () => (settledWords === undefined ? SETTLED : [rehypeArriving(settledWords)]),\n [settledWords],\n );\n\n return (\n <Markdown remarkPlugins={REMARK_PLUGINS} rehypePlugins={rehypePlugins} components={components}>\n {content}\n </Markdown>\n );\n});\n\nconst SETTLED: Options['rehypePlugins'] = [];\n\ninterface WordSpan {\n start: number;\n end: number;\n}\n\n/**\n * Where each block's words fall in the reply's own count, so one settled count covers\n * them all. Counting the source counts its markers too, so the boundary only ever errs\n * towards leaving a word unanimated.\n */\nfunction wordSpans(blocks: string[]): WordSpan[] {\n let read = 0;\n\n return blocks.map(block => {\n const span = { start: read, end: read + countWords(block) };\n read = span.end;\n\n return span;\n });\n}\n\nfunction countWords(text: string): number {\n return text.match(/\\S+/g)?.length ?? 0;\n}\n\n// Agent networks emit their text with literal `\\n`. Only unescape when the text\n// has no real newline, otherwise a `\"a\\nb\"` inside a code fence gets shredded.\nfunction decodeEscapedNewlines(text: string): string {\n return text.includes('\\n') ? text : text.replace(/\\\\n/g, '\\n');\n}\n\ntype MarkdownNode = NonNullable<ExtraProps['node']>;\n\nfunction languageOf(node: MarkdownNode): string | undefined {\n const classNames = node.properties.className;\n if (!Array.isArray(classNames)) return undefined;\n\n const language = classNames.find(entry => typeof entry === 'string' && entry.startsWith('language-'));\n return typeof language === 'string' ? language.slice('language-'.length) : undefined;\n}\n\nfunction fencedCode(node: MarkdownNode | undefined): { code: string; language?: string } | undefined {\n const child = node?.children.find(entry => entry.type === 'element' && entry.tagName === 'code');\n if (child?.type !== 'element') return undefined;\n\n const code = child.children.map(entry => (entry.type === 'text' ? entry.value : '')).join('');\n return { code: code.replace(/\\n$/, ''), language: languageOf(child) };\n}\n\nfunction MarkdownCodeBlock({\n node,\n children,\n className,\n}: {\n node?: MarkdownNode;\n children?: ReactNode;\n className?: string;\n}) {\n const fenced = fencedCode(node);\n if (!fenced) return <pre className={className}>{children}</pre>;\n\n return (\n <CodeBlock\n code={fenced.code}\n lang={fenced.language}\n overflow=\"scroll\"\n className={cn('my-3 bg-surface1', className)}\n copyMessage=\"Copied code to clipboard\"\n />\n );\n}\n\nconst POPUP_WINDOW_FEATURES = 'popup=yes,width=720,height=800,resizable=yes,scrollbars=yes';\n\nfunction isPlainLeftClick(event: MouseEvent): boolean {\n return event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;\n}\n\nfunction markdownLink(externalLinkTarget: MarkdownExternalLinkTarget): NonNullable<Components['a']> {\n return function MarkdownLink({ href, title, children }) {\n const isExternal = /^https?:\\/\\//i.test(href ?? '');\n\n const openInPopup: MouseEventHandler<HTMLAnchorElement> = event => {\n if (!isExternal || externalLinkTarget !== 'window' || !isPlainLeftClick(event)) return;\n\n const popup = window.open(href, '_blank', POPUP_WINDOW_FEATURES);\n if (!popup) return;\n\n popup.opener = null;\n event.preventDefault();\n };\n\n return (\n <a\n href={href}\n title={title}\n onClick={openInPopup}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n >\n {children}\n </a>\n );\n };\n}\n\nconst REMARK_PLUGINS = [remarkGfm];\n\n// Links stay text until their URL lands: remend's placeholder href would render\n// a live anchor to nowhere. No math is rendered here, so pairing `$$` would only\n// turn one literal into another.\nconst REMEND_OPTIONS = { katex: false, linkMode: 'text-only' } as const;\n\n// Elements are listed one by one: react-markdown also passes its `node`, which\n// React would forward to the DOM as a stray attribute. Everything else is\n// styled from markdown-renderer.css.\nconst COMPONENTS: Components = {\n pre: MarkdownCodeBlock,\n a: markdownLink('tab'),\n};\n\nconst WINDOW_COMPONENTS: Components = {\n ...COMPONENTS,\n a: markdownLink('window'),\n};\n"],"names":["MarkdownRenderer","MarkdownBlock"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-header-ComQfwIQ.js","sources":["../src/ds/new/layout/page-header/page-header-action.tsx","../src/ds/new/layout/page-header/page-header-description.tsx","../src/ds/new/layout/page-header/page-header-icon.tsx","../src/ds/new/layout/page-header/page-header-meta.tsx","../src/ds/new/layout/page-header/page-header-title.tsx","../src/ds/new/layout/page-header/page-header-root.tsx","../src/ds/new/layout/page-header/page-header.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport type PageHeaderActionProps = ComponentPropsWithoutRef<'div'>;\n\nexport function PageHeaderAction({ className, ...props }: PageHeaderActionProps) {\n return (\n <div\n data-slot=\"page-header-action\"\n className={cn('col-start-3 row-start-1 justify-self-end', className)}\n {...props}\n />\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface PageHeaderDescriptionProps extends ComponentPropsWithoutRef<'p'> {\n isLoading?: boolean;\n}\n\nexport function PageHeaderDescription({ children, className, isLoading, ...props }: PageHeaderDescriptionProps) {\n return (\n <p\n data-slot=\"page-header-description\"\n className={cn(\n 'max-w-140 col-span-3 col-start-1 flex flex-wrap gap-x-4 gap-y-1 text-ui-sm text-neutral2',\n isLoading && 'w-160 max-w-[80%] animate-pulse rounded-md bg-surface4',\n className,\n )}\n {...props}\n >\n {isLoading ? <>&nbsp;</> : children}\n </p>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport type PageHeaderIconProps = ComponentPropsWithoutRef<'div'>;\n\nexport function PageHeaderIcon({ className, ...props }: PageHeaderIconProps) {\n return (\n <div\n data-slot=\"page-header-icon\"\n className={cn(\n 'absolute top-1/2 right-full col-start-1 row-start-1 row-end-2 mr-2 flex -translate-y-1/2 items-center text-neutral3 [&>svg]:size-6',\n className,\n )}\n {...props}\n />\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface PageHeaderMetaProps extends ComponentPropsWithoutRef<'div'> {\n beside?: boolean;\n}\n\nexport function PageHeaderMeta({ beside = false, className, ...props }: PageHeaderMetaProps) {\n return (\n <div\n data-slot=\"page-header-meta\"\n data-placement={beside ? 'beside' : 'below'}\n className={cn(\n 'flex min-w-0 flex-wrap items-center gap-2',\n beside ? 'col-start-2 row-start-1 self-center justify-self-start' : 'col-span-3 col-start-1',\n className,\n )}\n {...props}\n />\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport type PageHeaderTitleSize = 'sm' | 'md' | 'lg' | 'xl' | 'smaller' | 'default';\n\nexport interface PageHeaderTitleProps extends ComponentPropsWithoutRef<'h1'> {\n isLoading?: boolean;\n size?: PageHeaderTitleSize;\n}\n\nconst titleSizeClasses: Record<PageHeaderTitleSize, string> = {\n sm: 'text-header-sm',\n md: 'text-header-md',\n lg: 'text-header-lg',\n xl: 'text-header-xl',\n smaller: 'text-header-sm',\n default: 'text-header-md',\n};\n\nexport function PageHeaderTitle({ children, className, isLoading, size = 'md', ...props }: PageHeaderTitleProps) {\n return (\n <h1\n data-slot=\"page-header-title\"\n className={cn(\n 'col-start-1 row-start-1 flex min-w-0 items-center gap-2 font-medium text-neutral4 [&>svg]:size-[1.25em] [&>svg]:opacity-50',\n titleSizeClasses[size],\n isLoading && 'w-60 max-w-[50%] animate-pulse rounded-md bg-surface4',\n className,\n )}\n {...props}\n >\n {isLoading ? <>&nbsp;</> : children}\n </h1>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { PageHeaderDescription } from './page-header-description';\nimport { PageHeaderIcon } from './page-header-icon';\nimport { PageHeaderTitle } from './page-header-title';\nimport { cn } from '@/lib/utils';\n\nexport interface PageHeaderRootProps extends Omit<ComponentPropsWithoutRef<'header'>, 'title'> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n isLoading?: boolean;\n}\n\nexport function PageHeaderRoot({\n children,\n className,\n title,\n description,\n icon,\n isLoading,\n ...props\n}: PageHeaderRootProps) {\n const useLegacyApi = children === undefined && title !== undefined;\n\n return (\n <header\n className={cn('relative grid w-full grid-cols-[auto_minmax(0,1fr)_auto] gap-x-3 gap-y-1', className)}\n {...props}\n >\n {useLegacyApi ? (\n <>\n {!isLoading && icon !== undefined && <PageHeaderIcon>{icon}</PageHeaderIcon>}\n <PageHeaderTitle isLoading={isLoading}>{title}</PageHeaderTitle>\n {description !== undefined && (\n <PageHeaderDescription isLoading={isLoading}>{description}</PageHeaderDescription>\n )}\n </>\n ) : (\n children\n )}\n </header>\n );\n}\n","import { PageHeaderAction } from './page-header-action';\nimport { PageHeaderDescription } from './page-header-description';\nimport { PageHeaderIcon } from './page-header-icon';\nimport { PageHeaderMeta } from './page-header-meta';\nimport { PageHeaderRoot } from './page-header-root';\nimport { PageHeaderTitle } from './page-header-title';\n\nexport type { PageHeaderActionProps } from './page-header-action';\nexport type { PageHeaderDescriptionProps } from './page-header-description';\nexport type { PageHeaderIconProps } from './page-header-icon';\nexport type { PageHeaderMetaProps } from './page-header-meta';\nexport type { PageHeaderRootProps } from './page-header-root';\nexport type { PageHeaderTitleProps, PageHeaderTitleSize } from './page-header-title';\n\nexport const PageHeader = Object.assign(PageHeaderRoot, {\n Icon: PageHeaderIcon,\n Title: PageHeaderTitle,\n Meta: PageHeaderMeta,\n Description: PageHeaderDescription,\n Action: PageHeaderAction,\n});\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-header-hRxyKAlN.cjs","sources":["../src/ds/new/layout/page-header/page-header-action.tsx","../src/ds/new/layout/page-header/page-header-description.tsx","../src/ds/new/layout/page-header/page-header-icon.tsx","../src/ds/new/layout/page-header/page-header-meta.tsx","../src/ds/new/layout/page-header/page-header-title.tsx","../src/ds/new/layout/page-header/page-header-root.tsx","../src/ds/new/layout/page-header/page-header.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport type PageHeaderActionProps = ComponentPropsWithoutRef<'div'>;\n\nexport function PageHeaderAction({ className, ...props }: PageHeaderActionProps) {\n return (\n <div\n data-slot=\"page-header-action\"\n className={cn('col-start-3 row-start-1 justify-self-end', className)}\n {...props}\n />\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface PageHeaderDescriptionProps extends ComponentPropsWithoutRef<'p'> {\n isLoading?: boolean;\n}\n\nexport function PageHeaderDescription({ children, className, isLoading, ...props }: PageHeaderDescriptionProps) {\n return (\n <p\n data-slot=\"page-header-description\"\n className={cn(\n 'max-w-140 col-span-3 col-start-1 flex flex-wrap gap-x-4 gap-y-1 text-ui-sm text-neutral2',\n isLoading && 'w-160 max-w-[80%] animate-pulse rounded-md bg-surface4',\n className,\n )}\n {...props}\n >\n {isLoading ? <>&nbsp;</> : children}\n </p>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport type PageHeaderIconProps = ComponentPropsWithoutRef<'div'>;\n\nexport function PageHeaderIcon({ className, ...props }: PageHeaderIconProps) {\n return (\n <div\n data-slot=\"page-header-icon\"\n className={cn(\n 'absolute top-1/2 right-full col-start-1 row-start-1 row-end-2 mr-2 flex -translate-y-1/2 items-center text-neutral3 [&>svg]:size-6',\n className,\n )}\n {...props}\n />\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface PageHeaderMetaProps extends ComponentPropsWithoutRef<'div'> {\n beside?: boolean;\n}\n\nexport function PageHeaderMeta({ beside = false, className, ...props }: PageHeaderMetaProps) {\n return (\n <div\n data-slot=\"page-header-meta\"\n data-placement={beside ? 'beside' : 'below'}\n className={cn(\n 'flex min-w-0 flex-wrap items-center gap-2',\n beside ? 'col-start-2 row-start-1 self-center justify-self-start' : 'col-span-3 col-start-1',\n className,\n )}\n {...props}\n />\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport type PageHeaderTitleSize = 'sm' | 'md' | 'lg' | 'xl' | 'smaller' | 'default';\n\nexport interface PageHeaderTitleProps extends ComponentPropsWithoutRef<'h1'> {\n isLoading?: boolean;\n size?: PageHeaderTitleSize;\n}\n\nconst titleSizeClasses: Record<PageHeaderTitleSize, string> = {\n sm: 'text-header-sm',\n md: 'text-header-md',\n lg: 'text-header-lg',\n xl: 'text-header-xl',\n smaller: 'text-header-sm',\n default: 'text-header-md',\n};\n\nexport function PageHeaderTitle({ children, className, isLoading, size = 'md', ...props }: PageHeaderTitleProps) {\n return (\n <h1\n data-slot=\"page-header-title\"\n className={cn(\n 'col-start-1 row-start-1 flex min-w-0 items-center gap-2 font-medium text-neutral4 [&>svg]:size-[1.25em] [&>svg]:opacity-50',\n titleSizeClasses[size],\n isLoading && 'w-60 max-w-[50%] animate-pulse rounded-md bg-surface4',\n className,\n )}\n {...props}\n >\n {isLoading ? <>&nbsp;</> : children}\n </h1>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { PageHeaderDescription } from './page-header-description';\nimport { PageHeaderIcon } from './page-header-icon';\nimport { PageHeaderTitle } from './page-header-title';\nimport { cn } from '@/lib/utils';\n\nexport interface PageHeaderRootProps extends Omit<ComponentPropsWithoutRef<'header'>, 'title'> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n isLoading?: boolean;\n}\n\nexport function PageHeaderRoot({\n children,\n className,\n title,\n description,\n icon,\n isLoading,\n ...props\n}: PageHeaderRootProps) {\n const useLegacyApi = children === undefined && title !== undefined;\n\n return (\n <header\n className={cn('relative grid w-full grid-cols-[auto_minmax(0,1fr)_auto] gap-x-3 gap-y-1', className)}\n {...props}\n >\n {useLegacyApi ? (\n <>\n {!isLoading && icon !== undefined && <PageHeaderIcon>{icon}</PageHeaderIcon>}\n <PageHeaderTitle isLoading={isLoading}>{title}</PageHeaderTitle>\n {description !== undefined && (\n <PageHeaderDescription isLoading={isLoading}>{description}</PageHeaderDescription>\n )}\n </>\n ) : (\n children\n )}\n </header>\n );\n}\n","import { PageHeaderAction } from './page-header-action';\nimport { PageHeaderDescription } from './page-header-description';\nimport { PageHeaderIcon } from './page-header-icon';\nimport { PageHeaderMeta } from './page-header-meta';\nimport { PageHeaderRoot } from './page-header-root';\nimport { PageHeaderTitle } from './page-header-title';\n\nexport type { PageHeaderActionProps } from './page-header-action';\nexport type { PageHeaderDescriptionProps } from './page-header-description';\nexport type { PageHeaderIconProps } from './page-header-icon';\nexport type { PageHeaderMetaProps } from './page-header-meta';\nexport type { PageHeaderRootProps } from './page-header-root';\nexport type { PageHeaderTitleProps, PageHeaderTitleSize } from './page-header-title';\n\nexport const PageHeader = Object.assign(PageHeaderRoot, {\n Icon: PageHeaderIcon,\n Title: PageHeaderTitle,\n Meta: PageHeaderMeta,\n Description: PageHeaderDescription,\n Action: PageHeaderAction,\n});\n"],"names":["jsx","cn","Fragment","jsxs"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"select-Dhox-EJ2.cjs","sources":["../src/ds/components/Select/select.tsx"],"sourcesContent":["import { Select as SelectPrimitive } from '@base-ui/react/select';\nimport type { SelectPopupProps, SelectPositionerProps } from '@base-ui/react/select';\nimport { Check, ChevronDown } from 'lucide-react';\nimport * as React from 'react';\n\nimport { buttonVariants } from '../Button/Button';\nimport type { TextButtonSize } from '../Button/Button';\nimport { controlTriggerOpenState } from '@/ds/primitives/control-size';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport '@/ds/primitives/focus.css';\nimport { menuItemCheckClass, menuItemClass, menuPopupClass, menuPositionerClass } from '@/ds/primitives/menu-item';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\ntype SelectItemNode = React.ReactElement<{ value: unknown; children?: React.ReactNode }>;\n\nfunction isSelectItem(node: React.ReactNode): node is SelectItemNode {\n return React.isValidElement(node) && (node.type as { displayName?: string })?.displayName === 'SelectItem';\n}\n\nfunction collectItems(children: React.ReactNode, acc: Array<{ value: unknown; label: React.ReactNode }>): void {\n React.Children.forEach(children, child => {\n if (!React.isValidElement(child)) return;\n if (isSelectItem(child)) {\n acc.push({ value: child.props.value, label: child.props.children });\n return;\n }\n const nested = (child.props as { children?: React.ReactNode })?.children;\n if (nested != null) collectItems(nested, acc);\n });\n}\n\ntype SelectRootProps<Value> = SelectPrimitive.Root.Props<Value, false>;\ntype SelectChangeDetails = Parameters<NonNullable<SelectRootProps<unknown>['onValueChange']>>[1];\n\n/** Preserves the non-null onValueChange signature used by existing consumers. */\ntype SelectProps<Value = string> = Omit<SelectRootProps<Value>, 'onValueChange'> & {\n onValueChange?: (value: Value, eventDetails: SelectChangeDetails) => void;\n};\n\nfunction Select<Value = string>({ children, items, onValueChange, ...props }: SelectProps<Value>) {\n // Base UI needs item labels before the popup mounts to display the closed selection.\n const derivedItems = React.useMemo(() => {\n if (items != null) return items;\n const acc: Array<{ value: unknown; label: React.ReactNode }> = [];\n collectItems(children, acc);\n return acc.length > 0 ? acc : undefined;\n }, [items, children]);\n\n return (\n <SelectPrimitive.Root\n items={derivedItems as SelectRootProps<Value>['items']}\n onValueChange={onValueChange ? (value, eventDetails) => onValueChange(value as Value, eventDetails) : undefined}\n {...props}\n >\n {children}\n </SelectPrimitive.Root>\n );\n}\nSelect.displayName = 'Select';\n\nconst SelectGroup = SelectPrimitive.Group;\n\nexport type SelectValueProps = Omit<SelectPrimitive.Value.Props, 'className'> & {\n className?: string;\n};\n\nconst SelectValue = React.forwardRef<HTMLSpanElement, SelectValueProps>(({ className, ...props }, ref) => (\n <SelectPrimitive.Value ref={ref} className={cn('truncate', className)} {...props} />\n));\nSelectValue.displayName = 'SelectValue';\n\nexport type SelectTriggerVariant = 'default' | 'outline' | 'ghost';\ntype SelectTriggerLegacyVariant = 'primary';\n\nexport type SelectTriggerProps = Omit<SelectPrimitive.Trigger.Props, 'className'> & {\n className?: string;\n size?: TextButtonSize;\n variant?: SelectTriggerVariant | SelectTriggerLegacyVariant;\n};\n\nfunction normalizeSelectTriggerVariant(\n variant: SelectTriggerVariant | SelectTriggerLegacyVariant,\n): SelectTriggerVariant {\n // Legacy primary stays accepted but renders with form-field emphasis.\n return variant === 'primary' ? 'default' : variant;\n}\n\nconst SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n ({ className, children, size = 'md', variant = 'default', ...props }, ref) => {\n const visualVariant = normalizeSelectTriggerVariant(variant);\n\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n className={cn(\n buttonVariants({ variant: visualVariant, size }),\n 'w-full justify-between',\n controlTriggerOpenState[visualVariant],\n 'data-[placeholder]:text-neutral3',\n '[&>span]:truncate',\n className,\n )}\n {...props}\n >\n {children}\n\n {/* Keep the chevron nested so Button's direct-SVG styles cannot distort it. */}\n <SelectPrimitive.Icon\n render={\n <span className=\"flex shrink-0 items-center\">\n <ChevronDown className={cn('size-4 opacity-60', transitions.colors)} />\n </span>\n }\n />\n </SelectPrimitive.Trigger>\n );\n },\n);\nSelectTrigger.displayName = 'SelectTrigger';\n\ntype SelectContentPositionerProps = Omit<SelectPositionerProps, keyof SelectPopupProps>;\n\nexport type SelectContentProps = Omit<SelectPopupProps, 'className'> &\n SelectContentPositionerProps & {\n className?: string;\n /** Ignored compatibility prop from Radix; use Base UI positioning props instead. */\n position?: 'popper' | 'item-aligned';\n container?: HTMLElement | null;\n };\n\nconst SelectContent = React.forwardRef<HTMLDivElement, SelectContentProps>(\n (\n {\n className,\n children,\n position: _position,\n container,\n side = 'bottom',\n align = 'start',\n sideOffset = 4,\n alignItemWithTrigger = false,\n anchor,\n positionMethod = FLOATING_POSITION_METHOD,\n alignOffset,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n ...props\n },\n ref,\n ) => {\n // Keep the popup inside the modal's interaction boundary unless a container overrides it.\n const resolvedContainer = usePortalContainer(container);\n const positionerProps: SelectContentPositionerProps = {\n side,\n align,\n sideOffset,\n alignItemWithTrigger,\n anchor,\n positionMethod,\n alignOffset,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n };\n\n return (\n <SelectPrimitive.Portal container={resolvedContainer}>\n <SelectPrimitive.Positioner className={menuPositionerClass} {...positionerProps}>\n <SelectPrimitive.Popup ref={ref} className={cn(menuPopupClass, className)} {...props}>\n <SelectPrimitive.List>{children}</SelectPrimitive.List>\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n },\n);\nSelectContent.displayName = 'SelectContent';\n\nexport type SelectItemProps = Omit<SelectPrimitive.Item.Props, 'className'> & {\n className?: string;\n};\n\nconst SelectItem = React.forwardRef<HTMLDivElement, SelectItemProps>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item ref={ref} className={cn(menuItemClass, className)} {...props}>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className={menuItemCheckClass}>\n <Check />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = 'SelectItem';\n\nexport { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectItem };\n"],"names":["React","jsx","SelectPrimitive","cn","jsxs","buttonVariants","controlTriggerOpenState","ChevronDown","transitions","FLOATING_POSITION_METHOD","usePortalContainer","menuPositionerClass","menuPopupClass","menuItemClass","menuItemCheckClass","Check"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"select-VqANzntV.js","sources":["../src/ds/components/Select/select.tsx"],"sourcesContent":["import { Select as SelectPrimitive } from '@base-ui/react/select';\nimport type { SelectPopupProps, SelectPositionerProps } from '@base-ui/react/select';\nimport { Check, ChevronDown } from 'lucide-react';\nimport * as React from 'react';\n\nimport { buttonVariants } from '../Button/Button';\nimport type { TextButtonSize } from '../Button/Button';\nimport { controlTriggerOpenState } from '@/ds/primitives/control-size';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport '@/ds/primitives/focus.css';\nimport { menuItemCheckClass, menuItemClass, menuPopupClass, menuPositionerClass } from '@/ds/primitives/menu-item';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\ntype SelectItemNode = React.ReactElement<{ value: unknown; children?: React.ReactNode }>;\n\nfunction isSelectItem(node: React.ReactNode): node is SelectItemNode {\n return React.isValidElement(node) && (node.type as { displayName?: string })?.displayName === 'SelectItem';\n}\n\nfunction collectItems(children: React.ReactNode, acc: Array<{ value: unknown; label: React.ReactNode }>): void {\n React.Children.forEach(children, child => {\n if (!React.isValidElement(child)) return;\n if (isSelectItem(child)) {\n acc.push({ value: child.props.value, label: child.props.children });\n return;\n }\n const nested = (child.props as { children?: React.ReactNode })?.children;\n if (nested != null) collectItems(nested, acc);\n });\n}\n\ntype SelectRootProps<Value> = SelectPrimitive.Root.Props<Value, false>;\ntype SelectChangeDetails = Parameters<NonNullable<SelectRootProps<unknown>['onValueChange']>>[1];\n\n/** Preserves the non-null onValueChange signature used by existing consumers. */\ntype SelectProps<Value = string> = Omit<SelectRootProps<Value>, 'onValueChange'> & {\n onValueChange?: (value: Value, eventDetails: SelectChangeDetails) => void;\n};\n\nfunction Select<Value = string>({ children, items, onValueChange, ...props }: SelectProps<Value>) {\n // Base UI needs item labels before the popup mounts to display the closed selection.\n const derivedItems = React.useMemo(() => {\n if (items != null) return items;\n const acc: Array<{ value: unknown; label: React.ReactNode }> = [];\n collectItems(children, acc);\n return acc.length > 0 ? acc : undefined;\n }, [items, children]);\n\n return (\n <SelectPrimitive.Root\n items={derivedItems as SelectRootProps<Value>['items']}\n onValueChange={onValueChange ? (value, eventDetails) => onValueChange(value as Value, eventDetails) : undefined}\n {...props}\n >\n {children}\n </SelectPrimitive.Root>\n );\n}\nSelect.displayName = 'Select';\n\nconst SelectGroup = SelectPrimitive.Group;\n\nexport type SelectValueProps = Omit<SelectPrimitive.Value.Props, 'className'> & {\n className?: string;\n};\n\nconst SelectValue = React.forwardRef<HTMLSpanElement, SelectValueProps>(({ className, ...props }, ref) => (\n <SelectPrimitive.Value ref={ref} className={cn('truncate', className)} {...props} />\n));\nSelectValue.displayName = 'SelectValue';\n\nexport type SelectTriggerVariant = 'default' | 'outline' | 'ghost';\ntype SelectTriggerLegacyVariant = 'primary';\n\nexport type SelectTriggerProps = Omit<SelectPrimitive.Trigger.Props, 'className'> & {\n className?: string;\n size?: TextButtonSize;\n variant?: SelectTriggerVariant | SelectTriggerLegacyVariant;\n};\n\nfunction normalizeSelectTriggerVariant(\n variant: SelectTriggerVariant | SelectTriggerLegacyVariant,\n): SelectTriggerVariant {\n // Legacy primary stays accepted but renders with form-field emphasis.\n return variant === 'primary' ? 'default' : variant;\n}\n\nconst SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n ({ className, children, size = 'md', variant = 'default', ...props }, ref) => {\n const visualVariant = normalizeSelectTriggerVariant(variant);\n\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n className={cn(\n buttonVariants({ variant: visualVariant, size }),\n 'w-full justify-between',\n controlTriggerOpenState[visualVariant],\n 'data-[placeholder]:text-neutral3',\n '[&>span]:truncate',\n className,\n )}\n {...props}\n >\n {children}\n\n {/* Keep the chevron nested so Button's direct-SVG styles cannot distort it. */}\n <SelectPrimitive.Icon\n render={\n <span className=\"flex shrink-0 items-center\">\n <ChevronDown className={cn('size-4 opacity-60', transitions.colors)} />\n </span>\n }\n />\n </SelectPrimitive.Trigger>\n );\n },\n);\nSelectTrigger.displayName = 'SelectTrigger';\n\ntype SelectContentPositionerProps = Omit<SelectPositionerProps, keyof SelectPopupProps>;\n\nexport type SelectContentProps = Omit<SelectPopupProps, 'className'> &\n SelectContentPositionerProps & {\n className?: string;\n /** Ignored compatibility prop from Radix; use Base UI positioning props instead. */\n position?: 'popper' | 'item-aligned';\n container?: HTMLElement | null;\n };\n\nconst SelectContent = React.forwardRef<HTMLDivElement, SelectContentProps>(\n (\n {\n className,\n children,\n position: _position,\n container,\n side = 'bottom',\n align = 'start',\n sideOffset = 4,\n alignItemWithTrigger = false,\n anchor,\n positionMethod = FLOATING_POSITION_METHOD,\n alignOffset,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n ...props\n },\n ref,\n ) => {\n // Keep the popup inside the modal's interaction boundary unless a container overrides it.\n const resolvedContainer = usePortalContainer(container);\n const positionerProps: SelectContentPositionerProps = {\n side,\n align,\n sideOffset,\n alignItemWithTrigger,\n anchor,\n positionMethod,\n alignOffset,\n collisionBoundary,\n collisionPadding,\n sticky,\n arrowPadding,\n disableAnchorTracking,\n collisionAvoidance,\n };\n\n return (\n <SelectPrimitive.Portal container={resolvedContainer}>\n <SelectPrimitive.Positioner className={menuPositionerClass} {...positionerProps}>\n <SelectPrimitive.Popup ref={ref} className={cn(menuPopupClass, className)} {...props}>\n <SelectPrimitive.List>{children}</SelectPrimitive.List>\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n );\n },\n);\nSelectContent.displayName = 'SelectContent';\n\nexport type SelectItemProps = Omit<SelectPrimitive.Item.Props, 'className'> & {\n className?: string;\n};\n\nconst SelectItem = React.forwardRef<HTMLDivElement, SelectItemProps>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item ref={ref} className={cn(menuItemClass, className)} {...props}>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className={menuItemCheckClass}>\n <Check />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = 'SelectItem';\n\nexport { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectItem };\n"],"names":["SelectPrimitive"],"mappings":";;;;;;;;;;;;;AAiBA,SAAS,aAAa,IAAA,EAA+C;AACnE,EAAA,OAAO,MAAM,cAAA,CAAe,IAAI,CAAA,IAAM,IAAA,CAAK,MAAmC,WAAA,KAAgB,YAAA;AAChG;AAEA,SAAS,YAAA,CAAa,UAA2B,GAAA,EAA8D;AAC7G,EAAA,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAA,KAAA,KAAS;AACxC,IAAA,IAAI,CAAC,KAAA,CAAM,cAAA,CAAe,KAAK,CAAA,EAAG;AAClC,IAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG;AACvB,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,OAAO,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,QAAA,EAAU,CAAA;AAClE,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAU,MAAM,KAAA,EAA0C,QAAA;AAChE,IAAA,IAAI,MAAA,IAAU,IAAA,EAAM,YAAA,CAAa,MAAA,EAAQ,GAAG,CAAA;AAAA,EAC9C,CAAC,CAAA;AACH;AAUA,SAAS,OAAuB,EAAE,QAAA,EAAU,OAAO,aAAA,EAAe,GAAG,OAAM,EAAuB;AAEhG,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,MAAM;AACvC,IAAA,IAAI,KAAA,IAAS,MAAM,OAAO,KAAA;AAC1B,IAAA,MAAM,MAAyD,EAAC;AAChE,IAAA,YAAA,CAAa,UAAU,GAAG,CAAA;AAC1B,IAAA,OAAO,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,MAAA;AAAA,EAChC,CAAA,EAAG,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AAEpB,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACC,KAAA,EAAO,YAAA;AAAA,MACP,aAAA,EAAe,gBAAgB,CAAC,KAAA,EAAO,iBAAiB,aAAA,CAAc,KAAA,EAAgB,YAAY,CAAA,GAAI,MAAA;AAAA,MACrG,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;AAErB,MAAM,cAAcA,QAAA,CAAgB;AAMpC,MAAM,WAAA,GAAc,MAAM,UAAA,CAA8C,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBAChG,GAAA,CAACA,SAAgB,KAAA,EAAhB,EAAsB,KAAU,SAAA,EAAW,EAAA,CAAG,YAAY,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CACnF;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;AAW1B,SAAS,8BACP,OAAA,EACsB;AAEtB,EAAA,OAAO,OAAA,KAAY,YAAY,SAAA,GAAY,OAAA;AAC7C;AAEA,MAAM,gBAAgB,KAAA,CAAM,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,IAAA,GAAO,IAAA,EAAM,OAAA,GAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC5E,IAAA,MAAM,aAAA,GAAgB,8BAA8B,OAAO,CAAA;AAE3D,IAAA,uBACE,IAAA;AAAA,MAACA,QAAA,CAAgB,OAAA;AAAA,MAAhB;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,gBAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,cAAA,CAAe,EAAE,OAAA,EAAS,aAAA,EAAe,MAAM,CAAA;AAAA,UAC/C,wBAAA;AAAA,UACA,wBAAwB,aAAa,CAAA;AAAA,UACrC,kCAAA;AAAA,UACA,mBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,0BAGD,GAAA;AAAA,YAACA,QAAA,CAAgB,IAAA;AAAA,YAAhB;AAAA,cACC,MAAA,kBACE,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EACd,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,WAAA,CAAY,MAAM,GAAG,CAAA,EACvE;AAAA;AAAA;AAEJ;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAY5B,MAAM,gBAAgB,KAAA,CAAM,UAAA;AAAA,EAC1B,CACE;AAAA,IACE,SAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,EAAU,SAAA;AAAA,IACV,SAAA;AAAA,IACA,IAAA,GAAO,QAAA;AAAA,IACP,KAAA,GAAQ,OAAA;AAAA,IACR,UAAA,GAAa,CAAA;AAAA,IACb,oBAAA,GAAuB,KAAA;AAAA,IACvB,MAAA;AAAA,IACA,cAAA,GAAiB,wBAAA;AAAA,IACjB,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,qBAAA;AAAA,IACA,kBAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AAEH,IAAA,MAAM,iBAAA,GAAoB,mBAAmB,SAAS,CAAA;AACtD,IAAA,MAAM,eAAA,GAAgD;AAAA,MACpD,IAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA;AAAA,MACA,oBAAA;AAAA,MACA,MAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,qBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,uBACE,GAAA,CAACA,QAAA,CAAgB,MAAA,EAAhB,EAAuB,WAAW,iBAAA,EACjC,QAAA,kBAAA,GAAA,CAACA,QAAA,CAAgB,UAAA,EAAhB,EAA2B,SAAA,EAAW,mBAAA,EAAsB,GAAG,iBAC9D,QAAA,kBAAA,GAAA,CAACA,QAAA,CAAgB,KAAA,EAAhB,EAAsB,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAS,CAAA,EAAI,GAAG,KAAA,EAC7E,QAAA,kBAAA,GAAA,CAACA,SAAgB,IAAA,EAAhB,EAAsB,QAAA,EAAS,CAAA,EAClC,GACF,CAAA,EACF,CAAA;AAAA,EAEJ;AACF;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAM5B,MAAM,UAAA,GAAa,MAAM,UAAA,CAA4C,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,0BACtGA,QAAA,CAAgB,IAAA,EAAhB,EAAqB,GAAA,EAAU,SAAA,EAAW,GAAG,aAAA,EAAe,SAAS,CAAA,EAAI,GAAG,KAAA,EAC3E,QAAA,EAAA;AAAA,kBAAA,GAAA,CAACA,QAAA,CAAgB,QAAA,EAAhB,EAA0B,QAAA,EAAS,CAAA;AAAA,kBACpC,GAAA,CAACA,SAAgB,aAAA,EAAhB,EAA8B,WAAW,kBAAA,EACxC,QAAA,kBAAA,GAAA,CAAC,SAAM,CAAA,EACT;AAAA,CAAA,EACF,CACD;AACD,UAAA,CAAW,WAAA,GAAc,YAAA;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"slider-Cx_ZwlQU.js","sources":["../src/ds/components/Slider/slider.tsx"],"sourcesContent":["import { Slider as SliderPrimitive } from '@base-ui/react/slider';\nimport '@/ds/primitives/focus.css';\n\nimport { cn } from '@/lib/utils';\n\nexport type SliderProps = Omit<SliderPrimitive.Root.Props, 'onValueChange' | 'onValueCommitted'> & {\n onValueChange?: (value: number[], eventDetails: SliderPrimitive.Root.ChangeEventDetails) => void;\n onValueCommitted?: (value: number[], eventDetails: SliderPrimitive.Root.CommitEventDetails) => void;\n};\n\nfunction toArray(value: number | readonly number[]): number[] {\n if (typeof value === 'number') {\n return [value];\n }\n return [...value];\n}\n\nconst Slider = ({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n onValueChange,\n onValueCommitted,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n ...props\n}: SliderProps) => {\n const values = Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min];\n\n return (\n <SliderPrimitive.Root\n className={cn('w-full', className)}\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n thumbAlignment=\"edge\"\n onValueChange={onValueChange ? (next, details) => onValueChange(toArray(next), details) : undefined}\n onValueCommitted={onValueCommitted ? (next, details) => onValueCommitted(toArray(next), details) : undefined}\n {...props}\n >\n <SliderPrimitive.Control\n className={cn(\n 'group relative flex w-full cursor-pointer touch-none items-center select-none',\n 'data-[orientation=horizontal]:py-3',\n 'data-[orientation=vertical]:h-full data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col data-[orientation=vertical]:px-3',\n 'data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50',\n )}\n >\n <SliderPrimitive.Track\n className={cn(\n 'relative grow overflow-hidden rounded-full bg-neutral6/20 select-none',\n 'data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full',\n 'data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5',\n )}\n >\n <SliderPrimitive.Indicator\n className={cn(\n 'bg-neutral6 select-none',\n 'data-[orientation=horizontal]:h-full',\n 'data-[orientation=vertical]:w-full',\n )}\n />\n </SliderPrimitive.Track>\n {values.map((_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n index={index}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={cn(\n 'relative block h-5 w-2.5 shrink-0 rounded-full border-2 border-neutral6 bg-neutral2 outline-hidden select-none',\n 'after:absolute after:-inset-2 after:content-[\"\"]',\n 'transition-shadow duration-normal',\n 'hover:ring-2 hover:ring-neutral6/30',\n 'ds-focus ds-focus-notch ds-focus-within',\n 'data-[orientation=vertical]:h-2.5 data-[orientation=vertical]:w-5',\n 'data-[disabled]:pointer-events-none',\n )}\n />\n ))}\n </SliderPrimitive.Control>\n </SliderPrimitive.Root>\n );\n};\n\nexport { Slider };\n"],"names":["SliderPrimitive"],"mappings":";;;;;AAUA,SAAS,QAAQ,KAAA,EAA6C;AAC5D,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,CAAC,KAAK,CAAA;AAAA,EACf;AACA,EAAA,OAAO,CAAC,GAAG,KAAK,CAAA;AAClB;AAEA,MAAM,SAAS,CAAC;AAAA,EACd,SAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA,GAAM,CAAA;AAAA,EACN,GAAA,GAAM,GAAA;AAAA,EACN,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd,iBAAA,EAAmB,cAAA;AAAA,EACnB,GAAG;AACL,CAAA,KAAmB;AACjB,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GAAI,YAAA,GAAe,CAAC,GAAG,CAAA;AAE/F,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,SAAS,CAAA;AAAA,MACjC,YAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,cAAA,EAAe,MAAA;AAAA,MACf,aAAA,EAAe,aAAA,GAAgB,CAAC,IAAA,EAAM,OAAA,KAAY,cAAc,OAAA,CAAQ,IAAI,CAAA,EAAG,OAAO,CAAA,GAAI,MAAA;AAAA,MAC1F,gBAAA,EAAkB,gBAAA,GAAmB,CAAC,IAAA,EAAM,OAAA,KAAY,iBAAiB,OAAA,CAAQ,IAAI,CAAA,EAAG,OAAO,CAAA,GAAI,MAAA;AAAA,MAClG,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,IAAA;AAAA,QAACA,QAAA,CAAgB,OAAA;AAAA,QAAhB;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,+EAAA;AAAA,YACA,oCAAA;AAAA,YACA,6IAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAACA,QAAA,CAAgB,KAAA;AAAA,cAAhB;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,uEAAA;AAAA,kBACA,0EAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBAEA,QAAA,kBAAA,GAAA;AAAA,kBAACA,QAAA,CAAgB,SAAA;AAAA,kBAAhB;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,yBAAA;AAAA,sBACA,sCAAA;AAAA,sBACA;AAAA;AACF;AAAA;AACF;AAAA,aACF;AAAA,YACC,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,qBACd,GAAA;AAAA,cAACA,QAAA,CAAgB,KAAA;AAAA,cAAhB;AAAA,gBAEC,KAAA;AAAA,gBACA,YAAA,EAAY,SAAA;AAAA,gBACZ,iBAAA,EAAiB,cAAA;AAAA,gBACjB,SAAA,EAAW,EAAA;AAAA,kBACT,gHAAA;AAAA,kBACA,kDAAA;AAAA,kBACA,mCAAA;AAAA,kBACA,qCAAA;AAAA,kBACA,yCAAA;AAAA,kBACA,mEAAA;AAAA,kBACA;AAAA;AACF,eAAA;AAAA,cAZK;AAAA,aAcR;AAAA;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;;;;"}