@arbidocs/blocks 0.5.63 → 0.5.65

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 (177) hide show
  1. package/dist/{ConnectedDocumentViewer-7VKAM6KD.js → ConnectedDocumentViewer-HKIBNGGG.js} +10 -9
  2. package/dist/{ConnectedDocumentViewer-7VKAM6KD.js.map → ConnectedDocumentViewer-HKIBNGGG.js.map} +1 -1
  3. package/dist/{ConnectedDocumentViewer-FGQ27H4B.cjs → ConnectedDocumentViewer-YSZWOVGN.cjs} +11 -10
  4. package/dist/{ConnectedDocumentViewer-FGQ27H4B.cjs.map → ConnectedDocumentViewer-YSZWOVGN.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxComparison-HJ4FTVH6.cjs → ConnectedNativeDocxComparison-L3R3ROPZ.cjs} +7 -7
  6. package/dist/{ConnectedNativeDocxComparison-HJ4FTVH6.cjs.map → ConnectedNativeDocxComparison-L3R3ROPZ.cjs.map} +1 -1
  7. package/dist/{ConnectedNativeDocxComparison-FPW3BNBN.js → ConnectedNativeDocxComparison-PSAP3Q7D.js} +6 -6
  8. package/dist/{ConnectedNativeDocxComparison-FPW3BNBN.js.map → ConnectedNativeDocxComparison-PSAP3Q7D.js.map} +1 -1
  9. package/dist/{ConnectedNativeDocxEditor-S7NJMDSU.js → ConnectedNativeDocxEditor-PI6QTPXZ.js} +5 -5
  10. package/dist/{ConnectedNativeDocxEditor-S7NJMDSU.js.map → ConnectedNativeDocxEditor-PI6QTPXZ.js.map} +1 -1
  11. package/dist/{ConnectedNativeDocxEditor-PF46MU5H.cjs → ConnectedNativeDocxEditor-VDBC4XRT.cjs} +7 -7
  12. package/dist/{ConnectedNativeDocxEditor-PF46MU5H.cjs.map → ConnectedNativeDocxEditor-VDBC4XRT.cjs.map} +1 -1
  13. package/dist/{ConnectedStreamedWordArtifact-5MHLV24V.js → ConnectedStreamedWordArtifact-V4MTKVNE.js} +6 -6
  14. package/dist/ConnectedStreamedWordArtifact-V4MTKVNE.js.map +1 -0
  15. package/dist/{ConnectedStreamedWordArtifact-LNGW7YGV.cjs → ConnectedStreamedWordArtifact-YSW6D7AG.cjs} +7 -7
  16. package/dist/ConnectedStreamedWordArtifact-YSW6D7AG.cjs.map +1 -0
  17. package/dist/{DocumentReviewCard-VFNMJSK7.cjs → DocumentReviewCard-BQ6ZD5MD.cjs} +6 -6
  18. package/dist/{DocumentReviewCard-VFNMJSK7.cjs.map → DocumentReviewCard-BQ6ZD5MD.cjs.map} +1 -1
  19. package/dist/{DocumentReviewCard-5U3TGJZA.js → DocumentReviewCard-TQQADJ36.js} +6 -6
  20. package/dist/{DocumentReviewCard-5U3TGJZA.js.map → DocumentReviewCard-TQQADJ36.js.map} +1 -1
  21. package/dist/{WorkspaceTableView-DHMCJRC6.cjs → WorkspaceTableView-GKMVTECZ.cjs} +6 -6
  22. package/dist/{WorkspaceTableView-DHMCJRC6.cjs.map → WorkspaceTableView-GKMVTECZ.cjs.map} +1 -1
  23. package/dist/{WorkspaceTableView-EH5CEB44.js → WorkspaceTableView-YFLVFRJL.js} +4 -4
  24. package/dist/{WorkspaceTableView-EH5CEB44.js.map → WorkspaceTableView-YFLVFRJL.js.map} +1 -1
  25. package/dist/agents/index.cjs +345 -344
  26. package/dist/agents/index.js +6 -5
  27. package/dist/{chunk-NDVLCOWS.js → chunk-2LUA7UDE.js} +7 -7
  28. package/dist/{chunk-NDVLCOWS.js.map → chunk-2LUA7UDE.js.map} +1 -1
  29. package/dist/{chunk-77IAOKZO.js → chunk-2VH2PT3J.js} +5 -38
  30. package/dist/chunk-2VH2PT3J.js.map +1 -0
  31. package/dist/{chunk-IC6SBDYA.js → chunk-4CI42DCG.js} +3 -3
  32. package/dist/{chunk-IC6SBDYA.js.map → chunk-4CI42DCG.js.map} +1 -1
  33. package/dist/{chunk-IFLFLP4K.js → chunk-4Q7ON335.js} +6 -5
  34. package/dist/chunk-4Q7ON335.js.map +1 -0
  35. package/dist/{chunk-IUFS3AYQ.js → chunk-5EGTGHBW.js} +7 -7
  36. package/dist/{chunk-IUFS3AYQ.js.map → chunk-5EGTGHBW.js.map} +1 -1
  37. package/dist/{chunk-OLDGMBEF.cjs → chunk-67AFX23Y.cjs} +185 -91
  38. package/dist/chunk-67AFX23Y.cjs.map +1 -0
  39. package/dist/{chunk-5CWBAINB.js → chunk-6OMIIF76.js} +3 -3
  40. package/dist/{chunk-5CWBAINB.js.map → chunk-6OMIIF76.js.map} +1 -1
  41. package/dist/chunk-6QZ35CTZ.js +594 -0
  42. package/dist/chunk-6QZ35CTZ.js.map +1 -0
  43. package/dist/{chunk-4RJPTXUQ.cjs → chunk-7MOQO6NO.cjs} +5 -5
  44. package/dist/{chunk-4RJPTXUQ.cjs.map → chunk-7MOQO6NO.cjs.map} +1 -1
  45. package/dist/chunk-AESJLGMC.cjs +1228 -0
  46. package/dist/chunk-AESJLGMC.cjs.map +1 -0
  47. package/dist/{chunk-EOIJ5JYP.cjs → chunk-B3CRSCLK.cjs} +4 -4
  48. package/dist/{chunk-EOIJ5JYP.cjs.map → chunk-B3CRSCLK.cjs.map} +1 -1
  49. package/dist/{chunk-GRDLCRNL.js → chunk-BELZ2WD2.js} +5 -5
  50. package/dist/{chunk-GRDLCRNL.js.map → chunk-BELZ2WD2.js.map} +1 -1
  51. package/dist/chunk-C2S246BV.js +1225 -0
  52. package/dist/chunk-C2S246BV.js.map +1 -0
  53. package/dist/{chunk-TAI23FCY.js → chunk-CEKOZAGO.js} +3 -3
  54. package/dist/{chunk-TAI23FCY.js.map → chunk-CEKOZAGO.js.map} +1 -1
  55. package/dist/{chunk-HVOPUYAG.cjs → chunk-CJF7B5A7.cjs} +29 -28
  56. package/dist/chunk-CJF7B5A7.cjs.map +1 -0
  57. package/dist/{chunk-LBKTTQUR.cjs → chunk-CMYJEIZB.cjs} +12 -12
  58. package/dist/{chunk-LBKTTQUR.cjs.map → chunk-CMYJEIZB.cjs.map} +1 -1
  59. package/dist/{chunk-2SLDVFOZ.js → chunk-CRHY7DBO.js} +3 -3
  60. package/dist/{chunk-2SLDVFOZ.js.map → chunk-CRHY7DBO.js.map} +1 -1
  61. package/dist/{chunk-23ACBETH.cjs → chunk-D27BBGUF.cjs} +4 -4
  62. package/dist/{chunk-23ACBETH.cjs.map → chunk-D27BBGUF.cjs.map} +1 -1
  63. package/dist/{chunk-3X37I6QE.cjs → chunk-DJE2E7YH.cjs} +29 -29
  64. package/dist/{chunk-3X37I6QE.cjs.map → chunk-DJE2E7YH.cjs.map} +1 -1
  65. package/dist/{chunk-CCSF7RI4.cjs → chunk-EG3BB32W.cjs} +3 -3
  66. package/dist/{chunk-CCSF7RI4.cjs.map → chunk-EG3BB32W.cjs.map} +1 -1
  67. package/dist/{chunk-MAKTAR7H.cjs → chunk-F777MGVA.cjs} +18 -18
  68. package/dist/{chunk-MAKTAR7H.cjs.map → chunk-F777MGVA.cjs.map} +1 -1
  69. package/dist/{chunk-TFWCREOL.js → chunk-GPYLXEZO.js} +9 -506
  70. package/dist/chunk-GPYLXEZO.js.map +1 -0
  71. package/dist/{chunk-OY3I32ZS.js → chunk-GX37C5QT.js} +4 -4
  72. package/dist/{chunk-OY3I32ZS.js.map → chunk-GX37C5QT.js.map} +1 -1
  73. package/dist/chunk-I4IS6ST6.cjs +48 -0
  74. package/dist/chunk-I4IS6ST6.cjs.map +1 -0
  75. package/dist/{chunk-OZL5ABLF.js → chunk-IRXPUQFP.js} +3 -3
  76. package/dist/{chunk-OZL5ABLF.js.map → chunk-IRXPUQFP.js.map} +1 -1
  77. package/dist/chunk-J77BACGX.js +575 -0
  78. package/dist/chunk-J77BACGX.js.map +1 -0
  79. package/dist/{chunk-X3JJTHQ4.cjs → chunk-JSHBC47B.cjs} +55 -55
  80. package/dist/{chunk-X3JJTHQ4.cjs.map → chunk-JSHBC47B.cjs.map} +1 -1
  81. package/dist/{chunk-Y6ZNWC7E.cjs → chunk-K26RLK2Y.cjs} +3 -3
  82. package/dist/{chunk-Y6ZNWC7E.cjs.map → chunk-K26RLK2Y.cjs.map} +1 -1
  83. package/dist/{chunk-PKDPQS6Z.js → chunk-KNOSLLTC.js} +3 -3
  84. package/dist/{chunk-PKDPQS6Z.js.map → chunk-KNOSLLTC.js.map} +1 -1
  85. package/dist/chunk-LFS6UWSJ.cjs +602 -0
  86. package/dist/chunk-LFS6UWSJ.cjs.map +1 -0
  87. package/dist/{chunk-YQFEN7UJ.js → chunk-LNH6NYG4.js} +6 -90
  88. package/dist/chunk-LNH6NYG4.js.map +1 -0
  89. package/dist/chunk-LRPGXNMA.js +44 -0
  90. package/dist/chunk-LRPGXNMA.js.map +1 -0
  91. package/dist/chunk-NEGFHF3V.cjs +617 -0
  92. package/dist/chunk-NEGFHF3V.cjs.map +1 -0
  93. package/dist/{chunk-NHPBONMR.js → chunk-O4FBMC6S.js} +186 -71
  94. package/dist/chunk-O4FBMC6S.js.map +1 -0
  95. package/dist/{chunk-7P24MJQN.js → chunk-PBIFISDD.js} +3 -3
  96. package/dist/{chunk-7P24MJQN.js.map → chunk-PBIFISDD.js.map} +1 -1
  97. package/dist/{chunk-OWUNCJFO.cjs → chunk-PZOX4JF6.cjs} +30 -30
  98. package/dist/{chunk-OWUNCJFO.cjs.map → chunk-PZOX4JF6.cjs.map} +1 -1
  99. package/dist/{chunk-CKNUL4LM.cjs → chunk-QK546T4C.cjs} +3 -3
  100. package/dist/{chunk-CKNUL4LM.cjs.map → chunk-QK546T4C.cjs.map} +1 -1
  101. package/dist/{chunk-QAXIVZEJ.cjs → chunk-ROWJU4SK.cjs} +13 -513
  102. package/dist/chunk-ROWJU4SK.cjs.map +1 -0
  103. package/dist/{chunk-JWRTUYLC.js → chunk-SBAM3UZX.js} +3 -3
  104. package/dist/{chunk-JWRTUYLC.js.map → chunk-SBAM3UZX.js.map} +1 -1
  105. package/dist/{chunk-COZDIUG7.cjs → chunk-TJ7QEGVP.cjs} +18 -18
  106. package/dist/{chunk-COZDIUG7.cjs.map → chunk-TJ7QEGVP.cjs.map} +1 -1
  107. package/dist/{chunk-PVPGD6QR.js → chunk-VWM3J6ES.js} +3 -3
  108. package/dist/{chunk-PVPGD6QR.js.map → chunk-VWM3J6ES.js.map} +1 -1
  109. package/dist/{chunk-UDMII47W.cjs → chunk-WBLCPCWR.cjs} +7 -7
  110. package/dist/{chunk-UDMII47W.cjs.map → chunk-WBLCPCWR.cjs.map} +1 -1
  111. package/dist/{chunk-3T3IKNGF.cjs → chunk-ZXW6WFZG.cjs} +5 -41
  112. package/dist/chunk-ZXW6WFZG.cjs.map +1 -0
  113. package/dist/{chunk-ODQK3LX5.cjs → chunk-ZZHMJXM5.cjs} +4 -93
  114. package/dist/chunk-ZZHMJXM5.cjs.map +1 -0
  115. package/dist/connect/docx.cjs +11 -11
  116. package/dist/connect/docx.js +7 -7
  117. package/dist/connect/index.cjs +496 -493
  118. package/dist/connect/index.cjs.map +1 -1
  119. package/dist/connect/index.js +36 -33
  120. package/dist/connect/index.js.map +1 -1
  121. package/dist/connect/viewer.cjs +9 -8
  122. package/dist/connect/viewer.js +8 -7
  123. package/dist/dashboards/index.cjs +1 -1
  124. package/dist/dashboards/index.js +1 -1
  125. package/dist/document-tools/index.cjs +17 -17
  126. package/dist/document-tools/index.js +2 -2
  127. package/dist/embed/index.cjs +11 -10
  128. package/dist/embed/index.js +8 -7
  129. package/dist/facts/index.cjs +1 -1
  130. package/dist/facts/index.js +1 -1
  131. package/dist/files/index.cjs +1 -1
  132. package/dist/files/index.js +1 -1
  133. package/dist/index.cjs +653 -618
  134. package/dist/index.cjs.map +1 -1
  135. package/dist/index.d.ts +4 -0
  136. package/dist/index.js +19 -16
  137. package/dist/index.js.map +1 -1
  138. package/dist/shell/index.cjs +78 -77
  139. package/dist/shell/index.js +3 -2
  140. package/dist/site/index.cjs +105 -81
  141. package/dist/site/index.d.ts +3 -1
  142. package/dist/site/index.js +4 -4
  143. package/dist/studio/index.cjs +60 -55
  144. package/dist/studio/index.cjs.map +1 -1
  145. package/dist/studio/index.js +12 -7
  146. package/dist/studio/index.js.map +1 -1
  147. package/dist/theme/ThemeControls.d.ts +71 -0
  148. package/dist/theme/ThemeEditor.d.ts +5 -2
  149. package/dist/theme/ThemePreview.d.ts +20 -0
  150. package/dist/theme/color.d.ts +17 -1
  151. package/dist/theme/derive.d.ts +75 -0
  152. package/dist/theme/editorModel.d.ts +36 -0
  153. package/dist/theme/previewLabels.d.ts +38 -0
  154. package/dist/theme/store.d.ts +51 -13
  155. package/dist/theme/tokens.d.ts +2 -0
  156. package/dist/workflow-canvas/index.cjs +37 -36
  157. package/dist/workflow-canvas/index.cjs.map +1 -1
  158. package/dist/workflow-canvas/index.js +13 -12
  159. package/dist/workflow-canvas/index.js.map +1 -1
  160. package/node_modules/@arbidocs/coedit/package.json +1 -1
  161. package/package.json +5 -5
  162. package/dist/ConnectedStreamedWordArtifact-5MHLV24V.js.map +0 -1
  163. package/dist/ConnectedStreamedWordArtifact-LNGW7YGV.cjs.map +0 -1
  164. package/dist/chunk-3T3IKNGF.cjs.map +0 -1
  165. package/dist/chunk-77IAOKZO.js.map +0 -1
  166. package/dist/chunk-HVOPUYAG.cjs.map +0 -1
  167. package/dist/chunk-IFLFLP4K.js.map +0 -1
  168. package/dist/chunk-N5WJBQYF.cjs +0 -476
  169. package/dist/chunk-N5WJBQYF.cjs.map +0 -1
  170. package/dist/chunk-NHPBONMR.js.map +0 -1
  171. package/dist/chunk-ODQK3LX5.cjs.map +0 -1
  172. package/dist/chunk-OLDGMBEF.cjs.map +0 -1
  173. package/dist/chunk-QAXIVZEJ.cjs.map +0 -1
  174. package/dist/chunk-QCLYRNOC.js +0 -466
  175. package/dist/chunk-QCLYRNOC.js.map +0 -1
  176. package/dist/chunk-TFWCREOL.js.map +0 -1
  177. package/dist/chunk-YQFEN7UJ.js.map +0 -1
