@arbidocs/blocks 0.3.185 → 0.4.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 (612) hide show
  1. package/README.md +122 -0
  2. package/dist/agents/approvals/AuthorizeAgentParts.d.ts +79 -0
  3. package/dist/agents/approvals/ConsentPage.d.ts +76 -0
  4. package/dist/agents/approvals/ConsentParts.d.ts +37 -0
  5. package/dist/agents/approvals/index.d.ts +3 -0
  6. package/dist/agents/config/ConfigField.d.ts +43 -0
  7. package/dist/agents/config/ConfigForm.d.ts +35 -0
  8. package/dist/agents/config/TupleArrayField.d.ts +32 -0
  9. package/dist/agents/config/index.d.ts +4 -0
  10. package/dist/agents/config/schema-utils.d.ts +28 -0
  11. package/dist/agents/definitions/AgentCard.d.ts +63 -0
  12. package/dist/agents/definitions/AgentCreator.d.ts +118 -0
  13. package/dist/agents/definitions/AgentEditorParts.d.ts +63 -0
  14. package/dist/agents/definitions/AgentGallery.d.ts +29 -0
  15. package/dist/agents/definitions/index.d.ts +4 -0
  16. package/dist/agents/index.cjs +595 -0
  17. package/dist/agents/index.cjs.map +1 -0
  18. package/dist/agents/index.d.ts +7 -0
  19. package/dist/agents/index.js +14 -0
  20. package/dist/agents/index.js.map +1 -0
  21. package/dist/agents/runs/AgentBar.d.ts +103 -0
  22. package/dist/agents/runs/AgentSteps.d.ts +157 -0
  23. package/dist/agents/runs/SubagentRoster.d.ts +37 -0
  24. package/dist/agents/runs/index.d.ts +3 -0
  25. package/dist/agents/skills/SkillBrowserParts.d.ts +70 -0
  26. package/dist/agents/skills/SkillCard.d.ts +48 -0
  27. package/dist/agents/skills/SkillForms.d.ts +64 -0
  28. package/dist/agents/skills/SkillParts.d.ts +31 -0
  29. package/dist/agents/skills/SkillRow.d.ts +34 -0
  30. package/dist/agents/skills/index.d.ts +5 -0
  31. package/dist/agents/tasks/LiveRunsBanner.d.ts +26 -0
  32. package/dist/agents/tasks/RecurrenceBuilder.d.ts +36 -0
  33. package/dist/agents/tasks/TaskComposer.d.ts +108 -0
  34. package/dist/agents/tasks/TaskPlan.d.ts +78 -0
  35. package/dist/agents/tasks/TaskRowActions.d.ts +43 -0
  36. package/dist/agents/tasks/TaskRunsDialog.d.ts +45 -0
  37. package/dist/agents/tasks/TasksChrome.d.ts +36 -0
  38. package/dist/agents/tasks/UploadTaskItem.d.ts +39 -0
  39. package/dist/agents/tasks/UploadTaskList.d.ts +35 -0
  40. package/dist/agents/tasks/elapsed.d.ts +2 -0
  41. package/dist/agents/tasks/index.d.ts +13 -0
  42. package/dist/agents/tasks/rrule.d.ts +36 -0
  43. package/dist/agents/tasks/taskColumns.d.ts +68 -0
  44. package/dist/agents/tasks/taskLabels.d.ts +26 -0
  45. package/dist/agents/workflows/AgentSelect.d.ts +33 -0
  46. package/dist/agents/workflows/SchemaForm.d.ts +37 -0
  47. package/dist/agents/workflows/WorkflowConfigDialog.d.ts +73 -0
  48. package/dist/agents/workflows/WorkflowLauncher.d.ts +38 -0
  49. package/dist/agents/workflows/index.d.ts +6 -0
  50. package/dist/agents/workflows/types.d.ts +125 -0
  51. package/dist/agents/workflows/workflow.d.ts +62 -0
  52. package/dist/auth/AuthFooter.d.ts +56 -0
  53. package/dist/auth/AuthForm.d.ts +105 -0
  54. package/dist/auth/AuthLayout.d.ts +46 -0
  55. package/dist/auth/PasswordStrengthInput.d.ts +44 -0
  56. package/dist/auth/RecoveryDialogs.d.ts +90 -0
  57. package/dist/auth/SsoLoginButton.d.ts +19 -0
  58. package/dist/auth/index.cjs +123 -0
  59. package/dist/auth/index.cjs.map +1 -0
  60. package/dist/auth/index.d.ts +6 -0
  61. package/dist/auth/index.js +6 -0
  62. package/dist/auth/index.js.map +1 -0
  63. package/dist/builder/AgentsPanel.d.ts +9 -0
  64. package/dist/builder/ModuleManager.d.ts +6 -0
  65. package/dist/builder/VerticalBuilder.d.ts +32 -0
  66. package/dist/builder/agents/store.d.ts +21 -0
  67. package/dist/builder/export.d.ts +30 -0
  68. package/dist/builder/modules/registry.d.ts +11 -0
  69. package/dist/builder/modules/store.d.ts +29 -0
  70. package/dist/builder/modules/types.d.ts +29 -0
  71. package/dist/builder/types.d.ts +28 -0
  72. package/dist/chat/BranchControls.d.ts +33 -0
  73. package/dist/chat/Composer.d.ts +156 -0
  74. package/dist/chat/ContextChip.d.ts +19 -0
  75. package/dist/chat/ContextPanel.d.ts +108 -0
  76. package/dist/chat/ConversationEmpty.d.ts +53 -0
  77. package/dist/chat/ConversationLayout.d.ts +40 -0
  78. package/dist/chat/ConversationParts.d.ts +62 -0
  79. package/dist/chat/ConversationSearchView.d.ts +57 -0
  80. package/dist/chat/LabelPinRow.d.ts +30 -0
  81. package/dist/chat/Message.d.ts +189 -0
  82. package/dist/chat/MessageAlert.d.ts +25 -0
  83. package/dist/chat/MessageList.d.ts +102 -0
  84. package/dist/chat/ModelPicker.d.ts +103 -0
  85. package/dist/chat/PendingAnswerBar.d.ts +36 -0
  86. package/dist/chat/PinnedDocChip.d.ts +22 -0
  87. package/dist/chat/SlashMenu.d.ts +57 -0
  88. package/dist/chat/ThreadMap.d.ts +45 -0
  89. package/dist/chat/index.cjs +423 -0
  90. package/dist/chat/index.cjs.map +1 -0
  91. package/dist/chat/index.d.ts +21 -0
  92. package/dist/chat/index.js +6 -0
  93. package/dist/chat/index.js.map +1 -0
  94. package/dist/chat/test-id.d.ts +16 -0
  95. package/dist/chat/useStreamAnnouncement.d.ts +19 -0
  96. package/dist/chunk-223D4727.cjs +50 -0
  97. package/dist/chunk-223D4727.cjs.map +1 -0
  98. package/dist/chunk-2K33YGM6.cjs +1846 -0
  99. package/dist/chunk-2K33YGM6.cjs.map +1 -0
  100. package/dist/chunk-2ORA62OF.js +266 -0
  101. package/dist/chunk-2ORA62OF.js.map +1 -0
  102. package/dist/chunk-4EZVCGRL.js +803 -0
  103. package/dist/chunk-4EZVCGRL.js.map +1 -0
  104. package/dist/chunk-54Q3RNJU.cjs +516 -0
  105. package/dist/chunk-54Q3RNJU.cjs.map +1 -0
  106. package/dist/chunk-5B4PXAKI.cjs +287 -0
  107. package/dist/chunk-5B4PXAKI.cjs.map +1 -0
  108. package/dist/chunk-6HIPFEID.cjs +574 -0
  109. package/dist/chunk-6HIPFEID.cjs.map +1 -0
  110. package/dist/{chunk-FZ2S6VAZ.js → chunk-6P6AEQJB.js} +413 -1132
  111. package/dist/chunk-6P6AEQJB.js.map +1 -0
  112. package/dist/chunk-76JDDMSP.js +31 -0
  113. package/dist/chunk-76JDDMSP.js.map +1 -0
  114. package/dist/chunk-7F6CBP3Z.js +12 -0
  115. package/dist/chunk-7F6CBP3Z.js.map +1 -0
  116. package/dist/chunk-7G2LJMUG.cjs +45 -0
  117. package/dist/chunk-7G2LJMUG.cjs.map +1 -0
  118. package/dist/chunk-7PEELPMA.js +1799 -0
  119. package/dist/chunk-7PEELPMA.js.map +1 -0
  120. package/dist/chunk-A2YAC22G.js +93 -0
  121. package/dist/chunk-A2YAC22G.js.map +1 -0
  122. package/dist/chunk-ADOKTJHV.cjs +262 -0
  123. package/dist/chunk-ADOKTJHV.cjs.map +1 -0
  124. package/dist/chunk-AE5FHFZ5.cjs +272 -0
  125. package/dist/chunk-AE5FHFZ5.cjs.map +1 -0
  126. package/dist/chunk-AXIZ2MDV.js +751 -0
  127. package/dist/chunk-AXIZ2MDV.js.map +1 -0
  128. package/dist/chunk-AZQDNYH4.js +2865 -0
  129. package/dist/chunk-AZQDNYH4.js.map +1 -0
  130. package/dist/chunk-C54XEN5T.cjs +34 -0
  131. package/dist/chunk-C54XEN5T.cjs.map +1 -0
  132. package/dist/chunk-CQCC7LE7.js +210 -0
  133. package/dist/chunk-CQCC7LE7.js.map +1 -0
  134. package/dist/chunk-CRIKTUEU.cjs +47 -0
  135. package/dist/chunk-CRIKTUEU.cjs.map +1 -0
  136. package/dist/chunk-CTZ5745I.js +564 -0
  137. package/dist/chunk-CTZ5745I.js.map +1 -0
  138. package/dist/chunk-DPLRHEJZ.js +78 -0
  139. package/dist/chunk-DPLRHEJZ.js.map +1 -0
  140. package/dist/{chunk-DBAUZD7A.cjs → chunk-DREI7EQ2.cjs} +437 -1152
  141. package/dist/chunk-DREI7EQ2.cjs.map +1 -0
  142. package/dist/chunk-ELR74ME6.cjs +68 -0
  143. package/dist/chunk-ELR74ME6.cjs.map +1 -0
  144. package/dist/chunk-G3G7LZPM.cjs +205 -0
  145. package/dist/chunk-G3G7LZPM.cjs.map +1 -0
  146. package/dist/chunk-GDFWJ73C.cjs +2973 -0
  147. package/dist/chunk-GDFWJ73C.cjs.map +1 -0
  148. package/dist/chunk-ITGHMJOM.js +5528 -0
  149. package/dist/chunk-ITGHMJOM.js.map +1 -0
  150. package/dist/chunk-J2BGSWXM.cjs +990 -0
  151. package/dist/chunk-J2BGSWXM.cjs.map +1 -0
  152. package/dist/chunk-K4BGOPGG.js +79 -0
  153. package/dist/chunk-K4BGOPGG.js.map +1 -0
  154. package/dist/chunk-LGBAZD37.js +341 -0
  155. package/dist/chunk-LGBAZD37.js.map +1 -0
  156. package/dist/chunk-LRUCMZK6.cjs +680 -0
  157. package/dist/chunk-LRUCMZK6.cjs.map +1 -0
  158. package/dist/chunk-MHVNT4J3.cjs +15 -0
  159. package/dist/chunk-MHVNT4J3.cjs.map +1 -0
  160. package/dist/chunk-NBV56SGU.js +42 -0
  161. package/dist/chunk-NBV56SGU.js.map +1 -0
  162. package/dist/chunk-NPLYHR2E.js +13 -0
  163. package/dist/chunk-NPLYHR2E.js.map +1 -0
  164. package/dist/chunk-NUNKSZKU.js +203 -0
  165. package/dist/chunk-NUNKSZKU.js.map +1 -0
  166. package/dist/chunk-OB5F4577.cjs +40 -0
  167. package/dist/chunk-OB5F4577.cjs.map +1 -0
  168. package/dist/chunk-OBLSURHV.js +973 -0
  169. package/dist/chunk-OBLSURHV.js.map +1 -0
  170. package/dist/chunk-OUW6G4O2.cjs +96 -0
  171. package/dist/chunk-OUW6G4O2.cjs.map +1 -0
  172. package/dist/chunk-OVEQERPO.js +66 -0
  173. package/dist/chunk-OVEQERPO.js.map +1 -0
  174. package/dist/chunk-P6GHJSLR.js +34 -0
  175. package/dist/chunk-P6GHJSLR.js.map +1 -0
  176. package/dist/chunk-PCB2BPN3.cjs +41 -0
  177. package/dist/chunk-PCB2BPN3.cjs.map +1 -0
  178. package/dist/chunk-PPCATBOY.cjs +15 -0
  179. package/dist/chunk-PPCATBOY.cjs.map +1 -0
  180. package/dist/chunk-QN42OA5J.js +887 -0
  181. package/dist/chunk-QN42OA5J.js.map +1 -0
  182. package/dist/chunk-QXEJXIP4.js +675 -0
  183. package/dist/chunk-QXEJXIP4.js.map +1 -0
  184. package/dist/chunk-RC6VTY2H.js +47 -0
  185. package/dist/chunk-RC6VTY2H.js.map +1 -0
  186. package/dist/chunk-RFIBUWLF.cjs +232 -0
  187. package/dist/chunk-RFIBUWLF.cjs.map +1 -0
  188. package/dist/chunk-S7PSMMRG.js +38 -0
  189. package/dist/chunk-S7PSMMRG.js.map +1 -0
  190. package/dist/chunk-SCFYPAG6.cjs +18 -0
  191. package/dist/chunk-SCFYPAG6.cjs.map +1 -0
  192. package/dist/chunk-SYDHKKRZ.cjs +818 -0
  193. package/dist/chunk-SYDHKKRZ.cjs.map +1 -0
  194. package/dist/chunk-TX2ZICS7.js +139 -0
  195. package/dist/chunk-TX2ZICS7.js.map +1 -0
  196. package/dist/chunk-TYZUCAT7.js +787 -0
  197. package/dist/chunk-TYZUCAT7.js.map +1 -0
  198. package/dist/chunk-U2E3WT3J.js +45 -0
  199. package/dist/chunk-U2E3WT3J.js.map +1 -0
  200. package/dist/chunk-UBNVIIBT.js +284 -0
  201. package/dist/chunk-UBNVIIBT.js.map +1 -0
  202. package/dist/chunk-UFHMLHIR.cjs +66 -0
  203. package/dist/chunk-UFHMLHIR.cjs.map +1 -0
  204. package/dist/chunk-UJE32SST.js +39 -0
  205. package/dist/chunk-UJE32SST.js.map +1 -0
  206. package/dist/chunk-ULWRNGGE.cjs +146 -0
  207. package/dist/chunk-ULWRNGGE.cjs.map +1 -0
  208. package/dist/chunk-UWGIB3VQ.js +64 -0
  209. package/dist/chunk-UWGIB3VQ.js.map +1 -0
  210. package/dist/chunk-V4ISCZJ7.cjs +207 -0
  211. package/dist/chunk-V4ISCZJ7.cjs.map +1 -0
  212. package/dist/chunk-VFUWWH52.cjs +83 -0
  213. package/dist/chunk-VFUWWH52.cjs.map +1 -0
  214. package/dist/chunk-VILAPTCB.js +259 -0
  215. package/dist/chunk-VILAPTCB.js.map +1 -0
  216. package/dist/chunk-VLCY46K6.cjs +82 -0
  217. package/dist/chunk-VLCY46K6.cjs.map +1 -0
  218. package/dist/chunk-VPPX5XUF.cjs +813 -0
  219. package/dist/chunk-VPPX5XUF.cjs.map +1 -0
  220. package/dist/chunk-WJMEXTVD.cjs +122 -0
  221. package/dist/chunk-WJMEXTVD.cjs.map +1 -0
  222. package/dist/chunk-WTNMWEBC.js +504 -0
  223. package/dist/chunk-WTNMWEBC.js.map +1 -0
  224. package/dist/chunk-WW6EOVZA.js +112 -0
  225. package/dist/chunk-WW6EOVZA.js.map +1 -0
  226. package/dist/chunk-XNBAXRY7.cjs +5673 -0
  227. package/dist/chunk-XNBAXRY7.cjs.map +1 -0
  228. package/dist/chunk-XQ7PKKDY.cjs +787 -0
  229. package/dist/chunk-XQ7PKKDY.cjs.map +1 -0
  230. package/dist/chunk-XZIYRKLW.cjs +347 -0
  231. package/dist/chunk-XZIYRKLW.cjs.map +1 -0
  232. package/dist/chunk-YBXCZEWS.js +187 -0
  233. package/dist/chunk-YBXCZEWS.js.map +1 -0
  234. package/dist/chunk-YDHO4AVL.js +16 -0
  235. package/dist/chunk-YDHO4AVL.js.map +1 -0
  236. package/dist/chunk-ZORQ5M3W.cjs +934 -0
  237. package/dist/chunk-ZORQ5M3W.cjs.map +1 -0
  238. package/dist/chunk-ZW6FPIFC.cjs +36 -0
  239. package/dist/chunk-ZW6FPIFC.cjs.map +1 -0
  240. package/dist/citations/CitationEditor.d.ts +58 -0
  241. package/dist/citations/PassagePill.d.ts +49 -0
  242. package/dist/citations/QuietMarks.d.ts +81 -0
  243. package/dist/citations/index.cjs +47 -0
  244. package/dist/citations/index.cjs.map +1 -0
  245. package/dist/citations/index.d.ts +3 -0
  246. package/dist/citations/index.js +6 -0
  247. package/dist/citations/index.js.map +1 -0
  248. package/dist/collaboration/contacts/AddContactsParts.d.ts +46 -0
  249. package/dist/collaboration/contacts/index.d.ts +1 -0
  250. package/dist/collaboration/direct-messages/DirectMessages.d.ts +33 -0
  251. package/dist/collaboration/direct-messages/DmParts.d.ts +139 -0
  252. package/dist/collaboration/direct-messages/index.d.ts +2 -0
  253. package/dist/collaboration/index.cjs +141 -0
  254. package/dist/collaboration/index.cjs.map +1 -0
  255. package/dist/collaboration/index.d.ts +5 -0
  256. package/dist/collaboration/index.js +8 -0
  257. package/dist/collaboration/index.js.map +1 -0
  258. package/dist/collaboration/mail/MailFolderTree.d.ts +34 -0
  259. package/dist/collaboration/mail/index.d.ts +2 -0
  260. package/dist/collaboration/mail/mailFolders.d.ts +25 -0
  261. package/dist/collaboration/members/WorkspaceMembers.d.ts +74 -0
  262. package/dist/collaboration/members/index.d.ts +1 -0
  263. package/dist/collaboration/sharing/ShareControl.d.ts +38 -0
  264. package/dist/collaboration/sharing/index.d.ts +1 -0
  265. package/dist/components/Accordion.d.ts +12 -0
  266. package/dist/components/ActionLink.d.ts +18 -0
  267. package/dist/components/AskBar.d.ts +48 -0
  268. package/dist/components/AvatarBlock.d.ts +9 -0
  269. package/dist/components/Banner.d.ts +12 -0
  270. package/dist/components/BlockImage.d.ts +18 -0
  271. package/dist/components/CTABanner.d.ts +17 -0
  272. package/dist/components/Callout.d.ts +9 -0
  273. package/dist/components/Chart.d.ts +35 -0
  274. package/dist/components/CollectionDetail.d.ts +23 -0
  275. package/dist/components/Columns.d.ts +11 -0
  276. package/dist/components/ContactForm.d.ts +54 -0
  277. package/dist/components/Container.d.ts +11 -0
  278. package/dist/components/DataTable.d.ts +47 -0
  279. package/dist/components/DataTableBlock.d.ts +26 -0
  280. package/dist/components/EmptyState.d.ts +11 -0
  281. package/dist/components/EntityChip.d.ts +24 -0
  282. package/dist/components/EntityIdentityBar.d.ts +90 -0
  283. package/dist/components/EntityTooltip.d.ts +43 -0
  284. package/dist/components/FAQ.d.ts +14 -0
  285. package/dist/components/FeatureGrid.d.ts +18 -0
  286. package/dist/components/Footer.d.ts +25 -0
  287. package/dist/components/Gallery.d.ts +15 -0
  288. package/dist/components/Hero.d.ts +35 -0
  289. package/dist/components/ListBlock.d.ts +10 -0
  290. package/dist/components/LogoCloud.d.ts +12 -0
  291. package/dist/components/MediaText.d.ts +15 -0
  292. package/dist/components/MemberAvatarStack.d.ts +36 -0
  293. package/dist/components/MetricCard.d.ts +28 -0
  294. package/dist/components/Navbar.d.ts +39 -0
  295. package/dist/components/PageHeader.d.ts +15 -0
  296. package/dist/components/PricingTable.d.ts +19 -0
  297. package/dist/components/RichTextBlock.d.ts +10 -0
  298. package/dist/components/SectionHeading.d.ts +11 -0
  299. package/dist/components/Spacer.d.ts +7 -0
  300. package/dist/components/StatGroup.d.ts +12 -0
  301. package/dist/components/Steps.d.ts +12 -0
  302. package/dist/components/Tabs.d.ts +15 -0
  303. package/dist/components/TeamGrid.d.ts +30 -0
  304. package/dist/components/Testimonial.d.ts +9 -0
  305. package/dist/components/TestimonialGrid.d.ts +13 -0
  306. package/dist/components/ToneBadge.d.ts +18 -0
  307. package/dist/components/Toolbar.d.ts +11 -0
  308. package/dist/components/UsageMeter.d.ts +21 -0
  309. package/dist/components/VideoEmbed.d.ts +16 -0
  310. package/dist/components/assetImage.d.ts +16 -0
  311. package/dist/components/assetResolver.d.ts +57 -0
  312. package/dist/components/blockLink.d.ts +26 -0
  313. package/dist/components/editorial/ArticleList.d.ts +32 -0
  314. package/dist/components/editorial/Bands.d.ts +29 -0
  315. package/dist/components/editorial/EditorialHeading.d.ts +17 -0
  316. package/dist/components/editorial/EditorialHero.d.ts +46 -0
  317. package/dist/components/editorial/EditorialSection.d.ts +47 -0
  318. package/dist/components/editorial/Eyebrow.d.ts +14 -0
  319. package/dist/components/editorial/PanelGrid.d.ts +45 -0
  320. package/dist/components/editorial/ProfileCard.d.ts +27 -0
  321. package/dist/components/editorial/PullQuote.d.ts +17 -0
  322. package/dist/components/editorial/Reveal.d.ts +15 -0
  323. package/dist/components/editorial/index.d.ts +12 -0
  324. package/dist/components/editorial/lists.d.ts +42 -0
  325. package/dist/components/editorial/tone.d.ts +33 -0
  326. package/dist/components/tones.d.ts +14 -0
  327. package/dist/connect/index.cjs +65 -0
  328. package/dist/connect/index.cjs.map +1 -0
  329. package/dist/connect/index.d.ts +8 -0
  330. package/dist/connect/index.js +28 -0
  331. package/dist/connect/index.js.map +1 -0
  332. package/dist/connection/ArbiAppProvider.d.ts +16 -0
  333. package/dist/connection/ConnectionProvider.d.ts +50 -0
  334. package/dist/connection/ai.d.ts +99 -0
  335. package/dist/connection/types.d.ts +54 -0
  336. package/dist/connection/useImageGen.d.ts +22 -0
  337. package/dist/facts/FactComposer.d.ts +75 -0
  338. package/dist/facts/FactDateInput.d.ts +34 -0
  339. package/dist/facts/FactLabelsCell.d.ts +35 -0
  340. package/dist/facts/FactPassages.d.ts +52 -0
  341. package/dist/facts/FactRowActions.d.ts +18 -0
  342. package/dist/facts/FactSearchParts.d.ts +80 -0
  343. package/dist/facts/FactSourceGroup.d.ts +26 -0
  344. package/dist/facts/FactTimelineViews.d.ts +37 -0
  345. package/dist/facts/FactsBulkBar.d.ts +53 -0
  346. package/dist/facts/FactsEmptyState.d.ts +38 -0
  347. package/dist/facts/FactsFieldsButton.d.ts +21 -0
  348. package/dist/facts/FactsFilterInput.d.ts +46 -0
  349. package/dist/facts/FactsTable.d.ts +28 -0
  350. package/dist/facts/FactsToolbar.d.ts +53 -0
  351. package/dist/facts/FactsViewToggle.d.ts +38 -0
  352. package/dist/facts/fact-date.d.ts +22 -0
  353. package/dist/facts/fact-row.d.ts +32 -0
  354. package/dist/facts/fact-text.d.ts +14 -0
  355. package/dist/facts/factColumns.d.ts +88 -0
  356. package/dist/facts/index.cjs +2401 -0
  357. package/dist/facts/index.cjs.map +1 -0
  358. package/dist/facts/index.d.ts +35 -0
  359. package/dist/facts/index.js +2343 -0
  360. package/dist/facts/index.js.map +1 -0
  361. package/dist/facts/timezone.d.ts +4 -0
  362. package/dist/files/AiReviewDialog.d.ts +77 -0
  363. package/dist/files/DocStatusIcon.d.ts +12 -0
  364. package/dist/files/DocumentGrid.d.ts +27 -0
  365. package/dist/files/Explorer.d.ts +10 -0
  366. package/dist/files/ExplorerSurface.d.ts +34 -0
  367. package/dist/files/ExplorerTile.d.ts +142 -0
  368. package/dist/files/ExportParts.d.ts +114 -0
  369. package/dist/files/FieldParts.d.ts +64 -0
  370. package/dist/files/FilesPage.d.ts +20 -0
  371. package/dist/files/FilesToolbar.d.ts +59 -0
  372. package/dist/files/FolderPicker.d.ts +82 -0
  373. package/dist/files/GridView.d.ts +59 -0
  374. package/dist/files/HtmlViewerParts.d.ts +183 -0
  375. package/dist/files/MoveToFolderDialog.d.ts +32 -0
  376. package/dist/files/RedlineParts.d.ts +72 -0
  377. package/dist/files/SelectionBar.d.ts +65 -0
  378. package/dist/files/StatusPill.d.ts +23 -0
  379. package/dist/files/TagPassagePanel.d.ts +60 -0
  380. package/dist/files/UploadDropzone.d.ts +33 -0
  381. package/dist/files/UploadFooter.d.ts +59 -0
  382. package/dist/files/UploadParts.d.ts +78 -0
  383. package/dist/files/UploadSources.d.ts +77 -0
  384. package/dist/files/VersionTimeline.d.ts +60 -0
  385. package/dist/files/ViewToggle.d.ts +53 -0
  386. package/dist/files/ViewerChrome.d.ts +152 -0
  387. package/dist/files/ViewerLayout.d.ts +32 -0
  388. package/dist/files/ViewerParts.d.ts +62 -0
  389. package/dist/files/bulk/BulkActionsBar.d.ts +76 -0
  390. package/dist/files/bulk/FolderFilterButton.d.ts +35 -0
  391. package/dist/files/bulk/index.d.ts +2 -0
  392. package/dist/files/cells/DocumentNameCell.d.ts +31 -0
  393. package/dist/files/cells/FolderCell.d.ts +25 -0
  394. package/dist/files/cells/HoverIconCell.d.ts +21 -0
  395. package/dist/files/cells/LabelMultiSelect.d.ts +50 -0
  396. package/dist/files/cells/RelatedDocsCell.d.ts +22 -0
  397. package/dist/files/cells/TagColumnParts.d.ts +29 -0
  398. package/dist/files/cells/index.d.ts +6 -0
  399. package/dist/files/documentGridLayout.d.ts +31 -0
  400. package/dist/files/grid-test-ids.d.ts +18 -0
  401. package/dist/files/import/CalendarImportRow.d.ts +26 -0
  402. package/dist/files/import/ImportParts.d.ts +114 -0
  403. package/dist/files/import/TaskSection.d.ts +51 -0
  404. package/dist/files/import/UrlInputDialogView.d.ts +63 -0
  405. package/dist/files/import/VendorLogo.d.ts +15 -0
  406. package/dist/files/import/index.d.ts +5 -0
  407. package/dist/files/index.cjs +7555 -0
  408. package/dist/files/index.cjs.map +1 -0
  409. package/dist/files/index.d.ts +34 -0
  410. package/dist/files/index.js +7340 -0
  411. package/dist/files/index.js.map +1 -0
  412. package/dist/files/page/FilesAddMenu.d.ts +30 -0
  413. package/dist/files/page/FilesPageParts.d.ts +24 -0
  414. package/dist/files/page/FilesPageTitle.d.ts +24 -0
  415. package/dist/files/page/index.d.ts +3 -0
  416. package/dist/files/tags/BulkTagEditor.d.ts +136 -0
  417. package/dist/files/tags/DocTagPopover.d.ts +113 -0
  418. package/dist/files/tags/TagManager.d.ts +54 -0
  419. package/dist/files/tags/index.d.ts +3 -0
  420. package/dist/files/views/FieldsEditorParts.d.ts +151 -0
  421. package/dist/files/views/FieldsManagerParts.d.ts +17 -0
  422. package/dist/files/views/TagFormParts.d.ts +109 -0
  423. package/dist/files/views/ViewSelectorMenu.d.ts +66 -0
  424. package/dist/files/views/fieldsEditorModel.d.ts +43 -0
  425. package/dist/files/views/index.d.ts +5 -0
  426. package/dist/home/ActionMenuDialog.d.ts +26 -0
  427. package/dist/home/AddFilesFirst.d.ts +22 -0
  428. package/dist/home/CardHeaderBar.d.ts +40 -0
  429. package/dist/home/CollapsibleSection.d.ts +43 -0
  430. package/dist/home/CreateTile.d.ts +17 -0
  431. package/dist/home/DashboardParts.d.ts +32 -0
  432. package/dist/home/FactsStrip.d.ts +41 -0
  433. package/dist/home/FoldSection.d.ts +19 -0
  434. package/dist/home/GettingStartedStrip.d.ts +49 -0
  435. package/dist/home/Greeting.d.ts +18 -0
  436. package/dist/home/HomeLayout.d.ts +28 -0
  437. package/dist/home/KeyValueRow.d.ts +43 -0
  438. package/dist/home/ProjectBandParts.d.ts +70 -0
  439. package/dist/home/QuickActionDialogHeader.d.ts +21 -0
  440. package/dist/home/RecentList.d.ts +48 -0
  441. package/dist/home/ScopePicker.d.ts +65 -0
  442. package/dist/home/StartTiles.d.ts +33 -0
  443. package/dist/home/index.cjs +854 -0
  444. package/dist/home/index.cjs.map +1 -0
  445. package/dist/home/index.d.ts +37 -0
  446. package/dist/home/index.js +763 -0
  447. package/dist/home/index.js.map +1 -0
  448. package/dist/home/sections.d.ts +33 -0
  449. package/dist/index.cjs +1992 -5547
  450. package/dist/index.cjs.map +1 -1
  451. package/dist/index.d.ts +72 -1716
  452. package/dist/index.js +142 -5316
  453. package/dist/index.js.map +1 -1
  454. package/dist/lib/balanced-columns.d.ts +8 -0
  455. package/dist/lib/format.d.ts +37 -0
  456. package/dist/lib/observe-resize.d.ts +6 -0
  457. package/dist/lib/password-strength.d.ts +24 -0
  458. package/dist/lib/sidebar-mode.d.ts +46 -0
  459. package/dist/lib/testid.d.ts +7 -0
  460. package/dist/lib/use-drawer.d.ts +11 -0
  461. package/dist/lib/useControllableState.d.ts +5 -0
  462. package/dist/lib/useDismissibleCard.d.ts +15 -0
  463. package/dist/lib/useListKeyNav.d.ts +42 -0
  464. package/dist/lib/useLongPaste.d.ts +15 -0
  465. package/dist/lib/useRestoreFocus.d.ts +11 -0
  466. package/dist/lib/useScopeSelection.d.ts +34 -0
  467. package/dist/nav/types.d.ts +19 -0
  468. package/dist/provider/BlocksProvider.d.ts +20 -0
  469. package/dist/provider/TooltipScope.d.ts +9 -0
  470. package/dist/record/index.cjs +2 -4
  471. package/dist/record/index.cjs.map +1 -1
  472. package/dist/record/index.d.ts +12 -16
  473. package/dist/record/index.js +2 -4
  474. package/dist/record/index.js.map +1 -1
  475. package/dist/retrieval/HighlightText.d.ts +21 -0
  476. package/dist/retrieval/SearchEmptyState.d.ts +39 -0
  477. package/dist/retrieval/SearchGroupHeader.d.ts +21 -0
  478. package/dist/retrieval/SearchHit.d.ts +36 -0
  479. package/dist/retrieval/SearchPage.d.ts +187 -0
  480. package/dist/retrieval/SearchPagination.d.ts +21 -0
  481. package/dist/retrieval/highlight.d.ts +21 -0
  482. package/dist/retrieval/index.cjs +160 -0
  483. package/dist/retrieval/index.cjs.map +1 -0
  484. package/dist/retrieval/index.d.ts +7 -0
  485. package/dist/retrieval/index.js +7 -0
  486. package/dist/retrieval/index.js.map +1 -0
  487. package/dist/settings/AccountDialogs.d.ts +89 -0
  488. package/dist/settings/AvatarPicker.d.ts +25 -0
  489. package/dist/settings/Billing.d.ts +113 -0
  490. package/dist/settings/ConfigSwitcherBar.d.ts +46 -0
  491. package/dist/settings/ConfirmDialog.d.ts +28 -0
  492. package/dist/settings/ConnectionCard.d.ts +58 -0
  493. package/dist/settings/ConversationSettingsParts.d.ts +53 -0
  494. package/dist/settings/DocumentPicker.d.ts +57 -0
  495. package/dist/settings/EmailWorkspaceDialogView.d.ts +60 -0
  496. package/dist/settings/ErrorDialog.d.ts +36 -0
  497. package/dist/settings/FloatingPanel.d.ts +32 -0
  498. package/dist/settings/JsonTree.d.ts +24 -0
  499. package/dist/settings/LogoutDialog.d.ts +51 -0
  500. package/dist/settings/ModalBreadcrumbHeader.d.ts +32 -0
  501. package/dist/settings/ModalScaffold.d.ts +60 -0
  502. package/dist/settings/MultiSelect.d.ts +111 -0
  503. package/dist/settings/NotificationCategoryList.d.ts +26 -0
  504. package/dist/settings/PanelFrame.d.ts +47 -0
  505. package/dist/settings/PasswordChangeDialog.d.ts +64 -0
  506. package/dist/settings/PlanBadge.d.ts +14 -0
  507. package/dist/settings/PlanCard.d.ts +97 -0
  508. package/dist/settings/PremiumModelsFrame.d.ts +17 -0
  509. package/dist/settings/ProfileCard.d.ts +67 -0
  510. package/dist/settings/Projects.d.ts +108 -0
  511. package/dist/settings/QuotaMeter.d.ts +31 -0
  512. package/dist/settings/ReferralCredit.d.ts +46 -0
  513. package/dist/settings/SegmentedControl.d.ts +20 -0
  514. package/dist/settings/ServerConnectionControls.d.ts +31 -0
  515. package/dist/settings/SettingsPanel.d.ts +61 -0
  516. package/dist/settings/SettingsSwitchRow.d.ts +21 -0
  517. package/dist/settings/SubscriptionParts.d.ts +215 -0
  518. package/dist/settings/SupportPanel.d.ts +32 -0
  519. package/dist/settings/SyncDialogParts.d.ts +155 -0
  520. package/dist/settings/ThreadPreviewDialog.d.ts +18 -0
  521. package/dist/settings/TipsEditorDialog.d.ts +94 -0
  522. package/dist/settings/TriStateFilterMenu.d.ts +66 -0
  523. package/dist/settings/Usage.d.ts +102 -0
  524. package/dist/settings/WelcomeDialog.d.ts +79 -0
  525. package/dist/settings/index.cjs +5131 -0
  526. package/dist/settings/index.cjs.map +1 -0
  527. package/dist/settings/index.d.ts +38 -0
  528. package/dist/settings/index.js +4922 -0
  529. package/dist/settings/index.js.map +1 -0
  530. package/dist/shell/ActionCluster.d.ts +33 -0
  531. package/dist/shell/AskField.d.ts +76 -0
  532. package/dist/shell/InfoBar.d.ts +20 -0
  533. package/dist/shell/MobileBars.d.ts +47 -0
  534. package/dist/shell/OfflinePill.d.ts +28 -0
  535. package/dist/shell/RemoteControlPill.d.ts +23 -0
  536. package/dist/shell/Shell.d.ts +123 -0
  537. package/dist/shell/Sidebar.d.ts +104 -0
  538. package/dist/shell/SidebarBadgeRow.d.ts +29 -0
  539. package/dist/shell/SidebarRowAction.d.ts +24 -0
  540. package/dist/shell/StatusRow.d.ts +20 -0
  541. package/dist/shell/TabHeader.d.ts +70 -0
  542. package/dist/shell/TipCard.d.ts +46 -0
  543. package/dist/shell/ToolButton.d.ts +12 -0
  544. package/dist/shell/Workspace.d.ts +90 -0
  545. package/dist/shell/index.cjs +187 -0
  546. package/dist/shell/index.cjs.map +1 -0
  547. package/dist/shell/index.d.ts +20 -0
  548. package/dist/shell/index.js +10 -0
  549. package/dist/shell/index.js.map +1 -0
  550. package/dist/shell/sidebar-context.d.ts +19 -0
  551. package/dist/shell/types.d.ts +48 -0
  552. package/dist/site/index.cjs +173 -90
  553. package/dist/site/index.d.ts +60 -4
  554. package/dist/site/index.js +8 -1
  555. package/dist/studio/PageRenderer.d.ts +35 -0
  556. package/dist/studio/Section.d.ts +24 -0
  557. package/dist/studio/StudioEditor.d.ts +32 -0
  558. package/dist/studio/aiFields.d.ts +17 -0
  559. package/dist/studio/blockKit.d.ts +36 -0
  560. package/dist/studio/blocksConfig.d.ts +42 -0
  561. package/dist/studio/imageFields.d.ts +14 -0
  562. package/dist/studio/index.cjs +3353 -0
  563. package/dist/studio/index.cjs.map +1 -0
  564. package/dist/studio/index.d.ts +32 -0
  565. package/dist/studio/index.js +3297 -0
  566. package/dist/studio/index.js.map +1 -0
  567. package/dist/studio/liveData.d.ts +4 -0
  568. package/dist/studio/liveWidgetRuntime.d.ts +41 -0
  569. package/dist/studio/persistence.d.ts +38 -0
  570. package/dist/studio/publish.d.ts +39 -0
  571. package/dist/studio/siteBlocks.d.ts +14 -0
  572. package/dist/studio/types.d.ts +46 -0
  573. package/dist/studio/websiteBlocks.d.ts +4 -0
  574. package/dist/studio/widgets.d.ts +20 -0
  575. package/dist/theme/ThemeEditor.d.ts +16 -0
  576. package/dist/theme/fontPairings.d.ts +48 -0
  577. package/dist/theme/store.d.ts +53 -0
  578. package/dist/theme/tokens.d.ts +105 -0
  579. package/dist/timeline/Timeline.d.ts +27 -0
  580. package/dist/timeline/TimelineCalendar.d.ts +54 -0
  581. package/dist/timeline/TimelineGantt.d.ts +71 -0
  582. package/dist/timeline/TimelineZoomControl.d.ts +17 -0
  583. package/dist/timeline/index.cjs +50 -0
  584. package/dist/timeline/index.cjs.map +1 -0
  585. package/dist/timeline/index.d.ts +13 -0
  586. package/dist/timeline/index.js +5 -0
  587. package/dist/timeline/index.js.map +1 -0
  588. package/dist/timeline/span.d.ts +29 -0
  589. package/dist/timeline/types.d.ts +30 -0
  590. package/dist/workspaces/WorkspaceBadges.d.ts +27 -0
  591. package/dist/workspaces/WorkspaceCard.d.ts +142 -0
  592. package/dist/workspaces/WorkspaceFormParts.d.ts +98 -0
  593. package/dist/workspaces/WorkspaceGroup.d.ts +31 -0
  594. package/dist/workspaces/WorkspaceSettingsParts.d.ts +70 -0
  595. package/dist/workspaces/index.cjs +690 -0
  596. package/dist/workspaces/index.cjs.map +1 -0
  597. package/dist/workspaces/index.d.ts +9 -0
  598. package/dist/workspaces/index.js +661 -0
  599. package/dist/workspaces/index.js.map +1 -0
  600. package/package.json +154 -9
  601. package/src/blocks.css +365 -0
  602. package/src/components/grid.css +60 -107
  603. package/src/source.css +20 -0
  604. package/src/studio/studio.css +3 -3
  605. package/src/tokens.css +226 -0
  606. package/dist/chunk-DBAUZD7A.cjs.map +0 -1
  607. package/dist/chunk-FZ2S6VAZ.js.map +0 -1
  608. package/dist/index-DduoEosi.d.cts +0 -846
  609. package/dist/index-DduoEosi.d.ts +0 -846
  610. package/dist/index.d.cts +0 -1717
  611. package/dist/record/index.d.cts +0 -96
  612. package/dist/site/index.d.cts +0 -4
