@arbidocs/blocks 0.4.141 → 0.4.143

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 (222) hide show
  1. package/dist/agents/index.cjs +440 -436
  2. package/dist/agents/index.js +12 -8
  3. package/dist/chat/index.cjs +139 -138
  4. package/dist/chat/index.js +4 -3
  5. package/dist/{chunk-S24XEVPS.cjs → chunk-464YPRAE.cjs} +33 -2
  6. package/dist/chunk-464YPRAE.cjs.map +1 -0
  7. package/dist/{chunk-7YLJHTDC.cjs → chunk-5A2QQAF5.cjs} +11 -11
  8. package/dist/{chunk-7YLJHTDC.cjs.map → chunk-5A2QQAF5.cjs.map} +1 -1
  9. package/dist/{chunk-ON3TKY5Y.js → chunk-5YHEHEJT.js} +242 -4
  10. package/dist/chunk-5YHEHEJT.js.map +1 -0
  11. package/dist/chunk-76L6LOP3.cjs +308 -0
  12. package/dist/chunk-76L6LOP3.cjs.map +1 -0
  13. package/dist/chunk-AHDJXIUB.cjs +25 -0
  14. package/dist/chunk-AHDJXIUB.cjs.map +1 -0
  15. package/dist/chunk-AOSUHWIL.js +98 -0
  16. package/dist/chunk-AOSUHWIL.js.map +1 -0
  17. package/dist/{chunk-YFF3GTJQ.js → chunk-C44TDH54.js} +14 -1613
  18. package/dist/chunk-C44TDH54.js.map +1 -0
  19. package/dist/{chunk-GFRQG36Y.cjs → chunk-COCGRJLA.cjs} +213 -57
  20. package/dist/chunk-COCGRJLA.cjs.map +1 -0
  21. package/dist/chunk-CQCC7LE7.js +210 -0
  22. package/dist/chunk-CQCC7LE7.js.map +1 -0
  23. package/dist/{chunk-UGCKUXRV.js → chunk-CSI2B2H5.js} +3 -3
  24. package/dist/{chunk-UGCKUXRV.js.map → chunk-CSI2B2H5.js.map} +1 -1
  25. package/dist/{chunk-R26BK7YL.cjs → chunk-DTROMMDX.cjs} +4 -4
  26. package/dist/{chunk-R26BK7YL.cjs.map → chunk-DTROMMDX.cjs.map} +1 -1
  27. package/dist/{chunk-65THHQVB.cjs → chunk-ECW2R2KF.cjs} +27 -27
  28. package/dist/{chunk-65THHQVB.cjs.map → chunk-ECW2R2KF.cjs.map} +1 -1
  29. package/dist/{chunk-RI6DZA5X.js → chunk-EF4ZLKRM.js} +3 -3
  30. package/dist/{chunk-RI6DZA5X.js.map → chunk-EF4ZLKRM.js.map} +1 -1
  31. package/dist/{chunk-WS5EX7DN.cjs → chunk-EYKISBDO.cjs} +5 -5
  32. package/dist/{chunk-WS5EX7DN.cjs.map → chunk-EYKISBDO.cjs.map} +1 -1
  33. package/dist/chunk-FJETR2AS.js +561 -0
  34. package/dist/chunk-FJETR2AS.js.map +1 -0
  35. package/dist/{chunk-JO3EMZ4X.js → chunk-GWSGIZQ5.js} +3 -3
  36. package/dist/{chunk-JO3EMZ4X.js.map → chunk-GWSGIZQ5.js.map} +1 -1
  37. package/dist/{chunk-O6W6RW3B.js → chunk-H4D7WKDY.js} +207 -54
  38. package/dist/chunk-H4D7WKDY.js.map +1 -0
  39. package/dist/{chunk-OAQEUTNJ.cjs → chunk-HAOKT4LC.cjs} +5 -5
  40. package/dist/{chunk-OAQEUTNJ.cjs.map → chunk-HAOKT4LC.cjs.map} +1 -1
  41. package/dist/{chunk-YWY2KIX2.js → chunk-IJST4EBM.js} +13 -9
  42. package/dist/chunk-IJST4EBM.js.map +1 -0
  43. package/dist/{chunk-3RJN2VTL.js → chunk-IXWJGOM2.js} +3 -3
  44. package/dist/{chunk-3RJN2VTL.js.map → chunk-IXWJGOM2.js.map} +1 -1
  45. package/dist/{chunk-CYNF5PZI.js → chunk-J5CWKFSC.js} +3 -3
  46. package/dist/{chunk-CYNF5PZI.js.map → chunk-J5CWKFSC.js.map} +1 -1
  47. package/dist/{chunk-OWCEQKAR.cjs → chunk-JSTKEZBS.cjs} +21 -318
  48. package/dist/chunk-JSTKEZBS.cjs.map +1 -0
  49. package/dist/{chunk-TP6PLDNM.cjs → chunk-KMZWKSKO.cjs} +8 -8
  50. package/dist/{chunk-TP6PLDNM.cjs.map → chunk-KMZWKSKO.cjs.map} +1 -1
  51. package/dist/{chunk-C4WSHRR6.cjs → chunk-KPZZ5FHE.cjs} +32 -12
  52. package/dist/chunk-KPZZ5FHE.cjs.map +1 -0
  53. package/dist/{chunk-CKCBBYTA.js → chunk-KSHKTOY2.js} +5 -205
  54. package/dist/chunk-KSHKTOY2.js.map +1 -0
  55. package/dist/chunk-LJJJ6CYH.cjs +62 -0
  56. package/dist/chunk-LJJJ6CYH.cjs.map +1 -0
  57. package/dist/chunk-LPYEUD2D.cjs +1627 -0
  58. package/dist/chunk-LPYEUD2D.cjs.map +1 -0
  59. package/dist/chunk-MHFF5N65.cjs +101 -0
  60. package/dist/chunk-MHFF5N65.cjs.map +1 -0
  61. package/dist/{chunk-GYAUJ4KT.js → chunk-MTSKK3BN.js} +32 -3
  62. package/dist/chunk-MTSKK3BN.js.map +1 -0
  63. package/dist/chunk-NHZK64TQ.js +75 -0
  64. package/dist/chunk-NHZK64TQ.js.map +1 -0
  65. package/dist/{chunk-BPBSSMRB.js → chunk-NRFAWUVD.js} +3 -3
  66. package/dist/{chunk-BPBSSMRB.js.map → chunk-NRFAWUVD.js.map} +1 -1
  67. package/dist/chunk-NWNVWO6L.cjs +80 -0
  68. package/dist/chunk-NWNVWO6L.cjs.map +1 -0
  69. package/dist/{chunk-CQ4MFKFC.cjs → chunk-O2GW5IY6.cjs} +90 -86
  70. package/dist/chunk-O2GW5IY6.cjs.map +1 -0
  71. package/dist/{chunk-3BFGL2JL.cjs → chunk-ODRHHWHY.cjs} +4 -4
  72. package/dist/{chunk-3BFGL2JL.cjs.map → chunk-ODRHHWHY.cjs.map} +1 -1
  73. package/dist/{chunk-Y3KA6X7B.js → chunk-OVR3XMYL.js} +4 -4
  74. package/dist/{chunk-Y3KA6X7B.js.map → chunk-OVR3XMYL.js.map} +1 -1
  75. package/dist/{chunk-Y5KTM3V5.js → chunk-PDKM27DF.js} +17 -295
  76. package/dist/chunk-PDKM27DF.js.map +1 -0
  77. package/dist/{chunk-OAL3B2ZU.cjs → chunk-PLJ7PHWU.cjs} +5 -5
  78. package/dist/{chunk-OAL3B2ZU.cjs.map → chunk-PLJ7PHWU.cjs.map} +1 -1
  79. package/dist/{chunk-2UUNSHDI.cjs → chunk-RB7GX2VT.cjs} +59 -1682
  80. package/dist/chunk-RB7GX2VT.cjs.map +1 -0
  81. package/dist/chunk-RFIBUWLF.cjs +232 -0
  82. package/dist/chunk-RFIBUWLF.cjs.map +1 -0
  83. package/dist/chunk-RLWIUUQ5.js +23 -0
  84. package/dist/chunk-RLWIUUQ5.js.map +1 -0
  85. package/dist/{chunk-MIDXCYZB.cjs → chunk-RQ2Y7USX.cjs} +15 -235
  86. package/dist/chunk-RQ2Y7USX.cjs.map +1 -0
  87. package/dist/chunk-SV65E4QW.js +58 -0
  88. package/dist/chunk-SV65E4QW.js.map +1 -0
  89. package/dist/{chunk-LYUO3E6V.js → chunk-SZOFGU7W.js} +3 -3
  90. package/dist/{chunk-LYUO3E6V.js.map → chunk-SZOFGU7W.js.map} +1 -1
  91. package/dist/chunk-T5B7FM7S.js +1602 -0
  92. package/dist/chunk-T5B7FM7S.js.map +1 -0
  93. package/dist/{chunk-YNIBUKV5.js → chunk-TBEVGWY3.js} +32 -14
  94. package/dist/chunk-TBEVGWY3.js.map +1 -0
  95. package/dist/{chunk-MJCCBMM5.cjs → chunk-TC3RQNEX.cjs} +6 -80
  96. package/dist/chunk-TC3RQNEX.cjs.map +1 -0
  97. package/dist/chunk-TZGBRLPK.js +288 -0
  98. package/dist/chunk-TZGBRLPK.js.map +1 -0
  99. package/dist/chunk-U6YVZDOV.cjs +574 -0
  100. package/dist/chunk-U6YVZDOV.cjs.map +1 -0
  101. package/dist/{chunk-QIMVTGKS.cjs → chunk-U73KPFYH.cjs} +255 -2
  102. package/dist/chunk-U73KPFYH.cjs.map +1 -0
  103. package/dist/{chunk-HFGXA5CL.cjs → chunk-UTTTJSQU.cjs} +4 -4
  104. package/dist/{chunk-HFGXA5CL.cjs.map → chunk-UTTTJSQU.cjs.map} +1 -1
  105. package/dist/{chunk-DLBUFHLY.js → chunk-VTTZZ4FN.js} +4 -74
  106. package/dist/chunk-VTTZZ4FN.js.map +1 -0
  107. package/dist/{chunk-5FTIHRZH.cjs → chunk-XVUOMWMD.cjs} +4 -4
  108. package/dist/{chunk-5FTIHRZH.cjs.map → chunk-XVUOMWMD.cjs.map} +1 -1
  109. package/dist/{chunk-3ZYOASAX.js → chunk-Y4ATWQGV.js} +3 -3
  110. package/dist/{chunk-3ZYOASAX.js.map → chunk-Y4ATWQGV.js.map} +1 -1
  111. package/dist/{chunk-444XKG46.js → chunk-YKQ2DPIP.js} +3 -3
  112. package/dist/{chunk-444XKG46.js.map → chunk-YKQ2DPIP.js.map} +1 -1
  113. package/dist/{chunk-HEMU73OP.cjs → chunk-YSHIC4NJ.cjs} +4 -4
  114. package/dist/{chunk-HEMU73OP.cjs.map → chunk-YSHIC4NJ.cjs.map} +1 -1
  115. package/dist/{chunk-5BXEYYH6.js → chunk-ZM26YEOT.js} +3 -3
  116. package/dist/{chunk-5BXEYYH6.js.map → chunk-ZM26YEOT.js.map} +1 -1
  117. package/dist/citations/index.cjs +12 -12
  118. package/dist/citations/index.js +3 -3
  119. package/dist/connect/docx.cjs +36 -7
  120. package/dist/connect/docx.cjs.map +1 -1
  121. package/dist/connect/docx.d.ts +9 -2
  122. package/dist/connect/docx.js +30 -6
  123. package/dist/connect/docx.js.map +1 -1
  124. package/dist/connect/index.cjs +805 -630
  125. package/dist/connect/index.cjs.map +1 -1
  126. package/dist/connect/index.d.ts +2 -0
  127. package/dist/connect/index.js +639 -509
  128. package/dist/connect/index.js.map +1 -1
  129. package/dist/connection/ConnectedSettings.d.ts +3 -2
  130. package/dist/connection/docx/ConnectedNativeDocxComparison.d.ts +5 -0
  131. package/dist/connection/docx/ConnectedNativeDocxEditor.d.ts +16 -0
  132. package/dist/connection/{ConnectedStreamedWordArtifact.d.ts → docx/ConnectedStreamedWordArtifact.d.ts} +1 -1
  133. package/dist/connection/docx/support.d.ts +27 -0
  134. package/dist/connection/docx/useConnectedDocxReferences.d.ts +2 -0
  135. package/dist/connection/docx/useConnectedHouseTemplate.d.ts +2 -0
  136. package/dist/connection/settings-page/ConnectedAccountSettings.d.ts +35 -0
  137. package/dist/connection/settings-page/ConnectedMailSettings.d.ts +13 -0
  138. package/dist/connection/settings-page/ConnectedPremiumModels.d.ts +1 -0
  139. package/dist/connection/settings-page/ConnectedPrivacySettings.d.ts +12 -0
  140. package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +29 -0
  141. package/dist/connection/settings-page/SessionStatusIcon.d.ts +7 -0
  142. package/dist/connection/settings-page/index.d.ts +6 -0
  143. package/dist/docx/index.cjs +17 -63
  144. package/dist/docx/index.cjs.map +1 -1
  145. package/dist/docx/index.d.ts +1 -0
  146. package/dist/docx/index.js +2 -64
  147. package/dist/docx/index.js.map +1 -1
  148. package/dist/docx/template/candidates.d.ts +16 -0
  149. package/dist/facts/index.cjs +4 -4
  150. package/dist/facts/index.js +3 -3
  151. package/dist/files/index.cjs +3 -3
  152. package/dist/files/index.js +2 -2
  153. package/dist/home/index.cjs +20 -20
  154. package/dist/home/index.js +4 -4
  155. package/dist/index.cjs +793 -755
  156. package/dist/index.cjs.map +1 -1
  157. package/dist/index.d.ts +2 -0
  158. package/dist/index.js +25 -19
  159. package/dist/index.js.map +1 -1
  160. package/dist/lib/deep-link.d.ts +46 -0
  161. package/dist/lib/sidebar-mode.d.ts +1 -3
  162. package/dist/lib/use-close-on-escape.d.ts +6 -0
  163. package/dist/provider/BlocksProvider.d.ts +5 -1
  164. package/dist/provider/settings-section.d.ts +9 -0
  165. package/dist/retrieval/index.cjs +4 -4
  166. package/dist/retrieval/index.js +2 -2
  167. package/dist/settings/AppearanceSettings.d.ts +18 -0
  168. package/dist/settings/ServerConnectionControls.d.ts +16 -0
  169. package/dist/settings/SettingsPage.d.ts +31 -0
  170. package/dist/settings/index.cjs +189 -251
  171. package/dist/settings/index.cjs.map +1 -1
  172. package/dist/settings/index.d.ts +3 -1
  173. package/dist/settings/index.js +89 -200
  174. package/dist/settings/index.js.map +1 -1
  175. package/dist/shell/ShellSidebar.d.ts +37 -0
  176. package/dist/shell/Sidebar.d.ts +6 -6
  177. package/dist/shell/index.cjs +63 -50
  178. package/dist/shell/index.d.ts +4 -1
  179. package/dist/shell/index.js +5 -4
  180. package/dist/shell/types.d.ts +18 -0
  181. package/dist/shell/use-sidebar-controller.d.ts +59 -0
  182. package/dist/site/index.cjs +74 -73
  183. package/dist/site/index.js +3 -2
  184. package/dist/studio/index.cjs +80 -78
  185. package/dist/studio/index.cjs.map +1 -1
  186. package/dist/studio/index.js +10 -8
  187. package/dist/studio/index.js.map +1 -1
  188. package/dist/workflow-canvas/index.cjs +64 -60
  189. package/dist/workflow-canvas/index.cjs.map +1 -1
  190. package/dist/workflow-canvas/index.js +12 -8
  191. package/dist/workflow-canvas/index.js.map +1 -1
  192. package/dist/workspaces/index.cjs +3 -3
  193. package/dist/workspaces/index.js +2 -2
  194. package/node_modules/@arbidocs/coedit/package.json +1 -1
  195. package/package.json +4 -4
  196. package/dist/chunk-2UUNSHDI.cjs.map +0 -1
  197. package/dist/chunk-4TR5QCCX.cjs +0 -43
  198. package/dist/chunk-4TR5QCCX.cjs.map +0 -1
  199. package/dist/chunk-7NDW4KF4.cjs +0 -112
  200. package/dist/chunk-7NDW4KF4.cjs.map +0 -1
  201. package/dist/chunk-C4WSHRR6.cjs.map +0 -1
  202. package/dist/chunk-CKCBBYTA.js.map +0 -1
  203. package/dist/chunk-CQ4MFKFC.cjs.map +0 -1
  204. package/dist/chunk-DLBUFHLY.js.map +0 -1
  205. package/dist/chunk-ETXYVO6E.js +0 -109
  206. package/dist/chunk-ETXYVO6E.js.map +0 -1
  207. package/dist/chunk-GFRQG36Y.cjs.map +0 -1
  208. package/dist/chunk-GYAUJ4KT.js.map +0 -1
  209. package/dist/chunk-MCKOZACC.js +0 -41
  210. package/dist/chunk-MCKOZACC.js.map +0 -1
  211. package/dist/chunk-MIDXCYZB.cjs.map +0 -1
  212. package/dist/chunk-MJCCBMM5.cjs.map +0 -1
  213. package/dist/chunk-O6W6RW3B.js.map +0 -1
  214. package/dist/chunk-ON3TKY5Y.js.map +0 -1
  215. package/dist/chunk-OWCEQKAR.cjs.map +0 -1
  216. package/dist/chunk-QIMVTGKS.cjs.map +0 -1
  217. package/dist/chunk-S24XEVPS.cjs.map +0 -1
  218. package/dist/chunk-Y5KTM3V5.js.map +0 -1
  219. package/dist/chunk-YFF3GTJQ.js.map +0 -1
  220. package/dist/chunk-YNIBUKV5.js.map +0 -1
  221. package/dist/chunk-YWY2KIX2.js.map +0 -1
  222. package/dist/connection/ConnectedNativeDocxEditor.d.ts +0 -6