@@ -0,0 +1,594 @@
1
+ "use client";
2
+ import { ActionLink } from './chunk-ELT2V4NB.js';
3
+ import { useDrawerBehavior, BlocksTooltipProvider } from './chunk-YQEXBJVO.js';
4
+ import { testIdOr } from './chunk-7F6CBP3Z.js';
5
+ import { createContext, forwardRef, useContext, useEffect, useMemo, useRef, useState } from 'react';
6
+ import { cn, Tooltip, TooltipTrigger, TooltipContent } from '@arbidocs/react/ui';
7
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
+ import { PanelLeftClose, PanelLeftOpen, X } from 'lucide-react';
9
+
10
+ var DEFAULT_SIDEBAR_LABELS = {
11
+ mainNavigation: "Main navigation",
12
+ hideSidebar: "Hide sidebar",
13
+ showSidebar: "Show sidebar",
14
+ closeNavigationMenu: "Close navigation menu"
15
+ };
16
+ var SidebarContext = createContext({
17
+ expanded: true,
18
+ labels: DEFAULT_SIDEBAR_LABELS
19
+ });
20
+ var useSidebarContext = () => useContext(SidebarContext);
21
+ var SidebarRowHoverContext = createContext(false);
22
+ var SidebarBadgeRow = forwardRef(
23
+ function SidebarBadgeRow2({ icon, label, count, ariaLabel, variant, badgeTestId, className, type = "button", ...rest }, ref) {
24
+ const { expanded } = useSidebarContext();
25
+ const resolved = variant ?? (expanded ? "row" : "icon");
26
+ const hasCount = count !== void 0 && count > 0;
27
+ const badgeText = hasCount ? count > 9 ? "9+" : String(count) : null;
28
+ const name = ariaLabel ?? (hasCount ? `${label}, ${count}` : label);
29
+ if (resolved === "row") {
30
+ return /* @__PURE__ */ jsxs(
31
+ "button",
32
+ {
33
+ ref,
34
+ type,
35
+ "aria-label": name,
36
+ "data-slot": "sidebar-badge-row",
37
+ "data-variant": "row",
38
+ className: cn(
39
+ "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",
40
+ className
41
+ ),
42
+ ...rest,
43
+ children: [
44
+ /* @__PURE__ */ jsx("span", { className: "flex size-5 flex-shrink-0 items-center justify-center", "aria-hidden": true, children: icon }),
45
+ /* @__PURE__ */ jsx("span", { className: "ml-3 min-w-0 truncate", "aria-hidden": true, children: label }),
46
+ badgeText && /* @__PURE__ */ jsx(
47
+ "span",
48
+ {
49
+ "aria-hidden": true,
50
+ "data-testid": badgeTestId,
51
+ 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",
52
+ children: badgeText
53
+ }
54
+ )
55
+ ]
56
+ }
57
+ );
58
+ }
59
+ const iconButton = /* @__PURE__ */ jsxs(
60
+ "button",
61
+ {
62
+ ref,
63
+ type,
64
+ "aria-label": name,
65
+ "data-slot": "sidebar-badge-row",
66
+ "data-variant": "icon",
67
+ title: variant === "icon" ? label : void 0,
68
+ className: cn(
69
+ "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",
70
+ className
71
+ ),
72
+ ...rest,
73
+ children: [
74
+ /* @__PURE__ */ jsx("span", { className: "flex size-5 items-center justify-center", "aria-hidden": true, children: icon }),
75
+ badgeText && /* @__PURE__ */ jsx(
76
+ "span",
77
+ {
78
+ "aria-hidden": true,
79
+ "data-testid": badgeTestId,
80
+ 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",
81
+ children: badgeText
82
+ }
83
+ )
84
+ ]
85
+ }
86
+ );
87
+ if (variant === "icon") return iconButton;
88
+ return /* @__PURE__ */ jsxs(Tooltip, { delayDuration: 50, children: [
89
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: iconButton }),
90
+ /* @__PURE__ */ jsx(TooltipContent, { side: "right", sideOffset: 8, children: label })
91
+ ] });
92
+ }
93
+ );
94
+ var SHELL_START_INSET_VAR = "--shell-start-inset";
95
+ var widths = /* @__PURE__ */ new Map();
96
+ function apply() {
97
+ if (typeof document === "undefined") return;
98
+ const inset = Math.max(0, ...widths.values());
99
+ const style = document.documentElement.style;
100
+ if (inset > 0) style.setProperty(SHELL_START_INSET_VAR, `${inset}px`);
101
+ else style.removeProperty(SHELL_START_INSET_VAR);
102
+ }
103
+ function useShellStartInset(width) {
104
+ useEffect(() => {
105
+ const key = /* @__PURE__ */ Symbol("shell-start-inset");
106
+ widths.set(key, width);
107
+ apply();
108
+ return () => {
109
+ widths.delete(key);
110
+ apply();
111
+ };
112
+ }, [width]);
113
+ }
114
+ var noop = () => {
115
+ };
116
+ var COLLAPSED_PX = 64;
117
+ var EXPANDED_PX = 256;
118
+ var COLLAPSED_WIDTH = `${COLLAPSED_PX}px`;
119
+ var EXPANDED_WIDTH = `${EXPANDED_PX}px`;
120
+ function SidebarRoot({
121
+ mode,
122
+ expanded,
123
+ isHovering = false,
124
+ onBackdropClick,
125
+ hasRailBackdrop = false,
126
+ onMouseEnter,
127
+ onMouseLeave,
128
+ children,
129
+ className,
130
+ "aria-label": ariaLabelProp,
131
+ labels,
132
+ "data-testid": testId,
133
+ backdropTestId
134
+ }) {
135
+ const mergedLabels = useMemo(() => ({ ...DEFAULT_SIDEBAR_LABELS, ...labels }), [labels]);
136
+ const drawerRef = useRef(null);
137
+ const isDrawer = mode === "drawer";
138
+ useDrawerBehavior(isDrawer, onBackdropClick ?? noop, drawerRef);
139
+ useShellStartInset(mode === "pinned" ? EXPANDED_PX : mode === "rail" ? COLLAPSED_PX : 0);
140
+ const ariaLabel = ariaLabelProp ?? mergedLabels.mainNavigation;
141
+ const contextValue = useMemo(() => ({ expanded, labels: mergedLabels }), [expanded, mergedLabels]);
142
+ const navBase = "group/sidebar bg-sidebar border-r border-border text-foreground scrollbar-themed flex flex-col h-full overflow-y-auto overflow-x-hidden pb-safe pt-3 transition-all duration-300 ease-in-out";
143
+ const common = {
144
+ "aria-label": ariaLabel,
145
+ "data-testid": testIdOr(testId, { testId: "sidebar" }),
146
+ "data-slot": "sidebar",
147
+ "data-mode": mode
148
+ };
149
+ const fixedWidth = { width: EXPANDED_WIDTH, minWidth: EXPANDED_WIDTH };
150
+ let body;
151
+ if (mode === "drawer") {
152
+ body = /* @__PURE__ */ jsxs(
153
+ "div",
154
+ {
155
+ ref: drawerRef,
156
+ role: "dialog",
157
+ "aria-modal": "true",
158
+ "aria-label": ariaLabel,
159
+ "data-slot": "sidebar-drawer",
160
+ className: "fixed inset-0 z-50",
161
+ children: [
162
+ /* @__PURE__ */ jsx(
163
+ "div",
164
+ {
165
+ className: "absolute inset-0 bg-black/50",
166
+ onClick: onBackdropClick,
167
+ "aria-hidden": "true",
168
+ "data-testid": testIdOr(backdropTestId, { testId: "sidebar-backdrop" })
169
+ }
170
+ ),
171
+ /* @__PURE__ */ jsx(
172
+ "nav",
173
+ {
174
+ ...common,
175
+ className: cn(navBase, "!px-3 absolute left-0 top-0 pt-safe shadow-xl", className),
176
+ style: fixedWidth,
177
+ children
178
+ }
179
+ )
180
+ ]
181
+ }
182
+ );
183
+ } else if (mode === "collapsed") {
184
+ body = /* @__PURE__ */ jsx(
185
+ "nav",
186
+ {
187
+ ...common,
188
+ className: cn(navBase, "absolute left-0 top-0 z-[45]", className),
189
+ style: {
190
+ width: "0px",
191
+ minWidth: 0,
192
+ paddingLeft: 0,
193
+ paddingRight: 0,
194
+ borderRightWidth: 0,
195
+ pointerEvents: "none"
196
+ },
197
+ inert: true,
198
+ children
199
+ }
200
+ );
201
+ } else if (mode === "pinned") {
202
+ body = /* @__PURE__ */ jsx(
203
+ "nav",
204
+ {
205
+ ...common,
206
+ className: cn(navBase, "!px-3 relative flex-shrink-0", className),
207
+ style: fixedWidth,
208
+ onMouseEnter,
209
+ onMouseLeave,
210
+ children
211
+ }
212
+ );
213
+ } else {
214
+ body = /* @__PURE__ */ jsxs(Fragment, { children: [
215
+ /* @__PURE__ */ jsx(
216
+ "div",
217
+ {
218
+ className: "bg-sidebar border-r border-border flex flex-col h-full relative px-0 pb-safe flex-shrink-0",
219
+ style: { width: COLLAPSED_WIDTH, minWidth: COLLAPSED_WIDTH },
220
+ "aria-hidden": "true"
221
+ }
222
+ ),
223
+ isHovering && hasRailBackdrop && /* @__PURE__ */ jsx(
224
+ "div",
225
+ {
226
+ className: "fixed inset-0 z-[44] bg-black/40",
227
+ onClick: onBackdropClick,
228
+ "aria-hidden": "true",
229
+ "data-testid": testIdOr(backdropTestId, { testId: "sidebar-backdrop" })
230
+ }
231
+ ),
232
+ /* @__PURE__ */ jsx(
233
+ "nav",
234
+ {
235
+ ...common,
236
+ className: cn(
237
+ navBase,
238
+ isHovering ? "!px-3 shadow-xl" : "!px-2",
239
+ "absolute left-0 top-0 z-[45]",
240
+ className
241
+ ),
242
+ style: {
243
+ width: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH,
244
+ minWidth: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH
245
+ },
246
+ onMouseEnter,
247
+ onMouseLeave,
248
+ children
249
+ }
250
+ )
251
+ ] });
252
+ }
253
+ return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(BlocksTooltipProvider, { children: body }) });
254
+ }
255
+ function SidebarHeader({ children, className, "data-testid": testId }) {
256
+ return /* @__PURE__ */ jsx(
257
+ "div",
258
+ {
259
+ "data-slot": "sidebar-header",
260
+ "data-testid": testId,
261
+ className: cn("flex flex-shrink-0 flex-col gap-3 pb-3", className),
262
+ children
263
+ }
264
+ );
265
+ }
266
+ function SidebarNav({
267
+ items,
268
+ sections,
269
+ children,
270
+ className,
271
+ "data-testid": testId
272
+ }) {
273
+ const { expanded } = useSidebarContext();
274
+ return /* @__PURE__ */ jsxs(
275
+ "div",
276
+ {
277
+ "data-slot": "sidebar-nav",
278
+ "data-testid": testId,
279
+ className: cn("flex flex-shrink-0 flex-col gap-0.5", !expanded && "items-center", className),
280
+ children: [
281
+ items?.map((item) => /* @__PURE__ */ jsx(SidebarNavItem, { ...item }, item.id)),
282
+ sections?.map((section) => /* @__PURE__ */ jsx(
283
+ SidebarGroup,
284
+ {
285
+ label: section.label,
286
+ ariaLabel: section.ariaLabel,
287
+ "data-testid": section.testId,
288
+ children: section.items.map((item) => /* @__PURE__ */ jsx(SidebarNavItem, { ...item }, item.id))
289
+ },
290
+ section.id
291
+ )),
292
+ children
293
+ ]
294
+ }
295
+ );
296
+ }
297
+ function SidebarGroup({
298
+ label,
299
+ ariaLabel,
300
+ children,
301
+ className,
302
+ "data-testid": testId
303
+ }) {
304
+ const { expanded } = useSidebarContext();
305
+ return /* @__PURE__ */ jsxs(
306
+ "div",
307
+ {
308
+ role: "group",
309
+ "aria-label": ariaLabel ?? (typeof label === "string" ? label : void 0),
310
+ "data-slot": "sidebar-group",
311
+ "data-testid": testId,
312
+ className: cn("flex flex-shrink-0 flex-col gap-0.5", !expanded && "items-center", className),
313
+ children: [
314
+ label && (expanded ? /* @__PURE__ */ jsx(SidebarGroupLabel, { children: label }) : /* @__PURE__ */ jsx(
315
+ "div",
316
+ {
317
+ role: "separator",
318
+ "data-slot": "sidebar-group-divider",
319
+ className: "my-1 h-px w-6 bg-border"
320
+ }
321
+ )),
322
+ children
323
+ ]
324
+ }
325
+ );
326
+ }
327
+ function SidebarGroupLabel({ children, className }) {
328
+ return /* @__PURE__ */ jsx(
329
+ "div",
330
+ {
331
+ "data-slot": "sidebar-group-label",
332
+ className: cn(
333
+ "px-2 pb-0.5 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground",
334
+ className
335
+ ),
336
+ children
337
+ }
338
+ );
339
+ }
340
+ function SidebarFooter({ children, className, "data-testid": testId }) {
341
+ const { expanded } = useSidebarContext();
342
+ return /* @__PURE__ */ jsx(
343
+ "div",
344
+ {
345
+ "data-slot": "sidebar-footer",
346
+ "data-testid": testId,
347
+ className: cn(
348
+ "mt-auto flex flex-shrink-0 flex-col gap-2 pt-3 pb-3",
349
+ !expanded && "items-center",
350
+ className
351
+ ),
352
+ children
353
+ }
354
+ );
355
+ }
356
+ var INDICATOR_TONES = {
357
+ progress: "bg-primary",
358
+ error: "bg-red-solid",
359
+ attention: "bg-yellow-solid"
360
+ };
361
+ function SidebarNavItem({
362
+ label,
363
+ icon,
364
+ active = false,
365
+ onSelect,
366
+ href,
367
+ count,
368
+ countIcon,
369
+ testId,
370
+ disabled = false,
371
+ trailing,
372
+ indicator,
373
+ className,
374
+ tooltip
375
+ }) {
376
+ const { expanded } = useSidebarContext();
377
+ const [isRowActive, setIsRowActive] = useState(false);
378
+ const tip = expanded ? void 0 : tooltip ?? label;
379
+ if (!expanded) {
380
+ const railButton = /* @__PURE__ */ jsx(
381
+ ActionLink,
382
+ {
383
+ href,
384
+ onSelect,
385
+ disabled,
386
+ "aria-label": label,
387
+ "aria-current": active ? "page" : void 0,
388
+ "data-slot": "sidebar-nav-item",
389
+ "data-testid": testId,
390
+ className: cn(
391
+ "m-0 flex h-9 w-12 items-center justify-center rounded-md transition-colors pointer-coarse:h-11",
392
+ active ? "bg-accent text-accent-foreground" : "text-muted-foreground hover:bg-muted hover:text-foreground",
393
+ disabled && "pointer-events-none cursor-not-allowed opacity-30",
394
+ className
395
+ ),
396
+ children: /* @__PURE__ */ jsx("div", { className: "flex size-5 items-center justify-center", children: indicator ? /* @__PURE__ */ jsxs("div", { className: "relative", children: [
397
+ icon,
398
+ /* @__PURE__ */ jsx(
399
+ "div",
400
+ {
401
+ "data-slot": "sidebar-nav-indicator",
402
+ "data-tone": indicator,
403
+ className: cn(
404
+ "absolute -right-1 -top-1 size-2.5 rounded-full border border-sidebar",
405
+ INDICATOR_TONES[indicator]
406
+ )
407
+ }
408
+ )
409
+ ] }) : icon })
410
+ }
411
+ );
412
+ if (!tip) return railButton;
413
+ return /* @__PURE__ */ jsxs(Tooltip, { delayDuration: 50, children: [
414
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: railButton }),
415
+ /* @__PURE__ */ jsx(TooltipContent, { side: "right", sideOffset: 8, children: tip })
416
+ ] });
417
+ }
418
+ const rowClass = cn(
419
+ "group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-sm transition-colors pointer-coarse:h-11",
420
+ active ? "bg-accent font-semibold text-accent-foreground" : "font-medium text-muted-foreground hover:bg-muted hover:text-foreground",
421
+ disabled && "pointer-events-none cursor-not-allowed opacity-30",
422
+ className
423
+ );
424
+ const countNode = count !== void 0 && /* @__PURE__ */ jsxs(
425
+ "span",
426
+ {
427
+ className: cn(
428
+ "ml-auto inline-flex flex-shrink-0 items-center gap-0.5 pl-2 text-xs font-normal tabular-nums",
429
+ active ? "text-accent-foreground" : "text-muted-foreground"
430
+ ),
431
+ children: [
432
+ countIcon,
433
+ count
434
+ ]
435
+ }
436
+ );
437
+ if (href && !disabled && !trailing) {
438
+ return /* @__PURE__ */ jsxs(
439
+ ActionLink,
440
+ {
441
+ href,
442
+ onSelect,
443
+ "aria-current": active ? "page" : void 0,
444
+ "data-slot": "sidebar-nav-item",
445
+ "data-testid": testId,
446
+ className: rowClass,
447
+ children: [
448
+ /* @__PURE__ */ jsx("div", { className: "flex size-5 flex-shrink-0 items-center justify-center", children: icon }),
449
+ /* @__PURE__ */ jsx("span", { className: "ml-3 min-w-0 truncate text-left", children: label }),
450
+ countNode
451
+ ]
452
+ }
453
+ );
454
+ }
455
+ if (href && !disabled) {
456
+ return /* @__PURE__ */ jsxs(
457
+ "div",
458
+ {
459
+ onMouseEnter: () => setIsRowActive(true),
460
+ onMouseLeave: () => setIsRowActive(false),
461
+ onFocusCapture: () => setIsRowActive(true),
462
+ onBlurCapture: (e) => {
463
+ if (!e.currentTarget.contains(e.relatedTarget)) setIsRowActive(false);
464
+ },
465
+ "data-slot": "sidebar-nav-item",
466
+ "data-testid": testId,
467
+ className: cn(rowClass, "relative"),
468
+ children: [
469
+ /* @__PURE__ */ jsx(
470
+ ActionLink,
471
+ {
472
+ href,
473
+ onSelect,
474
+ "aria-label": label,
475
+ "aria-current": active ? "page" : void 0,
476
+ className: "absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
477
+ }
478
+ ),
479
+ /* @__PURE__ */ jsxs("div", { className: "pointer-events-none flex min-w-0 flex-1 items-center", children: [
480
+ /* @__PURE__ */ jsx("div", { className: "flex size-5 flex-shrink-0 items-center justify-center", children: icon }),
481
+ /* @__PURE__ */ jsx("span", { className: "ml-3 min-w-0 truncate text-left", children: label }),
482
+ countNode
483
+ ] }),
484
+ /* @__PURE__ */ jsx(SidebarRowHoverContext.Provider, { value: isRowActive, children: /* @__PURE__ */ jsx("span", { className: "relative ml-2 flex flex-shrink-0 items-center", children: trailing }) })
485
+ ]
486
+ }
487
+ );
488
+ }
489
+ return /* @__PURE__ */ jsxs(
490
+ "div",
491
+ {
492
+ role: "button",
493
+ tabIndex: disabled ? -1 : 0,
494
+ "aria-current": active ? "page" : void 0,
495
+ onClick: disabled ? void 0 : onSelect,
496
+ onMouseEnter: () => setIsRowActive(true),
497
+ onMouseLeave: () => setIsRowActive(false),
498
+ onFocusCapture: () => setIsRowActive(true),
499
+ onBlurCapture: (e) => {
500
+ if (!e.currentTarget.contains(e.relatedTarget)) setIsRowActive(false);
501
+ },
502
+ onKeyDown: disabled ? void 0 : (e) => {
503
+ if (e.key === "Enter" || e.key === " ") {
504
+ e.preventDefault();
505
+ onSelect();
506
+ }
507
+ },
508
+ "data-slot": "sidebar-nav-item",
509
+ "data-testid": testId,
510
+ className: rowClass,
511
+ children: [
512
+ /* @__PURE__ */ jsx("div", { className: "flex size-5 flex-shrink-0 items-center justify-center", children: icon }),
513
+ /* @__PURE__ */ jsx("span", { className: "ml-3 min-w-0 truncate text-left", children: label }),
514
+ countNode,
515
+ trailing && /* @__PURE__ */ jsx(SidebarRowHoverContext.Provider, { value: isRowActive, children: /* @__PURE__ */ jsx("span", { className: "ml-auto flex flex-shrink-0 items-center pl-2", children: trailing }) })
516
+ ]
517
+ }
518
+ );
519
+ }
520
+ function SidebarPinToggle({
521
+ isPinned,
522
+ onToggle,
523
+ className,
524
+ "data-testid": testId
525
+ }) {
526
+ const { expanded, labels } = useSidebarContext();
527
+ const label = isPinned ? labels.hideSidebar : labels.showSidebar;
528
+ return /* @__PURE__ */ jsx(
529
+ "button",
530
+ {
531
+ type: "button",
532
+ onClick: onToggle,
533
+ title: label,
534
+ "aria-label": label,
535
+ "aria-pressed": isPinned,
536
+ "data-testid": testIdOr(testId, { testId: "sidebar-pin-button" }),
537
+ className: cn(
538
+ "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",
539
+ "pointer-events-none opacity-0 group-hover/sidebar:pointer-events-auto group-hover/sidebar:opacity-100",
540
+ "group-focus-within/sidebar:pointer-events-auto group-focus-within/sidebar:opacity-100",
541
+ "pointer-coarse:pointer-events-auto pointer-coarse:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100",
542
+ expanded ? "size-9" : "h-9 w-12",
543
+ className
544
+ ),
545
+ children: isPinned ? /* @__PURE__ */ jsx(PanelLeftClose, { className: "size-5" }) : /* @__PURE__ */ jsx(PanelLeftOpen, { className: "size-5" })
546
+ }
547
+ );
548
+ }
549
+ function SidebarDrawerHeader({
550
+ logo,
551
+ onClose,
552
+ closeLabel: closeLabelProp,
553
+ "data-testid": testId
554
+ }) {
555
+ const { labels } = useSidebarContext();
556
+ const closeLabel = closeLabelProp ?? labels.closeNavigationMenu;
557
+ return /* @__PURE__ */ jsxs(
558
+ "div",
559
+ {
560
+ "data-slot": "sidebar-drawer-header",
561
+ className: "flex flex-shrink-0 items-center justify-between pb-2",
562
+ children: [
563
+ logo,
564
+ /* @__PURE__ */ jsx(
565
+ "button",
566
+ {
567
+ type: "button",
568
+ onClick: onClose,
569
+ "aria-label": closeLabel,
570
+ "data-testid": testIdOr(testId, { testId: "mobile-nav-close" }),
571
+ className: "flex size-11 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
572
+ children: /* @__PURE__ */ jsx(X, { className: "size-5" })
573
+ }
574
+ )
575
+ ]
576
+ }
577
+ );
578
+ }
579
+ var Sidebar = {
580
+ Root: SidebarRoot,
581
+ Header: SidebarHeader,
582
+ Nav: SidebarNav,
583
+ Group: SidebarGroup,
584
+ GroupLabel: SidebarGroupLabel,
585
+ NavItem: SidebarNavItem,
586
+ Footer: SidebarFooter,
587
+ PinToggle: SidebarPinToggle,
588
+ BadgeRow: SidebarBadgeRow,
589
+ DrawerHeader: SidebarDrawerHeader
590
+ };
591
+
592
+ export { DEFAULT_SIDEBAR_LABELS, SHELL_START_INSET_VAR, Sidebar, SidebarBadgeRow, SidebarRowHoverContext, useShellStartInset, useSidebarContext };
593
+ //# sourceMappingURL=chunk-6QZ35CTZ.js.map
594
+ //# sourceMappingURL=chunk-6QZ35CTZ.js.map