@@ -0,0 +1,1799 @@
1
+ "use client";
2
+ import { ActionLink } from './chunk-S7PSMMRG.js';
3
+ import { BlocksTooltipProvider } from './chunk-YDHO4AVL.js';
4
+ import { testIdOr, prefixedTestId } from './chunk-7F6CBP3Z.js';
5
+ import { createContext, forwardRef, useContext, useRef, useEffect, useCallback, useMemo, useState, useId } from 'react';
6
+ import { X, PanelLeft, PanelLeftClose, PanelLeftOpen, Globe, Users, Lock, ChevronDown, LayoutGrid, Plus, Sparkles, Search, ArrowUp, Menu, TriangleAlert, CheckCircle2, Loader2, RefreshCw, WifiOff, MousePointerClick, Lightbulb, Pencil, ChevronLeft, ChevronRight, Info } from 'lucide-react';
7
+ import { cn, Tooltip, TooltipTrigger, TooltipContent, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuLabel, Button } from '@arbidocs/react/ui';
8
+ export { UserMenu } from '@arbidocs/react/ui';
9
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
10
+ export { NotificationBell } from '@arbidocs/react/shell';
11
+
12
+ var FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
13
+ function focusableIn(container) {
14
+ return Array.from(container.querySelectorAll(FOCUSABLE)).filter(
15
+ (el) => !el.closest("[inert]") && el.getAttribute("aria-hidden") !== "true"
16
+ );
17
+ }
18
+ function useDrawerBehavior(isOpen, onClose, containerRef) {
19
+ const onCloseRef = useRef(onClose);
20
+ useEffect(() => {
21
+ onCloseRef.current = onClose;
22
+ });
23
+ useEffect(() => {
24
+ if (!isOpen) return;
25
+ const previousOverflow = document.body.style.overflow;
26
+ const opener = document.activeElement instanceof HTMLElement ? document.activeElement : null;
27
+ document.body.style.overflow = "hidden";
28
+ const container = containerRef?.current ?? null;
29
+ if (container) {
30
+ const first = focusableIn(container)[0];
31
+ if (first) first.focus();
32
+ else {
33
+ if (!container.hasAttribute("tabindex")) container.setAttribute("tabindex", "-1");
34
+ container.focus();
35
+ }
36
+ }
37
+ const onKey = (e) => {
38
+ if (e.key === "Escape") {
39
+ onCloseRef.current();
40
+ return;
41
+ }
42
+ if (e.key !== "Tab" || !container) return;
43
+ const items = focusableIn(container);
44
+ if (items.length === 0) {
45
+ e.preventDefault();
46
+ return;
47
+ }
48
+ const firstItem = items[0];
49
+ const lastItem = items[items.length - 1];
50
+ const active = document.activeElement;
51
+ if (!container.contains(active)) {
52
+ e.preventDefault();
53
+ firstItem.focus();
54
+ } else if (e.shiftKey && active === firstItem) {
55
+ e.preventDefault();
56
+ lastItem.focus();
57
+ } else if (!e.shiftKey && active === lastItem) {
58
+ e.preventDefault();
59
+ firstItem.focus();
60
+ }
61
+ };
62
+ window.addEventListener("keydown", onKey);
63
+ return () => {
64
+ document.body.style.overflow = previousOverflow;
65
+ window.removeEventListener("keydown", onKey);
66
+ if (opener?.isConnected) opener.focus();
67
+ };
68
+ }, [isOpen, containerRef]);
69
+ }
70
+ var DEFAULT_OVERLAY_ZONE_ID = "app-overlay-zone";
71
+ var OverlayZoneContext = createContext(DEFAULT_OVERLAY_ZONE_ID);
72
+ function useOverlayZoneId() {
73
+ return useContext(OverlayZoneContext);
74
+ }
75
+ function ShellRoot({
76
+ banner,
77
+ topbar,
78
+ sidebar,
79
+ tabBar,
80
+ aside,
81
+ overlays,
82
+ children,
83
+ className,
84
+ "data-testid": testId
85
+ }) {
86
+ return /* @__PURE__ */ jsx(BlocksTooltipProvider, { children: /* @__PURE__ */ jsxs(
87
+ "div",
88
+ {
89
+ "data-slot": "shell",
90
+ "data-testid": testId,
91
+ className: cn("flex h-screen flex-col", className),
92
+ children: [
93
+ banner,
94
+ topbar,
95
+ /* @__PURE__ */ jsxs("div", { className: "relative flex flex-1 overflow-hidden", children: [
96
+ sidebar,
97
+ children,
98
+ aside,
99
+ overlays
100
+ ] }),
101
+ tabBar
102
+ ]
103
+ }
104
+ ) });
105
+ }
106
+ function ShellContent({
107
+ children,
108
+ scrollRef,
109
+ onClick,
110
+ overlayZoneId = DEFAULT_OVERLAY_ZONE_ID,
111
+ className
112
+ }) {
113
+ return /* @__PURE__ */ jsx(
114
+ "div",
115
+ {
116
+ "data-slot": "shell-content",
117
+ className: cn("flex min-w-0 flex-1 flex-col", className),
118
+ onClick,
119
+ children: /* @__PURE__ */ jsxs("div", { className: "relative min-h-0 flex-1", children: [
120
+ /* @__PURE__ */ jsx(OverlayZoneContext.Provider, { value: overlayZoneId, children: /* @__PURE__ */ jsx("div", { ref: scrollRef, className: "h-full overflow-auto", children }) }),
121
+ /* @__PURE__ */ jsx("div", { id: overlayZoneId, "data-slot": "overlay-zone" })
122
+ ] })
123
+ }
124
+ );
125
+ }
126
+ function ShellTopbar({ children, actions, className }) {
127
+ return (
128
+ // `relative z-30` keeps dropdowns the header opens above the page region (a later sibling).
129
+ /* @__PURE__ */ jsxs(
130
+ "div",
131
+ {
132
+ "data-slot": "shell-topbar",
133
+ className: cn("relative z-30 flex h-14 shrink-0 items-center bg-background px-2", className),
134
+ children: [
135
+ /* @__PURE__ */ jsx("div", { className: "mx-auto flex w-full max-w-6xl items-center", children: /* @__PURE__ */ jsx("div", { className: "hidden min-w-0 flex-1 px-6 sm:block", children }) }),
136
+ /* @__PURE__ */ jsx("div", { className: "absolute right-4 top-1/2 flex -translate-y-1/2 items-center gap-1", children: actions })
137
+ ]
138
+ }
139
+ )
140
+ );
141
+ }
142
+ function ShellDock({
143
+ isOpen,
144
+ onOpenChange,
145
+ width = "24rem",
146
+ isMobile = false,
147
+ label,
148
+ closeLabel = "Close",
149
+ children,
150
+ className,
151
+ "data-testid": testId
152
+ }) {
153
+ const mobileRef = useRef(null);
154
+ const closeMobile = useCallback(() => onOpenChange?.(false), [onOpenChange]);
155
+ useDrawerBehavior(isOpen && isMobile, closeMobile, mobileRef);
156
+ if (!isOpen) return null;
157
+ if (isMobile) {
158
+ return /* @__PURE__ */ jsxs(
159
+ "div",
160
+ {
161
+ ref: mobileRef,
162
+ role: "dialog",
163
+ "aria-modal": "true",
164
+ "aria-label": label,
165
+ "data-slot": "shell-dock",
166
+ "data-state": "open",
167
+ "data-mobile": "true",
168
+ "data-testid": testId,
169
+ className: cn("fixed inset-0 z-40 flex flex-col bg-background", className),
170
+ children: [
171
+ onOpenChange && /* @__PURE__ */ jsx(
172
+ "button",
173
+ {
174
+ type: "button",
175
+ onClick: () => onOpenChange(false),
176
+ "aria-label": closeLabel,
177
+ className: "absolute right-2 top-2 z-10 rounded-md p-2 text-muted-foreground hover:bg-muted",
178
+ children: /* @__PURE__ */ jsx(X, { className: "size-5" })
179
+ }
180
+ ),
181
+ children
182
+ ]
183
+ }
184
+ );
185
+ }
186
+ return /* @__PURE__ */ jsx(
187
+ "aside",
188
+ {
189
+ "aria-label": label,
190
+ "data-slot": "shell-dock",
191
+ "data-state": "open",
192
+ "data-testid": testId,
193
+ style: { width },
194
+ className: cn(
195
+ "flex shrink-0 flex-col overflow-hidden border-l border-border bg-background",
196
+ className
197
+ ),
198
+ children
199
+ }
200
+ );
201
+ }
202
+ var Shell = {
203
+ Root: ShellRoot,
204
+ Content: ShellContent,
205
+ Topbar: ShellTopbar,
206
+ Dock: ShellDock
207
+ };
208
+ var DEFAULT_PAGE_CONTAINER_PADDING = "px-4 sm:px-6 lg:px-8";
209
+ function PageContainer({
210
+ children,
211
+ wide = false,
212
+ minScreen = false,
213
+ maxWidth = "max-w-6xl",
214
+ padding = DEFAULT_PAGE_CONTAINER_PADDING,
215
+ innerClassName,
216
+ className
217
+ }) {
218
+ return /* @__PURE__ */ jsx(
219
+ "div",
220
+ {
221
+ "data-slot": "page-container",
222
+ className: cn(
223
+ "bg-background pb-safe",
224
+ minScreen ? "min-h-screen" : "h-full min-h-0",
225
+ className
226
+ ),
227
+ children: /* @__PURE__ */ jsx(
228
+ "div",
229
+ {
230
+ className: cn(
231
+ "flex h-full w-full flex-col pb-safe",
232
+ padding,
233
+ !wide && cn("mx-auto", maxWidth),
234
+ innerClassName
235
+ ),
236
+ children
237
+ }
238
+ )
239
+ }
240
+ );
241
+ }
242
+ var DEFAULT_SIDEBAR_TOGGLE_BUTTON_LABELS = {
243
+ closeSidebar: "Close sidebar",
244
+ openSidebar: "Open sidebar"
245
+ };
246
+ function SidebarToggleButton({
247
+ isOpen,
248
+ onToggle,
249
+ labels,
250
+ "data-testid": testId = "tabheader-sidebar-toggle"
251
+ }) {
252
+ const l = { ...DEFAULT_SIDEBAR_TOGGLE_BUTTON_LABELS, ...labels };
253
+ const label = isOpen ? l.closeSidebar : l.openSidebar;
254
+ return /* @__PURE__ */ jsx(
255
+ "button",
256
+ {
257
+ type: "button",
258
+ onClick: onToggle,
259
+ className: "rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground pointer-coarse:p-2.5",
260
+ "aria-label": label,
261
+ title: label,
262
+ "data-testid": testId,
263
+ children: /* @__PURE__ */ jsx(PanelLeft, { className: "size-5" })
264
+ }
265
+ );
266
+ }
267
+ var DEFAULT_SIDEBAR_LABELS = {
268
+ mainNavigation: "Main navigation",
269
+ hideSidebar: "Hide sidebar",
270
+ showSidebar: "Show sidebar",
271
+ closeNavigationMenu: "Close navigation menu"
272
+ };
273
+ var SidebarContext = createContext({
274
+ expanded: true,
275
+ labels: DEFAULT_SIDEBAR_LABELS
276
+ });
277
+ var useSidebarContext = () => useContext(SidebarContext);
278
+ var SidebarRowHoverContext = createContext(false);
279
+ var SidebarBadgeRow = forwardRef(
280
+ function SidebarBadgeRow2({ icon, label, count, ariaLabel, variant, badgeTestId, className, type = "button", ...rest }, ref) {
281
+ const { expanded } = useSidebarContext();
282
+ const resolved = variant ?? (expanded ? "row" : "icon");
283
+ const hasCount = count !== void 0 && count > 0;
284
+ const badgeText = hasCount ? count > 9 ? "9+" : String(count) : null;
285
+ const name = ariaLabel ?? (hasCount ? `${label}, ${count}` : label);
286
+ if (resolved === "row") {
287
+ return /* @__PURE__ */ jsxs(
288
+ "button",
289
+ {
290
+ ref,
291
+ type,
292
+ "aria-label": name,
293
+ "data-slot": "sidebar-badge-row",
294
+ "data-variant": "row",
295
+ className: cn(
296
+ "group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-left text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11",
297
+ className
298
+ ),
299
+ ...rest,
300
+ children: [
301
+ /* @__PURE__ */ jsx("span", { className: "flex size-5 flex-shrink-0 items-center justify-center", "aria-hidden": true, children: icon }),
302
+ /* @__PURE__ */ jsx("span", { className: "ml-3 min-w-0 truncate", "aria-hidden": true, children: label }),
303
+ badgeText && /* @__PURE__ */ jsx(
304
+ "span",
305
+ {
306
+ "aria-hidden": true,
307
+ "data-testid": badgeTestId,
308
+ className: "ml-auto inline-flex min-w-5 flex-shrink-0 items-center justify-center rounded-full bg-primary px-1.5 text-xs font-semibold leading-5 tabular-nums text-primary-foreground",
309
+ children: badgeText
310
+ }
311
+ )
312
+ ]
313
+ }
314
+ );
315
+ }
316
+ const iconButton = /* @__PURE__ */ jsxs(
317
+ "button",
318
+ {
319
+ ref,
320
+ type,
321
+ "aria-label": name,
322
+ "data-slot": "sidebar-badge-row",
323
+ "data-variant": "icon",
324
+ title: variant === "icon" ? label : void 0,
325
+ className: cn(
326
+ "relative m-0 flex h-9 w-12 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11",
327
+ className
328
+ ),
329
+ ...rest,
330
+ children: [
331
+ /* @__PURE__ */ jsx("span", { className: "flex size-5 items-center justify-center", "aria-hidden": true, children: icon }),
332
+ badgeText && /* @__PURE__ */ jsx(
333
+ "span",
334
+ {
335
+ "aria-hidden": true,
336
+ "data-testid": badgeTestId,
337
+ className: "absolute right-1 top-0.5 flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-xs font-semibold leading-4 tabular-nums text-primary-foreground",
338
+ children: badgeText
339
+ }
340
+ )
341
+ ]
342
+ }
343
+ );
344
+ if (variant === "icon") return iconButton;
345
+ return /* @__PURE__ */ jsxs(Tooltip, { delayDuration: 50, children: [
346
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: iconButton }),
347
+ /* @__PURE__ */ jsx(TooltipContent, { side: "right", sideOffset: 8, children: label })
348
+ ] });
349
+ }
350
+ );
351
+ var noop = () => {
352
+ };
353
+ var COLLAPSED_WIDTH = "64px";
354
+ var EXPANDED_WIDTH = "256px";
355
+ function SidebarRoot({
356
+ mode,
357
+ expanded,
358
+ isHovering = false,
359
+ isPeeking = false,
360
+ onBackdropClick,
361
+ hasRailBackdrop = false,
362
+ onMouseEnter,
363
+ onMouseLeave,
364
+ children,
365
+ className,
366
+ "aria-label": ariaLabelProp,
367
+ labels,
368
+ "data-testid": testId,
369
+ backdropTestId
370
+ }) {
371
+ const mergedLabels = useMemo(() => ({ ...DEFAULT_SIDEBAR_LABELS, ...labels }), [labels]);
372
+ const drawerRef = useRef(null);
373
+ const isDrawer = mode === "drawer";
374
+ useDrawerBehavior(isDrawer, onBackdropClick ?? noop, drawerRef);
375
+ const ariaLabel = ariaLabelProp ?? mergedLabels.mainNavigation;
376
+ const contextValue = useMemo(() => ({ expanded, labels: mergedLabels }), [expanded, mergedLabels]);
377
+ const navBase = "group/sidebar bg-sidebar border-r border-border text-foreground flex flex-col h-full overflow-y-auto overflow-x-hidden pb-safe pt-3 transition-all duration-300 ease-in-out";
378
+ const common = {
379
+ "aria-label": ariaLabel,
380
+ "data-testid": testIdOr(testId, { testId: "sidebar" }),
381
+ "data-slot": "sidebar",
382
+ "data-mode": mode
383
+ };
384
+ const fixedWidth = { width: EXPANDED_WIDTH, minWidth: EXPANDED_WIDTH };
385
+ let body;
386
+ if (mode === "drawer") {
387
+ body = /* @__PURE__ */ jsxs(
388
+ "div",
389
+ {
390
+ ref: drawerRef,
391
+ role: "dialog",
392
+ "aria-modal": "true",
393
+ "aria-label": ariaLabel,
394
+ "data-slot": "sidebar-drawer",
395
+ className: "fixed inset-0 z-50",
396
+ children: [
397
+ /* @__PURE__ */ jsx(
398
+ "div",
399
+ {
400
+ className: "absolute inset-0 bg-black/50",
401
+ onClick: onBackdropClick,
402
+ "aria-hidden": "true",
403
+ "data-testid": testIdOr(backdropTestId, { testId: "sidebar-backdrop" })
404
+ }
405
+ ),
406
+ /* @__PURE__ */ jsx(
407
+ "nav",
408
+ {
409
+ ...common,
410
+ className: cn(navBase, "!px-3 absolute left-0 top-0 pt-safe shadow-xl", className),
411
+ style: fixedWidth,
412
+ children
413
+ }
414
+ )
415
+ ]
416
+ }
417
+ );
418
+ } else if (mode === "collapsed") {
419
+ body = /* @__PURE__ */ jsx(
420
+ "nav",
421
+ {
422
+ ...common,
423
+ className: cn(navBase, "absolute left-0 top-0 z-[45]", isPeeking && "shadow-xl", className),
424
+ style: {
425
+ width: isPeeking ? EXPANDED_WIDTH : "0px",
426
+ minWidth: 0,
427
+ paddingLeft: isPeeking ? "0.75rem" : 0,
428
+ paddingRight: isPeeking ? "0.75rem" : 0,
429
+ borderRightWidth: isPeeking ? void 0 : 0,
430
+ pointerEvents: isPeeking ? "auto" : "none"
431
+ },
432
+ inert: !isPeeking,
433
+ onMouseEnter,
434
+ onMouseLeave,
435
+ children
436
+ }
437
+ );
438
+ } else if (mode === "pinned") {
439
+ body = /* @__PURE__ */ jsx(
440
+ "nav",
441
+ {
442
+ ...common,
443
+ className: cn(navBase, "!px-3 relative flex-shrink-0", className),
444
+ style: fixedWidth,
445
+ onMouseEnter,
446
+ onMouseLeave,
447
+ children
448
+ }
449
+ );
450
+ } else {
451
+ body = /* @__PURE__ */ jsxs(Fragment, { children: [
452
+ /* @__PURE__ */ jsx(
453
+ "div",
454
+ {
455
+ className: "bg-sidebar border-r border-border flex flex-col h-full relative px-0 pb-safe flex-shrink-0",
456
+ style: { width: COLLAPSED_WIDTH, minWidth: COLLAPSED_WIDTH },
457
+ "aria-hidden": "true"
458
+ }
459
+ ),
460
+ isHovering && hasRailBackdrop && /* @__PURE__ */ jsx(
461
+ "div",
462
+ {
463
+ className: "fixed inset-0 z-[44] bg-black/40",
464
+ onClick: onBackdropClick,
465
+ "aria-hidden": "true",
466
+ "data-testid": testIdOr(backdropTestId, { testId: "sidebar-backdrop" })
467
+ }
468
+ ),
469
+ /* @__PURE__ */ jsx(
470
+ "nav",
471
+ {
472
+ ...common,
473
+ className: cn(
474
+ navBase,
475
+ isHovering ? "!px-3 shadow-xl" : "!px-2",
476
+ "absolute left-0 top-0 z-[45]",
477
+ className
478
+ ),
479
+ style: {
480
+ width: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH,
481
+ minWidth: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH
482
+ },
483
+ onMouseEnter,
484
+ onMouseLeave,
485
+ children
486
+ }
487
+ )
488
+ ] });
489
+ }
490
+ return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(BlocksTooltipProvider, { children: body }) });
491
+ }
492
+ function SidebarHeader({ children, className, "data-testid": testId }) {
493
+ return /* @__PURE__ */ jsx(
494
+ "div",
495
+ {
496
+ "data-slot": "sidebar-header",
497
+ "data-testid": testId,
498
+ className: cn("flex flex-shrink-0 flex-col gap-3 pb-3", className),
499
+ children
500
+ }
501
+ );
502
+ }
503
+ function SidebarNav({ items, children, className, "data-testid": testId }) {
504
+ const { expanded } = useSidebarContext();
505
+ return /* @__PURE__ */ jsxs(
506
+ "div",
507
+ {
508
+ "data-slot": "sidebar-nav",
509
+ "data-testid": testId,
510
+ className: cn("flex flex-shrink-0 flex-col gap-0.5", !expanded && "items-center", className),
511
+ children: [
512
+ items?.map((item) => /* @__PURE__ */ jsx(SidebarNavItem, { ...item }, item.id)),
513
+ children
514
+ ]
515
+ }
516
+ );
517
+ }
518
+ function SidebarGroup({
519
+ label,
520
+ ariaLabel,
521
+ children,
522
+ className,
523
+ "data-testid": testId
524
+ }) {
525
+ const { expanded } = useSidebarContext();
526
+ return /* @__PURE__ */ jsxs(
527
+ "div",
528
+ {
529
+ role: "group",
530
+ "aria-label": ariaLabel ?? (typeof label === "string" ? label : void 0),
531
+ "data-slot": "sidebar-group",
532
+ "data-testid": testId,
533
+ className: cn("flex flex-shrink-0 flex-col gap-0.5", !expanded && "items-center", className),
534
+ children: [
535
+ label && (expanded ? /* @__PURE__ */ jsx(SidebarGroupLabel, { children: label }) : /* @__PURE__ */ jsx(
536
+ "div",
537
+ {
538
+ role: "separator",
539
+ "data-slot": "sidebar-group-divider",
540
+ className: "my-1 h-px w-6 bg-border"
541
+ }
542
+ )),
543
+ children
544
+ ]
545
+ }
546
+ );
547
+ }
548
+ function SidebarGroupLabel({ children, className }) {
549
+ return /* @__PURE__ */ jsx(
550
+ "div",
551
+ {
552
+ "data-slot": "sidebar-group-label",
553
+ className: cn(
554
+ "px-2 pb-0.5 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground",
555
+ className
556
+ ),
557
+ children
558
+ }
559
+ );
560
+ }
561
+ function SidebarFooter({ children, className, "data-testid": testId }) {
562
+ const { expanded } = useSidebarContext();
563
+ return /* @__PURE__ */ jsx(
564
+ "div",
565
+ {
566
+ "data-slot": "sidebar-footer",
567
+ "data-testid": testId,
568
+ className: cn(
569
+ "mt-auto flex flex-shrink-0 flex-col gap-2 pt-3 pb-3",
570
+ !expanded && "items-center",
571
+ className
572
+ ),
573
+ children
574
+ }
575
+ );
576
+ }
577
+ function SidebarNavItem({
578
+ label,
579
+ icon,
580
+ active = false,
581
+ onSelect,
582
+ href,
583
+ count,
584
+ countIcon,
585
+ testId,
586
+ disabled = false,
587
+ trailing,
588
+ className,
589
+ tooltip
590
+ }) {
591
+ const { expanded } = useSidebarContext();
592
+ const [isRowActive, setIsRowActive] = useState(false);
593
+ const tip = expanded ? void 0 : tooltip ?? label;
594
+ if (!expanded) {
595
+ const railButton = /* @__PURE__ */ jsx(
596
+ ActionLink,
597
+ {
598
+ href,
599
+ onSelect,
600
+ disabled,
601
+ "aria-label": label,
602
+ "aria-current": active ? "page" : void 0,
603
+ "data-slot": "sidebar-nav-item",
604
+ "data-testid": testId,
605
+ className: cn(
606
+ "m-0 flex h-9 w-12 items-center justify-center rounded-md transition-colors pointer-coarse:h-11",
607
+ active ? "bg-accent text-accent-foreground" : "text-muted-foreground hover:bg-muted hover:text-foreground",
608
+ disabled && "pointer-events-none cursor-not-allowed opacity-30",
609
+ className
610
+ ),
611
+ children: /* @__PURE__ */ jsx("div", { className: "flex size-5 items-center justify-center", children: icon })
612
+ }
613
+ );
614
+ if (!tip) return railButton;
615
+ return /* @__PURE__ */ jsxs(Tooltip, { delayDuration: 50, children: [
616
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: railButton }),
617
+ /* @__PURE__ */ jsx(TooltipContent, { side: "right", sideOffset: 8, children: tip })
618
+ ] });
619
+ }
620
+ const rowClass = cn(
621
+ "group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-sm transition-colors pointer-coarse:h-11",
622
+ active ? "bg-accent font-semibold text-accent-foreground" : "font-medium text-muted-foreground hover:bg-muted hover:text-foreground",
623
+ disabled && "pointer-events-none cursor-not-allowed opacity-30",
624
+ className
625
+ );
626
+ const countNode = count !== void 0 && /* @__PURE__ */ jsxs(
627
+ "span",
628
+ {
629
+ className: cn(
630
+ "ml-auto inline-flex flex-shrink-0 items-center gap-0.5 pl-2 text-xs font-normal tabular-nums",
631
+ active ? "text-accent-foreground" : "text-muted-foreground"
632
+ ),
633
+ children: [
634
+ countIcon,
635
+ count
636
+ ]
637
+ }
638
+ );
639
+ if (href && !disabled && !trailing) {
640
+ return /* @__PURE__ */ jsxs(
641
+ ActionLink,
642
+ {
643
+ href,
644
+ onSelect,
645
+ "aria-current": active ? "page" : void 0,
646
+ "data-slot": "sidebar-nav-item",
647
+ "data-testid": testId,
648
+ className: rowClass,
649
+ children: [
650
+ /* @__PURE__ */ jsx("div", { className: "flex size-5 flex-shrink-0 items-center justify-center", children: icon }),
651
+ /* @__PURE__ */ jsx("span", { className: "ml-3 min-w-0 truncate text-left", children: label }),
652
+ countNode
653
+ ]
654
+ }
655
+ );
656
+ }
657
+ if (href && !disabled) {
658
+ return /* @__PURE__ */ jsxs(
659
+ "div",
660
+ {
661
+ onMouseEnter: () => setIsRowActive(true),
662
+ onMouseLeave: () => setIsRowActive(false),
663
+ onFocusCapture: () => setIsRowActive(true),
664
+ onBlurCapture: (e) => {
665
+ if (!e.currentTarget.contains(e.relatedTarget)) setIsRowActive(false);
666
+ },
667
+ "data-slot": "sidebar-nav-item",
668
+ "data-testid": testId,
669
+ className: cn(rowClass, "relative"),
670
+ children: [
671
+ /* @__PURE__ */ jsx(
672
+ ActionLink,
673
+ {
674
+ href,
675
+ onSelect,
676
+ "aria-label": label,
677
+ "aria-current": active ? "page" : void 0,
678
+ className: "absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
679
+ }
680
+ ),
681
+ /* @__PURE__ */ jsxs("div", { className: "pointer-events-none flex min-w-0 flex-1 items-center", children: [
682
+ /* @__PURE__ */ jsx("div", { className: "flex size-5 flex-shrink-0 items-center justify-center", children: icon }),
683
+ /* @__PURE__ */ jsx("span", { className: "ml-3 min-w-0 truncate text-left", children: label }),
684
+ countNode
685
+ ] }),
686
+ /* @__PURE__ */ jsx(SidebarRowHoverContext.Provider, { value: isRowActive, children: /* @__PURE__ */ jsx("span", { className: "relative ml-2 flex flex-shrink-0 items-center", children: trailing }) })
687
+ ]
688
+ }
689
+ );
690
+ }
691
+ return /* @__PURE__ */ jsxs(
692
+ "div",
693
+ {
694
+ role: "button",
695
+ tabIndex: disabled ? -1 : 0,
696
+ "aria-current": active ? "page" : void 0,
697
+ onClick: disabled ? void 0 : onSelect,
698
+ onMouseEnter: () => setIsRowActive(true),
699
+ onMouseLeave: () => setIsRowActive(false),
700
+ onFocusCapture: () => setIsRowActive(true),
701
+ onBlurCapture: (e) => {
702
+ if (!e.currentTarget.contains(e.relatedTarget)) setIsRowActive(false);
703
+ },
704
+ onKeyDown: disabled ? void 0 : (e) => {
705
+ if (e.key === "Enter" || e.key === " ") {
706
+ e.preventDefault();
707
+ onSelect();
708
+ }
709
+ },
710
+ "data-slot": "sidebar-nav-item",
711
+ "data-testid": testId,
712
+ className: rowClass,
713
+ children: [
714
+ /* @__PURE__ */ jsx("div", { className: "flex size-5 flex-shrink-0 items-center justify-center", children: icon }),
715
+ /* @__PURE__ */ jsx("span", { className: "ml-3 min-w-0 truncate text-left", children: label }),
716
+ countNode,
717
+ trailing && /* @__PURE__ */ jsx(SidebarRowHoverContext.Provider, { value: isRowActive, children: /* @__PURE__ */ jsx("span", { className: "ml-2 flex flex-shrink-0 items-center", children: trailing }) })
718
+ ]
719
+ }
720
+ );
721
+ }
722
+ function SidebarPinToggle({
723
+ isPinned,
724
+ onToggle,
725
+ className,
726
+ "data-testid": testId
727
+ }) {
728
+ const { expanded, labels } = useSidebarContext();
729
+ const label = isPinned ? labels.hideSidebar : labels.showSidebar;
730
+ return /* @__PURE__ */ jsx(
731
+ "button",
732
+ {
733
+ type: "button",
734
+ onClick: onToggle,
735
+ title: label,
736
+ "aria-label": label,
737
+ "aria-pressed": isPinned,
738
+ "data-testid": testIdOr(testId, { testId: "sidebar-pin-button" }),
739
+ className: cn(
740
+ "flex flex-shrink-0 items-center justify-center rounded-md text-muted-foreground transition-[opacity,colors] hover:bg-muted hover:text-foreground pointer-coarse:size-11",
741
+ "pointer-events-none opacity-0 group-hover/sidebar:pointer-events-auto group-hover/sidebar:opacity-100",
742
+ "group-focus-within/sidebar:pointer-events-auto group-focus-within/sidebar:opacity-100",
743
+ "pointer-coarse:pointer-events-auto pointer-coarse:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100",
744
+ expanded ? "size-9" : "h-9 w-12",
745
+ className
746
+ ),
747
+ children: isPinned ? /* @__PURE__ */ jsx(PanelLeftClose, { className: "size-5" }) : /* @__PURE__ */ jsx(PanelLeftOpen, { className: "size-5" })
748
+ }
749
+ );
750
+ }
751
+ function SidebarDrawerHeader({
752
+ logo,
753
+ onClose,
754
+ closeLabel: closeLabelProp,
755
+ "data-testid": testId
756
+ }) {
757
+ const { labels } = useSidebarContext();
758
+ const closeLabel = closeLabelProp ?? labels.closeNavigationMenu;
759
+ return /* @__PURE__ */ jsxs(
760
+ "div",
761
+ {
762
+ "data-slot": "sidebar-drawer-header",
763
+ className: "flex flex-shrink-0 items-center justify-between pb-2",
764
+ children: [
765
+ logo,
766
+ /* @__PURE__ */ jsx(
767
+ "button",
768
+ {
769
+ type: "button",
770
+ onClick: onClose,
771
+ "aria-label": closeLabel,
772
+ "data-testid": testIdOr(testId, { testId: "mobile-nav-close" }),
773
+ className: "flex size-11 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
774
+ children: /* @__PURE__ */ jsx(X, { className: "size-5" })
775
+ }
776
+ )
777
+ ]
778
+ }
779
+ );
780
+ }
781
+ var Sidebar = {
782
+ Root: SidebarRoot,
783
+ Header: SidebarHeader,
784
+ Nav: SidebarNav,
785
+ Group: SidebarGroup,
786
+ GroupLabel: SidebarGroupLabel,
787
+ NavItem: SidebarNavItem,
788
+ Footer: SidebarFooter,
789
+ PinToggle: SidebarPinToggle,
790
+ BadgeRow: SidebarBadgeRow,
791
+ DrawerHeader: SidebarDrawerHeader
792
+ };
793
+ var PULSE_STYLES = {
794
+ active: "animate-pulse-attention text-primary",
795
+ success: "animate-pulse-attention text-green-text",
796
+ // Steady (not animated) so a failure stays put and reads as a standing alert.
797
+ error: "text-red-text opacity-100"
798
+ };
799
+ function SidebarRowAction({
800
+ active = false,
801
+ onClick,
802
+ label,
803
+ pressed,
804
+ pulse = null,
805
+ "data-testid": testId,
806
+ children
807
+ }) {
808
+ const rowHovered = useContext(SidebarRowHoverContext);
809
+ const tone = active ? "text-accent-foreground hover:bg-background/60" : pulse ? `${PULSE_STYLES[pulse]} hover:bg-muted` : cn(
810
+ "text-muted-foreground hover:bg-muted hover:text-foreground",
811
+ rowHovered ? "opacity-100" : "opacity-70"
812
+ );
813
+ return /* @__PURE__ */ jsx(BlocksTooltipProvider, { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
814
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, onFocusCapture: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx(
815
+ "button",
816
+ {
817
+ type: "button",
818
+ onClick: (e) => {
819
+ e.stopPropagation();
820
+ onClick?.();
821
+ },
822
+ "aria-label": label,
823
+ "aria-pressed": pressed,
824
+ "data-slot": "sidebar-row-action",
825
+ "data-testid": testId,
826
+ className: cn("rounded-md p-1 transition-colors pointer-coarse:p-2.5", tone),
827
+ children
828
+ }
829
+ ) }),
830
+ /* @__PURE__ */ jsx(TooltipContent, { side: "right", children: label })
831
+ ] }) });
832
+ }
833
+ var DEFAULT_WORKSPACE_KIND_LABELS = {
834
+ common: "Common",
835
+ shared: "Shared",
836
+ private: "Private"
837
+ };
838
+ function workspaceKindMeta(kind, labels) {
839
+ const l = { ...DEFAULT_WORKSPACE_KIND_LABELS, ...labels };
840
+ if (kind === "common")
841
+ return { Icon: Globe, label: l.common, fill: "bg-muted text-muted-foreground" };
842
+ if (kind === "shared")
843
+ return { Icon: Users, label: l.shared, fill: "bg-accent text-accent-foreground" };
844
+ return { Icon: Lock, label: l.private, fill: "bg-primary text-primary-foreground" };
845
+ }
846
+ function workspaceKindColor(kind) {
847
+ if (kind === "common") return "var(--color-muted-foreground)";
848
+ if (kind === "shared") return "var(--color-secondary)";
849
+ return "var(--color-primary)";
850
+ }
851
+ function WorkspaceIdentity({
852
+ workspace,
853
+ expanded,
854
+ isActive = false,
855
+ labels,
856
+ testIds
857
+ }) {
858
+ const kind = workspaceKindMeta(workspace.kind, labels);
859
+ const badge = /* @__PURE__ */ jsxs("span", { className: "relative flex flex-shrink-0", title: kind.label, children: [
860
+ /* @__PURE__ */ jsx(
861
+ "span",
862
+ {
863
+ "aria-hidden": "true",
864
+ "data-testid": testIdOr(testIds?.initial, { testId: "sidebar-workspace-card-initial" }),
865
+ className: cn(
866
+ "flex size-7 flex-shrink-0 items-center justify-center rounded-md text-sm font-semibold leading-none",
867
+ kind.fill
868
+ ),
869
+ children: workspace.name.charAt(0).toUpperCase()
870
+ }
871
+ ),
872
+ /* @__PURE__ */ jsx("span", { className: "absolute -bottom-1 -right-1 flex size-3.5 items-center justify-center rounded-full bg-background ring-1 ring-border", children: /* @__PURE__ */ jsx(
873
+ kind.Icon,
874
+ {
875
+ "aria-label": kind.label,
876
+ "data-testid": testIdOr(testIds?.type, { testId: "sidebar-workspace-card-type" }),
877
+ className: "size-2.5 text-muted-foreground"
878
+ }
879
+ ) })
880
+ ] });
881
+ if (!expanded)
882
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-shrink-0 items-center justify-center", children: badge });
883
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
884
+ /* @__PURE__ */ jsx("div", { className: "flex flex-shrink-0 items-center justify-center", children: badge }),
885
+ /* @__PURE__ */ jsxs("div", { className: "ml-2.5 flex min-w-0 flex-1 flex-col text-left", children: [
886
+ /* @__PURE__ */ jsx(
887
+ "span",
888
+ {
889
+ className: cn(
890
+ "min-w-0 truncate text-left text-sm font-semibold capitalize leading-tight transition-colors duration-100",
891
+ isActive ? "text-accent-foreground" : "text-foreground"
892
+ ),
893
+ children: workspace.name
894
+ }
895
+ ),
896
+ !workspace.projectName && /* @__PURE__ */ jsx("span", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: kind.label }),
897
+ workspace.projectName && /* @__PURE__ */ jsx(
898
+ "span",
899
+ {
900
+ className: "mt-0.5 flex min-w-0",
901
+ "data-testid": testIdOr(testIds?.projectName, {
902
+ testId: "sidebar-workspace-card-project-name"
903
+ }),
904
+ children: workspace.projectLine ?? /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-muted-foreground", children: workspace.projectName })
905
+ }
906
+ )
907
+ ] })
908
+ ] });
909
+ }
910
+ var DEFAULT_WORKSPACE_SWITCHER_LABELS = {
911
+ ...DEFAULT_WORKSPACE_KIND_LABELS,
912
+ plural: "workspaces",
913
+ singular: "workspace",
914
+ switchWorkspace: (name, plural) => `${name} \u2014 switch ${plural}`,
915
+ allWorkspaces: (plural) => `All ${plural}`,
916
+ newWorkspace: (singular) => `New ${singular}`,
917
+ recentWorkspaces: (plural) => `Recent ${plural}`
918
+ };
919
+ function WorkspaceSwitcher({
920
+ workspace,
921
+ recent = [],
922
+ compact = false,
923
+ variant = "sidebar",
924
+ onSwitch,
925
+ onGoToList,
926
+ onNewWorkspace,
927
+ labels,
928
+ className,
929
+ testId,
930
+ testIds,
931
+ identityTestIds
932
+ }) {
933
+ const l = { ...DEFAULT_WORKSPACE_SWITCHER_LABELS, ...labels };
934
+ const plural = l.plural.toLowerCase();
935
+ const singular = l.singular.charAt(0).toUpperCase() + l.singular.slice(1);
936
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
937
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
938
+ "button",
939
+ {
940
+ type: "button",
941
+ "data-slot": "workspace-switcher",
942
+ "data-testid": testIdOr(testId, { testId: "workspace-switcher-trigger" }),
943
+ "aria-label": l.switchWorkspace(workspace.name, plural),
944
+ className: cn(
945
+ "group flex min-w-0 items-center rounded-md transition-colors duration-100 hover:bg-muted focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
946
+ variant === "appbar" ? "h-11 max-w-full gap-1 px-2" : compact ? "h-12 w-12 justify-center" : "h-12 w-full px-2",
947
+ className
948
+ ),
949
+ children: [
950
+ variant === "appbar" ? /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-base font-semibold text-foreground", children: workspace.name }) : /* @__PURE__ */ jsx(
951
+ WorkspaceIdentity,
952
+ {
953
+ workspace,
954
+ expanded: !compact,
955
+ labels: l,
956
+ testIds: identityTestIds
957
+ }
958
+ ),
959
+ !(compact && variant === "sidebar") && /* @__PURE__ */ jsx(
960
+ ChevronDown,
961
+ {
962
+ "aria-hidden": "true",
963
+ className: "ml-auto size-4 flex-shrink-0 text-muted-foreground transition-transform duration-150 group-data-[state=open]:rotate-180"
964
+ }
965
+ )
966
+ ]
967
+ }
968
+ ) }),
969
+ /* @__PURE__ */ jsxs(
970
+ DropdownMenuContent,
971
+ {
972
+ align: "start",
973
+ className: "w-64 max-w-[calc(100vw-1.5rem)]",
974
+ "data-testid": testIdOr(testIds?.menu, { testId: "workspace-switcher-menu" }),
975
+ children: [
976
+ /* @__PURE__ */ jsxs(
977
+ DropdownMenuItem,
978
+ {
979
+ onClick: onGoToList,
980
+ "data-testid": testIdOr(testIds?.all, { testId: "workspace-switcher-all" }),
981
+ className: "gap-2",
982
+ children: [
983
+ /* @__PURE__ */ jsx(LayoutGrid, { className: "size-4 flex-shrink-0 text-muted-foreground" }),
984
+ l.allWorkspaces(plural)
985
+ ]
986
+ }
987
+ ),
988
+ /* @__PURE__ */ jsxs(
989
+ DropdownMenuItem,
990
+ {
991
+ onClick: onNewWorkspace,
992
+ "data-testid": testIdOr(testIds?.new, { testId: "workspace-switcher-new" }),
993
+ className: "gap-2",
994
+ children: [
995
+ /* @__PURE__ */ jsx(Plus, { className: "size-4 flex-shrink-0 text-muted-foreground" }),
996
+ l.newWorkspace(singular)
997
+ ]
998
+ }
999
+ ),
1000
+ recent.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
1001
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
1002
+ /* @__PURE__ */ jsx(DropdownMenuLabel, { className: "text-xs font-normal text-muted-foreground", children: l.recentWorkspaces(plural) }),
1003
+ recent.map((w) => {
1004
+ const kind = workspaceKindMeta(w.kind, l);
1005
+ return /* @__PURE__ */ jsxs(
1006
+ DropdownMenuItem,
1007
+ {
1008
+ onClick: () => onSwitch(w),
1009
+ "data-testid": prefixedTestId(testIds?.switchItem, w.id, {
1010
+ testId: `workspace-switch-${w.id}`
1011
+ }),
1012
+ className: "gap-2",
1013
+ children: [
1014
+ /* @__PURE__ */ jsxs("span", { className: "relative flex flex-shrink-0", title: kind.label, children: [
1015
+ /* @__PURE__ */ jsx(
1016
+ "span",
1017
+ {
1018
+ "aria-hidden": "true",
1019
+ className: cn(
1020
+ "flex size-6 flex-shrink-0 items-center justify-center rounded text-xs font-semibold leading-none",
1021
+ kind.fill
1022
+ ),
1023
+ children: w.name.charAt(0).toUpperCase()
1024
+ }
1025
+ ),
1026
+ /* @__PURE__ */ jsx("span", { className: "absolute -bottom-1 -right-1 flex size-3 items-center justify-center rounded-full bg-background ring-1 ring-border", children: /* @__PURE__ */ jsx(
1027
+ kind.Icon,
1028
+ {
1029
+ "aria-label": kind.label,
1030
+ "data-testid": prefixedTestId(testIds?.type, w.id, {
1031
+ testId: `workspace-type-${w.id}`
1032
+ }),
1033
+ className: "size-2 text-muted-foreground"
1034
+ }
1035
+ ) })
1036
+ ] }),
1037
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate capitalize", children: w.name }),
1038
+ w.lastSeen && /* @__PURE__ */ jsx(
1039
+ "span",
1040
+ {
1041
+ className: "ml-2 flex-shrink-0 text-xs tabular-nums text-muted-foreground",
1042
+ "data-testid": prefixedTestId(testIds?.lastSeen, w.id, {
1043
+ testId: `workspace-last-seen-${w.id}`
1044
+ }),
1045
+ children: w.lastSeen
1046
+ }
1047
+ )
1048
+ ]
1049
+ },
1050
+ w.id
1051
+ );
1052
+ })
1053
+ ] })
1054
+ ]
1055
+ }
1056
+ )
1057
+ ] });
1058
+ }
1059
+ var DEFAULT_ASK_FIELD_LABELS = {
1060
+ placeholder: "Ask or search\u2026",
1061
+ inputLabel: "Ask AI or search your documents",
1062
+ search: "Search",
1063
+ askAi: "Ask AI",
1064
+ askOrSearch: "Ask AI or search",
1065
+ closeSearch: "Close search"
1066
+ };
1067
+ function AskField({
1068
+ value,
1069
+ onValueChange,
1070
+ onAsk,
1071
+ onSearch,
1072
+ onInputKeyDown,
1073
+ menu,
1074
+ inputRef,
1075
+ inputProps,
1076
+ placeholder,
1077
+ labels,
1078
+ autoFocus = false,
1079
+ className,
1080
+ "data-testid": testIdProp
1081
+ }) {
1082
+ const testId = testIdOr(testIdProp, { testId: "workspace-ask-bar" });
1083
+ const l = { ...DEFAULT_ASK_FIELD_LABELS, ...labels };
1084
+ const isEmpty = !value.trim();
1085
+ const submit = (handler) => {
1086
+ const text = value.trim();
1087
+ if (text) handler(text);
1088
+ };
1089
+ return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), "data-slot": "ask-field", "data-testid": testId, children: [
1090
+ menu && /* @__PURE__ */ jsx("div", { className: "absolute inset-x-0 top-9 z-30", children: menu }),
1091
+ /* @__PURE__ */ jsxs(
1092
+ "div",
1093
+ {
1094
+ role: "search",
1095
+ className: "flex h-9 items-center gap-0.5 rounded-md border border-border bg-background pl-2.5 pr-0.5 transition-colors focus-within:ring-1 focus-within:ring-ring pointer-coarse:h-11",
1096
+ children: [
1097
+ /* @__PURE__ */ jsx(Sparkles, { "aria-hidden": "true", className: "size-4 shrink-0 text-ai-ink" }),
1098
+ /* @__PURE__ */ jsx(
1099
+ "input",
1100
+ {
1101
+ ...inputProps,
1102
+ ref: inputRef,
1103
+ type: "text",
1104
+ value,
1105
+ onChange: (e) => onValueChange(e.target.value),
1106
+ onKeyDown: (e) => {
1107
+ onInputKeyDown?.(e);
1108
+ if (e.defaultPrevented) return;
1109
+ if (e.key === "Enter" && !e.nativeEvent.isComposing) {
1110
+ e.preventDefault();
1111
+ submit(onAsk);
1112
+ }
1113
+ },
1114
+ placeholder: placeholder ?? l.placeholder,
1115
+ "aria-label": l.inputLabel,
1116
+ autoFocus,
1117
+ className: "ml-1.5 h-8 min-w-0 flex-1 bg-transparent pointer-coarse:h-11 text-sm text-foreground outline-none placeholder:text-muted-foreground",
1118
+ "data-testid": `${testId}-input`
1119
+ }
1120
+ ),
1121
+ /* @__PURE__ */ jsx(
1122
+ Button,
1123
+ {
1124
+ type: "button",
1125
+ variant: "ghost",
1126
+ size: "icon",
1127
+ disabled: isEmpty,
1128
+ onClick: () => submit(onSearch),
1129
+ title: l.search,
1130
+ "aria-label": l.search,
1131
+ className: "size-7 shrink-0 text-muted-foreground hover:text-foreground pointer-coarse:size-10",
1132
+ "data-testid": `${testId}-search`,
1133
+ children: /* @__PURE__ */ jsx(Search, { className: "size-4" })
1134
+ }
1135
+ ),
1136
+ /* @__PURE__ */ jsx(
1137
+ Button,
1138
+ {
1139
+ type: "button",
1140
+ variant: "ghost",
1141
+ size: "icon",
1142
+ disabled: isEmpty,
1143
+ onClick: () => submit(onAsk),
1144
+ title: l.askAi,
1145
+ "aria-label": l.askAi,
1146
+ className: "!inline-flex size-7 shrink-0 text-ai-ink hover:bg-ai-soft hover:text-ai-ink pointer-coarse:size-10",
1147
+ "data-testid": `${testId}-submit`,
1148
+ children: /* @__PURE__ */ jsx(ArrowUp, { className: "size-4" })
1149
+ }
1150
+ )
1151
+ ]
1152
+ }
1153
+ )
1154
+ ] });
1155
+ }
1156
+ function AskTrigger({
1157
+ onClick,
1158
+ variant = "rail",
1159
+ onSearch,
1160
+ labels,
1161
+ showLabels = false,
1162
+ "data-testid": testId,
1163
+ searchTestId,
1164
+ askTestId
1165
+ }) {
1166
+ const text = labels?.askOrSearch ?? DEFAULT_ASK_FIELD_LABELS.askOrSearch;
1167
+ if (variant === "split") {
1168
+ const searchText = labels?.search ?? DEFAULT_ASK_FIELD_LABELS.search;
1169
+ const askText = labels?.askAi ?? DEFAULT_ASK_FIELD_LABELS.askAi;
1170
+ return /* @__PURE__ */ jsxs(
1171
+ "div",
1172
+ {
1173
+ role: "group",
1174
+ "aria-label": text,
1175
+ "data-slot": "ask-trigger",
1176
+ "data-variant": "split",
1177
+ "data-testid": testId,
1178
+ className: "inline-flex items-center rounded-md border border-border bg-background",
1179
+ children: [
1180
+ /* @__PURE__ */ jsxs(
1181
+ "button",
1182
+ {
1183
+ type: "button",
1184
+ onClick: onSearch,
1185
+ title: searchText,
1186
+ "aria-label": searchText,
1187
+ "data-testid": searchTestId ?? (testId ? `${testId}-search` : void 0),
1188
+ className: cn(
1189
+ "flex h-9 items-center justify-center gap-1.5 rounded-l-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground pointer-coarse:h-11",
1190
+ showLabels ? "min-w-9 px-2.5 text-sm pointer-coarse:min-w-11" : "w-9 pointer-coarse:w-11"
1191
+ ),
1192
+ children: [
1193
+ /* @__PURE__ */ jsx(Search, { className: "size-4" }),
1194
+ showLabels && /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: searchText })
1195
+ ]
1196
+ }
1197
+ ),
1198
+ /* @__PURE__ */ jsxs(
1199
+ "button",
1200
+ {
1201
+ type: "button",
1202
+ onClick,
1203
+ title: askText,
1204
+ "aria-label": askText,
1205
+ "data-testid": askTestId ?? (testId ? `${testId}-ask` : void 0),
1206
+ className: cn(
1207
+ "flex h-9 items-center justify-center gap-1.5 rounded-r-md border-l border-border text-ai-ink transition-colors hover:bg-ai-soft pointer-coarse:h-11",
1208
+ showLabels ? "min-w-9 px-2.5 text-sm pointer-coarse:min-w-11" : "w-9 pointer-coarse:w-11"
1209
+ ),
1210
+ children: [
1211
+ /* @__PURE__ */ jsx(Sparkles, { className: "size-4" }),
1212
+ showLabels && /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: askText })
1213
+ ]
1214
+ }
1215
+ )
1216
+ ]
1217
+ }
1218
+ );
1219
+ }
1220
+ return /* @__PURE__ */ jsx(
1221
+ "button",
1222
+ {
1223
+ type: "button",
1224
+ onClick,
1225
+ title: text,
1226
+ "aria-label": text,
1227
+ "data-slot": "ask-trigger",
1228
+ "data-testid": testId,
1229
+ className: cn(
1230
+ "flex items-center justify-center rounded-md text-ai-ink transition-colors hover:bg-ai-soft",
1231
+ variant === "rail" ? "h-9 w-12 border border-border bg-background pointer-coarse:h-11" : "size-11"
1232
+ ),
1233
+ children: /* @__PURE__ */ jsx(Sparkles, { className: variant === "rail" ? "size-4" : "size-5" })
1234
+ }
1235
+ );
1236
+ }
1237
+ function AskRow({
1238
+ children,
1239
+ onClose,
1240
+ labels,
1241
+ "data-testid": testId,
1242
+ collapseTestId
1243
+ }) {
1244
+ return /* @__PURE__ */ jsxs(
1245
+ "div",
1246
+ {
1247
+ className: "flex h-14 flex-shrink-0 items-center gap-1 bg-background px-3 pt-safe",
1248
+ "data-slot": "ask-row",
1249
+ "data-testid": testIdOr(testId, { testId: "workspace-ask-bar-expanded" }),
1250
+ onKeyDown: (e) => {
1251
+ if (e.key === "Escape" && !e.defaultPrevented) onClose();
1252
+ },
1253
+ children: [
1254
+ /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children }),
1255
+ /* @__PURE__ */ jsx(
1256
+ "button",
1257
+ {
1258
+ type: "button",
1259
+ onClick: onClose,
1260
+ "aria-label": labels?.closeSearch ?? DEFAULT_ASK_FIELD_LABELS.closeSearch,
1261
+ "data-testid": testIdOr(collapseTestId, { testId: "workspace-ask-bar-collapse" }),
1262
+ className: "flex size-11 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
1263
+ children: /* @__PURE__ */ jsx(X, { className: "size-5" })
1264
+ }
1265
+ )
1266
+ ]
1267
+ }
1268
+ );
1269
+ }
1270
+ var DEFAULT_MOBILE_BARS_LABELS = {
1271
+ openNavigationMenu: "Open navigation menu",
1272
+ workspaceSections: "Workspace sections"
1273
+ };
1274
+ function MobileAppBar({
1275
+ showMenu = true,
1276
+ onMenu,
1277
+ title,
1278
+ logo,
1279
+ actions,
1280
+ menuLabel,
1281
+ labels,
1282
+ className,
1283
+ "data-testid": testId,
1284
+ menuTestId
1285
+ }) {
1286
+ return /* @__PURE__ */ jsxs(
1287
+ "div",
1288
+ {
1289
+ "data-slot": "mobile-app-bar",
1290
+ "data-testid": testId,
1291
+ className: cn(
1292
+ "sm:hidden flex h-14 flex-shrink-0 items-center gap-1 bg-background pl-1 pr-2 pt-safe",
1293
+ className
1294
+ ),
1295
+ children: [
1296
+ showMenu && /* @__PURE__ */ jsx(
1297
+ "button",
1298
+ {
1299
+ type: "button",
1300
+ onClick: onMenu,
1301
+ className: "flex size-11 shrink-0 items-center justify-center rounded-md text-foreground transition-colors hover:bg-muted",
1302
+ "aria-label": menuLabel ?? labels?.openNavigationMenu ?? DEFAULT_MOBILE_BARS_LABELS.openNavigationMenu,
1303
+ "data-testid": testIdOr(menuTestId, { testId: "mobile-nav-toggle" }),
1304
+ children: /* @__PURE__ */ jsx(Menu, { className: "size-5" })
1305
+ }
1306
+ ),
1307
+ /* @__PURE__ */ jsx("div", { className: cn("flex min-w-0 flex-1 items-center", !showMenu && "pl-3"), children: title ?? logo }),
1308
+ actions && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-0.5", children: actions })
1309
+ ]
1310
+ }
1311
+ );
1312
+ }
1313
+ function MobileTabBar({
1314
+ items,
1315
+ label,
1316
+ labels,
1317
+ testIdPrefix,
1318
+ className,
1319
+ "data-testid": testId
1320
+ }) {
1321
+ return /* @__PURE__ */ jsx(
1322
+ "nav",
1323
+ {
1324
+ "aria-label": label ?? labels?.workspaceSections ?? DEFAULT_MOBILE_BARS_LABELS.workspaceSections,
1325
+ "data-slot": "mobile-tab-bar",
1326
+ "data-testid": testIdOr(testId, { testId: "mobile-tab-bar" }),
1327
+ className: cn(
1328
+ "flex h-16 flex-shrink-0 items-stretch bg-sidebar px-2 pb-safe sm:hidden",
1329
+ className
1330
+ ),
1331
+ children: items.map((item) => /* @__PURE__ */ jsxs(
1332
+ ActionLink,
1333
+ {
1334
+ href: item.href,
1335
+ onSelect: item.onSelect,
1336
+ disabled: item.disabled,
1337
+ "aria-current": item.active ? "page" : void 0,
1338
+ className: cn(
1339
+ "flex min-h-12 min-w-0 flex-1 flex-col items-center justify-center gap-0.5 rounded-md text-xs transition-colors",
1340
+ item.active ? "font-semibold text-primary" : "font-medium text-muted-foreground hover:text-foreground"
1341
+ ),
1342
+ "data-testid": prefixedTestId(testIdPrefix, item.id, { testId: `mobile-tab-${item.id}` }),
1343
+ children: [
1344
+ item.icon,
1345
+ /* @__PURE__ */ jsx("span", { className: "max-w-full truncate px-1", children: item.label })
1346
+ ]
1347
+ },
1348
+ item.id
1349
+ ))
1350
+ }
1351
+ );
1352
+ }
1353
+ function ActionCluster({
1354
+ layout = "bar",
1355
+ status,
1356
+ bell,
1357
+ contacts,
1358
+ account,
1359
+ label,
1360
+ "data-testid": testId = "sidebar-actions"
1361
+ }) {
1362
+ const labelId = useId();
1363
+ const stop = (e) => e.stopPropagation();
1364
+ if (layout === "sidebar" || layout === "rail" || layout === "drawer") {
1365
+ const rail = layout === "rail";
1366
+ return /* @__PURE__ */ jsxs(
1367
+ "div",
1368
+ {
1369
+ className: rail ? "flex flex-col items-center gap-0.5" : "flex flex-col gap-0.5",
1370
+ onClick: stop,
1371
+ role: label ? "group" : void 0,
1372
+ "aria-labelledby": label && layout === "drawer" ? labelId : void 0,
1373
+ "aria-label": label && layout !== "drawer" ? label : void 0,
1374
+ "data-slot": "action-cluster",
1375
+ "data-layout": layout,
1376
+ "data-testid": testId,
1377
+ children: [
1378
+ label && layout === "drawer" && /* @__PURE__ */ jsx(
1379
+ "p",
1380
+ {
1381
+ id: labelId,
1382
+ className: "px-3 pb-1 pt-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground",
1383
+ "data-slot": "action-cluster-label",
1384
+ children: label
1385
+ }
1386
+ ),
1387
+ bell,
1388
+ contacts,
1389
+ account && layout !== "drawer" && /* @__PURE__ */ jsx("div", { className: rail ? "mt-1" : "mt-1 min-w-0", children: account })
1390
+ ]
1391
+ }
1392
+ );
1393
+ }
1394
+ return /* @__PURE__ */ jsxs(
1395
+ "div",
1396
+ {
1397
+ className: "flex items-center gap-1",
1398
+ onClick: stop,
1399
+ role: label ? "group" : void 0,
1400
+ "aria-label": label,
1401
+ "data-slot": "action-cluster",
1402
+ children: [
1403
+ status,
1404
+ bell,
1405
+ contacts,
1406
+ account
1407
+ ]
1408
+ }
1409
+ );
1410
+ }
1411
+ function ToolButton({
1412
+ onClick,
1413
+ label,
1414
+ active = false,
1415
+ "data-testid": testId,
1416
+ children
1417
+ }) {
1418
+ return /* @__PURE__ */ jsx(
1419
+ "button",
1420
+ {
1421
+ type: "button",
1422
+ onClick,
1423
+ title: label,
1424
+ "aria-label": label,
1425
+ "data-slot": "tool-button",
1426
+ "data-testid": testId,
1427
+ className: cn(
1428
+ "relative flex size-9 shrink-0 items-center justify-center rounded-md transition-colors hover:bg-accent hover:text-accent-foreground pointer-coarse:size-11",
1429
+ active ? "bg-accent text-accent-foreground" : "text-muted-foreground"
1430
+ ),
1431
+ children
1432
+ }
1433
+ );
1434
+ }
1435
+ var TONES = {
1436
+ progress: { className: "bg-muted text-foreground", Icon: Loader2, spin: true },
1437
+ success: { className: "bg-green-bg text-green-text", Icon: CheckCircle2 },
1438
+ error: { className: "bg-red-bg text-red-text", Icon: TriangleAlert }
1439
+ };
1440
+ function StatusRow({
1441
+ tone,
1442
+ label,
1443
+ onClick,
1444
+ compact = false,
1445
+ icon,
1446
+ "data-testid": testId
1447
+ }) {
1448
+ const { className, Icon, spin } = TONES[tone];
1449
+ return /* @__PURE__ */ jsx("div", { role: "status", "data-slot": "status-row", className: cn(compact && "flex justify-center"), children: /* @__PURE__ */ jsxs(
1450
+ "button",
1451
+ {
1452
+ type: "button",
1453
+ onClick,
1454
+ "aria-label": label,
1455
+ title: label,
1456
+ "data-testid": testId,
1457
+ "data-tone": tone,
1458
+ className: cn(
1459
+ "flex items-center gap-2 rounded-md text-sm font-medium transition-colors hover:brightness-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
1460
+ compact ? "size-9 justify-center pointer-coarse:size-11" : "w-full px-2.5 py-1.5",
1461
+ className
1462
+ ),
1463
+ children: [
1464
+ icon ?? /* @__PURE__ */ jsx(
1465
+ Icon,
1466
+ {
1467
+ className: cn("size-4 shrink-0", spin && "animate-spin motion-reduce:animate-none")
1468
+ }
1469
+ ),
1470
+ !compact && /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-left", children: label })
1471
+ ]
1472
+ }
1473
+ ) });
1474
+ }
1475
+ var DEFAULT_OFFLINE_PILL_LABELS = {
1476
+ reconnect: "Reconnect"
1477
+ };
1478
+ var TONES2 = {
1479
+ offline: { className: "bg-yellow-bg text-yellow-text", Icon: WifiOff },
1480
+ failed: { className: "bg-red-bg text-red-text", Icon: TriangleAlert },
1481
+ syncing: { className: "bg-blue-bg text-blue-text", Icon: RefreshCw }
1482
+ };
1483
+ function OfflinePill({
1484
+ tone,
1485
+ label,
1486
+ compact = false,
1487
+ onOpen,
1488
+ onReconnect,
1489
+ labels,
1490
+ "data-testid": testId,
1491
+ reconnectTestId
1492
+ }) {
1493
+ const { className, Icon } = TONES2[tone];
1494
+ return /* @__PURE__ */ jsxs(
1495
+ "div",
1496
+ {
1497
+ className: cn("flex items-center gap-1", compact && "justify-center"),
1498
+ "data-slot": "offline-pill",
1499
+ children: [
1500
+ /* @__PURE__ */ jsxs(
1501
+ "button",
1502
+ {
1503
+ type: "button",
1504
+ "data-testid": testIdOr(testId, { testId: "offline-sync-status" }),
1505
+ "aria-label": label,
1506
+ title: label,
1507
+ onClick: onOpen,
1508
+ className: cn(
1509
+ "flex min-w-0 flex-1 items-center gap-2 rounded-md px-2.5 py-1.5 text-sm font-medium transition-colors hover:brightness-95 pointer-coarse:min-h-11",
1510
+ compact && "flex-none justify-center",
1511
+ className
1512
+ ),
1513
+ children: [
1514
+ /* @__PURE__ */ jsx(Icon, { className: cn("size-4 shrink-0", tone === "syncing" && "animate-spin") }),
1515
+ !compact && /* @__PURE__ */ jsx("span", { className: "truncate", children: label })
1516
+ ]
1517
+ }
1518
+ ),
1519
+ !compact && onReconnect && // Forced visible (context true): there is no row to hover.
1520
+ /* @__PURE__ */ jsx(SidebarRowHoverContext.Provider, { value: true, children: /* @__PURE__ */ jsx(
1521
+ SidebarRowAction,
1522
+ {
1523
+ label: labels?.reconnect ?? DEFAULT_OFFLINE_PILL_LABELS.reconnect,
1524
+ onClick: onReconnect,
1525
+ "data-testid": testIdOr(reconnectTestId, { testId: "offline-reconnect-button" }),
1526
+ children: /* @__PURE__ */ jsx(RefreshCw, { className: "size-5" })
1527
+ }
1528
+ ) })
1529
+ ]
1530
+ }
1531
+ );
1532
+ }
1533
+ var DEFAULT_REMOTE_CONTROL_PILL_LABELS = {
1534
+ turnOffRemoteControl: "Turn off remote control"
1535
+ };
1536
+ function RemoteControlPill({
1537
+ isActive,
1538
+ label,
1539
+ onDisable,
1540
+ disableLabel: disableLabelProp,
1541
+ labels,
1542
+ "data-testid": testId,
1543
+ disableTestId
1544
+ }) {
1545
+ const disableLabel = disableLabelProp ?? labels?.turnOffRemoteControl ?? DEFAULT_REMOTE_CONTROL_PILL_LABELS.turnOffRemoteControl;
1546
+ return /* @__PURE__ */ jsxs(
1547
+ "div",
1548
+ {
1549
+ "data-slot": "remote-control-pill",
1550
+ "data-testid": testIdOr(testId, { testId: "remote-control-indicator" }),
1551
+ className: cn(
1552
+ "flex min-w-0 max-w-full items-center gap-1.5 rounded-full py-1 pl-2.5 pr-1 text-xs font-medium",
1553
+ isActive ? "bg-accent text-accent-foreground" : "bg-muted text-muted-foreground"
1554
+ ),
1555
+ children: [
1556
+ /* @__PURE__ */ jsx(MousePointerClick, { className: cn("size-3.5 shrink-0", isActive && "animate-pulse") }),
1557
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 max-w-[16rem] truncate", children: label }),
1558
+ /* @__PURE__ */ jsx(
1559
+ "button",
1560
+ {
1561
+ type: "button",
1562
+ onClick: onDisable,
1563
+ title: disableLabel,
1564
+ "aria-label": disableLabel,
1565
+ "data-testid": testIdOr(disableTestId, { testId: "remote-control-indicator-disable" }),
1566
+ className: "flex size-5 shrink-0 items-center justify-center rounded-full transition-colors hover:bg-foreground/10 hover:text-foreground pointer-coarse:size-8",
1567
+ children: /* @__PURE__ */ jsx(X, { className: "size-3.5" })
1568
+ }
1569
+ )
1570
+ ]
1571
+ }
1572
+ );
1573
+ }
1574
+ var DEFAULT_TIP_CARD_LABELS = {
1575
+ showMe: "Show me",
1576
+ previousTip: "Previous tip",
1577
+ nextTip: "Next tip",
1578
+ editTip: "Edit tip",
1579
+ tip: "Tip",
1580
+ hideTips: "Hide tips",
1581
+ position: (index, count) => `${index} of ${count}`
1582
+ };
1583
+ var ICON_BUTTON = "flex size-7 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:size-11";
1584
+ function TipCard({
1585
+ message,
1586
+ index = 0,
1587
+ count = 1,
1588
+ onPrev,
1589
+ onNext,
1590
+ ctaLabel,
1591
+ onCta,
1592
+ onDismiss,
1593
+ onEdit,
1594
+ onHoverChange,
1595
+ labels,
1596
+ className,
1597
+ testId,
1598
+ testIds
1599
+ }) {
1600
+ const l = { ...DEFAULT_TIP_CARD_LABELS, ...labels };
1601
+ const hasMany = count > 1;
1602
+ return /* @__PURE__ */ jsxs(
1603
+ "section",
1604
+ {
1605
+ "data-slot": "tip-card",
1606
+ "aria-label": l.tip,
1607
+ className: cn("min-w-0 rounded-lg bg-muted p-3 text-sm", className),
1608
+ onMouseEnter: () => onHoverChange?.(true),
1609
+ onMouseLeave: () => onHoverChange?.(false),
1610
+ "data-testid": testIdOr(testId, { testId: "tip-row" }),
1611
+ children: [
1612
+ /* @__PURE__ */ jsxs("div", { className: "-my-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground", children: [
1613
+ /* @__PURE__ */ jsx(Lightbulb, { className: "size-4 shrink-0 text-primary", "aria-hidden": true }),
1614
+ /* @__PURE__ */ jsx("span", { children: l.tip }),
1615
+ /* @__PURE__ */ jsxs("span", { className: "-mr-1.5 ml-auto flex items-center", children: [
1616
+ onEdit && /* @__PURE__ */ jsx(
1617
+ "button",
1618
+ {
1619
+ type: "button",
1620
+ onClick: onEdit,
1621
+ "aria-label": l.editTip,
1622
+ title: l.editTip,
1623
+ className: cn(ICON_BUTTON, "text-red-text hover:bg-red-bg hover:text-red-text"),
1624
+ "data-testid": testIdOr(testIds?.edit, { testId: "tip-edit" }),
1625
+ children: /* @__PURE__ */ jsx(Pencil, { className: "size-3.5" })
1626
+ }
1627
+ ),
1628
+ onDismiss && /* @__PURE__ */ jsx(
1629
+ "button",
1630
+ {
1631
+ type: "button",
1632
+ onClick: onDismiss,
1633
+ "aria-label": l.hideTips,
1634
+ title: l.hideTips,
1635
+ className: ICON_BUTTON,
1636
+ "data-testid": testIdOr(testIds?.dismiss, { testId: "tip-dismiss" }),
1637
+ children: /* @__PURE__ */ jsx(X, { className: "size-4" })
1638
+ }
1639
+ )
1640
+ ] })
1641
+ ] }),
1642
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-foreground", children: message }),
1643
+ (onCta || hasMany) && /* @__PURE__ */ jsxs("div", { className: "mt-3 flex items-center justify-between gap-2", children: [
1644
+ onCta ? /* @__PURE__ */ jsx(
1645
+ Button,
1646
+ {
1647
+ type: "button",
1648
+ variant: "outline",
1649
+ size: "sm",
1650
+ onClick: onCta,
1651
+ className: "font-medium text-primary",
1652
+ "data-testid": testIdOr(testIds?.cta, { testId: "page-header-info-cta" }),
1653
+ children: ctaLabel ?? l.showMe
1654
+ }
1655
+ ) : /* @__PURE__ */ jsx("span", {}),
1656
+ hasMany && /* @__PURE__ */ jsxs("span", { className: "-mr-1.5 flex items-center text-xs text-muted-foreground", children: [
1657
+ /* @__PURE__ */ jsx(
1658
+ "button",
1659
+ {
1660
+ type: "button",
1661
+ onClick: onPrev,
1662
+ "aria-label": l.previousTip,
1663
+ title: l.previousTip,
1664
+ className: ICON_BUTTON,
1665
+ "data-testid": testIdOr(testIds?.prev, { testId: "tip-prev" }),
1666
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "size-4" })
1667
+ }
1668
+ ),
1669
+ /* @__PURE__ */ jsx("span", { className: "min-w-10 text-center tabular-nums", "aria-live": "polite", children: l.position(index + 1, count) }),
1670
+ /* @__PURE__ */ jsx(
1671
+ "button",
1672
+ {
1673
+ type: "button",
1674
+ onClick: onNext,
1675
+ "aria-label": l.nextTip,
1676
+ title: l.nextTip,
1677
+ className: ICON_BUTTON,
1678
+ "data-testid": testIdOr(testIds?.next, { testId: "tip-next" }),
1679
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: "size-4" })
1680
+ }
1681
+ )
1682
+ ] })
1683
+ ] })
1684
+ ]
1685
+ }
1686
+ );
1687
+ }
1688
+ function resolveSidebarLayout(input) {
1689
+ const { isSmallScreen, isDrawerRequested, isCollapsed, isPinned, isHovering } = input;
1690
+ const isPeeking = input.isPeeking ?? false;
1691
+ const canPin = isPinned && !isSmallScreen && !input.isNarrow;
1692
+ const drawerOpen = isSmallScreen && isDrawerRequested;
1693
+ const effectiveCollapsed = isCollapsed || isSmallScreen && !drawerOpen;
1694
+ const hovering = isHovering && !isSmallScreen;
1695
+ let mode;
1696
+ if (drawerOpen) mode = "drawer";
1697
+ else if (effectiveCollapsed) mode = "collapsed";
1698
+ else if (canPin) mode = "pinned";
1699
+ else mode = "rail";
1700
+ const expanded = drawerOpen || canPin || !isCollapsed && isHovering || isCollapsed && isPeeking;
1701
+ return { mode, expanded, hidden: isSmallScreen && !drawerOpen, hovering };
1702
+ }
1703
+ function useSidebarSettle(expanded, settleMs = 300) {
1704
+ const [labelsExpanded, setLabelsExpanded] = useState(expanded);
1705
+ const [tipsVisible, setTipsVisible] = useState(expanded);
1706
+ const labelsTimer = useRef(null);
1707
+ const tipsTimer = useRef(null);
1708
+ useEffect(() => {
1709
+ if (labelsTimer.current) clearTimeout(labelsTimer.current);
1710
+ if (expanded) setLabelsExpanded(true);
1711
+ else labelsTimer.current = setTimeout(() => setLabelsExpanded(false), settleMs);
1712
+ return () => {
1713
+ if (labelsTimer.current) clearTimeout(labelsTimer.current);
1714
+ };
1715
+ }, [expanded, settleMs]);
1716
+ useEffect(() => {
1717
+ if (tipsTimer.current) clearTimeout(tipsTimer.current);
1718
+ if (expanded) tipsTimer.current = setTimeout(() => setTipsVisible(true), settleMs);
1719
+ else setTipsVisible(false);
1720
+ return () => {
1721
+ if (tipsTimer.current) clearTimeout(tipsTimer.current);
1722
+ };
1723
+ }, [expanded, settleMs]);
1724
+ return { labelsExpanded, tipsVisible };
1725
+ }
1726
+ var VARIANT_TONE = {
1727
+ info: "bg-blue-bg text-primary border-blue-border",
1728
+ warning: "bg-yellow-bg text-yellow-text border-yellow-border",
1729
+ success: "bg-green-bg text-green-text border-green-border",
1730
+ hint: "bg-blue-bg text-foreground border-blue-border"
1731
+ };
1732
+ function InfoBar({
1733
+ message,
1734
+ variant = "info",
1735
+ hideIcon,
1736
+ rightSlot,
1737
+ cta,
1738
+ onDismiss,
1739
+ dismissLabel = "Dismiss",
1740
+ className
1741
+ }) {
1742
+ const VariantIcon = variant === "hint" ? Lightbulb : Info;
1743
+ return /* @__PURE__ */ jsx(
1744
+ "div",
1745
+ {
1746
+ className: cn("relative z-10 flex w-full items-center pt-1", className),
1747
+ "data-slot": "info-bar",
1748
+ children: /* @__PURE__ */ jsxs(
1749
+ "div",
1750
+ {
1751
+ className: cn(
1752
+ "flex w-full flex-wrap items-center gap-3 rounded-md border px-3 py-[7px]",
1753
+ VARIANT_TONE[variant]
1754
+ ),
1755
+ "data-testid": "page-header-info-box",
1756
+ children: [
1757
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
1758
+ !hideIcon && /* @__PURE__ */ jsx(VariantIcon, { className: "hidden size-4 shrink-0 sm:block" }),
1759
+ /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1 text-sm", children: message })
1760
+ ] }),
1761
+ /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center gap-2 sm:ml-auto sm:w-auto", children: [
1762
+ rightSlot,
1763
+ cta && /* @__PURE__ */ jsxs(
1764
+ Button,
1765
+ {
1766
+ variant: "outline",
1767
+ size: "sm",
1768
+ onClick: cta.onClick,
1769
+ className: "h-8 flex-1 shrink-0 sm:flex-initial pointer-coarse:h-11",
1770
+ "data-testid": "page-header-info-cta",
1771
+ children: [
1772
+ cta.icon && /* @__PURE__ */ jsx("span", { className: "mr-1", children: cta.icon }),
1773
+ cta.label
1774
+ ]
1775
+ }
1776
+ ),
1777
+ onDismiss && /* @__PURE__ */ jsx(
1778
+ Button,
1779
+ {
1780
+ variant: "ghost",
1781
+ size: "sm",
1782
+ onClick: onDismiss,
1783
+ "aria-label": dismissLabel,
1784
+ className: "size-8 shrink-0 p-0 hover:bg-foreground/5 pointer-coarse:size-11",
1785
+ "data-testid": "page-header-info-dismiss",
1786
+ children: /* @__PURE__ */ jsx(X, { className: "size-4" })
1787
+ }
1788
+ )
1789
+ ] })
1790
+ ]
1791
+ }
1792
+ )
1793
+ }
1794
+ );
1795
+ }
1796
+
1797
+ export { ActionCluster, AskField, AskRow, AskTrigger, DEFAULT_ASK_FIELD_LABELS, DEFAULT_MOBILE_BARS_LABELS, DEFAULT_OFFLINE_PILL_LABELS, DEFAULT_OVERLAY_ZONE_ID, DEFAULT_PAGE_CONTAINER_PADDING, DEFAULT_REMOTE_CONTROL_PILL_LABELS, DEFAULT_SIDEBAR_LABELS, DEFAULT_SIDEBAR_TOGGLE_BUTTON_LABELS, DEFAULT_TIP_CARD_LABELS, DEFAULT_WORKSPACE_KIND_LABELS, DEFAULT_WORKSPACE_SWITCHER_LABELS, InfoBar, MobileAppBar, MobileTabBar, OfflinePill, PageContainer, RemoteControlPill, Shell, Sidebar, SidebarBadgeRow, SidebarRowAction, SidebarRowHoverContext, SidebarToggleButton, StatusRow, TipCard, ToolButton, WorkspaceIdentity, WorkspaceSwitcher, resolveSidebarLayout, useDrawerBehavior, useOverlayZoneId, useSidebarContext, useSidebarSettle, workspaceKindColor, workspaceKindMeta };
1798
+ //# sourceMappingURL=chunk-7PEELPMA.js.map
1799
+ //# sourceMappingURL=chunk-7PEELPMA.js.map