@mastra/playground-ui 57.0.0 → 58.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (763) hide show
  1. package/README.md +25 -0
  2. package/dist/{Button-KUj0U-5I.js → Button-B8nF87ai.js} +2 -8
  3. package/dist/Button-B8nF87ai.js.map +1 -0
  4. package/dist/{Button-MMZPEb_q.cjs → Button-BAMnPqos.cjs} +1 -7
  5. package/dist/Button-BAMnPqos.cjs.map +1 -0
  6. package/dist/{Card-DwGasv0K.cjs → Card-BbwF20OW.cjs} +3 -3
  7. package/dist/Card-BbwF20OW.cjs.map +1 -0
  8. package/dist/{Card-B_buJ5yF.js → Card-DmT57Pve.js} +3 -3
  9. package/dist/Card-DmT57Pve.js.map +1 -0
  10. package/dist/{EmptyState-DiSP6UIy.cjs → EmptyState-2XQgeju6.cjs} +12 -3
  11. package/dist/EmptyState-2XQgeju6.cjs.map +1 -0
  12. package/dist/{EmptyState-B6cyZw6m.js → EmptyState-Bc4nJ9QH.js} +13 -4
  13. package/dist/EmptyState-Bc4nJ9QH.js.map +1 -0
  14. package/dist/{Notice-CPyYcX5J.cjs → Notice-AUNd8fqT.cjs} +2 -2
  15. package/dist/{Notice-CPyYcX5J.cjs.map → Notice-AUNd8fqT.cjs.map} +1 -1
  16. package/dist/{Notice-KC18b8Nd.js → Notice-WT8G4OA6.js} +2 -2
  17. package/dist/{Notice-KC18b8Nd.js.map → Notice-WT8G4OA6.js.map} +1 -1
  18. package/dist/{ask-user-DaRRR4qQ.cjs → ask-user-BPpgiE7k.cjs} +3 -3
  19. package/dist/{ask-user-DaRRR4qQ.cjs.map → ask-user-BPpgiE7k.cjs.map} +1 -1
  20. package/dist/{ask-user-C4DTzEQF.js → ask-user-jDUt7hgT.js} +3 -3
  21. package/dist/{ask-user-C4DTzEQF.js.map → ask-user-jDUt7hgT.js.map} +1 -1
  22. package/dist/buttons-group.css +2 -14
  23. package/dist/{chat-notification-DeKD1Ifx.js → chat-notification-CmdRGO_D.js} +2 -2
  24. package/dist/{chat-notification-DeKD1Ifx.js.map → chat-notification-CmdRGO_D.js.map} +1 -1
  25. package/dist/{chat-notification-C5Ox5tuS.cjs → chat-notification-DJykWtoj.cjs} +2 -2
  26. package/dist/{chat-notification-C5Ox5tuS.cjs.map → chat-notification-DJykWtoj.cjs.map} +1 -1
  27. package/dist/{chat-signal-DiAHks6_.js → chat-signal-Vg8pGXwH.js} +2 -2
  28. package/dist/{chat-signal-DiAHks6_.js.map → chat-signal-Vg8pGXwH.js.map} +1 -1
  29. package/dist/{chat-signal-ClyJeml8.cjs → chat-signal-xs3FkPts.cjs} +2 -2
  30. package/dist/{chat-signal-ClyJeml8.cjs.map → chat-signal-xs3FkPts.cjs.map} +1 -1
  31. package/dist/{code-block-D37olB3O.js → code-block-BD2N5Yi2.js} +5 -5
  32. package/dist/{code-block-D37olB3O.js.map → code-block-BD2N5Yi2.js.map} +1 -1
  33. package/dist/{code-block-BoTq0TMr.cjs → code-block-fI67m2KV.cjs} +5 -5
  34. package/dist/{code-block-BoTq0TMr.cjs.map → code-block-fI67m2KV.cjs.map} +1 -1
  35. package/dist/{code-editor-BQTDma1I.js → code-editor-C-0srcj0.js} +4 -3
  36. package/dist/code-editor-C-0srcj0.js.map +1 -0
  37. package/dist/{code-editor-BfoJXq9l.cjs → code-editor-CFu_BYpQ.cjs} +4 -3
  38. package/dist/code-editor-CFu_BYpQ.cjs.map +1 -0
  39. package/dist/{combobox-Bn_uyUSB.cjs → combobox-BoSB-muq.cjs} +17 -9
  40. package/dist/combobox-BoSB-muq.cjs.map +1 -0
  41. package/dist/{combobox-Cykfy5wc.js → combobox-Cd0JPUQW.js} +17 -9
  42. package/dist/combobox-Cd0JPUQW.js.map +1 -0
  43. package/dist/{combobox-styles-iuJUkJEQ.js → combobox-styles-BhUqhOvz.js} +4 -2
  44. package/dist/combobox-styles-BhUqhOvz.js.map +1 -0
  45. package/dist/{combobox-styles-CSsS2LEx.cjs → combobox-styles-LHrC0tU0.cjs} +4 -2
  46. package/dist/combobox-styles-LHrC0tU0.cjs.map +1 -0
  47. package/dist/{command-B7H-emho.cjs → command-AVQzLcYR.cjs} +2 -2
  48. package/dist/{command-B7H-emho.cjs.map → command-AVQzLcYR.cjs.map} +1 -1
  49. package/dist/{command-Bmy4PznC.js → command-DhiJvyMM.js} +2 -2
  50. package/dist/{command-Bmy4PznC.js.map → command-DhiJvyMM.js.map} +1 -1
  51. package/dist/components/AlertDialog.cjs.js +2 -2
  52. package/dist/components/AlertDialog.cjs.js.map +1 -1
  53. package/dist/components/AlertDialog.es.js +3 -3
  54. package/dist/components/AlertDialog.es.js.map +1 -1
  55. package/dist/components/Button.cjs.js +1 -1
  56. package/dist/components/Button.es.js +2 -2
  57. package/dist/components/Card.cjs.js +1 -1
  58. package/dist/components/Card.es.js +1 -1
  59. package/dist/components/ClampedText.cjs.js +1 -1
  60. package/dist/components/ClampedText.es.js +1 -1
  61. package/dist/components/CodeBlock.cjs.js +1 -1
  62. package/dist/components/CodeBlock.es.js +1 -1
  63. package/dist/components/CodeEditor.cjs.js +1 -1
  64. package/dist/components/CodeEditor.es.js +1 -1
  65. package/dist/components/Columns.cjs.js +2 -106
  66. package/dist/components/Columns.cjs.js.map +1 -1
  67. package/dist/components/Columns.es.js +4 -107
  68. package/dist/components/Columns.es.js.map +1 -1
  69. package/dist/components/Combobox.cjs.js +2 -2
  70. package/dist/components/Combobox.es.js +2 -2
  71. package/dist/components/Command.cjs.js +1 -1
  72. package/dist/components/Command.es.js +1 -1
  73. package/dist/components/CommandPalette.cjs.js +1 -1
  74. package/dist/components/CommandPalette.es.js +1 -1
  75. package/dist/components/Comment.cjs.js +3 -3
  76. package/dist/components/Comment.cjs.js.map +1 -1
  77. package/dist/components/Comment.es.js +3 -3
  78. package/dist/components/Comment.es.js.map +1 -1
  79. package/dist/components/CopyButton.cjs.js +1 -1
  80. package/dist/components/CopyButton.es.js +1 -1
  81. package/dist/components/DataCodeSection.cjs.js +1 -1
  82. package/dist/components/DataCodeSection.es.js +1 -1
  83. package/dist/components/DataDetailsPanel.cjs.js +2 -2
  84. package/dist/components/DataDetailsPanel.es.js +2 -2
  85. package/dist/components/DataKeysAndValues.cjs.js +1 -1
  86. package/dist/components/DataKeysAndValues.es.js +1 -1
  87. package/dist/components/DataList.cjs.js +3 -3
  88. package/dist/components/DataList.es.js +3 -3
  89. package/dist/components/DataPanel.cjs.js +1 -1
  90. package/dist/components/DataPanel.es.js +1 -1
  91. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  92. package/dist/components/DateRangeTimeline.es.js +1 -1
  93. package/dist/components/DateTimePicker.cjs.js +10 -4
  94. package/dist/components/DateTimePicker.cjs.js.map +1 -1
  95. package/dist/components/DateTimePicker.es.js +10 -4
  96. package/dist/components/DateTimePicker.es.js.map +1 -1
  97. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  98. package/dist/components/DateTimeRangePicker.es.js +1 -1
  99. package/dist/components/Dialog.cjs.js +2 -2
  100. package/dist/components/Dialog.es.js +3 -3
  101. package/dist/components/DisabledFeatureButton.cjs.js +1 -1
  102. package/dist/components/DisabledFeatureButton.es.js +1 -1
  103. package/dist/components/Drawer.cjs.js +1 -1
  104. package/dist/components/Drawer.es.js +1 -1
  105. package/dist/components/EmptyState.cjs.js +1 -1
  106. package/dist/components/EmptyState.es.js +1 -1
  107. package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
  108. package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
  109. package/dist/components/ErrorBoundary.cjs.js +1 -1
  110. package/dist/components/ErrorBoundary.es.js +1 -1
  111. package/dist/components/FilterBar.cjs.js +3 -3
  112. package/dist/components/FilterBar.es.js +4 -4
  113. package/dist/components/FormFieldBlocks.cjs.js +4 -4
  114. package/dist/components/FormFieldBlocks.es.js +4 -4
  115. package/dist/components/Input.cjs.js +1 -1
  116. package/dist/components/Input.es.js +1 -1
  117. package/dist/components/InputGroup.cjs.js +1 -1
  118. package/dist/components/InputGroup.es.js +1 -1
  119. package/dist/components/JSONSchemaForm.cjs.js +3 -3
  120. package/dist/components/JSONSchemaForm.es.js +3 -3
  121. package/dist/components/ListSearch.cjs.js +1 -1
  122. package/dist/components/ListSearch.es.js +1 -1
  123. package/dist/components/LogsDataList.cjs.js +1 -3
  124. package/dist/components/LogsDataList.cjs.js.map +1 -1
  125. package/dist/components/LogsDataList.es.js +1 -3
  126. package/dist/components/LogsDataList.es.js.map +1 -1
  127. package/dist/components/MainSidebar.cjs.js +125 -11
  128. package/dist/components/MainSidebar.cjs.js.map +1 -1
  129. package/dist/components/MainSidebar.es.js +120 -1
  130. package/dist/components/MainSidebar.es.js.map +1 -1
  131. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  132. package/dist/components/MarkdownRenderer.es.js +1 -1
  133. package/dist/components/Message.cjs.js +1 -1
  134. package/dist/components/Message.es.js +1 -1
  135. package/dist/components/MetricsCard.cjs.js +1 -1
  136. package/dist/components/MetricsCard.es.js +1 -1
  137. package/dist/components/MetricsKpiCard.cjs.js +1 -1
  138. package/dist/components/MetricsKpiCard.es.js +1 -1
  139. package/dist/components/Notice.cjs.js +1 -1
  140. package/dist/components/Notice.es.js +1 -1
  141. package/dist/components/PageHeader.cjs.js +1 -1
  142. package/dist/components/PageHeader.es.js +1 -1
  143. package/dist/components/PageLayout.cjs.js +26 -3
  144. package/dist/components/PageLayout.cjs.js.map +1 -1
  145. package/dist/components/PageLayout.es.js +27 -4
  146. package/dist/components/PageLayout.es.js.map +1 -1
  147. package/dist/components/PrevNextNav.cjs.js +1 -1
  148. package/dist/components/PrevNextNav.es.js +1 -1
  149. package/dist/components/PropertyFilter.cjs.js +5 -5
  150. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  151. package/dist/components/PropertyFilter.es.js +6 -6
  152. package/dist/components/PropertyFilter.es.js.map +1 -1
  153. package/dist/components/RuleBuilder.cjs.js +3 -3
  154. package/dist/components/RuleBuilder.es.js +3 -3
  155. package/dist/components/Select.cjs.js +1 -1
  156. package/dist/components/Select.es.js +1 -1
  157. package/dist/components/SideDialog.cjs.js +3 -3
  158. package/dist/components/SideDialog.es.js +3 -3
  159. package/dist/components/Tabs.cjs.js +3 -3
  160. package/dist/components/Tabs.es.js +3 -3
  161. package/dist/components/Textarea.cjs.js +1 -1
  162. package/dist/components/Textarea.es.js +1 -1
  163. package/dist/components/ThreadList.cjs.js +1 -1
  164. package/dist/components/ThreadList.es.js +1 -1
  165. package/dist/components/Truncate.cjs.js +1 -1
  166. package/dist/components/Truncate.es.js +1 -1
  167. package/dist/components/Workflow.cjs.js +4 -4
  168. package/dist/components/Workflow.es.js +4 -4
  169. package/dist/components/ai/ask-user.cjs.js +1 -1
  170. package/dist/components/ai/ask-user.es.js +1 -1
  171. package/dist/components/ai/chat-event.cjs.js +3 -3
  172. package/dist/components/ai/chat-event.es.js +4 -4
  173. package/dist/components/ai/plan.cjs.js +2 -2
  174. package/dist/components/ai/plan.es.js +2 -2
  175. package/dist/components/ai/tool-approval.cjs.js +1 -1
  176. package/dist/components/ai/tool-approval.es.js +1 -1
  177. package/dist/components/ai/tool-call.cjs.js +2 -2
  178. package/dist/components/ai/tool-call.es.js +3 -3
  179. package/dist/{copy-button-B5ZCtnTb.cjs → copy-button-D2MTGxq_.cjs} +2 -2
  180. package/dist/{copy-button-B5ZCtnTb.cjs.map → copy-button-D2MTGxq_.cjs.map} +1 -1
  181. package/dist/{copy-button-DZqxEuiE.js → copy-button-DcZ1mdw4.js} +2 -2
  182. package/dist/{copy-button-DZqxEuiE.js.map → copy-button-DcZ1mdw4.js.map} +1 -1
  183. package/dist/{data-code-section-DJRr65hS.js → data-code-section-C75shCII.js} +5 -5
  184. package/dist/{data-code-section-DJRr65hS.js.map → data-code-section-C75shCII.js.map} +1 -1
  185. package/dist/{data-code-section-iXzoOYMX.cjs → data-code-section-DzLc9O0B.cjs} +5 -5
  186. package/dist/{data-code-section-iXzoOYMX.cjs.map → data-code-section-DzLc9O0B.cjs.map} +1 -1
  187. package/dist/{data-keys-and-values-DhC4U4Yl.js → data-keys-and-values-BTYDB-K2.js} +3 -20
  188. package/dist/data-keys-and-values-BTYDB-K2.js.map +1 -0
  189. package/dist/{data-keys-and-values-BduKvvC5.cjs → data-keys-and-values-CMJ9zHKm.cjs} +3 -20
  190. package/dist/data-keys-and-values-CMJ9zHKm.cjs.map +1 -0
  191. package/dist/{data-list-DSbuTWLI.cjs → data-list-CH3HAhK5.cjs} +5 -5
  192. package/dist/data-list-CH3HAhK5.cjs.map +1 -0
  193. package/dist/{data-list-Cn0Ls4l2.js → data-list-DXjH5wkB.js} +5 -5
  194. package/dist/data-list-DXjH5wkB.js.map +1 -0
  195. package/dist/{data-list-spacer-C0YimRXC.js → data-list-spacer-BQ4_YeyT.js} +2 -2
  196. package/dist/{data-list-spacer-C0YimRXC.js.map → data-list-spacer-BQ4_YeyT.js.map} +1 -1
  197. package/dist/{data-list-spacer-DUBpzv_H.cjs → data-list-spacer-GIVW2hB1.cjs} +2 -2
  198. package/dist/{data-list-spacer-DUBpzv_H.cjs.map → data-list-spacer-GIVW2hB1.cjs.map} +1 -1
  199. package/dist/{data-panel-Bd_Xsz-W.cjs → data-panel-CIu6JToM.cjs} +3 -3
  200. package/dist/{data-panel-Bd_Xsz-W.cjs.map → data-panel-CIu6JToM.cjs.map} +1 -1
  201. package/dist/{data-panel-Y7wD0xlR.js → data-panel-CPZ2GuZN.js} +3 -3
  202. package/dist/{data-panel-Y7wD0xlR.js.map → data-panel-CPZ2GuZN.js.map} +1 -1
  203. package/dist/{date-time-range-picker-D2g3RU5B.cjs → date-time-range-picker-BCzvSYx3.cjs} +3 -3
  204. package/dist/{date-time-range-picker-D2g3RU5B.cjs.map → date-time-range-picker-BCzvSYx3.cjs.map} +1 -1
  205. package/dist/{date-time-range-picker-Cb86jLFc.js → date-time-range-picker-C-t3Kdpk.js} +3 -3
  206. package/dist/{date-time-range-picker-Cb86jLFc.js.map → date-time-range-picker-C-t3Kdpk.js.map} +1 -1
  207. package/dist/{dialog-DMOXPT0N.js → dialog-Dtfe1ylw.js} +5 -5
  208. package/dist/dialog-Dtfe1ylw.js.map +1 -0
  209. package/dist/{dialog-Bilo4jEU.cjs → dialog-Vvcjm0rZ.cjs} +4 -4
  210. package/dist/dialog-Vvcjm0rZ.cjs.map +1 -0
  211. package/dist/domains/auth/components/permission-denied.cjs.js +22 -0
  212. package/dist/domains/auth/components/permission-denied.cjs.js.map +1 -0
  213. package/dist/domains/auth/components/permission-denied.d.ts +2 -0
  214. package/dist/domains/auth/components/permission-denied.es.js +18 -0
  215. package/dist/domains/auth/components/permission-denied.es.js.map +1 -0
  216. package/dist/domains/auth/components/session-expired.cjs.js +40 -0
  217. package/dist/domains/auth/components/session-expired.cjs.js.map +1 -0
  218. package/dist/domains/auth/components/session-expired.d.ts +2 -0
  219. package/dist/domains/auth/components/session-expired.es.js +36 -0
  220. package/dist/domains/auth/components/session-expired.es.js.map +1 -0
  221. package/dist/domains/auth/services/sso-login.cjs.js +28 -0
  222. package/dist/domains/auth/services/sso-login.cjs.js.map +1 -0
  223. package/dist/domains/auth/services/sso-login.d.ts +2 -0
  224. package/dist/domains/auth/services/sso-login.es.js +24 -0
  225. package/dist/domains/auth/services/sso-login.es.js.map +1 -0
  226. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -3
  227. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js.map +1 -1
  228. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -3
  229. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js.map +1 -1
  230. package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -2
  231. package/dist/domains/chat/attachments/composer-attachment.cjs.js.map +1 -1
  232. package/dist/domains/chat/attachments/composer-attachment.es.js +1 -2
  233. package/dist/domains/chat/attachments/composer-attachment.es.js.map +1 -1
  234. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  235. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  236. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
  237. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
  238. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  239. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  240. package/dist/domains/chat/messages/reasoning.cjs.js +1 -1
  241. package/dist/domains/chat/messages/reasoning.es.js +1 -1
  242. package/dist/domains/chat/messages/renderers/message-text.cjs.js +2 -2
  243. package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
  244. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
  245. package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
  246. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  247. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  248. package/dist/domains/chat/messages/tripwire-notice.cjs.js +1 -1
  249. package/dist/domains/chat/messages/tripwire-notice.es.js +1 -1
  250. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  251. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  252. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
  253. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
  254. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
  255. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
  256. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  257. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  258. package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +1 -1
  259. package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +1 -1
  260. package/dist/domains/logs/components/log-details-view.cjs.js +2 -2
  261. package/dist/domains/logs/components/log-details-view.es.js +2 -2
  262. package/dist/domains/logs/components/logs-error-content.cjs.js +6 -7
  263. package/dist/domains/logs/components/logs-error-content.cjs.js.map +1 -1
  264. package/dist/domains/logs/components/logs-error-content.es.js +4 -5
  265. package/dist/domains/logs/components/logs-error-content.es.js.map +1 -1
  266. package/dist/domains/logs/components/logs-list-view.cjs.js +1 -1
  267. package/dist/domains/logs/components/logs-list-view.es.js +1 -1
  268. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  269. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  270. package/dist/domains/logs/components/no-logs-info.cjs.js +2 -2
  271. package/dist/domains/logs/components/no-logs-info.es.js +2 -2
  272. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  273. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  274. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  275. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  276. package/dist/domains/memory/components/observation-detail-view.cjs.js +1 -1
  277. package/dist/domains/memory/components/observation-detail-view.es.js +1 -1
  278. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  279. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  280. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  281. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  282. package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
  283. package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
  284. package/dist/domains/metrics/components/latency-card-view.cjs.js +4 -4
  285. package/dist/domains/metrics/components/latency-card-view.es.js +4 -4
  286. package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -5
  287. package/dist/domains/metrics/components/memory-card-view.es.js +5 -5
  288. package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
  289. package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
  290. package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -5
  291. package/dist/domains/metrics/components/scores-card-view.es.js +5 -5
  292. package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +4 -4
  293. package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +4 -4
  294. package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +4 -4
  295. package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +4 -4
  296. package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +4 -4
  297. package/dist/domains/metrics/components/traces-volume-card-view.es.js +4 -4
  298. package/dist/domains/traces/components/no-traces-info.cjs.js +1 -1
  299. package/dist/domains/traces/components/no-traces-info.es.js +1 -1
  300. package/dist/domains/traces/components/span-data-panel-view.cjs.js +19 -8
  301. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  302. package/dist/domains/traces/components/span-data-panel-view.es.js +20 -9
  303. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  304. package/dist/domains/traces/components/span-details-view.cjs.js +5 -3
  305. package/dist/domains/traces/components/span-details-view.cjs.js.map +1 -1
  306. package/dist/domains/traces/components/span-details-view.es.js +6 -4
  307. package/dist/domains/traces/components/span-details-view.es.js.map +1 -1
  308. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +3 -3
  309. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +3 -3
  310. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +5 -3
  311. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js.map +1 -1
  312. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +5 -3
  313. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js.map +1 -1
  314. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +13 -12
  315. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
  316. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +7 -6
  317. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
  318. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
  319. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
  320. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
  321. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  322. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +79 -0
  323. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js.map +1 -0
  324. package/dist/domains/traces/components/span-payload/span-payload-processor.d.ts +2 -0
  325. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +75 -0
  326. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js.map +1 -0
  327. package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js +2 -0
  328. package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js.map +1 -1
  329. package/dist/domains/traces/components/span-payload/span-payload-registry.es.js +2 -1
  330. package/dist/domains/traces/components/span-payload/span-payload-registry.es.js.map +1 -1
  331. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +2 -2
  332. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +2 -2
  333. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
  334. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
  335. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +85 -0
  336. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js.map +1 -0
  337. package/dist/domains/traces/components/span-payload/span-processor-attributes.d.ts +2 -0
  338. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +81 -0
  339. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js.map +1 -0
  340. package/dist/domains/traces/components/span-payload.cjs.js +4 -0
  341. package/dist/domains/traces/components/span-payload.cjs.js.map +1 -1
  342. package/dist/domains/traces/components/span-payload.es.js +2 -0
  343. package/dist/domains/traces/components/span-payload.es.js.map +1 -1
  344. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  345. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  346. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +1 -1
  347. package/dist/domains/traces/components/span-timing-hover-card.es.js +1 -1
  348. package/dist/domains/traces/components/span-token-usage.cjs.js +1 -1
  349. package/dist/domains/traces/components/span-token-usage.es.js +1 -1
  350. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  351. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  352. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +4 -4
  353. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +4 -4
  354. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
  355. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
  356. package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
  357. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  358. package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
  359. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  360. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +12 -16
  361. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  362. package/dist/domains/traces/components/trace-data-panel-view.es.js +12 -16
  363. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  364. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  365. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  366. package/dist/domains/traces/components/trace-summary-description.cjs.js +8 -1
  367. package/dist/domains/traces/components/trace-summary-description.cjs.js.map +1 -1
  368. package/dist/domains/traces/components/trace-summary-description.es.js +8 -1
  369. package/dist/domains/traces/components/trace-summary-description.es.js.map +1 -1
  370. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  371. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  372. package/dist/domains/traces/components/traces-error-content.cjs.js +6 -6
  373. package/dist/domains/traces/components/traces-error-content.cjs.js.map +1 -1
  374. package/dist/domains/traces/components/traces-error-content.es.js +4 -4
  375. package/dist/domains/traces/components/traces-error-content.es.js.map +1 -1
  376. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  377. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  378. package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
  379. package/dist/domains/traces/components/traces-list-view.es.js +2 -2
  380. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +0 -2
  381. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  382. package/dist/domains/traces/components/traces-page-skeleton.es.js +0 -2
  383. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  384. package/dist/domains/traces/components.cjs.js +4 -2
  385. package/dist/domains/traces/components.cjs.js.map +1 -1
  386. package/dist/domains/traces/components.es.js +2 -1
  387. package/dist/domains/traces/components.es.js.map +1 -1
  388. package/dist/domains/traces.cjs.js +4 -2
  389. package/dist/domains/traces.cjs.js.map +1 -1
  390. package/dist/domains/traces.es.js +2 -1
  391. package/dist/domains/traces.es.js.map +1 -1
  392. package/dist/{drawer-CnCsgToD.js → drawer-DZnqDb9H.js} +4 -4
  393. package/dist/drawer-DZnqDb9H.js.map +1 -0
  394. package/dist/{drawer-B6Ftum77.cjs → drawer-DpldATv1.cjs} +3 -3
  395. package/dist/drawer-DpldATv1.cjs.map +1 -0
  396. package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
  397. package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
  398. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -3
  399. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  400. package/dist/ee/signals/components/entity-index-list.es.js +1 -3
  401. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  402. package/dist/ee/signals/components/signals-empty-state.cjs.js +2 -3
  403. package/dist/ee/signals/components/signals-empty-state.cjs.js.map +1 -1
  404. package/dist/ee/signals/components/signals-empty-state.es.js +2 -3
  405. package/dist/ee/signals/components/signals-empty-state.es.js.map +1 -1
  406. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +1 -1
  407. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +1 -1
  408. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +11 -13
  409. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  410. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +9 -11
  411. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  412. package/dist/ee/signals/examples-pager.cjs.js +1 -3
  413. package/dist/ee/signals/examples-pager.cjs.js.map +1 -1
  414. package/dist/ee/signals/examples-pager.es.js +1 -3
  415. package/dist/ee/signals/examples-pager.es.js.map +1 -1
  416. package/dist/ee/signals/flow-card.cjs.js +1 -1
  417. package/dist/ee/signals/flow-card.es.js +1 -1
  418. package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
  419. package/dist/ee/signals/noise-detail-panel.es.js +1 -1
  420. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  421. package/dist/ee/signals/sankey-signals.es.js +1 -1
  422. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +5 -5
  423. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +5 -5
  424. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +2 -2
  425. package/dist/ee/signals/settings/trace-signal-settings.es.js +2 -2
  426. package/dist/ee/signals/signals-error-state.cjs.js +2 -2
  427. package/dist/ee/signals/signals-error-state.cjs.js.map +1 -1
  428. package/dist/ee/signals/signals-error-state.es.js +2 -2
  429. package/dist/ee/signals/signals-error-state.es.js.map +1 -1
  430. package/dist/ee/signals/snapshot-timeline.cjs.js +1 -2
  431. package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -1
  432. package/dist/ee/signals/snapshot-timeline.es.js +1 -2
  433. package/dist/ee/signals/snapshot-timeline.es.js.map +1 -1
  434. package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
  435. package/dist/ee/signals/theme-detail-panel.es.js +1 -1
  436. package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
  437. package/dist/ee/signals/theme-filter-banner.es.js +1 -1
  438. package/dist/ee/signals/trace-insight-view.cjs.js +3 -12
  439. package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -1
  440. package/dist/ee/signals/trace-insight-view.es.js +3 -12
  441. package/dist/ee/signals/trace-insight-view.es.js.map +1 -1
  442. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  443. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  444. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +10 -19
  445. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js.map +1 -1
  446. package/dist/ee/topics/components/topic-trace-summary-list.es.js +10 -19
  447. package/dist/ee/topics/components/topic-trace-summary-list.es.js.map +1 -1
  448. package/dist/{filter-bar-chip-BlvuAPve.js → filter-bar-chip-7X4Aw_WH.js} +3 -3
  449. package/dist/{filter-bar-chip-BlvuAPve.js.map → filter-bar-chip-7X4Aw_WH.js.map} +1 -1
  450. package/dist/{filter-bar-chip-B_k_vbip.cjs → filter-bar-chip-BdZHI76J.cjs} +3 -3
  451. package/dist/{filter-bar-chip-B_k_vbip.cjs.map → filter-bar-chip-BdZHI76J.cjs.map} +1 -1
  452. package/dist/hooks/use-fluid-hover.cjs.js +2 -4
  453. package/dist/hooks/use-fluid-hover.cjs.js.map +1 -1
  454. package/dist/hooks/use-fluid-hover.es.js +2 -4
  455. package/dist/hooks/use-fluid-hover.es.js.map +1 -1
  456. package/dist/{input-B1RysHyq.js → input-CHghVv3k.js} +3 -3
  457. package/dist/input-CHghVv3k.js.map +1 -0
  458. package/dist/{input-CDLMprJS.cjs → input-bd223EJW.cjs} +2 -2
  459. package/dist/input-bd223EJW.cjs.map +1 -0
  460. package/dist/{input-group-DaIV9Orp.cjs → input-group-BfnJ0RIj.cjs} +3 -3
  461. package/dist/input-group-BfnJ0RIj.cjs.map +1 -0
  462. package/dist/{input-group-B-pskRGt.js → input-group-Jt7lZsN9.js} +4 -4
  463. package/dist/input-group-Jt7lZsN9.js.map +1 -0
  464. package/dist/layout/tabbed-container.cjs.js +6 -6
  465. package/dist/layout/tabbed-container.es.js +6 -6
  466. package/dist/{list-search-DK2yMiME.js → list-search-FJ1O5F3S.js} +2 -2
  467. package/dist/{list-search-DK2yMiME.js.map → list-search-FJ1O5F3S.js.map} +1 -1
  468. package/dist/{list-search-DhReauU5.cjs → list-search-S1mco9Bl.cjs} +2 -2
  469. package/dist/{list-search-DhReauU5.cjs.map → list-search-S1mco9Bl.cjs.map} +1 -1
  470. package/dist/{logs-data-list-DgoCLb6k.cjs → logs-data-list-BGJTRyO_.cjs} +2 -2
  471. package/dist/{logs-data-list-DgoCLb6k.cjs.map → logs-data-list-BGJTRyO_.cjs.map} +1 -1
  472. package/dist/{logs-data-list-B24gfDle.js → logs-data-list-XU1hCwI5.js} +2 -2
  473. package/dist/{logs-data-list-B24gfDle.js.map → logs-data-list-XU1hCwI5.js.map} +1 -1
  474. package/dist/{main-sidebar-Cf5G9iaC.js → main-sidebar-link-active-C9QPj3D6.js} +7 -119
  475. package/dist/main-sidebar-link-active-C9QPj3D6.js.map +1 -0
  476. package/dist/{main-sidebar-DYfRxFn4.cjs → main-sidebar-link-active-UEuukSeT.cjs} +5 -118
  477. package/dist/main-sidebar-link-active-UEuukSeT.cjs.map +1 -0
  478. package/dist/{markdown-renderer-BUqHHH4y.js → markdown-renderer-BBYgxsXL.js} +3 -3
  479. package/dist/{markdown-renderer-BUqHHH4y.js.map → markdown-renderer-BBYgxsXL.js.map} +1 -1
  480. package/dist/{markdown-renderer-CZLwgva-.cjs → markdown-renderer-Du_Zd1T-.cjs} +3 -3
  481. package/dist/{markdown-renderer-CZLwgva-.cjs.map → markdown-renderer-Du_Zd1T-.cjs.map} +1 -1
  482. package/dist/{metrics-card-CN4VRQQJ.js → metrics-card-Bzm6m1dy.js} +3 -3
  483. package/dist/{metrics-card-CN4VRQQJ.js.map → metrics-card-Bzm6m1dy.js.map} +1 -1
  484. package/dist/{metrics-card-DStXI6yn.cjs → metrics-card-DCCHIG-z.cjs} +3 -3
  485. package/dist/{metrics-card-DStXI6yn.cjs.map → metrics-card-DCCHIG-z.cjs.map} +1 -1
  486. package/dist/{metrics-kpi-card-CvOXyEGn.cjs → metrics-kpi-card-Bhb4R4z0.cjs} +2 -2
  487. package/dist/{metrics-kpi-card-CvOXyEGn.cjs.map → metrics-kpi-card-Bhb4R4z0.cjs.map} +1 -1
  488. package/dist/{metrics-kpi-card-C-XLN_Us.js → metrics-kpi-card-BrnFhFQm.js} +2 -2
  489. package/dist/{metrics-kpi-card-C-XLN_Us.js.map → metrics-kpi-card-BrnFhFQm.js.map} +1 -1
  490. package/dist/new/layout/app-shell.cjs.js +13 -0
  491. package/dist/new/layout/app-shell.cjs.js.map +1 -1
  492. package/dist/new/layout/app-shell.es.js +13 -1
  493. package/dist/new/layout/app-shell.es.js.map +1 -1
  494. package/dist/new/layout/page-header.cjs.js +1 -1
  495. package/dist/new/layout/page-header.es.js +1 -1
  496. package/dist/new/settings.cjs.js +42 -2
  497. package/dist/new/settings.cjs.js.map +1 -1
  498. package/dist/new/settings.es.js +43 -3
  499. package/dist/new/settings.es.js.map +1 -1
  500. package/dist/new/sidebar.cjs.js +33 -33
  501. package/dist/new/sidebar.cjs.js.map +1 -1
  502. package/dist/new/sidebar.es.js +3 -3
  503. package/dist/new/sidebar.es.js.map +1 -1
  504. package/dist/{page-header-CSigVThQ.js → page-header-CyXAezlZ.js} +25 -26
  505. package/dist/page-header-CyXAezlZ.js.map +1 -0
  506. package/dist/{page-header-DzEEkOca.cjs → page-header-Dk3s3XtC.cjs} +25 -26
  507. package/dist/page-header-Dk3s3XtC.cjs.map +1 -0
  508. package/dist/primitives/control-size.cjs.js +1 -2
  509. package/dist/primitives/control-size.cjs.js.map +1 -1
  510. package/dist/primitives/control-size.es.js +1 -2
  511. package/dist/primitives/control-size.es.js.map +1 -1
  512. package/dist/primitives/form-element.cjs.js +10 -5
  513. package/dist/primitives/form-element.cjs.js.map +1 -1
  514. package/dist/primitives/form-element.es.js +8 -5
  515. package/dist/primitives/form-element.es.js.map +1 -1
  516. package/dist/primitives/menu-item.cjs.js +1 -1
  517. package/dist/primitives/menu-item.cjs.js.map +1 -1
  518. package/dist/primitives/menu-item.es.js +1 -1
  519. package/dist/primitives/menu-item.es.js.map +1 -1
  520. package/dist/primitives/raised-surface.cjs.js +8 -3
  521. package/dist/primitives/raised-surface.cjs.js.map +1 -1
  522. package/dist/primitives/raised-surface.es.js +8 -4
  523. package/dist/primitives/raised-surface.es.js.map +1 -1
  524. package/dist/primitives/trigger-button.cjs.js +1 -1
  525. package/dist/primitives/trigger-button.es.js +1 -1
  526. package/dist/{property-filter-applied-uYr-sCdm.js → property-filter-applied-CYDiZtR7.js} +3 -3
  527. package/dist/{property-filter-applied-uYr-sCdm.js.map → property-filter-applied-CYDiZtR7.js.map} +1 -1
  528. package/dist/{property-filter-applied-DxSZN3Om.cjs → property-filter-applied-F6cN2lrX.cjs} +3 -3
  529. package/dist/{property-filter-applied-DxSZN3Om.cjs.map → property-filter-applied-F6cN2lrX.cjs.map} +1 -1
  530. package/dist/resize/panel-drawer.cjs.js +1 -1
  531. package/dist/resize/panel-drawer.es.js +1 -1
  532. package/dist/{search-field-block-Bg9GPPaA.cjs → search-field-block-7-ufp4uG.cjs} +3 -3
  533. package/dist/{search-field-block-Bg9GPPaA.cjs.map → search-field-block-7-ufp4uG.cjs.map} +1 -1
  534. package/dist/{search-field-block-B0twxGWI.js → search-field-block-fU3tStmB.js} +3 -3
  535. package/dist/{search-field-block-B0twxGWI.js.map → search-field-block-fU3tStmB.js.map} +1 -1
  536. package/dist/{select-65j5NjtJ.cjs → select-BByMAS0L.cjs} +4 -2
  537. package/dist/select-BByMAS0L.cjs.map +1 -0
  538. package/dist/{select-BiY-SoMJ.js → select-Dkmx3L5p.js} +4 -2
  539. package/dist/select-Dkmx3L5p.js.map +1 -0
  540. package/dist/{select-field-block-D_b9N7od.js → select-field-block-BfiHq9t6.js} +2 -2
  541. package/dist/{select-field-block-D_b9N7od.js.map → select-field-block-BfiHq9t6.js.map} +1 -1
  542. package/dist/{select-field-block-CZbN1w__.cjs → select-field-block-DJo2cX9Y.cjs} +2 -2
  543. package/dist/{select-field-block-CZbN1w__.cjs.map → select-field-block-DJo2cX9Y.cjs.map} +1 -1
  544. package/dist/{span-payload-primitives-DlIOpCII.js → span-payload-primitives-CzLh6axt.js} +3 -3
  545. package/dist/{span-payload-primitives-DlIOpCII.js.map → span-payload-primitives-CzLh6axt.js.map} +1 -1
  546. package/dist/{span-payload-primitives-BjBTICfq.cjs → span-payload-primitives-KEXwIaeZ.cjs} +3 -3
  547. package/dist/{span-payload-primitives-BjBTICfq.cjs.map → span-payload-primitives-KEXwIaeZ.cjs.map} +1 -1
  548. package/dist/src/domains/auth/components/permission-denied.d.ts +6 -0
  549. package/dist/src/{ds/components/PermissionDenied → domains/auth/components}/permission-denied.stories.d.ts +1 -3
  550. package/dist/src/domains/auth/components/session-expired.d.ts +5 -0
  551. package/dist/src/{ds/components/SessionExpired → domains/auth/components}/session-expired.stories.d.ts +1 -2
  552. package/dist/src/domains/auth/services/sso-login.d.ts +7 -0
  553. package/dist/src/domains/logs/components/logs-error-content.d.ts +2 -2
  554. package/dist/src/domains/traces/components/index.d.ts +0 -1
  555. package/dist/src/domains/traces/components/span-payload/index.d.ts +2 -0
  556. package/dist/src/domains/traces/components/span-payload/span-payload-processor.d.ts +10 -0
  557. package/dist/src/domains/traces/components/span-payload/span-payload-registry.d.ts +1 -0
  558. package/dist/src/domains/traces/components/span-payload/span-payload.stories.d.ts +2 -0
  559. package/dist/src/domains/traces/components/span-payload/span-processor-attributes.d.ts +10 -0
  560. package/dist/src/domains/traces/components/trace-data-panel-view.stories.d.ts +94 -0
  561. package/dist/src/domains/traces/components/trace-summary-description.d.ts +1 -0
  562. package/dist/src/domains/traces/components/traces-error-content.d.ts +2 -2
  563. package/dist/src/ds/components/Button/Button.d.ts +1 -1
  564. package/dist/src/ds/components/ButtonsGroup/buttons-group.stories.d.ts +2 -2
  565. package/dist/src/ds/components/Columns/column-root.d.ts +1 -3
  566. package/dist/src/ds/components/Columns/columns.stories.d.ts +0 -1
  567. package/dist/src/ds/components/Columns/index.d.ts +0 -1
  568. package/dist/src/ds/components/Combobox/combobox-styles.d.ts +1 -2
  569. package/dist/src/ds/components/Combobox/combobox.d.ts +3 -0
  570. package/dist/src/ds/components/Combobox/combobox.stories.d.ts +1 -0
  571. package/dist/src/ds/components/DataKeysAndValues/data-keys-and-values-root.d.ts +1 -2
  572. package/dist/src/ds/components/DataKeysAndValues/data-keys-and-values.stories.d.ts +1 -2
  573. package/dist/src/ds/components/EmptyState/EmptyState.d.ts +6 -2
  574. package/dist/src/ds/components/EmptyState/empty-state.stories.d.ts +1 -0
  575. package/dist/src/ds/components/PageLayout/page-layout.d.ts +8 -3
  576. package/dist/src/ds/components/PageLayout/page-layout.stories.d.ts +3 -0
  577. package/dist/src/ds/components/Select/select.d.ts +3 -4
  578. package/dist/src/ds/components/Select/select.stories.d.ts +2 -2
  579. package/dist/src/ds/new/layout/app-shell/index.d.ts +1 -0
  580. package/dist/src/ds/new/layout/app-shell/main-card.d.ts +5 -0
  581. package/dist/src/ds/new/settings/index.d.ts +1 -1
  582. package/dist/src/ds/new/settings/settings.stories.d.ts +2 -0
  583. package/dist/src/ds/primitives/control-size.d.ts +1 -1
  584. package/dist/src/ds/primitives/fields-on-surfaces.stories.d.ts +6 -0
  585. package/dist/src/ds/primitives/form-element.d.ts +3 -1
  586. package/dist/src/ds/primitives/raised-surface.d.ts +4 -31
  587. package/dist/src/ds/tokens/colors.d.ts +3 -0
  588. package/dist/src/ds/tokens/shadows.d.ts +1 -0
  589. package/dist/src/{ds/components/IntegrationDialog/integration-dialog.stories.d.ts → hooks/stories/browser/use-autoscroll.stories.d.ts} +6 -8
  590. package/dist/src/hooks/stories/browser/use-copy-to-clipboard.stories.d.ts +22 -0
  591. package/dist/src/hooks/stories/browser/use-fluid-hover.stories.d.ts +17 -0
  592. package/dist/src/hooks/stories/browser/use-in-view.stories.d.ts +17 -0
  593. package/dist/src/hooks/stories/browser/use-is-apple-platform.stories.d.ts +17 -0
  594. package/dist/src/hooks/stories/browser/use-is-mobile.stories.d.ts +32 -0
  595. package/dist/src/hooks/stories/browser/use-isomorphic-layout-effect.stories.d.ts +32 -0
  596. package/dist/src/hooks/stories/browser/use-keyboard-shortcut-label.stories.d.ts +22 -0
  597. package/dist/src/hooks/stories/browser/use-register-fluid-hover-item.stories.d.ts +17 -0
  598. package/dist/src/hooks/stories/environment/use-custom-environment-variables-editor.stories.d.ts +17 -0
  599. package/dist/src/hooks/stories/environment/use-environment-variables-editor.stories.d.ts +17 -0
  600. package/dist/src/hooks/stories/state/use-debounced-value.stories.d.ts +32 -0
  601. package/dist/src/hooks/stories/state/use-expiring-local-storage-state.stories.d.ts +17 -0
  602. package/dist/src/hooks/stories/state/use-local-storage-state.stories.d.ts +17 -0
  603. package/dist/src/hooks/stories/text/use-is-clamped.stories.d.ts +17 -0
  604. package/dist/src/hooks/stories/text/use-measured-auto-height.stories.d.ts +17 -0
  605. package/dist/src/hooks/stories/text/use-scroll-to-first-highlight.stories.d.ts +17 -0
  606. package/dist/src/hooks/stories/text/use-text-highlight.stories.d.ts +17 -0
  607. package/dist/src/lib/keyboard/use-keyboard-scope-depth.stories.d.ts +17 -0
  608. package/dist/src/lib/keyboard/use-keyboard-shortcuts-context.stories.d.ts +17 -0
  609. package/dist/src/lib/keyboard/use-table-keydown.stories.d.ts +15 -0
  610. package/dist/style.css +147 -107
  611. package/dist/{tabs-content-DMrffE9p.js → tabs-content-7ODUUdQ0.js} +2 -2
  612. package/dist/{tabs-content-DMrffE9p.js.map → tabs-content-7ODUUdQ0.js.map} +1 -1
  613. package/dist/{tabs-content-CuUlcS67.cjs → tabs-content-DlCJoQUW.cjs} +2 -2
  614. package/dist/{tabs-content-CuUlcS67.cjs.map → tabs-content-DlCJoQUW.cjs.map} +1 -1
  615. package/dist/{tabs-root-DrK1hxeV.cjs → tabs-root-COCL6jcx.cjs} +2 -2
  616. package/dist/{tabs-root-DrK1hxeV.cjs.map → tabs-root-COCL6jcx.cjs.map} +1 -1
  617. package/dist/{tabs-root-B2sdkQ3A.js → tabs-root-UNPxoGhW.js} +2 -2
  618. package/dist/{tabs-root-B2sdkQ3A.js.map → tabs-root-UNPxoGhW.js.map} +1 -1
  619. package/dist/{tabs-tab-ClmulJmM.cjs → tabs-tab-DFmRMdi3.cjs} +2 -2
  620. package/dist/{tabs-tab-ClmulJmM.cjs.map → tabs-tab-DFmRMdi3.cjs.map} +1 -1
  621. package/dist/{tabs-tab-u6LS5twu.js → tabs-tab-DluwCnDF.js} +2 -2
  622. package/dist/{tabs-tab-u6LS5twu.js.map → tabs-tab-DluwCnDF.js.map} +1 -1
  623. package/dist/{text-field-block-Cihf0IRw.js → text-field-block-DGIM1i3Z.js} +2 -2
  624. package/dist/{text-field-block-Cihf0IRw.js.map → text-field-block-DGIM1i3Z.js.map} +1 -1
  625. package/dist/{text-field-block-BmWGMw3a.cjs → text-field-block-DePCgDOh.cjs} +2 -2
  626. package/dist/{text-field-block-BmWGMw3a.cjs.map → text-field-block-DePCgDOh.cjs.map} +1 -1
  627. package/dist/{textarea-DdnzLrI9.js → textarea-B6wvS_CQ.js} +3 -3
  628. package/dist/textarea-B6wvS_CQ.js.map +1 -0
  629. package/dist/{textarea-5b6XcMrq.cjs → textarea-gUBUqpol.cjs} +2 -2
  630. package/dist/textarea-gUBUqpol.cjs.map +1 -0
  631. package/dist/{time-picker-PXFCgAuR.cjs → time-picker-BNhe7Zpb.cjs} +2 -2
  632. package/dist/{time-picker-PXFCgAuR.cjs.map → time-picker-BNhe7Zpb.cjs.map} +1 -1
  633. package/dist/{time-picker-DMroqHbw.js → time-picker-kvCsW78V.js} +2 -2
  634. package/dist/{time-picker-DMroqHbw.js.map → time-picker-kvCsW78V.js.map} +1 -1
  635. package/dist/tokens.cjs.js +4 -0
  636. package/dist/tokens.cjs.js.map +1 -1
  637. package/dist/tokens.es.js +4 -0
  638. package/dist/tokens.es.js.map +1 -1
  639. package/dist/{tool-approval-DzOGIKRh.js → tool-approval-DXUFyrSl.js} +2 -2
  640. package/dist/{tool-approval-DzOGIKRh.js.map → tool-approval-DXUFyrSl.js.map} +1 -1
  641. package/dist/{tool-approval-DYX_ZNWc.cjs → tool-approval-LIy1nZZJ.cjs} +2 -2
  642. package/dist/{tool-approval-DYX_ZNWc.cjs.map → tool-approval-LIy1nZZJ.cjs.map} +1 -1
  643. package/dist/{tool-call-HNNRcirD.js → tool-call-Bs-9Cah5.js} +2 -2
  644. package/dist/{tool-call-HNNRcirD.js.map → tool-call-Bs-9Cah5.js.map} +1 -1
  645. package/dist/{tool-call-vZeZ5XT5.cjs → tool-call-C0JeHe8Z.cjs} +2 -2
  646. package/dist/{tool-call-vZeZ5XT5.cjs.map → tool-call-C0JeHe8Z.cjs.map} +1 -1
  647. package/dist/{traces-data-list-DHrC158-.js → traces-data-list-Cjy5a-1f.js} +3 -3
  648. package/dist/{traces-data-list-DHrC158-.js.map → traces-data-list-Cjy5a-1f.js.map} +1 -1
  649. package/dist/{traces-data-list-DNOtQze4.cjs → traces-data-list-DLeKSbaZ.cjs} +3 -3
  650. package/dist/{traces-data-list-DNOtQze4.cjs.map → traces-data-list-DLeKSbaZ.cjs.map} +1 -1
  651. package/package.json +13 -13
  652. package/theme/surfaces.css +8 -0
  653. package/theme.css +7 -0
  654. package/dist/Button-KUj0U-5I.js.map +0 -1
  655. package/dist/Button-MMZPEb_q.cjs.map +0 -1
  656. package/dist/Card-B_buJ5yF.js.map +0 -1
  657. package/dist/Card-DwGasv0K.cjs.map +0 -1
  658. package/dist/EmptyState-B6cyZw6m.js.map +0 -1
  659. package/dist/EmptyState-DiSP6UIy.cjs.map +0 -1
  660. package/dist/ErrorState-B0839u-q.cjs +0 -21
  661. package/dist/ErrorState-B0839u-q.cjs.map +0 -1
  662. package/dist/ErrorState-HyRJdaA2.js +0 -19
  663. package/dist/ErrorState-HyRJdaA2.js.map +0 -1
  664. package/dist/PermissionDenied-CTqnE57B.js +0 -27
  665. package/dist/PermissionDenied-CTqnE57B.js.map +0 -1
  666. package/dist/PermissionDenied-fdVmTjjf.cjs +0 -29
  667. package/dist/PermissionDenied-fdVmTjjf.cjs.map +0 -1
  668. package/dist/SessionExpired-B9e1Kx4I.js +0 -44
  669. package/dist/SessionExpired-B9e1Kx4I.js.map +0 -1
  670. package/dist/SessionExpired-GSQkcV9f.cjs +0 -46
  671. package/dist/SessionExpired-GSQkcV9f.cjs.map +0 -1
  672. package/dist/code-editor-BQTDma1I.js.map +0 -1
  673. package/dist/code-editor-BfoJXq9l.cjs.map +0 -1
  674. package/dist/combobox-Bn_uyUSB.cjs.map +0 -1
  675. package/dist/combobox-Cykfy5wc.js.map +0 -1
  676. package/dist/combobox-styles-CSsS2LEx.cjs.map +0 -1
  677. package/dist/combobox-styles-iuJUkJEQ.js.map +0 -1
  678. package/dist/components/DataFilter.cjs.js +0 -173
  679. package/dist/components/DataFilter.cjs.js.map +0 -1
  680. package/dist/components/DataFilter.d.ts +0 -2
  681. package/dist/components/DataFilter.es.js +0 -169
  682. package/dist/components/DataFilter.es.js.map +0 -1
  683. package/dist/components/ErrorState.cjs.js +0 -10
  684. package/dist/components/ErrorState.cjs.js.map +0 -1
  685. package/dist/components/ErrorState.d.ts +0 -2
  686. package/dist/components/ErrorState.es.js +0 -2
  687. package/dist/components/ErrorState.es.js.map +0 -1
  688. package/dist/components/IntegrationDialog.cjs.js +0 -104
  689. package/dist/components/IntegrationDialog.cjs.js.map +0 -1
  690. package/dist/components/IntegrationDialog.d.ts +0 -2
  691. package/dist/components/IntegrationDialog.es.js +0 -100
  692. package/dist/components/IntegrationDialog.es.js.map +0 -1
  693. package/dist/components/PermissionDenied.cjs.js +0 -10
  694. package/dist/components/PermissionDenied.cjs.js.map +0 -1
  695. package/dist/components/PermissionDenied.d.ts +0 -2
  696. package/dist/components/PermissionDenied.es.js +0 -2
  697. package/dist/components/PermissionDenied.es.js.map +0 -1
  698. package/dist/components/Sections.cjs.js +0 -13
  699. package/dist/components/Sections.cjs.js.map +0 -1
  700. package/dist/components/Sections.d.ts +0 -2
  701. package/dist/components/Sections.es.js +0 -9
  702. package/dist/components/Sections.es.js.map +0 -1
  703. package/dist/components/SessionExpired.cjs.js +0 -10
  704. package/dist/components/SessionExpired.cjs.js.map +0 -1
  705. package/dist/components/SessionExpired.d.ts +0 -2
  706. package/dist/components/SessionExpired.es.js +0 -2
  707. package/dist/components/SessionExpired.es.js.map +0 -1
  708. package/dist/components/SettingsLayout.cjs.js +0 -10
  709. package/dist/components/SettingsLayout.cjs.js.map +0 -1
  710. package/dist/components/SettingsLayout.d.ts +0 -2
  711. package/dist/components/SettingsLayout.es.js +0 -2
  712. package/dist/components/SettingsLayout.es.js.map +0 -1
  713. package/dist/data-keys-and-values-BduKvvC5.cjs.map +0 -1
  714. package/dist/data-keys-and-values-DhC4U4Yl.js.map +0 -1
  715. package/dist/data-list-Cn0Ls4l2.js.map +0 -1
  716. package/dist/data-list-DSbuTWLI.cjs.map +0 -1
  717. package/dist/dialog-Bilo4jEU.cjs.map +0 -1
  718. package/dist/dialog-DMOXPT0N.js.map +0 -1
  719. package/dist/domains/traces/components/trace-keys-and-values.cjs.js +0 -70
  720. package/dist/domains/traces/components/trace-keys-and-values.cjs.js.map +0 -1
  721. package/dist/domains/traces/components/trace-keys-and-values.d.ts +0 -2
  722. package/dist/domains/traces/components/trace-keys-and-values.es.js +0 -66
  723. package/dist/domains/traces/components/trace-keys-and-values.es.js.map +0 -1
  724. package/dist/drawer-B6Ftum77.cjs.map +0 -1
  725. package/dist/drawer-CnCsgToD.js.map +0 -1
  726. package/dist/input-B1RysHyq.js.map +0 -1
  727. package/dist/input-CDLMprJS.cjs.map +0 -1
  728. package/dist/input-group-B-pskRGt.js.map +0 -1
  729. package/dist/input-group-DaIV9Orp.cjs.map +0 -1
  730. package/dist/main-sidebar-Cf5G9iaC.js.map +0 -1
  731. package/dist/main-sidebar-DYfRxFn4.cjs.map +0 -1
  732. package/dist/page-header-CSigVThQ.js.map +0 -1
  733. package/dist/page-header-DzEEkOca.cjs.map +0 -1
  734. package/dist/select-65j5NjtJ.cjs.map +0 -1
  735. package/dist/select-BiY-SoMJ.js.map +0 -1
  736. package/dist/settings-layout-BGvMSClL.cjs +0 -49
  737. package/dist/settings-layout-BGvMSClL.cjs.map +0 -1
  738. package/dist/settings-layout-DA-JWqW3.js +0 -47
  739. package/dist/settings-layout-DA-JWqW3.js.map +0 -1
  740. package/dist/src/domains/traces/components/trace-keys-and-values.d.ts +0 -24
  741. package/dist/src/domains/traces/components/trace-keys-and-values.stories.d.ts +0 -28
  742. package/dist/src/ds/components/Columns/multi-column.d.ts +0 -7
  743. package/dist/src/ds/components/DataFilter/index.d.ts +0 -2
  744. package/dist/src/ds/components/DataFilter/select-data-filter.d.ts +0 -40
  745. package/dist/src/ds/components/DataFilter/select-data-filter.stories.d.ts +0 -8
  746. package/dist/src/ds/components/ErrorState/ErrorState.d.ts +0 -8
  747. package/dist/src/ds/components/ErrorState/error-state.stories.d.ts +0 -8
  748. package/dist/src/ds/components/ErrorState/index.d.ts +0 -2
  749. package/dist/src/ds/components/IntegrationDialog/__fixtures__/integrations-catalog.d.ts +0 -2
  750. package/dist/src/ds/components/IntegrationDialog/index.d.ts +0 -2
  751. package/dist/src/ds/components/IntegrationDialog/integration-dialog.d.ts +0 -28
  752. package/dist/src/ds/components/PermissionDenied/PermissionDenied.d.ts +0 -16
  753. package/dist/src/ds/components/PermissionDenied/index.d.ts +0 -2
  754. package/dist/src/ds/components/Sections/index.d.ts +0 -1
  755. package/dist/src/ds/components/Sections/sections.d.ts +0 -5
  756. package/dist/src/ds/components/Sections/sections.stories.d.ts +0 -8
  757. package/dist/src/ds/components/SessionExpired/SessionExpired.d.ts +0 -11
  758. package/dist/src/ds/components/SessionExpired/index.d.ts +0 -2
  759. package/dist/src/ds/components/SettingsLayout/index.d.ts +0 -1
  760. package/dist/src/ds/components/SettingsLayout/settings-layout.stories.d.ts +0 -52
  761. package/dist/textarea-5b6XcMrq.cjs.map +0 -1
  762. package/dist/textarea-DdnzLrI9.js.map +0 -1
  763. /package/dist/src/ds/{components/SettingsLayout → new/settings}/settings-layout.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-group-B-pskRGt.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 { ControlSizeContext, controlHeight } from '@/ds/primitives/control-size';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { inputSurfaceAndFocusWithinStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\n// Size flows down as `data-size` on the named group root (`group/input-group`), read by the\n// control through `group-data-[size=…]` variants — no prop drilling. The one context read is\n// upward: a wrapper that owns the rung (ButtonsGroup) hands it to the field.\n\nconst inputGroupBaseClassName = cn(\n // `flex-1` (not `min-w-0`) lets the root fill a flex row while keeping its content-floor\n // so it never collapses to 0. `items-center` centres the control: it carries its own\n // h-form-* (2px taller than the root's content box), so stretch would push its text low\n // / overflow the bottom border, while centring overlaps the (transparent) borders cleanly.\n 'group/input-group relative flex w-full flex-1 items-center',\n // The wrapper owns its control's width — a bare control has no width of its own,\n // so the group is the one that decides the input fills the remaining space.\n '[&>[data-slot=input-group-control]]:min-w-0 [&>[data-slot=input-group-control]]:flex-1',\n 'text-foreground',\n 'has-[:disabled]:cursor-not-allowed has-[:disabled]:text-muted-foreground',\n // Height is on the root (border-box) so the group matches a same-size sibling control.\n // Auto height when vertical (block-* addon) or wrapping a textarea.\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 // In flex-col, flex-1 zeroes the control's height; force flex-none + w-full instead.\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 // Pill (rounded-full) only fits single-line inline shapes. Fall back to rounded-xl\n // whenever the group goes vertical (block-* addon) or wraps a textarea.\n 'has-[>[data-align=block-start]]:rounded-xl',\n 'has-[>[data-align=block-end]]:rounded-xl',\n 'has-[textarea]:rounded-xl',\n);\n\n// A group wears the field material — the same `bg-card` plus rim an Input wears — so a\n// group and a bare field beside it are one surface. Its states move the rim, and they\n// read the nested control's focus (`focus-within`) because the wrapper never takes focus\n// itself. There is no second look: a transparent `outline` group existed alongside this\n// one and only ever produced two boundary languages for the same control, which is why\n// four of its call sites had wrapped it in a hand-made `bg-card rounded-full` div to get\n// the material back.\nconst inputGroupClassName = cn(\n inputGroupBaseClassName,\n 'rounded-full',\n inputSurfaceAndFocusWithinStyle,\n 'has-[[aria-invalid=true]]:[--surface-rim:var(--destructive)]',\n inputGroupRoundedTextareaClassName,\n);\n\nexport type InputGroupProps = React.ComponentPropsWithoutRef<'div'> & {\n size?: ControlSize;\n};\n\nconst InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(({ className, size, ...props }, ref) => {\n // A wrapper's rung wins over the field's own: inside a ButtonsGroup the group owns the\n // height of every segment, so a field that kept its own type scale would sit at one rung\n // and read at another.\n const groupSize = React.useContext(ControlSizeContext);\n const resolved = groupSize ?? size ?? 'md';\n return (\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"input-group\"\n data-size={resolved}\n className={cn(inputGroupClassName, controlHeight[resolved], className)}\n {...props}\n />\n );\n});\nInputGroup.displayName = 'InputGroup';\n\nconst inputGroupControlTextBySize = cn(\n 'group-data-[size=sm]/input-group:text-caption',\n 'group-data-[size=md]/input-group:text-body-sm',\n 'group-data-[size=lg]/input-group:text-body',\n);\n\nconst inputGroupAddonVariants = cva(\n cn(\n 'flex items-center justify-center gap-2 text-muted-foreground select-none',\n inputGroupControlTextBySize,\n 'group-has-[:disabled]/input-group:text-muted-foreground',\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-border px-3 pt-2 pb-1',\n 'block-end': 'order-last w-full justify-start border-t border-border 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 // Click on non-interactive addon area focuses the control inside the group.\n // Skip when a button/input handled the click itself.\n const target = event.target as HTMLElement;\n if (!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// Size flows from the parent group's `data-size` (no React context). All four sizes are\n// written out so Tailwind's scanner emits them. The control is sized to the root's\n// content box (token height minus the 1px border on each side) so it never overflows the\n// root — otherwise, in a flex-column parent, the root's content-based minimum would win\n// over its explicit height and the group would render 2px taller than a sibling control.\n// The explicit height also keeps the control from collapsing to the line-height in block\n// mode (flex-col + flex-none).\nconst inputGroupControlHeightBySize = cn(\n 'group-data-[size=sm]/input-group:h-[calc(var(--spacing-control-sm)-2px)]',\n 'group-data-[size=md]/input-group:h-[calc(var(--spacing-control-md)-2px)]',\n 'group-data-[size=lg]/input-group:h-[calc(var(--spacing-control-lg)-2px)]',\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 // Height fits the root's content box (see inputGroupControlHeightBySize).\n 'min-w-0 flex-1 bg-transparent px-3 text-foreground outline-hidden',\n inputGroupControlHeightBySize,\n inputGroupControlTextBySize,\n 'placeholder:text-muted-foreground placeholder:transition-opacity placeholder:duration-normal',\n 'focus:placeholder:opacity-70',\n 'disabled:cursor-not-allowed',\n // Hide native number-spinner arrows so consumers can compose their own\n // stepper (see the NumberWithStepper story). WebKit uses the spin-button\n // pseudo-elements; Firefox needs `appearance: textfield` on the input.\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 // type=\"search\": drop WebKit's native clear button so it doesn't double up with a\n // custom clear control (e.g. the scorers toolbar's InputGroupButton).\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-foreground outline-hidden',\n inputGroupControlTextBySize,\n 'placeholder:text-muted-foreground 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-caption text-muted-foreground [&_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":"input-group-DaIV9Orp.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 { ControlSizeContext, controlHeight } from '@/ds/primitives/control-size';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { inputSurfaceAndFocusWithinStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\n// Size flows down as `data-size` on the named group root (`group/input-group`), read by the\n// control through `group-data-[size=…]` variants — no prop drilling. The one context read is\n// upward: a wrapper that owns the rung (ButtonsGroup) hands it to the field.\n\nconst inputGroupBaseClassName = cn(\n // `flex-1` (not `min-w-0`) lets the root fill a flex row while keeping its content-floor\n // so it never collapses to 0. `items-center` centres the control: it carries its own\n // h-form-* (2px taller than the root's content box), so stretch would push its text low\n // / overflow the bottom border, while centring overlaps the (transparent) borders cleanly.\n 'group/input-group relative flex w-full flex-1 items-center',\n // The wrapper owns its control's width — a bare control has no width of its own,\n // so the group is the one that decides the input fills the remaining space.\n '[&>[data-slot=input-group-control]]:min-w-0 [&>[data-slot=input-group-control]]:flex-1',\n 'text-foreground',\n 'has-[:disabled]:cursor-not-allowed has-[:disabled]:text-muted-foreground',\n // Height is on the root (border-box) so the group matches a same-size sibling control.\n // Auto height when vertical (block-* addon) or wrapping a textarea.\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 // In flex-col, flex-1 zeroes the control's height; force flex-none + w-full instead.\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 // Pill (rounded-full) only fits single-line inline shapes. Fall back to rounded-xl\n // whenever the group goes vertical (block-* addon) or wraps a textarea.\n 'has-[>[data-align=block-start]]:rounded-xl',\n 'has-[>[data-align=block-end]]:rounded-xl',\n 'has-[textarea]:rounded-xl',\n);\n\n// A group wears the field material — the same `bg-card` plus rim an Input wears — so a\n// group and a bare field beside it are one surface. Its states move the rim, and they\n// read the nested control's focus (`focus-within`) because the wrapper never takes focus\n// itself. There is no second look: a transparent `outline` group existed alongside this\n// one and only ever produced two boundary languages for the same control, which is why\n// four of its call sites had wrapped it in a hand-made `bg-card rounded-full` div to get\n// the material back.\nconst inputGroupClassName = cn(\n inputGroupBaseClassName,\n 'rounded-full',\n inputSurfaceAndFocusWithinStyle,\n 'has-[[aria-invalid=true]]:[--surface-rim:var(--destructive)]',\n inputGroupRoundedTextareaClassName,\n);\n\nexport type InputGroupProps = React.ComponentPropsWithoutRef<'div'> & {\n size?: ControlSize;\n};\n\nconst InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(({ className, size, ...props }, ref) => {\n // A wrapper's rung wins over the field's own: inside a ButtonsGroup the group owns the\n // height of every segment, so a field that kept its own type scale would sit at one rung\n // and read at another.\n const groupSize = React.useContext(ControlSizeContext);\n const resolved = groupSize ?? size ?? 'md';\n return (\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"input-group\"\n data-size={resolved}\n className={cn(inputGroupClassName, controlHeight[resolved], className)}\n {...props}\n />\n );\n});\nInputGroup.displayName = 'InputGroup';\n\nconst inputGroupControlTextBySize = cn(\n 'group-data-[size=sm]/input-group:text-caption',\n 'group-data-[size=md]/input-group:text-body-sm',\n 'group-data-[size=lg]/input-group:text-body',\n);\n\nconst inputGroupAddonVariants = cva(\n cn(\n 'flex items-center justify-center gap-2 text-muted-foreground select-none',\n inputGroupControlTextBySize,\n 'group-has-[:disabled]/input-group:text-muted-foreground',\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-border px-3 pt-2 pb-1',\n 'block-end': 'order-last w-full justify-start border-t border-border 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 // Click on non-interactive addon area focuses the control inside the group.\n // Skip when a button/input handled the click itself.\n const target = event.target as HTMLElement;\n if (!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// Size flows from the parent group's `data-size` (no React context). All four sizes are\n// written out so Tailwind's scanner emits them. The control is sized to the root's\n// content box (token height minus the 1px border on each side) so it never overflows the\n// root — otherwise, in a flex-column parent, the root's content-based minimum would win\n// over its explicit height and the group would render 2px taller than a sibling control.\n// The explicit height also keeps the control from collapsing to the line-height in block\n// mode (flex-col + flex-none).\nconst inputGroupControlHeightBySize = cn(\n 'group-data-[size=sm]/input-group:h-[calc(var(--spacing-control-sm)-2px)]',\n 'group-data-[size=md]/input-group:h-[calc(var(--spacing-control-md)-2px)]',\n 'group-data-[size=lg]/input-group:h-[calc(var(--spacing-control-lg)-2px)]',\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 // Height fits the root's content box (see inputGroupControlHeightBySize).\n 'min-w-0 flex-1 bg-transparent px-3 text-foreground outline-hidden',\n inputGroupControlHeightBySize,\n inputGroupControlTextBySize,\n 'placeholder:text-muted-foreground placeholder:transition-opacity placeholder:duration-normal',\n 'focus:placeholder:opacity-70',\n 'disabled:cursor-not-allowed',\n // Hide native number-spinner arrows so consumers can compose their own\n // stepper (see the NumberWithStepper story). WebKit uses the spin-button\n // pseudo-elements; Firefox needs `appearance: textfield` on the input.\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 // type=\"search\": drop WebKit's native clear button so it doesn't double up with a\n // custom clear control (e.g. the scorers toolbar's InputGroupButton).\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-foreground outline-hidden',\n inputGroupControlTextBySize,\n 'placeholder:text-muted-foreground 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-caption text-muted-foreground [&_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","inputSurfaceAndFocusWithinStyle","React","ControlSizeContext","jsx","controlHeight","cva","Button"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"main-sidebar-Cf5G9iaC.js","sources":["../src/ds/components/MainSidebar/main-sidebar-bottom.tsx","../src/ds/components/MainSidebar/main-sidebar-context.ts","../src/ds/components/MainSidebar/main-sidebar-mobile-trigger.tsx","../src/ds/components/MainSidebar/main-sidebar-nav.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-header.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-label.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-item-classes.ts","../src/ds/components/MainSidebar/main-sidebar-nav-link.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-list.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-section.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-separator.tsx","../src/ds/components/MainSidebar/main-sidebar-root.tsx","../src/ds/components/MainSidebar/main-sidebar-sections.tsx","../src/ds/components/MainSidebar/main-sidebar-trigger.tsx","../src/ds/components/MainSidebar/main-sidebar-provider.tsx","../src/ds/components/MainSidebar/main-sidebar-link-active.ts","../src/ds/components/MainSidebar/main-sidebar.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarBottomProps = ComponentPropsWithoutRef<'div'>;\n\nexport function MainSidebarBottom({ className, children, ...props }: MainSidebarBottomProps) {\n return (\n <div className={cn('mt-auto', className)} {...props}>\n {children}\n </div>\n );\n}\n","import React from 'react';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nexport type SidebarState = 'default' | 'collapsed';\n\ntype MainSidebarContextValue = {\n state: SidebarState;\n desktopState: SidebarState;\n width: number;\n minWidth: number;\n maxWidth: number;\n collapseBelow: number;\n collapsedWidth: number;\n isMobile: boolean;\n openMobile: boolean;\n mobileTriggerRef: React.RefObject<HTMLButtonElement | null>;\n setOpenMobile: (open: boolean) => void;\n setMobileDrawerPresent: (present: boolean) => void;\n toggleSidebar: () => void;\n setWidth: (width: number) => void;\n collapse: () => void;\n expand: () => void;\n commit: () => void;\n setGestureActive: (active: boolean) => void;\n LinkComponent?: LinkComponent;\n};\n\n// Split: drawer open-state lives in its own context so navigation rows\n// do not re-render when the mobile drawer toggles.\nexport type MobileDrawerContextValue = {\n openMobile: boolean;\n mobileTriggerRef: React.RefObject<HTMLButtonElement | null>;\n setOpenMobile: (open: boolean) => void;\n setMobileDrawerPresent: (present: boolean) => void;\n};\n\nexport type MainSidebarStateContextValue = Omit<\n MainSidebarContextValue,\n 'openMobile' | 'mobileTriggerRef' | 'setOpenMobile' | 'setMobileDrawerPresent'\n>;\n\nexport const MainSidebarContext = React.createContext<MainSidebarStateContextValue | null>(null);\nexport const MobileDrawerContext = React.createContext<MobileDrawerContextValue | null>(null);\n\n/** Reads sidebar state and actions without subscribing to mobile drawer state. */\nexport function useMaybeSidebarState(): MainSidebarStateContextValue | null {\n return React.useContext(MainSidebarContext);\n}\n\nexport function useMainSidebar(): MainSidebarContextValue {\n const ctx = React.useContext(MainSidebarContext);\n const drawer = React.useContext(MobileDrawerContext);\n if (!ctx || !drawer) {\n throw new Error('useMainSidebar must be used within a MainSidebarProvider.');\n }\n return { ...ctx, ...drawer };\n}\n\nexport function useMaybeSidebar(): MainSidebarContextValue | null {\n const ctx = React.useContext(MainSidebarContext);\n const drawer = React.useContext(MobileDrawerContext);\n if (!ctx || !drawer) return null;\n return { ...ctx, ...drawer };\n}\n\n/** Reads only mobile drawer state. Cheap — no re-renders on sidebar resize. */\nexport function useMobileDrawer(): MobileDrawerContextValue {\n const drawer = React.useContext(MobileDrawerContext);\n if (!drawer) throw new Error('useMobileDrawer must be used within a MainSidebarProvider.');\n return drawer;\n}\n","import { MenuIcon } from 'lucide-react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarMobileTriggerProps = ComponentPropsWithoutRef<'button'> & {\n icon?: React.ReactNode;\n};\n\nexport function MainSidebarMobileTrigger({\n className,\n icon,\n 'aria-label': ariaLabel = 'Open navigation menu',\n onClick,\n ...props\n}: MainSidebarMobileTriggerProps) {\n const { isMobile, mobileTriggerRef, setOpenMobile } = useMainSidebar();\n return (\n <button\n ref={mobileTriggerRef}\n type=\"button\"\n aria-label={ariaLabel}\n aria-hidden={!isMobile}\n tabIndex={isMobile ? 0 : -1}\n data-mobile-only\n {...props}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) setOpenMobile(true);\n }}\n className={cn(\n 'inline-flex size-10 items-center justify-center rounded-md',\n // compound selector, not `in-*` — its `:where()` ties with a consumer's later `.inline-flex`\n \"[[data-sidebar-mobile='false']_&]:hidden\",\n \"[[data-sidebar-mobile-present='true']_&]:invisible\",\n quietTextHover,\n 'hover:bg-fill-subtle',\n 'focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:outline-hidden',\n className,\n )}\n >\n {icon ?? <MenuIcon className=\"size-5\" />}\n </button>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavProps = ComponentPropsWithoutRef<'nav'>;\n\nexport function MainSidebarNav({\n 'aria-label': ariaLabel = 'Main',\n children,\n className,\n ...props\n}: MainSidebarNavProps) {\n return (\n <nav aria-label={ariaLabel} className={cn('flex min-h-0 flex-1 flex-col', className)} {...props}>\n <ScrollArea className=\"min-h-0 flex-1\" viewPortClassName=\"px-0.5\">\n {children}\n </ScrollArea>\n </nav>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebarState } from './main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavHeaderProps = Omit<ComponentPropsWithoutRef<'header'>, 'children'> & {\n children?: React.ReactNode;\n state?: SidebarState;\n href?: string;\n isActive?: boolean;\n LinkComponent?: LinkComponent;\n};\nexport function MainSidebarNavHeader({\n children,\n className,\n state: stateProp,\n href,\n isActive,\n LinkComponent: LinkProp,\n ...props\n}: MainSidebarNavHeaderProps) {\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const isMobile = ctx?.isMobile ?? false;\n const Link: LinkComponent = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const showTitle = state === 'default' && !isMobile;\n\n return (\n <div className={cn('mt-2 mb-0.5 flex min-h-8 min-w-0 items-center', className)}>\n {showTitle ? (\n <header\n {...props}\n className={cn('max-w-full min-w-0 truncate pl-3 text-column', {\n 'text-foreground': isActive,\n 'text-muted-foreground/70': !isActive,\n })}\n >\n {href ? (\n <Link\n href={href}\n className={cn('block min-w-0 truncate transition-colors duration-normal', {\n 'hover:text-foreground': !isActive,\n 'text-foreground': isActive,\n })}\n >\n {children}\n </Link>\n ) : (\n children\n )}\n </header>\n ) : (\n <>\n <VisuallyHidden asChild>\n <header {...props}>{children}</header>\n </VisuallyHidden>\n <div aria-hidden=\"true\" className=\"mx-3 h-px flex-1 bg-border\" />\n </>\n )}\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebarState } from './main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavLabelProps = ComponentPropsWithoutRef<'span'> & {\n /** Override sidebar state. Defaults to context, then `'default'`. */\n state?: SidebarState;\n};\n\n/**\n * Label slot for `MainSidebar.NavLink` rows.\n *\n * Auto-hides via `VisuallyHidden` when the sidebar is collapsed (icon-only row),\n * so screen readers still announce the label without it leaking outside the\n * 28px collapsed item. Handles single-line truncation when expanded.\n *\n * Required for custom `render` and legacy `asChild` consumers — the default\n * `link={...}` path wraps the name internally, but custom elements bring their\n * own children, so the label needs to opt into the collapse-aware rendering.\n */\nexport function MainSidebarNavLabel({ children, className, state: stateProp, ...rest }: MainSidebarNavLabelProps) {\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n if (state === 'collapsed') {\n return <VisuallyHidden>{children}</VisuallyHidden>;\n }\n return (\n <span {...rest} className={cn('min-w-0 flex-1 truncate text-left', className)}>\n {children}\n </span>\n );\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport { surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { controlStateColorTransition, focusRing } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\n// A nav row is a control: same rhythm as a button or a field, from the same rungs, so a\n// sidebar row and a toolbar button in the same app are never 2px apart. A nav label is a\n// label at every row height, so only the box grows — 12px reads too small for a primary\n// navigation target, and 400 weight makes the label recede below its icon.\nconst navItemVariants = cva('flex min-w-0 cursor-pointer items-center rounded-lg text-label whitespace-nowrap', {\n variants: {\n size: {\n sm: controlHeight.sm,\n md: controlHeight.md,\n lg: controlHeight.lg,\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\ntype NavItemVariantProps = VariantProps<typeof navItemVariants>;\n\nexport type MainSidebarNavItemSize = NonNullable<NavItemVariantProps['size']>;\n\ntype NavRowSurfaceOptions = {\n isActive?: boolean;\n isFeatured?: boolean;\n};\n\ntype NavItemLayoutOptions = {\n isCollapsed?: boolean;\n level?: number;\n size?: MainSidebarNavItemSize;\n};\n\ntype ItemStyleOptions = NavRowSurfaceOptions & NavItemLayoutOptions;\n\nconst nestedExpandedItemClasses = (level: number) => {\n if (level <= 0) return 'gap-2 py-1 px-3';\n if (level === 1) return `gap-2 py-1 pr-3 pl-8 ${controlHeight.md}`;\n if (level === 2) return `gap-2 py-1 pr-3 pl-10 ${controlHeight.md}`;\n return `gap-2 py-1 pr-3 pl-12 ${controlHeight.md}`;\n};\n\n// Two neutral tones, never more: a row is either quiet (`muted-foreground`) or\n// current (`foreground`). Icons inherit that colour — lucide strokes with\n// `currentColor` — so there is nothing to restate per state.\nconst idleSurface = cn('rounded-lg text-muted-foreground hover:text-foreground', surfaceStateLayerStyle);\n\nconst activeSurface = 'bg-fill text-foreground';\n\nconst featuredSurface = cn(\n 'my-2 border border-accent1/30 bg-accent1Dark text-accent1 hover:bg-accent1Darker hover:text-accent1',\n 'dark:border-transparent dark:bg-accent1 dark:text-black dark:hover:bg-accent1/90 dark:hover:text-black',\n '[&_svg]:text-accent1 dark:[&_svg]:text-black/75 [&:hover_svg]:text-accent1 dark:[&:hover_svg]:text-black',\n);\n\nexport const navRowSurfaceClasses = ({ isActive, isFeatured }: NavRowSurfaceOptions) =>\n cn(idleSurface, isActive && activeSurface, isFeatured && featuredSurface);\n\nexport const navItemLayoutClasses = ({ isCollapsed, level = 0, size }: NavItemLayoutOptions) =>\n cn(\n navItemVariants({ size }),\n 'w-full justify-start',\n controlStateColorTransition,\n '[&_svg]:size-4 [&_svg]:shrink-0',\n focusRing.visible,\n !isCollapsed && nestedExpandedItemClasses(level),\n isCollapsed && 'gap-0 px-[13.5px] py-0',\n );\n\nexport const navItemClasses = ({ isActive, isCollapsed, isFeatured, level, size }: ItemStyleOptions = {}) =>\n cn(navItemLayoutClasses({ isCollapsed, level, size }), navRowSurfaceClasses({ isActive, isFeatured }));\n","import React from 'react';\nimport type { ComponentProps } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebarState } from './main-sidebar-context';\nimport { navItemClasses, navItemLayoutClasses, navRowSurfaceClasses } from './main-sidebar-nav-item-classes';\nimport type { MainSidebarNavItemSize } from './main-sidebar-nav-item-classes';\nimport { MainSidebarNavLabel } from './main-sidebar-nav-label';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type NavLink = {\n name: string;\n url: string;\n icon?: React.ReactNode;\n children?: NavLink[];\n isActive?: boolean;\n variant?: 'default' | 'featured';\n tooltipMsg?: string;\n /** @deprecated Prefer nested `children`; accepted for callers still rendering manual sublinks. */\n indent?: boolean;\n};\n\nexport type MainSidebarNavLinkProps = Omit<ComponentProps<'li'>, 'children'> & {\n link?: NavLink;\n isActive?: boolean;\n state?: SidebarState;\n children?: React.ReactNode;\n size?: MainSidebarNavItemSize;\n render?: React.ReactElement<SlottedNavChildProps>;\n action?: React.ReactNode;\n LinkComponent?: LinkComponent;\n level?: number;\n subItems?: React.ReactNode;\n /**\n * When true, render `children` as the interactive element.\n * Use for `<button>` items or custom router Links. Item classes are forwarded\n * to the slotted element. `link.url` and `LinkComponent` are ignored; other\n * `link` presentation fields still apply when supplied.\n *\n * @deprecated Prefer typed render composition for new APIs; this legacy\n * slotted prop will be migrated separately.\n */\n asChild?: boolean;\n};\n\ntype SlottedNavChildProps = {\n className?: string;\n 'aria-current'?: 'page';\n};\n\nexport function MainSidebarNavLink({\n link,\n state: stateProp,\n children,\n isActive,\n size,\n render,\n action,\n className,\n LinkComponent: LinkProp,\n level: levelProp,\n subItems,\n asChild = false,\n ...props\n}: MainSidebarNavLinkProps) {\n if (render && asChild) {\n throw new Error('MainSidebarNavLink accepts either `render` or `asChild`, not both.');\n }\n\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const Link: LinkComponent = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const isCollapsed = state === 'collapsed';\n const isFeatured = link?.variant === 'featured';\n const level = levelProp ?? (link?.indent ? 1 : 0);\n const rowAction = isCollapsed ? undefined : action;\n\n const itemClassName = rowAction\n ? cn(navItemLayoutClasses({ level, size }), 'flex-1 pr-1')\n : navItemClasses({ isActive, isCollapsed, isFeatured, level, size });\n\n return (\n <li {...props} className={cn('relative flex min-w-0 flex-col', className)}>\n <NavRowBody action={rowAction} surfaceClassName={navRowSurfaceClasses({ isActive, isFeatured })}>\n <NavRowTooltip label={navTooltipLabel(link, isCollapsed)}>\n {navInteractiveRow({ render, asChild, children, link, state, Link, isActive, className: itemClassName })}\n </NavRowTooltip>\n </NavRowBody>\n {!isCollapsed && subItems}\n </li>\n );\n}\n\nfunction navInteractiveRow({\n render,\n asChild,\n children,\n link,\n state,\n Link,\n isActive,\n className,\n}: {\n render?: React.ReactElement<SlottedNavChildProps>;\n asChild: boolean;\n children?: React.ReactNode;\n link?: NavLink;\n state: SidebarState;\n Link: LinkComponent;\n isActive?: boolean;\n className: string;\n}) {\n // The current row is announced, not merely tinted: its fill is the only thing that says\n // \"you are here\", and a fill says nothing to a screen reader.\n const current = isActive ? ('page' as const) : undefined;\n if (render) {\n return React.cloneElement(render, { className: cn(className, render.props.className), 'aria-current': current });\n }\n\n if (asChild) {\n if (!React.isValidElement<SlottedNavChildProps>(children)) {\n throw new Error(\n 'MainSidebarNavLink requires a valid React element child when `asChild` is true so it can apply `SlottedNavChildProps` and merge `itemClassName`.',\n );\n }\n\n return React.cloneElement(children, {\n className: cn(className, children.props.className),\n 'aria-current': current,\n });\n }\n\n if (!link) return children;\n\n const externalParams = /^(https?:)?\\/\\//.test(link.url) ? { target: '_blank', rel: 'noreferrer' } : {};\n\n return (\n <Link href={link.url} {...externalParams} aria-current={current} className={className}>\n {link.icon}\n <MainSidebarNavLabel state={state}>{link.name}</MainSidebarNavLabel>\n {children}\n </Link>\n );\n}\n\nfunction navTooltipLabel(link: NavLink | undefined, isCollapsed: boolean) {\n if (!link) return undefined;\n if (link.tooltipMsg) return isCollapsed ? `${link.name} | ${link.tooltipMsg}` : link.tooltipMsg;\n return isCollapsed ? link.name : undefined;\n}\n\nfunction NavRowTooltip({ label, children }: { label?: string; children: React.ReactNode }) {\n if (!React.isValidElement(children)) return children;\n\n return (\n <Tooltip disabled={!label}>\n <TooltipTrigger render={children} />\n {label ? (\n <TooltipContent side=\"right\" align=\"center\" sideOffset={16}>\n {label}\n </TooltipContent>\n ) : null}\n </Tooltip>\n );\n}\n\nfunction NavRowBody({\n action,\n surfaceClassName,\n children,\n}: {\n action?: React.ReactNode;\n surfaceClassName: string;\n children: React.ReactNode;\n}) {\n if (!action) return children;\n\n return (\n <div className={cn('flex min-w-0 items-center pr-1', surfaceClassName)}>\n {children}\n {action}\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavListProps = ComponentPropsWithoutRef<'ul'>;\n\nexport function MainSidebarNavList({ className, children, ...props }: MainSidebarNavListProps) {\n return (\n <ul className={cn('grid grid-cols-[minmax(0,1fr)] content-center items-start gap-0.5', className)} {...props}>\n {children}\n </ul>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { NavLink } from './main-sidebar-nav-link';\nimport { cn } from '@/lib/utils';\n\nexport type NavSection = {\n key: string;\n title?: string;\n href?: string;\n links: NavLink[];\n separator?: boolean;\n isHeaderActive?: boolean;\n};\n\nexport type MainSidebarNavSectionProps = ComponentPropsWithoutRef<'section'>;\n\nexport function MainSidebarNavSection({ className, children, ...props }: MainSidebarNavSectionProps) {\n return (\n <section className={cn('relative grid grid-cols-[minmax(0,1fr)] content-center items-start', className)} {...props}>\n {children}\n </section>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavSeparatorProps = ComponentPropsWithoutRef<'div'>;\n\nexport function MainSidebarNavSeparator({ className, ...props }: MainSidebarNavSeparatorProps) {\n return (\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={cn(\n 'relative min-h-5',\n '[&:after]:absolute [&:after]:inset-x-3 [&:after]:top-1/2 [&:after]:block [&:after]:h-0 [&:after]:border-t [&:after]:border-border [&:after]:content-[\"\"]',\n className,\n )}\n {...props}\n />\n );\n}\n","import { MenuIcon } from 'lucide-react';\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerTitle } from '@/ds/components/Drawer';\nimport { overlaySurfaceStyle, surfaceGroupStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { ResizeHandleIndicator } from '@/ds/primitives/resize-handle-indicator';\nimport { quietTextHoverInGroup } from '@/ds/primitives/typography';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarRootProps = {\n children: React.ReactNode;\n className?: string;\n mobileMode?: 'drawer' | 'takeover';\n};\n\nconst KEYBOARD_STEP = 10;\nconst DRAG_THRESHOLD = 5;\n\nexport function MainSidebarRoot({ children, className, mobileMode = 'drawer' }: MainSidebarRootProps) {\n const {\n state,\n width,\n minWidth,\n maxWidth,\n collapseBelow,\n collapsedWidth,\n isMobile,\n openMobile,\n mobileTriggerRef,\n setOpenMobile,\n setMobileDrawerPresent,\n setWidth,\n collapse,\n expand,\n commit,\n toggleSidebar,\n setGestureActive,\n } = useMainSidebar();\n const isCollapsed = state === 'collapsed';\n const isHidden = isCollapsed && collapsedWidth === 0;\n\n const draggedRef = useRef(false);\n const dragCleanupRef = useRef<(() => void) | null>(null);\n\n useEffect(() => {\n return () => {\n dragCleanupRef.current?.();\n dragCleanupRef.current = null;\n };\n }, []);\n\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) return;\n event.preventDefault();\n\n draggedRef.current = false;\n setGestureActive(true);\n\n const startX = event.clientX;\n const handle = event.currentTarget;\n const pointerId = event.pointerId;\n\n try {\n handle.setPointerCapture(pointerId);\n } catch {\n // The pointer may have ended before capture.\n }\n\n const sidebarEl = handle.parentElement;\n const sidebarLeft = sidebarEl ? sidebarEl.getBoundingClientRect().left : 0;\n\n const prevCursor = document.body.style.cursor;\n const prevUserSelect = document.body.style.userSelect;\n\n const onMove = (ev: PointerEvent) => {\n if (ev.pointerId !== pointerId) return;\n const dx = ev.clientX - startX;\n if (!draggedRef.current) {\n if (Math.abs(dx) <= DRAG_THRESHOLD) return;\n draggedRef.current = true;\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n const cursorWidth = ev.clientX - sidebarLeft;\n\n if (collapseBelow > 0 && cursorWidth < collapseBelow) {\n collapse();\n return;\n }\n expand();\n setWidth(cursorWidth);\n };\n const cleanup = (ev?: PointerEvent) => {\n if (ev && ev.pointerId !== pointerId) return;\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', cleanup);\n window.removeEventListener('pointercancel', cleanup);\n document.body.style.cursor = prevCursor;\n document.body.style.userSelect = prevUserSelect;\n setGestureActive(false);\n commit();\n dragCleanupRef.current = null;\n };\n dragCleanupRef.current = () => cleanup();\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', cleanup);\n window.addEventListener('pointercancel', cleanup);\n },\n [collapseBelow, setWidth, expand, collapse, commit, setGestureActive],\n );\n\n const onClick = useCallback(() => {\n if (draggedRef.current) {\n draggedRef.current = false;\n return;\n }\n toggleSidebar();\n }, [toggleSidebar]);\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n toggleSidebar();\n return;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (isCollapsed) return;\n setWidth(width - KEYBOARD_STEP);\n commit();\n return;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (isCollapsed) {\n expand();\n commit();\n return;\n }\n setWidth(width + KEYBOARD_STEP);\n commit();\n return;\n }\n case 'Home': {\n event.preventDefault();\n expand();\n setWidth(minWidth);\n commit();\n return;\n }\n case 'End': {\n event.preventDefault();\n expand();\n setWidth(maxWidth);\n commit();\n return;\n }\n }\n },\n [isCollapsed, width, minWidth, maxWidth, setWidth, expand, commit, toggleSidebar],\n );\n\n // Client-side routers preventDefault but should still close the drawer.\n const closeOnAnchor = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (!(event.target instanceof Element)) return;\n const anchor = event.target.closest<HTMLAnchorElement>('a');\n if (!anchor || !anchor.hasAttribute('href')) return;\n\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n\n if (anchor.target === '_blank' || anchor.hasAttribute('download')) return;\n setOpenMobile(false);\n },\n [setOpenMobile],\n );\n\n if (isMobile) {\n return (\n <Drawer\n side=\"left\"\n open={openMobile}\n onOpenChange={setOpenMobile}\n onOpenChangeComplete={open => {\n if (!open) setMobileDrawerPresent(false);\n }}\n >\n <DrawerContent\n data-mobile-mode={mobileMode}\n finalFocus={mobileTriggerRef}\n showCloseButton={mobileMode === 'drawer'}\n className={cn(\n 'border-0 bg-sidebar text-foreground',\n mobileMode === 'takeover'\n ? 'w-[calc(100%-3.5rem)] max-w-none overflow-visible rounded-l-none rounded-r-3xl pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]'\n : 'w-3/4 max-w-(--sidebar-width-mobile) overflow-hidden rounded-none',\n className,\n )}\n >\n {mobileMode === 'takeover' ? (\n <DrawerClose asChild>\n <button\n type=\"button\"\n aria-label=\"Close\"\n className=\"group absolute top-2 -right-12 z-10 inline-flex size-11 touch-manipulation items-center justify-center transition-opacity duration-fast group-data-[ending-style]/popup:opacity-0 focus-visible:outline-hidden motion-reduce:duration-0\"\n >\n <span\n className={cn(\n overlaySurfaceStyle,\n quietTextHoverInGroup,\n surfaceGroupStateLayerStyle,\n 'inline-flex size-9 items-center justify-center rounded-full backdrop-blur-sm group-focus-visible:ring-1 group-focus-visible:ring-accent1',\n )}\n >\n <MenuIcon className=\"size-4\" />\n </span>\n </button>\n </DrawerClose>\n ) : null}\n <VisuallyHidden asChild>\n <DrawerTitle>Navigation</DrawerTitle>\n </VisuallyHidden>\n <VisuallyHidden asChild>\n <DrawerDescription>Primary site navigation drawer</DrawerDescription>\n </VisuallyHidden>\n <div\n onClick={closeOnAnchor}\n className={cn(\n 'flex h-full min-h-0 flex-col overflow-hidden py-2',\n mobileMode === 'takeover' ? 'px-4' : 'px-3',\n )}\n >\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n );\n }\n\n const currentWidth = isCollapsed ? collapsedWidth : width;\n return (\n <div\n className={cn(\n 'sidebar-layout group/sidebar t-resize relative min-h-0 shrink-0 self-stretch bg-sidebar text-foreground',\n 'w-(--sidebar-width)',\n 'in-data-[sidebar-gesture=active]:transition-none',\n className,\n\n isHidden && 'border-r-0 border-transparent',\n )}\n >\n <div\n className={cn(\n 'flex h-full min-h-0 flex-col overflow-hidden',\n 'transition-opacity duration-200 motion-reduce:transition-none',\n 'px-2',\n isHidden && 'pointer-events-none px-0 opacity-0',\n )}\n >\n {children}\n </div>\n\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n\n aria-valuenow={isCollapsed ? undefined : currentWidth}\n aria-valuemin={isCollapsed ? undefined : minWidth}\n aria-valuemax={isCollapsed ? undefined : maxWidth}\n aria-valuetext={isCollapsed ? 'collapsed' : `${currentWidth} pixels`}\n aria-label={`Resize sidebar. Arrow keys to resize, Enter to ${isCollapsed ? 'expand' : 'collapse'}.`}\n tabIndex={0}\n onPointerDown={onPointerDown}\n onClick={onClick}\n onKeyDown={onKeyDown}\n className={cn(\n 'group absolute top-0 -right-1 z-10 h-full w-2 cursor-col-resize touch-none',\n 'flex items-center justify-center',\n 'focus-visible:outline-hidden',\n )}\n >\n <ResizeHandleIndicator\n className={cn(\n 'via-foreground/30 group-hover:opacity-100',\n 'group-focus-visible:via-accent1 group-focus-visible:opacity-100',\n 'in-data-[sidebar-gesture=active]:via-foreground/45 in-data-[sidebar-gesture=active]:opacity-100',\n )}\n />\n </div>\n </div>\n );\n}\n","import { useId } from 'react';\nimport { MainSidebarNavHeader } from './main-sidebar-nav-header';\nimport { MainSidebarNavLink } from './main-sidebar-nav-link';\nimport type { NavLink } from './main-sidebar-nav-link';\nimport { MainSidebarNavList } from './main-sidebar-nav-list';\nimport { MainSidebarNavSection } from './main-sidebar-nav-section';\nimport type { NavSection } from './main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from './main-sidebar-nav-separator';\n\nexport type MainSidebarSectionsProps = {\n sections: NavSection[];\n /**\n * Called per link to decide the active state. Receives the section's links so\n * callers can use section-aware active logic without re-scanning `sections`\n * from the outside. Default: each link's `isActive`.\n */\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n className?: string;\n};\n\ntype MainSidebarSectionLinkProps = {\n link: NavLink;\n activeCandidates: NavLink[];\n level?: number;\n isActive?: MainSidebarSectionsProps['isActive'];\n};\n\nfunction getLinkKey(link: NavLink) {\n return `${link.url}:${link.name}`;\n}\n\nfunction MainSidebarSectionLink({ link, activeCandidates, level = 0, isActive }: MainSidebarSectionLinkProps) {\n const childLinks = link.children ?? [];\n\n return (\n <MainSidebarNavLink\n link={link}\n isActive={isActive?.(link, activeCandidates) ?? link.isActive}\n level={level}\n subItems={\n childLinks.length > 0 ? (\n <MainSidebarNavList className=\"mt-0.5\">\n {childLinks.map(child => (\n <MainSidebarSectionLink\n key={getLinkKey(child)}\n link={child}\n activeCandidates={activeCandidates}\n level={level + 1}\n isActive={isActive}\n />\n ))}\n </MainSidebarNavList>\n ) : null\n }\n />\n );\n}\n\nexport function MainSidebarSections({ sections, isActive, className }: MainSidebarSectionsProps) {\n const baseId = useId();\n\n return (\n <>\n {sections.map(section => {\n const showSeparator = section.links.length > 0 && section.separator;\n const headerId = section.title ? `${baseId}-${section.key}` : undefined;\n return (\n <MainSidebarNavSection\n key={section.key}\n className={className}\n aria-labelledby={headerId}\n aria-label={!headerId ? section.key : undefined}\n >\n {/* Render separator and header independently — a section can have\n both (titled group preceded by a divider). */}\n {showSeparator ? <MainSidebarNavSeparator /> : null}\n {section.title ? (\n <MainSidebarNavHeader id={headerId} href={section.href} isActive={section.isHeaderActive}>\n {section.title}\n </MainSidebarNavHeader>\n ) : null}\n <MainSidebarNavList>\n {section.links.map(link => (\n <MainSidebarSectionLink\n key={getLinkKey(link)}\n link={link}\n activeCandidates={section.links}\n isActive={isActive}\n />\n ))}\n </MainSidebarNavList>\n </MainSidebarNavSection>\n );\n })}\n </>\n );\n}\n","import { PanelRightIcon } from 'lucide-react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { Kbd } from '@/ds/components/Kbd';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { focusRing } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarTriggerProps = ComponentPropsWithoutRef<'button'>;\n\nexport function MainSidebarTrigger({ className, onClick, ...props }: MainSidebarTriggerProps) {\n const { desktopState, toggleSidebar } = useMainSidebar();\n const isCollapsed = desktopState === 'collapsed';\n\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n type=\"button\"\n aria-label=\"Toggle sidebar\"\n aria-expanded={!isCollapsed}\n {...props}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) toggleSidebar();\n }}\n className={cn(\n 'flex items-center justify-center rounded-md text-muted-foreground',\n 'size-7',\n isCollapsed ? 'mx-auto' : 'ml-auto',\n 'hover:bg-fill-subtle hover:text-foreground',\n 'transition-colors duration-normal ease-out-custom motion-reduce:transition-none',\n focusRing.visible,\n '[&_svg]:size-4 [&_svg]:text-muted-foreground [&_svg]:transition-transform [&_svg]:duration-slow [&_svg]:ease-out-custom motion-reduce:[&_svg]:transition-none [&:hover_svg]:text-foreground',\n className,\n )}\n >\n <PanelRightIcon\n className={cn({\n 'rotate-180': isCollapsed,\n })}\n />\n </button>\n }\n />\n\n <TooltipContent>\n <span className=\"inline-flex items-center gap-1.5\">\n Toggle Sidebar\n <Kbd size=\"xs\" className=\"bg-muted text-muted-foreground\">\n [\n </Kbd>\n </span>\n </TooltipContent>\n </Tooltip>\n );\n}\n","import React from 'react';\nimport type { CSSProperties } from 'react';\nimport {\n MainSidebarContext,\n MobileDrawerContext,\n type MobileDrawerContextValue,\n type SidebarState,\n} from './main-sidebar-context';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nconst SIDEBAR_STATE_KEY = 'sidebar:state';\nconst SIDEBAR_WIDTH_KEY = 'sidebar:width';\n\nconst SIDEBAR_WIDTH_VAR = '--sidebar-width';\n\ntype InitialSidebarState = {\n state: SidebarState;\n width: number;\n};\n\ntype SidebarScopeStyle = CSSProperties & {\n '--sidebar-width': string;\n '--sidebar-width-mobile': string;\n};\n\nexport type MainSidebarProviderProps = {\n children: React.ReactNode;\n /** Initial state before localStorage hydrates. Defaults to `'default'`. */\n defaultState?: SidebarState;\n /** Default expanded width in px. Defaults to `240`. */\n defaultWidth?: number;\n /** Minimum draggable width in px. Defaults to `200`. */\n minWidth?: number;\n /** Maximum draggable width in px. Defaults to `480`. */\n maxWidth?: number;\n /** Drag below this value snaps the sidebar closed. Defaults to `minWidth` (snap to collapsed when dragged below the expanded minimum). Pass `0` to disable snap. */\n collapseBelow?: number;\n /** Width in px when collapsed. Defaults to `64`. Set to `0` for fully hidden. */\n collapsedWidth?: number;\n /** Disable the global ⌘B / Ctrl+B toggle shortcut. Defaults to `true` so browser shortcuts are preserved. */\n disableKeyboardShortcut?: boolean;\n /** Scope-key for localStorage. Allows multiple independent sidebars per app. */\n storageKey?: string;\n /** Mobile breakpoint in px (max-width). Below this, sidebar renders as a drawer. Defaults to `1024`. */\n mobileBreakpoint?: number;\n /** Drawer max-width on mobile in px. Actual width is `min(75vw, mobileWidth)`. Defaults to `360`. */\n mobileWidth?: number;\n /** Default LinkComponent injected into NavLink/NavHeader. Falls back to plain `<a>` if omitted. */\n LinkComponent?: LinkComponent;\n};\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\n\nconst useIsoLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\nexport function MainSidebarProvider({\n children,\n defaultState = 'default',\n defaultWidth = 240,\n minWidth = 200,\n maxWidth = 480,\n collapseBelow,\n collapsedWidth = 64,\n disableKeyboardShortcut = true,\n storageKey,\n mobileBreakpoint = 1024,\n mobileWidth = 360,\n LinkComponent,\n}: MainSidebarProviderProps) {\n // Normalize props so bad inputs (defaultWidth < minWidth, min > max, etc.) never produce a broken layout.\n const safeMin = Math.max(0, Math.min(minWidth, maxWidth));\n const safeMax = Math.max(safeMin, maxWidth);\n const safeCollapsed = Math.max(0, Math.min(collapsedWidth, safeMax));\n const safeDefault = clamp(defaultWidth, safeMin, safeMax);\n // Default snap-zone = minWidth: dragging below the expanded min snaps to collapsed,\n // since below min the sidebar cannot render its expanded layout anyway.\n // Pass `collapseBelow={0}` to disable snap.\n const safeCollapseBelow = collapseBelow ?? safeMin;\n\n const stateStorageKey = storageKey ? `${storageKey}:${SIDEBAR_STATE_KEY}` : SIDEBAR_STATE_KEY;\n const widthStorageKey = storageKey ? `${storageKey}:${SIDEBAR_WIDTH_KEY}` : SIDEBAR_WIDTH_KEY;\n\n // Hydrate synchronously from localStorage so first paint is already at the correct width.\n // Falls back to clamped defaults during SSR or when storage is unavailable.\n const readInitial = (): InitialSidebarState => {\n if (typeof window === 'undefined') return { state: defaultState, width: safeDefault };\n try {\n let nextState: SidebarState = defaultState;\n let nextWidth = safeDefault;\n const storedState = window.localStorage.getItem(stateStorageKey);\n if (storedState === 'collapsed' || storedState === 'default') nextState = storedState;\n const storedWidth = window.localStorage.getItem(widthStorageKey);\n if (storedWidth !== null) {\n const parsed = Number(storedWidth);\n if (Number.isFinite(parsed)) nextWidth = clamp(parsed, safeMin, safeMax);\n }\n return { state: nextState, width: nextWidth };\n } catch {\n return { state: defaultState, width: safeDefault };\n }\n };\n const initialRef = React.useRef<InitialSidebarState | null>(null);\n if (initialRef.current === null) initialRef.current = readInitial();\n const initial = initialRef.current;\n\n const [state, setState] = React.useState<SidebarState>(initial.state);\n const [width, setWidthState] = React.useState<number>(initial.width);\n const [isMobile, setIsMobile] = React.useState(false);\n const [openMobile, setOpenMobileState] = React.useState(false);\n const [mobileDrawerPresent, setMobileDrawerPresent] = React.useState(false);\n const openMobileRef = React.useRef(false);\n const mobileTriggerRef = React.useRef<HTMLButtonElement | null>(null);\n const widthRef = React.useRef<number>(initial.width);\n const stateRef = React.useRef<SidebarState>(initial.state);\n stateRef.current = state;\n\n const scopeRef = React.useRef<HTMLDivElement | null>(null);\n\n // Watch viewport for mobile breakpoint.\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mq = window.matchMedia(`(max-width: ${mobileBreakpoint - 1}px)`);\n const update = () => setIsMobile(mq.matches);\n update();\n mq.addEventListener('change', update);\n return () => mq.removeEventListener('change', update);\n }, [mobileBreakpoint]);\n\n const setOpenMobile = React.useCallback((open: boolean) => {\n openMobileRef.current = open;\n if (open) setMobileDrawerPresent(true);\n setOpenMobileState(open);\n }, []);\n\n // Close mobile drawer when crossing back to desktop.\n React.useEffect(() => {\n if (!isMobile && openMobile) {\n setOpenMobile(false);\n setMobileDrawerPresent(false);\n }\n }, [isMobile, openMobile, setOpenMobile]);\n\n const writeCssVar = React.useCallback((px: number) => {\n const el = scopeRef.current;\n if (el) el.style.setProperty(SIDEBAR_WIDTH_VAR, `${px}px`);\n }, []);\n\n // Keep the CSS var in sync with collapsed state transitions.\n useIsoLayoutEffect(() => {\n writeCssVar(state === 'collapsed' ? safeCollapsed : widthRef.current);\n }, [state, safeCollapsed, writeCssVar]);\n\n const persistState = React.useCallback(\n (next: SidebarState) => {\n try {\n window.localStorage.setItem(stateStorageKey, next);\n } catch {}\n },\n [stateStorageKey],\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) {\n setOpenMobile(!openMobileRef.current);\n return;\n }\n setState(prev => {\n const next = prev === 'default' ? 'collapsed' : 'default';\n // Sync ref so a synchronous follow-up `commit()` (e.g. keyboard handler)\n // persists the new state instead of the stale render-time value.\n stateRef.current = next;\n persistState(next);\n return next;\n });\n }, [isMobile, persistState, setOpenMobile]);\n\n const setWidth = React.useCallback(\n (next: number) => {\n const clamped = clamp(next, safeMin, safeMax);\n widthRef.current = clamped;\n writeCssVar(clamped);\n },\n [safeMin, safeMax, writeCssVar],\n );\n\n const collapse = React.useCallback(() => {\n stateRef.current = 'collapsed';\n persistState('collapsed');\n setState('collapsed');\n }, [persistState]);\n const expand = React.useCallback(() => {\n stateRef.current = 'default';\n persistState('default');\n setState('default');\n }, [persistState]);\n\n const commit = React.useCallback(() => {\n setWidthState(widthRef.current);\n try {\n window.localStorage.setItem(stateStorageKey, stateRef.current);\n window.localStorage.setItem(widthStorageKey, String(widthRef.current));\n } catch {}\n }, [stateStorageKey, widthStorageKey]);\n\n const setGestureActive = React.useCallback((active: boolean) => {\n const el = scopeRef.current;\n if (!el) return;\n if (active) el.setAttribute('data-sidebar-gesture', 'active');\n else el.removeAttribute('data-sidebar-gesture');\n }, []);\n\n // Global ⌘B / Ctrl+B toggle. Skip when typing.\n React.useEffect(() => {\n if (disableKeyboardShortcut) return;\n const onKeyDown = (ev: KeyboardEvent) => {\n // `code` is layout-independent — works on non-Latin keyboards.\n if (ev.code !== 'KeyB') return;\n if (!(ev.metaKey || ev.ctrlKey)) return;\n if (ev.altKey || ev.shiftKey) return;\n if (ev.target instanceof HTMLElement) {\n const tag = ev.target.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return;\n if (ev.target.isContentEditable) return;\n }\n ev.preventDefault();\n toggleSidebar();\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [disableKeyboardShortcut, toggleSidebar]);\n\n const effectiveState: SidebarState = isMobile ? 'default' : state;\n\n const contextValue = React.useMemo(\n () => ({\n state: effectiveState,\n desktopState: state,\n width,\n minWidth: safeMin,\n maxWidth: safeMax,\n collapseBelow: safeCollapseBelow,\n collapsedWidth: safeCollapsed,\n isMobile,\n toggleSidebar,\n setWidth,\n collapse,\n expand,\n commit,\n setGestureActive,\n LinkComponent,\n }),\n [\n effectiveState,\n state,\n width,\n safeMin,\n safeMax,\n safeCollapseBelow,\n safeCollapsed,\n isMobile,\n toggleSidebar,\n setWidth,\n collapse,\n expand,\n commit,\n setGestureActive,\n LinkComponent,\n ],\n );\n\n const drawerValue = React.useMemo<MobileDrawerContextValue>(\n () => ({ openMobile, mobileTriggerRef, setOpenMobile, setMobileDrawerPresent }),\n [openMobile, setOpenMobile],\n );\n\n // CSS var owned exclusively by writeCssVar (single source of truth).\n // SSR seeds the initial value here; post-mount writeCssVar takes over.\n const scopeStyle: SidebarScopeStyle = {\n [SIDEBAR_WIDTH_VAR]: `${initial.state === 'collapsed' ? safeCollapsed : initial.width}px`,\n '--sidebar-width-mobile': `${mobileWidth}px`,\n display: 'contents',\n };\n\n return (\n <div\n ref={scopeRef}\n data-sidebar-scope\n data-sidebar-state={state}\n data-sidebar-mobile={isMobile ? 'true' : 'false'}\n data-sidebar-mobile-present={mobileDrawerPresent ? 'true' : 'false'}\n style={scopeStyle}\n suppressHydrationWarning\n >\n <MainSidebarContext.Provider value={contextValue}>\n <MobileDrawerContext.Provider value={drawerValue}>{children}</MobileDrawerContext.Provider>\n </MainSidebarContext.Provider>\n </div>\n );\n}\n","import type { NavLink } from './main-sidebar-nav-link';\n\n/**\n * Strict active-path match with sibling-exclusion.\n * - `pathname === link.url` or starts with `link.url + '/'`\n * - Not active if any sibling link has a longer matching url (prevents `/a` lighting while `/a/b` matches).\n */\nexport function getIsLinkActive(link: NavLink, pathname: string, siblings: NavLink[] = []): boolean {\n const matches = (url: string) => pathname === url || pathname.startsWith(url + '/');\n const flattenLinks = (links: NavLink[]): NavLink[] =>\n links.flatMap(item => [item, ...flattenLinks(item.children ?? [])]);\n\n if (!matches(link.url)) return false;\n const competingLinks = [...flattenLinks(link.children ?? []), ...flattenLinks(siblings)];\n return !competingLinks.some(\n other => other.url !== link.url && other.url.length > link.url.length && matches(other.url),\n );\n}\n","import { MainSidebarBottom } from './main-sidebar-bottom';\nimport { MainSidebarMobileTrigger } from './main-sidebar-mobile-trigger';\nimport { MainSidebarNav } from './main-sidebar-nav';\nimport { MainSidebarNavHeader } from './main-sidebar-nav-header';\nimport { MainSidebarNavLabel } from './main-sidebar-nav-label';\nimport { MainSidebarNavLink } from './main-sidebar-nav-link';\nimport { MainSidebarNavList } from './main-sidebar-nav-list';\nimport { MainSidebarNavSection } from './main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from './main-sidebar-nav-separator';\nimport { MainSidebarRoot } from './main-sidebar-root';\nimport { MainSidebarSections } from './main-sidebar-sections';\nimport { MainSidebarTrigger } from './main-sidebar-trigger';\n\nexport type { MainSidebarStateContextValue, MobileDrawerContextValue, SidebarState } from './main-sidebar-context';\nexport { useMainSidebar, useMaybeSidebar, useMaybeSidebarState, useMobileDrawer } from './main-sidebar-context';\nexport { MainSidebarProvider, type MainSidebarProviderProps } from './main-sidebar-provider';\nexport { navItemClasses } from './main-sidebar-nav-item-classes';\nexport { type MainSidebarNavItemSize } from './main-sidebar-nav-item-classes';\nexport { type NavLink } from './main-sidebar-nav-link';\nexport { type NavSection } from './main-sidebar-nav-section';\nexport { MainSidebarTrigger } from './main-sidebar-trigger';\nexport { MainSidebarMobileTrigger } from './main-sidebar-mobile-trigger';\nexport { getIsLinkActive } from './main-sidebar-link-active';\n\nexport const MainSidebar = Object.assign(MainSidebarRoot, {\n Bottom: MainSidebarBottom,\n Nav: MainSidebarNav,\n NavSection: MainSidebarNavSection,\n NavLink: MainSidebarNavLink,\n NavLabel: MainSidebarNavLabel,\n NavHeader: MainSidebarNavHeader,\n NavList: MainSidebarNavList,\n NavSeparator: MainSidebarNavSeparator,\n Sections: MainSidebarSections,\n Trigger: MainSidebarTrigger,\n MobileTrigger: MainSidebarMobileTrigger,\n});\n"],"names":["React"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"main-sidebar-DYfRxFn4.cjs","sources":["../src/ds/components/MainSidebar/main-sidebar-bottom.tsx","../src/ds/components/MainSidebar/main-sidebar-context.ts","../src/ds/components/MainSidebar/main-sidebar-mobile-trigger.tsx","../src/ds/components/MainSidebar/main-sidebar-nav.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-header.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-label.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-item-classes.ts","../src/ds/components/MainSidebar/main-sidebar-nav-link.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-list.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-section.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-separator.tsx","../src/ds/components/MainSidebar/main-sidebar-root.tsx","../src/ds/components/MainSidebar/main-sidebar-sections.tsx","../src/ds/components/MainSidebar/main-sidebar-trigger.tsx","../src/ds/components/MainSidebar/main-sidebar-provider.tsx","../src/ds/components/MainSidebar/main-sidebar-link-active.ts","../src/ds/components/MainSidebar/main-sidebar.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarBottomProps = ComponentPropsWithoutRef<'div'>;\n\nexport function MainSidebarBottom({ className, children, ...props }: MainSidebarBottomProps) {\n return (\n <div className={cn('mt-auto', className)} {...props}>\n {children}\n </div>\n );\n}\n","import React from 'react';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nexport type SidebarState = 'default' | 'collapsed';\n\ntype MainSidebarContextValue = {\n state: SidebarState;\n desktopState: SidebarState;\n width: number;\n minWidth: number;\n maxWidth: number;\n collapseBelow: number;\n collapsedWidth: number;\n isMobile: boolean;\n openMobile: boolean;\n mobileTriggerRef: React.RefObject<HTMLButtonElement | null>;\n setOpenMobile: (open: boolean) => void;\n setMobileDrawerPresent: (present: boolean) => void;\n toggleSidebar: () => void;\n setWidth: (width: number) => void;\n collapse: () => void;\n expand: () => void;\n commit: () => void;\n setGestureActive: (active: boolean) => void;\n LinkComponent?: LinkComponent;\n};\n\n// Split: drawer open-state lives in its own context so navigation rows\n// do not re-render when the mobile drawer toggles.\nexport type MobileDrawerContextValue = {\n openMobile: boolean;\n mobileTriggerRef: React.RefObject<HTMLButtonElement | null>;\n setOpenMobile: (open: boolean) => void;\n setMobileDrawerPresent: (present: boolean) => void;\n};\n\nexport type MainSidebarStateContextValue = Omit<\n MainSidebarContextValue,\n 'openMobile' | 'mobileTriggerRef' | 'setOpenMobile' | 'setMobileDrawerPresent'\n>;\n\nexport const MainSidebarContext = React.createContext<MainSidebarStateContextValue | null>(null);\nexport const MobileDrawerContext = React.createContext<MobileDrawerContextValue | null>(null);\n\n/** Reads sidebar state and actions without subscribing to mobile drawer state. */\nexport function useMaybeSidebarState(): MainSidebarStateContextValue | null {\n return React.useContext(MainSidebarContext);\n}\n\nexport function useMainSidebar(): MainSidebarContextValue {\n const ctx = React.useContext(MainSidebarContext);\n const drawer = React.useContext(MobileDrawerContext);\n if (!ctx || !drawer) {\n throw new Error('useMainSidebar must be used within a MainSidebarProvider.');\n }\n return { ...ctx, ...drawer };\n}\n\nexport function useMaybeSidebar(): MainSidebarContextValue | null {\n const ctx = React.useContext(MainSidebarContext);\n const drawer = React.useContext(MobileDrawerContext);\n if (!ctx || !drawer) return null;\n return { ...ctx, ...drawer };\n}\n\n/** Reads only mobile drawer state. Cheap — no re-renders on sidebar resize. */\nexport function useMobileDrawer(): MobileDrawerContextValue {\n const drawer = React.useContext(MobileDrawerContext);\n if (!drawer) throw new Error('useMobileDrawer must be used within a MainSidebarProvider.');\n return drawer;\n}\n","import { MenuIcon } from 'lucide-react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarMobileTriggerProps = ComponentPropsWithoutRef<'button'> & {\n icon?: React.ReactNode;\n};\n\nexport function MainSidebarMobileTrigger({\n className,\n icon,\n 'aria-label': ariaLabel = 'Open navigation menu',\n onClick,\n ...props\n}: MainSidebarMobileTriggerProps) {\n const { isMobile, mobileTriggerRef, setOpenMobile } = useMainSidebar();\n return (\n <button\n ref={mobileTriggerRef}\n type=\"button\"\n aria-label={ariaLabel}\n aria-hidden={!isMobile}\n tabIndex={isMobile ? 0 : -1}\n data-mobile-only\n {...props}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) setOpenMobile(true);\n }}\n className={cn(\n 'inline-flex size-10 items-center justify-center rounded-md',\n // compound selector, not `in-*` — its `:where()` ties with a consumer's later `.inline-flex`\n \"[[data-sidebar-mobile='false']_&]:hidden\",\n \"[[data-sidebar-mobile-present='true']_&]:invisible\",\n quietTextHover,\n 'hover:bg-fill-subtle',\n 'focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:outline-hidden',\n className,\n )}\n >\n {icon ?? <MenuIcon className=\"size-5\" />}\n </button>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavProps = ComponentPropsWithoutRef<'nav'>;\n\nexport function MainSidebarNav({\n 'aria-label': ariaLabel = 'Main',\n children,\n className,\n ...props\n}: MainSidebarNavProps) {\n return (\n <nav aria-label={ariaLabel} className={cn('flex min-h-0 flex-1 flex-col', className)} {...props}>\n <ScrollArea className=\"min-h-0 flex-1\" viewPortClassName=\"px-0.5\">\n {children}\n </ScrollArea>\n </nav>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebarState } from './main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavHeaderProps = Omit<ComponentPropsWithoutRef<'header'>, 'children'> & {\n children?: React.ReactNode;\n state?: SidebarState;\n href?: string;\n isActive?: boolean;\n LinkComponent?: LinkComponent;\n};\nexport function MainSidebarNavHeader({\n children,\n className,\n state: stateProp,\n href,\n isActive,\n LinkComponent: LinkProp,\n ...props\n}: MainSidebarNavHeaderProps) {\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const isMobile = ctx?.isMobile ?? false;\n const Link: LinkComponent = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const showTitle = state === 'default' && !isMobile;\n\n return (\n <div className={cn('mt-2 mb-0.5 flex min-h-8 min-w-0 items-center', className)}>\n {showTitle ? (\n <header\n {...props}\n className={cn('max-w-full min-w-0 truncate pl-3 text-column', {\n 'text-foreground': isActive,\n 'text-muted-foreground/70': !isActive,\n })}\n >\n {href ? (\n <Link\n href={href}\n className={cn('block min-w-0 truncate transition-colors duration-normal', {\n 'hover:text-foreground': !isActive,\n 'text-foreground': isActive,\n })}\n >\n {children}\n </Link>\n ) : (\n children\n )}\n </header>\n ) : (\n <>\n <VisuallyHidden asChild>\n <header {...props}>{children}</header>\n </VisuallyHidden>\n <div aria-hidden=\"true\" className=\"mx-3 h-px flex-1 bg-border\" />\n </>\n )}\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebarState } from './main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavLabelProps = ComponentPropsWithoutRef<'span'> & {\n /** Override sidebar state. Defaults to context, then `'default'`. */\n state?: SidebarState;\n};\n\n/**\n * Label slot for `MainSidebar.NavLink` rows.\n *\n * Auto-hides via `VisuallyHidden` when the sidebar is collapsed (icon-only row),\n * so screen readers still announce the label without it leaking outside the\n * 28px collapsed item. Handles single-line truncation when expanded.\n *\n * Required for custom `render` and legacy `asChild` consumers — the default\n * `link={...}` path wraps the name internally, but custom elements bring their\n * own children, so the label needs to opt into the collapse-aware rendering.\n */\nexport function MainSidebarNavLabel({ children, className, state: stateProp, ...rest }: MainSidebarNavLabelProps) {\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n if (state === 'collapsed') {\n return <VisuallyHidden>{children}</VisuallyHidden>;\n }\n return (\n <span {...rest} className={cn('min-w-0 flex-1 truncate text-left', className)}>\n {children}\n </span>\n );\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport { surfaceStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { controlStateColorTransition, focusRing } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\n// A nav row is a control: same rhythm as a button or a field, from the same rungs, so a\n// sidebar row and a toolbar button in the same app are never 2px apart. A nav label is a\n// label at every row height, so only the box grows — 12px reads too small for a primary\n// navigation target, and 400 weight makes the label recede below its icon.\nconst navItemVariants = cva('flex min-w-0 cursor-pointer items-center rounded-lg text-label whitespace-nowrap', {\n variants: {\n size: {\n sm: controlHeight.sm,\n md: controlHeight.md,\n lg: controlHeight.lg,\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\ntype NavItemVariantProps = VariantProps<typeof navItemVariants>;\n\nexport type MainSidebarNavItemSize = NonNullable<NavItemVariantProps['size']>;\n\ntype NavRowSurfaceOptions = {\n isActive?: boolean;\n isFeatured?: boolean;\n};\n\ntype NavItemLayoutOptions = {\n isCollapsed?: boolean;\n level?: number;\n size?: MainSidebarNavItemSize;\n};\n\ntype ItemStyleOptions = NavRowSurfaceOptions & NavItemLayoutOptions;\n\nconst nestedExpandedItemClasses = (level: number) => {\n if (level <= 0) return 'gap-2 py-1 px-3';\n if (level === 1) return `gap-2 py-1 pr-3 pl-8 ${controlHeight.md}`;\n if (level === 2) return `gap-2 py-1 pr-3 pl-10 ${controlHeight.md}`;\n return `gap-2 py-1 pr-3 pl-12 ${controlHeight.md}`;\n};\n\n// Two neutral tones, never more: a row is either quiet (`muted-foreground`) or\n// current (`foreground`). Icons inherit that colour — lucide strokes with\n// `currentColor` — so there is nothing to restate per state.\nconst idleSurface = cn('rounded-lg text-muted-foreground hover:text-foreground', surfaceStateLayerStyle);\n\nconst activeSurface = 'bg-fill text-foreground';\n\nconst featuredSurface = cn(\n 'my-2 border border-accent1/30 bg-accent1Dark text-accent1 hover:bg-accent1Darker hover:text-accent1',\n 'dark:border-transparent dark:bg-accent1 dark:text-black dark:hover:bg-accent1/90 dark:hover:text-black',\n '[&_svg]:text-accent1 dark:[&_svg]:text-black/75 [&:hover_svg]:text-accent1 dark:[&:hover_svg]:text-black',\n);\n\nexport const navRowSurfaceClasses = ({ isActive, isFeatured }: NavRowSurfaceOptions) =>\n cn(idleSurface, isActive && activeSurface, isFeatured && featuredSurface);\n\nexport const navItemLayoutClasses = ({ isCollapsed, level = 0, size }: NavItemLayoutOptions) =>\n cn(\n navItemVariants({ size }),\n 'w-full justify-start',\n controlStateColorTransition,\n '[&_svg]:size-4 [&_svg]:shrink-0',\n focusRing.visible,\n !isCollapsed && nestedExpandedItemClasses(level),\n isCollapsed && 'gap-0 px-[13.5px] py-0',\n );\n\nexport const navItemClasses = ({ isActive, isCollapsed, isFeatured, level, size }: ItemStyleOptions = {}) =>\n cn(navItemLayoutClasses({ isCollapsed, level, size }), navRowSurfaceClasses({ isActive, isFeatured }));\n","import React from 'react';\nimport type { ComponentProps } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebarState } from './main-sidebar-context';\nimport { navItemClasses, navItemLayoutClasses, navRowSurfaceClasses } from './main-sidebar-nav-item-classes';\nimport type { MainSidebarNavItemSize } from './main-sidebar-nav-item-classes';\nimport { MainSidebarNavLabel } from './main-sidebar-nav-label';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type NavLink = {\n name: string;\n url: string;\n icon?: React.ReactNode;\n children?: NavLink[];\n isActive?: boolean;\n variant?: 'default' | 'featured';\n tooltipMsg?: string;\n /** @deprecated Prefer nested `children`; accepted for callers still rendering manual sublinks. */\n indent?: boolean;\n};\n\nexport type MainSidebarNavLinkProps = Omit<ComponentProps<'li'>, 'children'> & {\n link?: NavLink;\n isActive?: boolean;\n state?: SidebarState;\n children?: React.ReactNode;\n size?: MainSidebarNavItemSize;\n render?: React.ReactElement<SlottedNavChildProps>;\n action?: React.ReactNode;\n LinkComponent?: LinkComponent;\n level?: number;\n subItems?: React.ReactNode;\n /**\n * When true, render `children` as the interactive element.\n * Use for `<button>` items or custom router Links. Item classes are forwarded\n * to the slotted element. `link.url` and `LinkComponent` are ignored; other\n * `link` presentation fields still apply when supplied.\n *\n * @deprecated Prefer typed render composition for new APIs; this legacy\n * slotted prop will be migrated separately.\n */\n asChild?: boolean;\n};\n\ntype SlottedNavChildProps = {\n className?: string;\n 'aria-current'?: 'page';\n};\n\nexport function MainSidebarNavLink({\n link,\n state: stateProp,\n children,\n isActive,\n size,\n render,\n action,\n className,\n LinkComponent: LinkProp,\n level: levelProp,\n subItems,\n asChild = false,\n ...props\n}: MainSidebarNavLinkProps) {\n if (render && asChild) {\n throw new Error('MainSidebarNavLink accepts either `render` or `asChild`, not both.');\n }\n\n const ctx = useMaybeSidebarState();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const Link: LinkComponent = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const isCollapsed = state === 'collapsed';\n const isFeatured = link?.variant === 'featured';\n const level = levelProp ?? (link?.indent ? 1 : 0);\n const rowAction = isCollapsed ? undefined : action;\n\n const itemClassName = rowAction\n ? cn(navItemLayoutClasses({ level, size }), 'flex-1 pr-1')\n : navItemClasses({ isActive, isCollapsed, isFeatured, level, size });\n\n return (\n <li {...props} className={cn('relative flex min-w-0 flex-col', className)}>\n <NavRowBody action={rowAction} surfaceClassName={navRowSurfaceClasses({ isActive, isFeatured })}>\n <NavRowTooltip label={navTooltipLabel(link, isCollapsed)}>\n {navInteractiveRow({ render, asChild, children, link, state, Link, isActive, className: itemClassName })}\n </NavRowTooltip>\n </NavRowBody>\n {!isCollapsed && subItems}\n </li>\n );\n}\n\nfunction navInteractiveRow({\n render,\n asChild,\n children,\n link,\n state,\n Link,\n isActive,\n className,\n}: {\n render?: React.ReactElement<SlottedNavChildProps>;\n asChild: boolean;\n children?: React.ReactNode;\n link?: NavLink;\n state: SidebarState;\n Link: LinkComponent;\n isActive?: boolean;\n className: string;\n}) {\n // The current row is announced, not merely tinted: its fill is the only thing that says\n // \"you are here\", and a fill says nothing to a screen reader.\n const current = isActive ? ('page' as const) : undefined;\n if (render) {\n return React.cloneElement(render, { className: cn(className, render.props.className), 'aria-current': current });\n }\n\n if (asChild) {\n if (!React.isValidElement<SlottedNavChildProps>(children)) {\n throw new Error(\n 'MainSidebarNavLink requires a valid React element child when `asChild` is true so it can apply `SlottedNavChildProps` and merge `itemClassName`.',\n );\n }\n\n return React.cloneElement(children, {\n className: cn(className, children.props.className),\n 'aria-current': current,\n });\n }\n\n if (!link) return children;\n\n const externalParams = /^(https?:)?\\/\\//.test(link.url) ? { target: '_blank', rel: 'noreferrer' } : {};\n\n return (\n <Link href={link.url} {...externalParams} aria-current={current} className={className}>\n {link.icon}\n <MainSidebarNavLabel state={state}>{link.name}</MainSidebarNavLabel>\n {children}\n </Link>\n );\n}\n\nfunction navTooltipLabel(link: NavLink | undefined, isCollapsed: boolean) {\n if (!link) return undefined;\n if (link.tooltipMsg) return isCollapsed ? `${link.name} | ${link.tooltipMsg}` : link.tooltipMsg;\n return isCollapsed ? link.name : undefined;\n}\n\nfunction NavRowTooltip({ label, children }: { label?: string; children: React.ReactNode }) {\n if (!React.isValidElement(children)) return children;\n\n return (\n <Tooltip disabled={!label}>\n <TooltipTrigger render={children} />\n {label ? (\n <TooltipContent side=\"right\" align=\"center\" sideOffset={16}>\n {label}\n </TooltipContent>\n ) : null}\n </Tooltip>\n );\n}\n\nfunction NavRowBody({\n action,\n surfaceClassName,\n children,\n}: {\n action?: React.ReactNode;\n surfaceClassName: string;\n children: React.ReactNode;\n}) {\n if (!action) return children;\n\n return (\n <div className={cn('flex min-w-0 items-center pr-1', surfaceClassName)}>\n {children}\n {action}\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavListProps = ComponentPropsWithoutRef<'ul'>;\n\nexport function MainSidebarNavList({ className, children, ...props }: MainSidebarNavListProps) {\n return (\n <ul className={cn('grid grid-cols-[minmax(0,1fr)] content-center items-start gap-0.5', className)} {...props}>\n {children}\n </ul>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { NavLink } from './main-sidebar-nav-link';\nimport { cn } from '@/lib/utils';\n\nexport type NavSection = {\n key: string;\n title?: string;\n href?: string;\n links: NavLink[];\n separator?: boolean;\n isHeaderActive?: boolean;\n};\n\nexport type MainSidebarNavSectionProps = ComponentPropsWithoutRef<'section'>;\n\nexport function MainSidebarNavSection({ className, children, ...props }: MainSidebarNavSectionProps) {\n return (\n <section className={cn('relative grid grid-cols-[minmax(0,1fr)] content-center items-start', className)} {...props}>\n {children}\n </section>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavSeparatorProps = ComponentPropsWithoutRef<'div'>;\n\nexport function MainSidebarNavSeparator({ className, ...props }: MainSidebarNavSeparatorProps) {\n return (\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={cn(\n 'relative min-h-5',\n '[&:after]:absolute [&:after]:inset-x-3 [&:after]:top-1/2 [&:after]:block [&:after]:h-0 [&:after]:border-t [&:after]:border-border [&:after]:content-[\"\"]',\n className,\n )}\n {...props}\n />\n );\n}\n","import { MenuIcon } from 'lucide-react';\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerTitle } from '@/ds/components/Drawer';\nimport { overlaySurfaceStyle, surfaceGroupStateLayerStyle } from '@/ds/primitives/raised-surface';\nimport { ResizeHandleIndicator } from '@/ds/primitives/resize-handle-indicator';\nimport { quietTextHoverInGroup } from '@/ds/primitives/typography';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarRootProps = {\n children: React.ReactNode;\n className?: string;\n mobileMode?: 'drawer' | 'takeover';\n};\n\nconst KEYBOARD_STEP = 10;\nconst DRAG_THRESHOLD = 5;\n\nexport function MainSidebarRoot({ children, className, mobileMode = 'drawer' }: MainSidebarRootProps) {\n const {\n state,\n width,\n minWidth,\n maxWidth,\n collapseBelow,\n collapsedWidth,\n isMobile,\n openMobile,\n mobileTriggerRef,\n setOpenMobile,\n setMobileDrawerPresent,\n setWidth,\n collapse,\n expand,\n commit,\n toggleSidebar,\n setGestureActive,\n } = useMainSidebar();\n const isCollapsed = state === 'collapsed';\n const isHidden = isCollapsed && collapsedWidth === 0;\n\n const draggedRef = useRef(false);\n const dragCleanupRef = useRef<(() => void) | null>(null);\n\n useEffect(() => {\n return () => {\n dragCleanupRef.current?.();\n dragCleanupRef.current = null;\n };\n }, []);\n\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) return;\n event.preventDefault();\n\n draggedRef.current = false;\n setGestureActive(true);\n\n const startX = event.clientX;\n const handle = event.currentTarget;\n const pointerId = event.pointerId;\n\n try {\n handle.setPointerCapture(pointerId);\n } catch {\n // The pointer may have ended before capture.\n }\n\n const sidebarEl = handle.parentElement;\n const sidebarLeft = sidebarEl ? sidebarEl.getBoundingClientRect().left : 0;\n\n const prevCursor = document.body.style.cursor;\n const prevUserSelect = document.body.style.userSelect;\n\n const onMove = (ev: PointerEvent) => {\n if (ev.pointerId !== pointerId) return;\n const dx = ev.clientX - startX;\n if (!draggedRef.current) {\n if (Math.abs(dx) <= DRAG_THRESHOLD) return;\n draggedRef.current = true;\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n const cursorWidth = ev.clientX - sidebarLeft;\n\n if (collapseBelow > 0 && cursorWidth < collapseBelow) {\n collapse();\n return;\n }\n expand();\n setWidth(cursorWidth);\n };\n const cleanup = (ev?: PointerEvent) => {\n if (ev && ev.pointerId !== pointerId) return;\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', cleanup);\n window.removeEventListener('pointercancel', cleanup);\n document.body.style.cursor = prevCursor;\n document.body.style.userSelect = prevUserSelect;\n setGestureActive(false);\n commit();\n dragCleanupRef.current = null;\n };\n dragCleanupRef.current = () => cleanup();\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', cleanup);\n window.addEventListener('pointercancel', cleanup);\n },\n [collapseBelow, setWidth, expand, collapse, commit, setGestureActive],\n );\n\n const onClick = useCallback(() => {\n if (draggedRef.current) {\n draggedRef.current = false;\n return;\n }\n toggleSidebar();\n }, [toggleSidebar]);\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n toggleSidebar();\n return;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (isCollapsed) return;\n setWidth(width - KEYBOARD_STEP);\n commit();\n return;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (isCollapsed) {\n expand();\n commit();\n return;\n }\n setWidth(width + KEYBOARD_STEP);\n commit();\n return;\n }\n case 'Home': {\n event.preventDefault();\n expand();\n setWidth(minWidth);\n commit();\n return;\n }\n case 'End': {\n event.preventDefault();\n expand();\n setWidth(maxWidth);\n commit();\n return;\n }\n }\n },\n [isCollapsed, width, minWidth, maxWidth, setWidth, expand, commit, toggleSidebar],\n );\n\n // Client-side routers preventDefault but should still close the drawer.\n const closeOnAnchor = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (!(event.target instanceof Element)) return;\n const anchor = event.target.closest<HTMLAnchorElement>('a');\n if (!anchor || !anchor.hasAttribute('href')) return;\n\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n\n if (anchor.target === '_blank' || anchor.hasAttribute('download')) return;\n setOpenMobile(false);\n },\n [setOpenMobile],\n );\n\n if (isMobile) {\n return (\n <Drawer\n side=\"left\"\n open={openMobile}\n onOpenChange={setOpenMobile}\n onOpenChangeComplete={open => {\n if (!open) setMobileDrawerPresent(false);\n }}\n >\n <DrawerContent\n data-mobile-mode={mobileMode}\n finalFocus={mobileTriggerRef}\n showCloseButton={mobileMode === 'drawer'}\n className={cn(\n 'border-0 bg-sidebar text-foreground',\n mobileMode === 'takeover'\n ? 'w-[calc(100%-3.5rem)] max-w-none overflow-visible rounded-l-none rounded-r-3xl pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]'\n : 'w-3/4 max-w-(--sidebar-width-mobile) overflow-hidden rounded-none',\n className,\n )}\n >\n {mobileMode === 'takeover' ? (\n <DrawerClose asChild>\n <button\n type=\"button\"\n aria-label=\"Close\"\n className=\"group absolute top-2 -right-12 z-10 inline-flex size-11 touch-manipulation items-center justify-center transition-opacity duration-fast group-data-[ending-style]/popup:opacity-0 focus-visible:outline-hidden motion-reduce:duration-0\"\n >\n <span\n className={cn(\n overlaySurfaceStyle,\n quietTextHoverInGroup,\n surfaceGroupStateLayerStyle,\n 'inline-flex size-9 items-center justify-center rounded-full backdrop-blur-sm group-focus-visible:ring-1 group-focus-visible:ring-accent1',\n )}\n >\n <MenuIcon className=\"size-4\" />\n </span>\n </button>\n </DrawerClose>\n ) : null}\n <VisuallyHidden asChild>\n <DrawerTitle>Navigation</DrawerTitle>\n </VisuallyHidden>\n <VisuallyHidden asChild>\n <DrawerDescription>Primary site navigation drawer</DrawerDescription>\n </VisuallyHidden>\n <div\n onClick={closeOnAnchor}\n className={cn(\n 'flex h-full min-h-0 flex-col overflow-hidden py-2',\n mobileMode === 'takeover' ? 'px-4' : 'px-3',\n )}\n >\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n );\n }\n\n const currentWidth = isCollapsed ? collapsedWidth : width;\n return (\n <div\n className={cn(\n 'sidebar-layout group/sidebar t-resize relative min-h-0 shrink-0 self-stretch bg-sidebar text-foreground',\n 'w-(--sidebar-width)',\n 'in-data-[sidebar-gesture=active]:transition-none',\n className,\n\n isHidden && 'border-r-0 border-transparent',\n )}\n >\n <div\n className={cn(\n 'flex h-full min-h-0 flex-col overflow-hidden',\n 'transition-opacity duration-200 motion-reduce:transition-none',\n 'px-2',\n isHidden && 'pointer-events-none px-0 opacity-0',\n )}\n >\n {children}\n </div>\n\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n\n aria-valuenow={isCollapsed ? undefined : currentWidth}\n aria-valuemin={isCollapsed ? undefined : minWidth}\n aria-valuemax={isCollapsed ? undefined : maxWidth}\n aria-valuetext={isCollapsed ? 'collapsed' : `${currentWidth} pixels`}\n aria-label={`Resize sidebar. Arrow keys to resize, Enter to ${isCollapsed ? 'expand' : 'collapse'}.`}\n tabIndex={0}\n onPointerDown={onPointerDown}\n onClick={onClick}\n onKeyDown={onKeyDown}\n className={cn(\n 'group absolute top-0 -right-1 z-10 h-full w-2 cursor-col-resize touch-none',\n 'flex items-center justify-center',\n 'focus-visible:outline-hidden',\n )}\n >\n <ResizeHandleIndicator\n className={cn(\n 'via-foreground/30 group-hover:opacity-100',\n 'group-focus-visible:via-accent1 group-focus-visible:opacity-100',\n 'in-data-[sidebar-gesture=active]:via-foreground/45 in-data-[sidebar-gesture=active]:opacity-100',\n )}\n />\n </div>\n </div>\n );\n}\n","import { useId } from 'react';\nimport { MainSidebarNavHeader } from './main-sidebar-nav-header';\nimport { MainSidebarNavLink } from './main-sidebar-nav-link';\nimport type { NavLink } from './main-sidebar-nav-link';\nimport { MainSidebarNavList } from './main-sidebar-nav-list';\nimport { MainSidebarNavSection } from './main-sidebar-nav-section';\nimport type { NavSection } from './main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from './main-sidebar-nav-separator';\n\nexport type MainSidebarSectionsProps = {\n sections: NavSection[];\n /**\n * Called per link to decide the active state. Receives the section's links so\n * callers can use section-aware active logic without re-scanning `sections`\n * from the outside. Default: each link's `isActive`.\n */\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n className?: string;\n};\n\ntype MainSidebarSectionLinkProps = {\n link: NavLink;\n activeCandidates: NavLink[];\n level?: number;\n isActive?: MainSidebarSectionsProps['isActive'];\n};\n\nfunction getLinkKey(link: NavLink) {\n return `${link.url}:${link.name}`;\n}\n\nfunction MainSidebarSectionLink({ link, activeCandidates, level = 0, isActive }: MainSidebarSectionLinkProps) {\n const childLinks = link.children ?? [];\n\n return (\n <MainSidebarNavLink\n link={link}\n isActive={isActive?.(link, activeCandidates) ?? link.isActive}\n level={level}\n subItems={\n childLinks.length > 0 ? (\n <MainSidebarNavList className=\"mt-0.5\">\n {childLinks.map(child => (\n <MainSidebarSectionLink\n key={getLinkKey(child)}\n link={child}\n activeCandidates={activeCandidates}\n level={level + 1}\n isActive={isActive}\n />\n ))}\n </MainSidebarNavList>\n ) : null\n }\n />\n );\n}\n\nexport function MainSidebarSections({ sections, isActive, className }: MainSidebarSectionsProps) {\n const baseId = useId();\n\n return (\n <>\n {sections.map(section => {\n const showSeparator = section.links.length > 0 && section.separator;\n const headerId = section.title ? `${baseId}-${section.key}` : undefined;\n return (\n <MainSidebarNavSection\n key={section.key}\n className={className}\n aria-labelledby={headerId}\n aria-label={!headerId ? section.key : undefined}\n >\n {/* Render separator and header independently — a section can have\n both (titled group preceded by a divider). */}\n {showSeparator ? <MainSidebarNavSeparator /> : null}\n {section.title ? (\n <MainSidebarNavHeader id={headerId} href={section.href} isActive={section.isHeaderActive}>\n {section.title}\n </MainSidebarNavHeader>\n ) : null}\n <MainSidebarNavList>\n {section.links.map(link => (\n <MainSidebarSectionLink\n key={getLinkKey(link)}\n link={link}\n activeCandidates={section.links}\n isActive={isActive}\n />\n ))}\n </MainSidebarNavList>\n </MainSidebarNavSection>\n );\n })}\n </>\n );\n}\n","import { PanelRightIcon } from 'lucide-react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { Kbd } from '@/ds/components/Kbd';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { focusRing } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarTriggerProps = ComponentPropsWithoutRef<'button'>;\n\nexport function MainSidebarTrigger({ className, onClick, ...props }: MainSidebarTriggerProps) {\n const { desktopState, toggleSidebar } = useMainSidebar();\n const isCollapsed = desktopState === 'collapsed';\n\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n type=\"button\"\n aria-label=\"Toggle sidebar\"\n aria-expanded={!isCollapsed}\n {...props}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) toggleSidebar();\n }}\n className={cn(\n 'flex items-center justify-center rounded-md text-muted-foreground',\n 'size-7',\n isCollapsed ? 'mx-auto' : 'ml-auto',\n 'hover:bg-fill-subtle hover:text-foreground',\n 'transition-colors duration-normal ease-out-custom motion-reduce:transition-none',\n focusRing.visible,\n '[&_svg]:size-4 [&_svg]:text-muted-foreground [&_svg]:transition-transform [&_svg]:duration-slow [&_svg]:ease-out-custom motion-reduce:[&_svg]:transition-none [&:hover_svg]:text-foreground',\n className,\n )}\n >\n <PanelRightIcon\n className={cn({\n 'rotate-180': isCollapsed,\n })}\n />\n </button>\n }\n />\n\n <TooltipContent>\n <span className=\"inline-flex items-center gap-1.5\">\n Toggle Sidebar\n <Kbd size=\"xs\" className=\"bg-muted text-muted-foreground\">\n [\n </Kbd>\n </span>\n </TooltipContent>\n </Tooltip>\n );\n}\n","import React from 'react';\nimport type { CSSProperties } from 'react';\nimport {\n MainSidebarContext,\n MobileDrawerContext,\n type MobileDrawerContextValue,\n type SidebarState,\n} from './main-sidebar-context';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nconst SIDEBAR_STATE_KEY = 'sidebar:state';\nconst SIDEBAR_WIDTH_KEY = 'sidebar:width';\n\nconst SIDEBAR_WIDTH_VAR = '--sidebar-width';\n\ntype InitialSidebarState = {\n state: SidebarState;\n width: number;\n};\n\ntype SidebarScopeStyle = CSSProperties & {\n '--sidebar-width': string;\n '--sidebar-width-mobile': string;\n};\n\nexport type MainSidebarProviderProps = {\n children: React.ReactNode;\n /** Initial state before localStorage hydrates. Defaults to `'default'`. */\n defaultState?: SidebarState;\n /** Default expanded width in px. Defaults to `240`. */\n defaultWidth?: number;\n /** Minimum draggable width in px. Defaults to `200`. */\n minWidth?: number;\n /** Maximum draggable width in px. Defaults to `480`. */\n maxWidth?: number;\n /** Drag below this value snaps the sidebar closed. Defaults to `minWidth` (snap to collapsed when dragged below the expanded minimum). Pass `0` to disable snap. */\n collapseBelow?: number;\n /** Width in px when collapsed. Defaults to `64`. Set to `0` for fully hidden. */\n collapsedWidth?: number;\n /** Disable the global ⌘B / Ctrl+B toggle shortcut. Defaults to `true` so browser shortcuts are preserved. */\n disableKeyboardShortcut?: boolean;\n /** Scope-key for localStorage. Allows multiple independent sidebars per app. */\n storageKey?: string;\n /** Mobile breakpoint in px (max-width). Below this, sidebar renders as a drawer. Defaults to `1024`. */\n mobileBreakpoint?: number;\n /** Drawer max-width on mobile in px. Actual width is `min(75vw, mobileWidth)`. Defaults to `360`. */\n mobileWidth?: number;\n /** Default LinkComponent injected into NavLink/NavHeader. Falls back to plain `<a>` if omitted. */\n LinkComponent?: LinkComponent;\n};\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\n\nconst useIsoLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\nexport function MainSidebarProvider({\n children,\n defaultState = 'default',\n defaultWidth = 240,\n minWidth = 200,\n maxWidth = 480,\n collapseBelow,\n collapsedWidth = 64,\n disableKeyboardShortcut = true,\n storageKey,\n mobileBreakpoint = 1024,\n mobileWidth = 360,\n LinkComponent,\n}: MainSidebarProviderProps) {\n // Normalize props so bad inputs (defaultWidth < minWidth, min > max, etc.) never produce a broken layout.\n const safeMin = Math.max(0, Math.min(minWidth, maxWidth));\n const safeMax = Math.max(safeMin, maxWidth);\n const safeCollapsed = Math.max(0, Math.min(collapsedWidth, safeMax));\n const safeDefault = clamp(defaultWidth, safeMin, safeMax);\n // Default snap-zone = minWidth: dragging below the expanded min snaps to collapsed,\n // since below min the sidebar cannot render its expanded layout anyway.\n // Pass `collapseBelow={0}` to disable snap.\n const safeCollapseBelow = collapseBelow ?? safeMin;\n\n const stateStorageKey = storageKey ? `${storageKey}:${SIDEBAR_STATE_KEY}` : SIDEBAR_STATE_KEY;\n const widthStorageKey = storageKey ? `${storageKey}:${SIDEBAR_WIDTH_KEY}` : SIDEBAR_WIDTH_KEY;\n\n // Hydrate synchronously from localStorage so first paint is already at the correct width.\n // Falls back to clamped defaults during SSR or when storage is unavailable.\n const readInitial = (): InitialSidebarState => {\n if (typeof window === 'undefined') return { state: defaultState, width: safeDefault };\n try {\n let nextState: SidebarState = defaultState;\n let nextWidth = safeDefault;\n const storedState = window.localStorage.getItem(stateStorageKey);\n if (storedState === 'collapsed' || storedState === 'default') nextState = storedState;\n const storedWidth = window.localStorage.getItem(widthStorageKey);\n if (storedWidth !== null) {\n const parsed = Number(storedWidth);\n if (Number.isFinite(parsed)) nextWidth = clamp(parsed, safeMin, safeMax);\n }\n return { state: nextState, width: nextWidth };\n } catch {\n return { state: defaultState, width: safeDefault };\n }\n };\n const initialRef = React.useRef<InitialSidebarState | null>(null);\n if (initialRef.current === null) initialRef.current = readInitial();\n const initial = initialRef.current;\n\n const [state, setState] = React.useState<SidebarState>(initial.state);\n const [width, setWidthState] = React.useState<number>(initial.width);\n const [isMobile, setIsMobile] = React.useState(false);\n const [openMobile, setOpenMobileState] = React.useState(false);\n const [mobileDrawerPresent, setMobileDrawerPresent] = React.useState(false);\n const openMobileRef = React.useRef(false);\n const mobileTriggerRef = React.useRef<HTMLButtonElement | null>(null);\n const widthRef = React.useRef<number>(initial.width);\n const stateRef = React.useRef<SidebarState>(initial.state);\n stateRef.current = state;\n\n const scopeRef = React.useRef<HTMLDivElement | null>(null);\n\n // Watch viewport for mobile breakpoint.\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mq = window.matchMedia(`(max-width: ${mobileBreakpoint - 1}px)`);\n const update = () => setIsMobile(mq.matches);\n update();\n mq.addEventListener('change', update);\n return () => mq.removeEventListener('change', update);\n }, [mobileBreakpoint]);\n\n const setOpenMobile = React.useCallback((open: boolean) => {\n openMobileRef.current = open;\n if (open) setMobileDrawerPresent(true);\n setOpenMobileState(open);\n }, []);\n\n // Close mobile drawer when crossing back to desktop.\n React.useEffect(() => {\n if (!isMobile && openMobile) {\n setOpenMobile(false);\n setMobileDrawerPresent(false);\n }\n }, [isMobile, openMobile, setOpenMobile]);\n\n const writeCssVar = React.useCallback((px: number) => {\n const el = scopeRef.current;\n if (el) el.style.setProperty(SIDEBAR_WIDTH_VAR, `${px}px`);\n }, []);\n\n // Keep the CSS var in sync with collapsed state transitions.\n useIsoLayoutEffect(() => {\n writeCssVar(state === 'collapsed' ? safeCollapsed : widthRef.current);\n }, [state, safeCollapsed, writeCssVar]);\n\n const persistState = React.useCallback(\n (next: SidebarState) => {\n try {\n window.localStorage.setItem(stateStorageKey, next);\n } catch {}\n },\n [stateStorageKey],\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) {\n setOpenMobile(!openMobileRef.current);\n return;\n }\n setState(prev => {\n const next = prev === 'default' ? 'collapsed' : 'default';\n // Sync ref so a synchronous follow-up `commit()` (e.g. keyboard handler)\n // persists the new state instead of the stale render-time value.\n stateRef.current = next;\n persistState(next);\n return next;\n });\n }, [isMobile, persistState, setOpenMobile]);\n\n const setWidth = React.useCallback(\n (next: number) => {\n const clamped = clamp(next, safeMin, safeMax);\n widthRef.current = clamped;\n writeCssVar(clamped);\n },\n [safeMin, safeMax, writeCssVar],\n );\n\n const collapse = React.useCallback(() => {\n stateRef.current = 'collapsed';\n persistState('collapsed');\n setState('collapsed');\n }, [persistState]);\n const expand = React.useCallback(() => {\n stateRef.current = 'default';\n persistState('default');\n setState('default');\n }, [persistState]);\n\n const commit = React.useCallback(() => {\n setWidthState(widthRef.current);\n try {\n window.localStorage.setItem(stateStorageKey, stateRef.current);\n window.localStorage.setItem(widthStorageKey, String(widthRef.current));\n } catch {}\n }, [stateStorageKey, widthStorageKey]);\n\n const setGestureActive = React.useCallback((active: boolean) => {\n const el = scopeRef.current;\n if (!el) return;\n if (active) el.setAttribute('data-sidebar-gesture', 'active');\n else el.removeAttribute('data-sidebar-gesture');\n }, []);\n\n // Global ⌘B / Ctrl+B toggle. Skip when typing.\n React.useEffect(() => {\n if (disableKeyboardShortcut) return;\n const onKeyDown = (ev: KeyboardEvent) => {\n // `code` is layout-independent — works on non-Latin keyboards.\n if (ev.code !== 'KeyB') return;\n if (!(ev.metaKey || ev.ctrlKey)) return;\n if (ev.altKey || ev.shiftKey) return;\n if (ev.target instanceof HTMLElement) {\n const tag = ev.target.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return;\n if (ev.target.isContentEditable) return;\n }\n ev.preventDefault();\n toggleSidebar();\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [disableKeyboardShortcut, toggleSidebar]);\n\n const effectiveState: SidebarState = isMobile ? 'default' : state;\n\n const contextValue = React.useMemo(\n () => ({\n state: effectiveState,\n desktopState: state,\n width,\n minWidth: safeMin,\n maxWidth: safeMax,\n collapseBelow: safeCollapseBelow,\n collapsedWidth: safeCollapsed,\n isMobile,\n toggleSidebar,\n setWidth,\n collapse,\n expand,\n commit,\n setGestureActive,\n LinkComponent,\n }),\n [\n effectiveState,\n state,\n width,\n safeMin,\n safeMax,\n safeCollapseBelow,\n safeCollapsed,\n isMobile,\n toggleSidebar,\n setWidth,\n collapse,\n expand,\n commit,\n setGestureActive,\n LinkComponent,\n ],\n );\n\n const drawerValue = React.useMemo<MobileDrawerContextValue>(\n () => ({ openMobile, mobileTriggerRef, setOpenMobile, setMobileDrawerPresent }),\n [openMobile, setOpenMobile],\n );\n\n // CSS var owned exclusively by writeCssVar (single source of truth).\n // SSR seeds the initial value here; post-mount writeCssVar takes over.\n const scopeStyle: SidebarScopeStyle = {\n [SIDEBAR_WIDTH_VAR]: `${initial.state === 'collapsed' ? safeCollapsed : initial.width}px`,\n '--sidebar-width-mobile': `${mobileWidth}px`,\n display: 'contents',\n };\n\n return (\n <div\n ref={scopeRef}\n data-sidebar-scope\n data-sidebar-state={state}\n data-sidebar-mobile={isMobile ? 'true' : 'false'}\n data-sidebar-mobile-present={mobileDrawerPresent ? 'true' : 'false'}\n style={scopeStyle}\n suppressHydrationWarning\n >\n <MainSidebarContext.Provider value={contextValue}>\n <MobileDrawerContext.Provider value={drawerValue}>{children}</MobileDrawerContext.Provider>\n </MainSidebarContext.Provider>\n </div>\n );\n}\n","import type { NavLink } from './main-sidebar-nav-link';\n\n/**\n * Strict active-path match with sibling-exclusion.\n * - `pathname === link.url` or starts with `link.url + '/'`\n * - Not active if any sibling link has a longer matching url (prevents `/a` lighting while `/a/b` matches).\n */\nexport function getIsLinkActive(link: NavLink, pathname: string, siblings: NavLink[] = []): boolean {\n const matches = (url: string) => pathname === url || pathname.startsWith(url + '/');\n const flattenLinks = (links: NavLink[]): NavLink[] =>\n links.flatMap(item => [item, ...flattenLinks(item.children ?? [])]);\n\n if (!matches(link.url)) return false;\n const competingLinks = [...flattenLinks(link.children ?? []), ...flattenLinks(siblings)];\n return !competingLinks.some(\n other => other.url !== link.url && other.url.length > link.url.length && matches(other.url),\n );\n}\n","import { MainSidebarBottom } from './main-sidebar-bottom';\nimport { MainSidebarMobileTrigger } from './main-sidebar-mobile-trigger';\nimport { MainSidebarNav } from './main-sidebar-nav';\nimport { MainSidebarNavHeader } from './main-sidebar-nav-header';\nimport { MainSidebarNavLabel } from './main-sidebar-nav-label';\nimport { MainSidebarNavLink } from './main-sidebar-nav-link';\nimport { MainSidebarNavList } from './main-sidebar-nav-list';\nimport { MainSidebarNavSection } from './main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from './main-sidebar-nav-separator';\nimport { MainSidebarRoot } from './main-sidebar-root';\nimport { MainSidebarSections } from './main-sidebar-sections';\nimport { MainSidebarTrigger } from './main-sidebar-trigger';\n\nexport type { MainSidebarStateContextValue, MobileDrawerContextValue, SidebarState } from './main-sidebar-context';\nexport { useMainSidebar, useMaybeSidebar, useMaybeSidebarState, useMobileDrawer } from './main-sidebar-context';\nexport { MainSidebarProvider, type MainSidebarProviderProps } from './main-sidebar-provider';\nexport { navItemClasses } from './main-sidebar-nav-item-classes';\nexport { type MainSidebarNavItemSize } from './main-sidebar-nav-item-classes';\nexport { type NavLink } from './main-sidebar-nav-link';\nexport { type NavSection } from './main-sidebar-nav-section';\nexport { MainSidebarTrigger } from './main-sidebar-trigger';\nexport { MainSidebarMobileTrigger } from './main-sidebar-mobile-trigger';\nexport { getIsLinkActive } from './main-sidebar-link-active';\n\nexport const MainSidebar = Object.assign(MainSidebarRoot, {\n Bottom: MainSidebarBottom,\n Nav: MainSidebarNav,\n NavSection: MainSidebarNavSection,\n NavLink: MainSidebarNavLink,\n NavLabel: MainSidebarNavLabel,\n NavHeader: MainSidebarNavHeader,\n NavList: MainSidebarNavList,\n NavSeparator: MainSidebarNavSeparator,\n Sections: MainSidebarSections,\n Trigger: MainSidebarTrigger,\n MobileTrigger: MainSidebarMobileTrigger,\n});\n"],"names":["jsx","cn","quietTextHover","MenuIcon","ScrollArea","jsxs","Fragment","VisuallyHidden","cva","controlHeight","surfaceStateLayerStyle","controlStateColorTransition","focusRing","Tooltip","TooltipTrigger","TooltipContent","useRef","useEffect","useCallback","Drawer","DrawerContent","DrawerClose","overlaySurfaceStyle","quietTextHoverInGroup","surfaceGroupStateLayerStyle","DrawerTitle","DrawerDescription","ResizeHandleIndicator","useId","PanelRightIcon","Kbd"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-header-CSigVThQ.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-[action] row-start-1 self-center 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 'col-[title/end] flex max-w-140 flex-wrap gap-x-4 gap-y-1 text-caption text-muted-foreground',\n isLoading && 'w-160 max-w-[80%] animate-pulse rounded-md bg-muted',\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 'col-start-[icon] row-start-1 flex items-center self-center text-muted-foreground [&>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-[meta] row-start-1 self-center justify-self-start' : 'col-[title/end]',\n className,\n )}\n {...props}\n />\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface PageHeaderTitleProps extends ComponentPropsWithoutRef<'h1'> {\n isLoading?: boolean;\n}\n\nexport function PageHeaderTitle({ children, className, isLoading, ...props }: PageHeaderTitleProps) {\n return (\n <h1\n data-slot=\"page-header-title\"\n className={cn(\n 'col-start-[title] row-start-1 flex min-w-0 items-center gap-2 self-start',\n 'text-heading text-foreground',\n '[&>svg]:size-[1.25em] [&>svg]:opacity-50',\n isLoading && 'w-60 max-w-[50%] animate-pulse rounded-md bg-fill',\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(\n 'relative grid w-full grid-cols-[[title]_auto_[meta]_minmax(0,1fr)_[action]_auto_[end]] gap-x-3 gap-y-1',\n 'has-[>[data-slot=page-header-icon]]:grid-cols-[[icon]_auto_[title]_auto_[meta]_minmax(0,1fr)_[action]_auto_[end]]',\n className,\n )}\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 } 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-DzEEkOca.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-[action] row-start-1 self-center 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 'col-[title/end] flex max-w-140 flex-wrap gap-x-4 gap-y-1 text-caption text-muted-foreground',\n isLoading && 'w-160 max-w-[80%] animate-pulse rounded-md bg-muted',\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 'col-start-[icon] row-start-1 flex items-center self-center text-muted-foreground [&>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-[meta] row-start-1 self-center justify-self-start' : 'col-[title/end]',\n className,\n )}\n {...props}\n />\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface PageHeaderTitleProps extends ComponentPropsWithoutRef<'h1'> {\n isLoading?: boolean;\n}\n\nexport function PageHeaderTitle({ children, className, isLoading, ...props }: PageHeaderTitleProps) {\n return (\n <h1\n data-slot=\"page-header-title\"\n className={cn(\n 'col-start-[title] row-start-1 flex min-w-0 items-center gap-2 self-start',\n 'text-heading text-foreground',\n '[&>svg]:size-[1.25em] [&>svg]:opacity-50',\n isLoading && 'w-60 max-w-[50%] animate-pulse rounded-md bg-fill',\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(\n 'relative grid w-full grid-cols-[[title]_auto_[meta]_minmax(0,1fr)_[action]_auto_[end]] gap-x-3 gap-y-1',\n 'has-[>[data-slot=page-header-icon]]:grid-cols-[[icon]_auto_[title]_auto_[meta]_minmax(0,1fr)_[action]_auto_[end]]',\n className,\n )}\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 } 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-65j5NjtJ.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 { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\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\n/**\n * Select migrated from `@radix-ui/react-select` to Base UI (`@base-ui/react/select`).\n *\n * The public API (`Select`, `SelectGroup`, `SelectValue`, `SelectTrigger`,\n * `SelectContent`, `SelectItem`) is intentionally kept stable so existing\n * consumers do not need changes.\n *\n * Notable behavioral differences vs. Radix that consumers should be aware of:\n * - `onValueChange` now receives a second `eventDetails` argument. Existing\n * handlers typed as `(value: string) => void` keep working (extra arg ignored).\n * - The dropdown no longer overlaps the trigger by default\n * (`alignItemWithTrigger={false}`), matching the previous Radix `popper`\n * positioning behavior.\n *\n * Implementation note: unlike Radix, Base UI's `Select.Value` can only resolve\n * a selected value to its label once the popup has mounted (it reads labels\n * from rendered items). To preserve the Radix behavior where the trigger shows\n * the selected label even while closed, `Select` auto-derives an `items` map\n * from the `SelectItem`s declared inside `SelectContent` and passes it to\n * `Select.Root`. Consumers can still pass an explicit `items` prop to override.\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\n/** Recursively collect `{ value, label }` pairs from declared `SelectItem`s. */\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/**\n * `onValueChange` is intentionally narrowed to a non-null value: these selects\n * always hold a value once changed, which keeps existing `(value) => void`\n * consumer handlers valid (Base UI's own callback type is `Value | null`).\n */\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 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\n/**\n * Displays the selected value. Radix's `Select.Value` took a `placeholder`\n * prop and rendered the selected item's text automatically; Base UI's\n * `Select.Value` behaves the same way (renders the value, falls back to\n * `placeholder` when nothing is selected), so this is a thin passthrough.\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\n/**\n * A select is a form field, so it reuses the Button's size/shape recipe with\n * these looks: `default` (the Input's overlay surface — the default here too,\n * so a select sits next to an Input as the same kind of thing), `outline`\n * (bordered, transparent) and `ghost` (borderless, for dense toolbars/inline\n * pickers). The high-emphasis `primary` look is the only one intentionally NOT\n * offered (a field is not a call-to-action).\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 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 // A select = a button + a trailing chevron: reuse the Button recipe\n // (variant colors, size = height/text/padding/radius, unified border\n // focus, disabled) and layer only the select-specific extras.\n className={cn(\n buttonVariants({ variant: visualVariant, size }),\n // Fill the field and push the value left / chevron right (Button's\n // base centers its content with `justify-center`).\n 'justify-between text-body-sm',\n // Read as \"active\" while the menu is open, per variant (see map above).\n controlTriggerOpenState[visualVariant],\n 'data-[placeholder]:text-muted-foreground',\n 'aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive',\n '[&>span]:truncate',\n className,\n )}\n {...props}\n >\n {children}\n {/* `SelectPrimitive.Icon` renders the provided element in place of its\n default `<span>`, so the chevron would land as a *direct* `<svg>`\n child of the trigger — where Button's `TEXT_MODE_ADORNMENTS`\n `[&>svg]` rules (negative `mx`, forced 50% opacity, 1.1em sizing)\n would distort and mis-position it. Wrapping it in a `<span>` keeps\n the svg one level deep so those rules can't reach it, leaving the\n chevron pinned at the right edge at its intended size and color. */}\n <SelectPrimitive.Icon\n render={\n <span className=\"flex shrink-0 items-center\">\n <ChevronDown className={cn('size-4 text-muted-foreground', 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 /**\n * Kept for API compatibility with the previous Radix API. Radix supported\n * `position=\"popper\" | \"item-aligned\"`; Base UI always uses popper-style\n * positioning so this prop is accepted but has no effect.\n */\n position?: 'popper' | 'item-aligned';\n /** Optional portal container, forwarded to `Select.Portal`. */\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 // Default to the nearest SideDialog/Drawer popup so the dropdown stays\n // interactive inside a modal drawer; an explicit `container` still wins.\n const resolvedContainer = usePortalContainer(container);\n const menu = useFluidMenu<HTMLDivElement>();\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 className={menu.containerClassName} {...menu.getContainerProps({})}>\n <FluidMenuItems menu={menu}>{children}</FluidMenuItems>\n </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={useFluidMenuItemRef(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","useFluidMenu","menuPositionerClass","menuPopupClass","FluidMenuItems","useFluidMenuItemRef","menuItemClass","menuItemCheckClass","Check"],"mappings":"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"}