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