@@ -1,6 +1,8 @@
1
1
  "use client";
2
- import { ActionLink } from './chunk-444XKG46.js';
2
+ import { useControllableState } from './chunk-RLWIUUQ5.js';
3
+ import { ActionLink } from './chunk-YKQ2DPIP.js';
3
4
  import { useDrawerBehavior, BlocksTooltipProvider, useShellBottomInset } from './chunk-7XF5SFJ2.js';
5
+ import { useIsPhone, useIsNarrow, useIsTouchScreen } from './chunk-SLSBJRWW.js';
4
6
  import { testIdOr, prefixedTestId } from './chunk-7F6CBP3Z.js';
5
7
  import { createContext, forwardRef, useContext, useMemo, useRef, useState, useEffect, useCallback, useId } from 'react';
6
8
  import { TriangleAlert, CheckCircle2, Loader2, PanelLeftClose, PanelLeftOpen, X, Sparkles, Search, ArrowUp, Menu, Download, RefreshCw, WifiOff, MousePointerClick, Lightbulb, Pencil, ChevronLeft, ChevronRight, Info } from 'lucide-react';
@@ -101,7 +103,6 @@ function SidebarRoot({
101
103
  mode,
102
104
  expanded,
103
105
  isHovering = false,
104
- isPeeking = false,
105
106
  onBackdropClick,
106
107
  hasRailBackdrop = false,
107
108
  onMouseEnter,
@@ -165,18 +166,16 @@ function SidebarRoot({
165
166
  "nav",
166
167
  {
167
168
  ...common,
168
- className: cn(navBase, "absolute left-0 top-0 z-[45]", isPeeking && "shadow-xl", className),
169
+ className: cn(navBase, "absolute left-0 top-0 z-[45]", className),
169
170
  style: {
170
- width: isPeeking ? EXPANDED_WIDTH : "0px",
171
+ width: "0px",
171
172
  minWidth: 0,
172
- paddingLeft: isPeeking ? "0.75rem" : 0,
173
- paddingRight: isPeeking ? "0.75rem" : 0,
174
- borderRightWidth: isPeeking ? void 0 : 0,
175
- pointerEvents: isPeeking ? "auto" : "none"
173
+ paddingLeft: 0,
174
+ paddingRight: 0,
175
+ borderRightWidth: 0,
176
+ pointerEvents: "none"
176
177
  },
177
- inert: !isPeeking,
178
- onMouseEnter,
179
- onMouseLeave,
178
+ inert: true,
180
179
  children
181
180
  }
182
181
  );
@@ -245,7 +244,13 @@ function SidebarHeader({ children, className, "data-testid": testId }) {
245
244
  }
246
245
  );
247
246
  }
248
- function SidebarNav({ items, children, className, "data-testid": testId }) {
247
+ function SidebarNav({
248
+ items,
249
+ sections,
250
+ children,
251
+ className,
252
+ "data-testid": testId
253
+ }) {
249
254
  const { expanded } = useSidebarContext();
250
255
  return /* @__PURE__ */ jsxs(
251
256
  "div",
@@ -255,6 +260,16 @@ function SidebarNav({ items, children, className, "data-testid": testId }) {
255
260
  className: cn("flex flex-shrink-0 flex-col gap-0.5", !expanded && "items-center", className),
256
261
  children: [
257
262
  items?.map((item) => /* @__PURE__ */ jsx(SidebarNavItem, { ...item }, item.id)),
263
+ sections?.map((section) => /* @__PURE__ */ jsx(
264
+ SidebarGroup,
265
+ {
266
+ label: section.label,
267
+ ariaLabel: section.ariaLabel,
268
+ "data-testid": section.testId,
269
+ children: section.items.map((item) => /* @__PURE__ */ jsx(SidebarNavItem, { ...item }, item.id))
270
+ },
271
+ section.id
272
+ )),
258
273
  children
259
274
  ]
260
275
  }
@@ -319,6 +334,11 @@ function SidebarFooter({ children, className, "data-testid": testId }) {
319
334
  }
320
335
  );
321
336
  }
337
+ var INDICATOR_TONES = {
338
+ progress: "bg-primary",
339
+ error: "bg-red-solid",
340
+ attention: "bg-yellow-solid"
341
+ };
322
342
  function SidebarNavItem({
323
343
  label,
324
344
  icon,
@@ -330,6 +350,7 @@ function SidebarNavItem({
330
350
  testId,
331
351
  disabled = false,
332
352
  trailing,
353
+ indicator,
333
354
  className,
334
355
  tooltip
335
356
  }) {
@@ -353,7 +374,20 @@ function SidebarNavItem({
353
374
  disabled && "pointer-events-none cursor-not-allowed opacity-30",
354
375
  className
355
376
  ),
356
- children: /* @__PURE__ */ jsx("div", { className: "flex size-5 items-center justify-center", children: icon })
377
+ children: /* @__PURE__ */ jsx("div", { className: "flex size-5 items-center justify-center", children: indicator ? /* @__PURE__ */ jsxs("div", { className: "relative", children: [
378
+ icon,
379
+ /* @__PURE__ */ jsx(
380
+ "div",
381
+ {
382
+ "data-slot": "sidebar-nav-indicator",
383
+ "data-tone": indicator,
384
+ className: cn(
385
+ "absolute -right-1 -top-1 size-2.5 rounded-full border border-sidebar",
386
+ INDICATOR_TONES[indicator]
387
+ )
388
+ }
389
+ )
390
+ ] }) : icon })
357
391
  }
358
392
  );
359
393
  if (!tip) return railButton;
@@ -535,6 +569,163 @@ var Sidebar = {
535
569
  BadgeRow: SidebarBadgeRow,
536
570
  DrawerHeader: SidebarDrawerHeader
537
571
  };
572
+ function ShellSidebar({
573
+ controller,
574
+ drawerLogo,
575
+ drawerCloseTestId,
576
+ header,
577
+ items,
578
+ sections,
579
+ navClassName,
580
+ tips,
581
+ footer,
582
+ ...rootProps
583
+ }) {
584
+ if (controller.layout.hidden) return null;
585
+ return /* @__PURE__ */ jsxs(Sidebar.Root, { ...controller.rootProps, ...rootProps, children: [
586
+ controller.isDrawer && drawerLogo && /* @__PURE__ */ jsx(
587
+ Sidebar.DrawerHeader,
588
+ {
589
+ logo: drawerLogo,
590
+ onClose: controller.closeDrawer,
591
+ "data-testid": drawerCloseTestId
592
+ }
593
+ ),
594
+ header && /* @__PURE__ */ jsx(Sidebar.Header, { children: header }),
595
+ /* @__PURE__ */ jsx(Sidebar.Nav, { items, sections, className: navClassName }),
596
+ (tips || footer) && /* @__PURE__ */ jsxs(Sidebar.Footer, { children: [
597
+ controller.tipsVisible && tips,
598
+ footer
599
+ ] })
600
+ ] });
601
+ }
602
+ function useCloseOnEscape(isActive, onClose) {
603
+ const onCloseRef = useRef(onClose);
604
+ useEffect(() => {
605
+ onCloseRef.current = onClose;
606
+ });
607
+ useEffect(() => {
608
+ if (!isActive) return;
609
+ const onKeyDown = (e) => {
610
+ if (e.key === "Escape" && !e.defaultPrevented) onCloseRef.current();
611
+ };
612
+ document.addEventListener("keydown", onKeyDown);
613
+ return () => document.removeEventListener("keydown", onKeyDown);
614
+ }, [isActive]);
615
+ }
616
+ function resolveSidebarLayout(input) {
617
+ const { isSmallScreen, isDrawerRequested, isCollapsed, isPinned, isHovering } = input;
618
+ const canPin = isPinned && !isSmallScreen && !input.isNarrow;
619
+ const drawerOpen = isSmallScreen && isDrawerRequested;
620
+ const effectiveCollapsed = isCollapsed || isSmallScreen && !drawerOpen;
621
+ const hovering = isHovering && !isSmallScreen;
622
+ let mode;
623
+ if (drawerOpen) mode = "drawer";
624
+ else if (effectiveCollapsed) mode = "collapsed";
625
+ else if (canPin) mode = "pinned";
626
+ else mode = "rail";
627
+ const expanded = drawerOpen || !effectiveCollapsed && (canPin || hovering);
628
+ return { mode, expanded, hidden: isSmallScreen && !drawerOpen, hovering };
629
+ }
630
+ function useSidebarSettle(expanded, settleMs = 300) {
631
+ const [labelsExpanded, setLabelsExpanded] = useState(expanded);
632
+ const [tipsVisible, setTipsVisible] = useState(expanded);
633
+ const labelsTimer = useRef(null);
634
+ const tipsTimer = useRef(null);
635
+ useEffect(() => {
636
+ if (labelsTimer.current) clearTimeout(labelsTimer.current);
637
+ if (expanded) setLabelsExpanded(true);
638
+ else labelsTimer.current = setTimeout(() => setLabelsExpanded(false), settleMs);
639
+ return () => {
640
+ if (labelsTimer.current) clearTimeout(labelsTimer.current);
641
+ };
642
+ }, [expanded, settleMs]);
643
+ useEffect(() => {
644
+ if (tipsTimer.current) clearTimeout(tipsTimer.current);
645
+ if (expanded) tipsTimer.current = setTimeout(() => setTipsVisible(true), settleMs);
646
+ else setTipsVisible(false);
647
+ return () => {
648
+ if (tipsTimer.current) clearTimeout(tipsTimer.current);
649
+ };
650
+ }, [expanded, settleMs]);
651
+ return { labelsExpanded, tipsVisible };
652
+ }
653
+
654
+ // src/shell/use-sidebar-controller.ts
655
+ var isMenuOpen = () => typeof document !== "undefined" && document.querySelector('[role="menu"][data-state="open"]') !== null;
656
+ function useSidebarController(options = {}) {
657
+ const [storedPinned, setPinned] = useControllableState(
658
+ options.isPinned,
659
+ options.defaultPinned ?? true,
660
+ options.onPinnedChange
661
+ );
662
+ const [isHovering, setHovering] = useControllableState(
663
+ options.isHovering,
664
+ false,
665
+ options.onHoveringChange
666
+ );
667
+ const [isDrawerOpen, setDrawerOpen] = useControllableState(
668
+ options.isDrawerOpen,
669
+ false,
670
+ options.onDrawerOpenChange
671
+ );
672
+ const isSmallScreen = useIsPhone();
673
+ const isNarrow = useIsNarrow() || !!options.forceRail;
674
+ const isTouch = useIsTouchScreen();
675
+ const layout = resolveSidebarLayout({
676
+ isSmallScreen,
677
+ isDrawerRequested: isDrawerOpen,
678
+ isCollapsed: false,
679
+ isPinned: storedPinned,
680
+ isHovering,
681
+ isNarrow
682
+ });
683
+ const isDrawer = layout.mode === "drawer";
684
+ const { labelsExpanded, tipsVisible } = useSidebarSettle(layout.expanded);
685
+ const isPointerOver = useRef(false);
686
+ const closeDrawer = useCallback(() => setDrawerOpen(false), [setDrawerOpen]);
687
+ const openDrawer = useCallback(() => setDrawerOpen(true), [setDrawerOpen]);
688
+ useCloseOnEscape(layout.mode === "rail" && layout.hovering, () => setHovering(false));
689
+ useEffect(() => {
690
+ if (isDrawerOpen && !isSmallScreen) setDrawerOpen(false);
691
+ }, [isDrawerOpen, isSmallScreen, setDrawerOpen]);
692
+ const onMouseEnter = () => {
693
+ if (isTouch) return;
694
+ isPointerOver.current = true;
695
+ if (!isSmallScreen && !isNarrow && !isMenuOpen()) setHovering(true);
696
+ };
697
+ const onMouseLeave = () => {
698
+ if (isTouch) return;
699
+ isPointerOver.current = false;
700
+ if (!isSmallScreen) setHovering(false);
701
+ };
702
+ return {
703
+ layout,
704
+ expanded: labelsExpanded,
705
+ tipsVisible,
706
+ isDrawer,
707
+ isSmallScreen,
708
+ isNarrow,
709
+ isPinned: storedPinned && !isNarrow,
710
+ rootProps: {
711
+ mode: layout.mode,
712
+ expanded: labelsExpanded,
713
+ isHovering: layout.hovering,
714
+ onBackdropClick: isDrawer ? closeDrawer : () => setHovering(false),
715
+ hasRailBackdrop: isTouch,
716
+ onMouseEnter,
717
+ onMouseLeave
718
+ },
719
+ openDrawer,
720
+ closeDrawer,
721
+ togglePin: () => isNarrow ? setHovering(!isHovering) : setPinned(!storedPinned),
722
+ expand: () => isNarrow ? setHovering(true) : setPinned(true),
723
+ afterNavigate: () => {
724
+ if (!isPointerOver.current && !storedPinned) setHovering(false);
725
+ if (isDrawer) closeDrawer();
726
+ }
727
+ };
728
+ }
538
729
  var PULSE_STYLES = {
539
730
  active: "animate-pulse-attention text-primary",
540
731
  success: "animate-pulse-attention text-green-text",
@@ -1496,44 +1687,6 @@ function TipCard({
1496
1687
  }
1497
1688
  );
1498
1689
  }
1499
- function resolveSidebarLayout(input) {
1500
- const { isSmallScreen, isDrawerRequested, isCollapsed, isPinned, isHovering } = input;
1501
- const isPeeking = input.isPeeking ?? false;
1502
- const canPin = isPinned && !isSmallScreen && !input.isNarrow;
1503
- const drawerOpen = isSmallScreen && isDrawerRequested;
1504
- const effectiveCollapsed = isCollapsed || isSmallScreen && !drawerOpen;
1505
- const hovering = isHovering && !isSmallScreen;
1506
- let mode;
1507
- if (drawerOpen) mode = "drawer";
1508
- else if (effectiveCollapsed) mode = "collapsed";
1509
- else if (canPin) mode = "pinned";
1510
- else mode = "rail";
1511
- const expanded = drawerOpen || canPin || !isCollapsed && isHovering || isCollapsed && isPeeking;
1512
- return { mode, expanded, hidden: isSmallScreen && !drawerOpen, hovering };
1513
- }
1514
- function useSidebarSettle(expanded, settleMs = 300) {
1515
- const [labelsExpanded, setLabelsExpanded] = useState(expanded);
1516
- const [tipsVisible, setTipsVisible] = useState(expanded);
1517
- const labelsTimer = useRef(null);
1518
- const tipsTimer = useRef(null);
1519
- useEffect(() => {
1520
- if (labelsTimer.current) clearTimeout(labelsTimer.current);
1521
- if (expanded) setLabelsExpanded(true);
1522
- else labelsTimer.current = setTimeout(() => setLabelsExpanded(false), settleMs);
1523
- return () => {
1524
- if (labelsTimer.current) clearTimeout(labelsTimer.current);
1525
- };
1526
- }, [expanded, settleMs]);
1527
- useEffect(() => {
1528
- if (tipsTimer.current) clearTimeout(tipsTimer.current);
1529
- if (expanded) tipsTimer.current = setTimeout(() => setTipsVisible(true), settleMs);
1530
- else setTipsVisible(false);
1531
- return () => {
1532
- if (tipsTimer.current) clearTimeout(tipsTimer.current);
1533
- };
1534
- }, [expanded, settleMs]);
1535
- return { labelsExpanded, tipsVisible };
1536
- }
1537
1690
  var VARIANT_TONE = {
1538
1691
  info: "bg-blue-bg text-primary border-blue-border",
1539
1692
  warning: "bg-yellow-bg text-yellow-text border-yellow-border",
@@ -1661,6 +1814,6 @@ function SplitLayout({
1661
1814
  );
1662
1815
  }
1663
1816
 
1664
- export { ActionCluster, AskField, AskRow, AskTrigger, DEFAULT_ASK_FIELD_LABELS, DEFAULT_INSTALL_PROMPT_LABELS, DEFAULT_MOBILE_BARS_LABELS, DEFAULT_OFFLINE_PILL_LABELS, DEFAULT_REMOTE_CONTROL_PILL_LABELS, DEFAULT_SIDEBAR_LABELS, DEFAULT_TIP_CARD_LABELS, INSTALL_PROMPT_DISMISSED_KEY, InfoBar, InstallPrompt, MobileAppBar, MobileTabBar, OfflinePill, RemoteControlPill, STATUS_ROW_BASE_CLASS, STATUS_ROW_TONES, Sidebar, SidebarBadgeRow, SidebarRowAction, SidebarRowHoverContext, SplitLayout, StatusBadge, StatusRow, TipCard, getInstallInstructions, initInstallPrompt, isIosDevice, promptAppInstall, resolveSidebarLayout, useInstallPrompt, useSidebarContext, useSidebarSettle };
1665
- //# sourceMappingURL=chunk-O6W6RW3B.js.map
1666
- //# sourceMappingURL=chunk-O6W6RW3B.js.map
1817
+ export { ActionCluster, AskField, AskRow, AskTrigger, DEFAULT_ASK_FIELD_LABELS, DEFAULT_INSTALL_PROMPT_LABELS, DEFAULT_MOBILE_BARS_LABELS, DEFAULT_OFFLINE_PILL_LABELS, DEFAULT_REMOTE_CONTROL_PILL_LABELS, DEFAULT_SIDEBAR_LABELS, DEFAULT_TIP_CARD_LABELS, INSTALL_PROMPT_DISMISSED_KEY, InfoBar, InstallPrompt, MobileAppBar, MobileTabBar, OfflinePill, RemoteControlPill, STATUS_ROW_BASE_CLASS, STATUS_ROW_TONES, ShellSidebar, Sidebar, SidebarBadgeRow, SidebarRowAction, SidebarRowHoverContext, SplitLayout, StatusBadge, StatusRow, TipCard, getInstallInstructions, initInstallPrompt, isIosDevice, promptAppInstall, resolveSidebarLayout, useCloseOnEscape, useInstallPrompt, useSidebarContext, useSidebarController, useSidebarSettle };
1818
+ //# sourceMappingURL=chunk-H4D7WKDY.js.map
1819
+ //# sourceMappingURL=chunk-H4D7WKDY.js.map