@mastra/playground-ui 35.1.0-alpha.0 → 35.1.0-alpha.2
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.
- package/CHANGELOG.md +42 -0
- package/dist/{code-editor-DVWPuq12.cjs → code-editor-BKM9AbX0.cjs} +6 -3
- package/dist/{code-editor-DVWPuq12.cjs.map → code-editor-BKM9AbX0.cjs.map} +1 -1
- package/dist/{code-editor-CxHGOvdY.js → code-editor-DarXoYtw.js} +6 -3
- package/dist/{code-editor-CxHGOvdY.js.map → code-editor-DarXoYtw.js.map} +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/Columns.cjs.js +1 -1
- package/dist/components/Columns.es.js +1 -1
- package/dist/components/MainSidebar.cjs.js +1 -1
- package/dist/components/MainSidebar.es.js +1 -1
- package/dist/index.cjs.js +3 -3
- package/dist/index.css +119 -0
- package/dist/index.es.js +4 -4
- package/dist/{main-sidebar-DJSorgYQ.js → main-sidebar-35yt_w11.js} +59 -16
- package/dist/main-sidebar-35yt_w11.js.map +1 -0
- package/dist/{main-sidebar-ByHmwU4R.cjs → main-sidebar-BFkciPDl.cjs} +59 -16
- package/dist/main-sidebar-BFkciPDl.cjs.map +1 -0
- package/dist/{multi-column-BbVNPvhh.cjs → multi-column-BLRjYB5N.cjs} +2 -1
- package/dist/{multi-column-BbVNPvhh.cjs.map → multi-column-BLRjYB5N.cjs.map} +1 -1
- package/dist/{multi-column-o9qcoBXV.js → multi-column-e_-j_rrO.js} +2 -1
- package/dist/{multi-column-o9qcoBXV.js.map → multi-column-e_-j_rrO.js.map} +1 -1
- package/dist/src/ds/components/CodeEditor/code-editor.d.ts +4 -0
- package/dist/src/ds/components/CodeEditor/code-editor.stories.d.ts +1 -0
- package/dist/src/ds/components/MainSidebar/main-sidebar-link-active.d.ts +7 -0
- package/dist/src/ds/components/MainSidebar/main-sidebar-nav-item-classes.d.ts +2 -1
- package/dist/src/ds/components/MainSidebar/main-sidebar-nav-link.d.ts +7 -2
- package/dist/src/ds/components/MainSidebar/main-sidebar-sections.d.ts +4 -10
- package/dist/src/ds/components/MainSidebar/main-sidebar.d.ts +1 -1
- package/dist/src/ds/components/MainSidebar/main-sidebar.stories.d.ts +1 -0
- package/package.json +6 -6
- package/dist/main-sidebar-ByHmwU4R.cjs.map +0 -1
- package/dist/main-sidebar-DJSorgYQ.js.map +0 -1
package/dist/index.css
CHANGED
|
@@ -948,6 +948,14 @@
|
|
|
948
948
|
margin-inline: var(--spacing-1);
|
|
949
949
|
}
|
|
950
950
|
|
|
951
|
+
.mx-1\.5 {
|
|
952
|
+
margin-inline: var(--spacing-1_5);
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
.mx-2 {
|
|
956
|
+
margin-inline: var(--spacing-2);
|
|
957
|
+
}
|
|
958
|
+
|
|
951
959
|
.mx-3 {
|
|
952
960
|
margin-inline: var(--spacing-3);
|
|
953
961
|
}
|
|
@@ -956,6 +964,10 @@
|
|
|
956
964
|
margin-inline: var(--spacing-4);
|
|
957
965
|
}
|
|
958
966
|
|
|
967
|
+
.mx-6 {
|
|
968
|
+
margin-inline: var(--spacing-6);
|
|
969
|
+
}
|
|
970
|
+
|
|
959
971
|
.mx-\[1\.5vw\] {
|
|
960
972
|
margin-inline: 1.5vw;
|
|
961
973
|
}
|
|
@@ -1072,6 +1084,10 @@
|
|
|
1072
1084
|
margin-bottom: var(--spacing-1);
|
|
1073
1085
|
}
|
|
1074
1086
|
|
|
1087
|
+
.mb-1\.5 {
|
|
1088
|
+
margin-bottom: var(--spacing-1_5);
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1075
1091
|
.mb-2 {
|
|
1076
1092
|
margin-bottom: var(--spacing-2);
|
|
1077
1093
|
}
|
|
@@ -1101,6 +1117,10 @@
|
|
|
1101
1117
|
margin-left: calc(var(--spacing-px) * -1);
|
|
1102
1118
|
}
|
|
1103
1119
|
|
|
1120
|
+
.ml-0 {
|
|
1121
|
+
margin-left: var(--spacing-0);
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1104
1124
|
.ml-0\! {
|
|
1105
1125
|
margin-left: var(--spacing-0) !important;
|
|
1106
1126
|
}
|
|
@@ -1117,6 +1137,10 @@
|
|
|
1117
1137
|
margin-left: var(--spacing-2);
|
|
1118
1138
|
}
|
|
1119
1139
|
|
|
1140
|
+
.ml-3 {
|
|
1141
|
+
margin-left: var(--spacing-3);
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1120
1144
|
.ml-8 {
|
|
1121
1145
|
margin-left: var(--spacing-8);
|
|
1122
1146
|
}
|
|
@@ -1199,6 +1223,11 @@
|
|
|
1199
1223
|
height: var(--spacing-5);
|
|
1200
1224
|
}
|
|
1201
1225
|
|
|
1226
|
+
.size-6 {
|
|
1227
|
+
width: var(--spacing-6);
|
|
1228
|
+
height: var(--spacing-6);
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1202
1231
|
.size-7 {
|
|
1203
1232
|
width: var(--spacing-7);
|
|
1204
1233
|
height: var(--spacing-7);
|
|
@@ -1315,6 +1344,10 @@
|
|
|
1315
1344
|
height: .6rem;
|
|
1316
1345
|
}
|
|
1317
1346
|
|
|
1347
|
+
.h-\[1\.5rem\] {
|
|
1348
|
+
height: 1.5rem;
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1318
1351
|
.h-\[1\.8rem\] {
|
|
1319
1352
|
height: 1.8rem;
|
|
1320
1353
|
}
|
|
@@ -1375,6 +1408,10 @@
|
|
|
1375
1408
|
height: 560px;
|
|
1376
1409
|
}
|
|
1377
1410
|
|
|
1411
|
+
.h-\[720px\] {
|
|
1412
|
+
height: 720px;
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1378
1415
|
.h-\[calc\(85dvh\+1\.5rem\)\] {
|
|
1379
1416
|
height: calc(85dvh + 1.5rem);
|
|
1380
1417
|
}
|
|
@@ -1580,6 +1617,10 @@
|
|
|
1580
1617
|
min-height: 560px;
|
|
1581
1618
|
}
|
|
1582
1619
|
|
|
1620
|
+
.min-h-full {
|
|
1621
|
+
min-height: 100%;
|
|
1622
|
+
}
|
|
1623
|
+
|
|
1583
1624
|
.w-\(--sidebar-width\) {
|
|
1584
1625
|
width: var(--sidebar-width);
|
|
1585
1626
|
}
|
|
@@ -1712,6 +1753,10 @@
|
|
|
1712
1753
|
width: .6rem;
|
|
1713
1754
|
}
|
|
1714
1755
|
|
|
1756
|
+
.w-\[1\.5rem\] {
|
|
1757
|
+
width: 1.5rem;
|
|
1758
|
+
}
|
|
1759
|
+
|
|
1715
1760
|
.w-\[1\.75rem\] {
|
|
1716
1761
|
width: 1.75rem;
|
|
1717
1762
|
}
|
|
@@ -1852,6 +1897,10 @@
|
|
|
1852
1897
|
width: 880px;
|
|
1853
1898
|
}
|
|
1854
1899
|
|
|
1900
|
+
.w-\[1080px\] {
|
|
1901
|
+
width: 1080px;
|
|
1902
|
+
}
|
|
1903
|
+
|
|
1855
1904
|
.w-\[calc\(32rem\+1\.5rem\)\] {
|
|
1856
1905
|
width: 33.5rem;
|
|
1857
1906
|
}
|
|
@@ -2370,6 +2419,14 @@
|
|
|
2370
2419
|
grid-template-columns: minmax(0, 1fr);
|
|
2371
2420
|
}
|
|
2372
2421
|
|
|
2422
|
+
.grid-cols-\[minmax\(0\,1fr\)_80px_64px\] {
|
|
2423
|
+
grid-template-columns: minmax(0, 1fr) 80px 64px;
|
|
2424
|
+
}
|
|
2425
|
+
|
|
2426
|
+
.grid-cols-\[minmax\(0\,1fr\)_280px\] {
|
|
2427
|
+
grid-template-columns: minmax(0, 1fr) 280px;
|
|
2428
|
+
}
|
|
2429
|
+
|
|
2373
2430
|
.grid-cols-\[minmax\(0\,1fr\)_auto_auto\] {
|
|
2374
2431
|
grid-template-columns: minmax(0, 1fr) auto auto;
|
|
2375
2432
|
}
|
|
@@ -2426,6 +2483,10 @@
|
|
|
2426
2483
|
grid-template-rows: auto auto;
|
|
2427
2484
|
}
|
|
2428
2485
|
|
|
2486
|
+
.grid-rows-\[auto_minmax\(0\,1fr\)\] {
|
|
2487
|
+
grid-template-rows: auto minmax(0, 1fr);
|
|
2488
|
+
}
|
|
2489
|
+
|
|
2429
2490
|
.flex-col {
|
|
2430
2491
|
flex-direction: column;
|
|
2431
2492
|
}
|
|
@@ -2757,6 +2818,14 @@
|
|
|
2757
2818
|
border-radius: var(--radius-sm);
|
|
2758
2819
|
}
|
|
2759
2820
|
|
|
2821
|
+
.rounded-studio-frame {
|
|
2822
|
+
border-radius: var(--studio-frame-radius, 1.5rem);
|
|
2823
|
+
}
|
|
2824
|
+
|
|
2825
|
+
.rounded-studio-panel {
|
|
2826
|
+
border-radius: max(0px, calc(var(--studio-frame-radius, 1.5rem) - var(--studio-frame-inset, .5rem)));
|
|
2827
|
+
}
|
|
2828
|
+
|
|
2760
2829
|
.rounded-xl {
|
|
2761
2830
|
border-radius: var(--radius-xl);
|
|
2762
2831
|
}
|
|
@@ -4368,6 +4437,16 @@
|
|
|
4368
4437
|
color: var(--color-black);
|
|
4369
4438
|
}
|
|
4370
4439
|
|
|
4440
|
+
.text-black\/80 {
|
|
4441
|
+
color: #000c;
|
|
4442
|
+
}
|
|
4443
|
+
|
|
4444
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4445
|
+
.text-black\/80 {
|
|
4446
|
+
color: color-mix(in oklab, var(--color-black) 80%, transparent);
|
|
4447
|
+
}
|
|
4448
|
+
}
|
|
4449
|
+
|
|
4371
4450
|
.text-current {
|
|
4372
4451
|
color: currentColor;
|
|
4373
4452
|
}
|
|
@@ -4625,6 +4704,10 @@
|
|
|
4625
4704
|
box-shadow: var(--shadow-dialog);
|
|
4626
4705
|
}
|
|
4627
4706
|
|
|
4707
|
+
.shadow-main-frame {
|
|
4708
|
+
box-shadow: var(--shadow-main-frame);
|
|
4709
|
+
}
|
|
4710
|
+
|
|
4628
4711
|
.ring-accent1 {
|
|
4629
4712
|
--tw-ring-color: var(--color-accent1);
|
|
4630
4713
|
}
|
|
@@ -4893,6 +4976,14 @@
|
|
|
4893
4976
|
user-select: none;
|
|
4894
4977
|
}
|
|
4895
4978
|
|
|
4979
|
+
.\[--studio-frame-inset\:0\.5rem\] {
|
|
4980
|
+
--studio-frame-inset: .5rem;
|
|
4981
|
+
}
|
|
4982
|
+
|
|
4983
|
+
.\[--studio-frame-radius\:1\.5rem\] {
|
|
4984
|
+
--studio-frame-radius: 1.5rem;
|
|
4985
|
+
}
|
|
4986
|
+
|
|
4896
4987
|
.\[scrollbar-width\:none\] {
|
|
4897
4988
|
scrollbar-width: none;
|
|
4898
4989
|
}
|
|
@@ -4975,6 +5066,14 @@
|
|
|
4975
5066
|
.group-hover\/separator\:opacity-100:is(:where(.group\/separator):hover *) {
|
|
4976
5067
|
opacity: 1;
|
|
4977
5068
|
}
|
|
5069
|
+
|
|
5070
|
+
.group-hover\/sidebar\:opacity-0:is(:where(.group\/sidebar):hover *) {
|
|
5071
|
+
opacity: 0;
|
|
5072
|
+
}
|
|
5073
|
+
|
|
5074
|
+
.group-hover\/sidebar\:opacity-100:is(:where(.group\/sidebar):hover *) {
|
|
5075
|
+
opacity: 1;
|
|
5076
|
+
}
|
|
4978
5077
|
}
|
|
4979
5078
|
|
|
4980
5079
|
.group-focus\:opacity-100:is(:where(.group):focus *) {
|
|
@@ -7117,6 +7216,18 @@
|
|
|
7117
7216
|
}
|
|
7118
7217
|
|
|
7119
7218
|
@media (min-width: 64rem) {
|
|
7219
|
+
.lg\:mx-2 {
|
|
7220
|
+
margin-inline: var(--spacing-2);
|
|
7221
|
+
}
|
|
7222
|
+
|
|
7223
|
+
.lg\:mb-2 {
|
|
7224
|
+
margin-bottom: var(--spacing-2);
|
|
7225
|
+
}
|
|
7226
|
+
|
|
7227
|
+
.lg\:ml-0 {
|
|
7228
|
+
margin-left: var(--spacing-0);
|
|
7229
|
+
}
|
|
7230
|
+
|
|
7120
7231
|
.lg\:hidden {
|
|
7121
7232
|
display: none;
|
|
7122
7233
|
}
|
|
@@ -7266,6 +7377,10 @@
|
|
|
7266
7377
|
color: var(--color-black);
|
|
7267
7378
|
}
|
|
7268
7379
|
|
|
7380
|
+
.dark\:text-neutral6:is(.dark *) {
|
|
7381
|
+
color: var(--color-neutral6);
|
|
7382
|
+
}
|
|
7383
|
+
|
|
7269
7384
|
.dark\:text-white:is(.dark *) {
|
|
7270
7385
|
color: var(--color-white);
|
|
7271
7386
|
}
|
|
@@ -7594,6 +7709,10 @@
|
|
|
7594
7709
|
}
|
|
7595
7710
|
}
|
|
7596
7711
|
|
|
7712
|
+
.\[\&_svg\]\:text-neutral4 svg {
|
|
7713
|
+
color: var(--color-neutral4);
|
|
7714
|
+
}
|
|
7715
|
+
|
|
7597
7716
|
.\[\&_svg\]\:text-neutral6 svg {
|
|
7598
7717
|
color: var(--color-neutral6);
|
|
7599
7718
|
}
|
package/dist/index.es.js
CHANGED
|
@@ -4,7 +4,7 @@ export { B as Badge } from './Badge-DdJC6M08.js';
|
|
|
4
4
|
export { B as Breadcrumb, C as Crumb, S as SlashIcon } from './Breadcrumb-CxbCgAij.js';
|
|
5
5
|
import { B as Button } from './Button-DoOEJwa_.js';
|
|
6
6
|
export { b as buttonVariants } from './Button-DoOEJwa_.js';
|
|
7
|
-
export { C as CodeEditor, V as VARIABLE_PATTERN, c as codeLanguages, a as createVariableAutocomplete, f as flattenSchemaToVariables, u as useCodemirrorTheme, v as variableHighlight } from './code-editor-
|
|
7
|
+
export { C as CodeEditor, V as VARIABLE_PATTERN, c as codeLanguages, a as createVariableAutocomplete, f as flattenSchemaToVariables, u as useCodemirrorTheme, v as variableHighlight } from './code-editor-DarXoYtw.js';
|
|
8
8
|
export { h as highlight } from './highlight-Dis62bkj.js';
|
|
9
9
|
import { E as EmptyState } from './EmptyState-DfXdX6I8.js';
|
|
10
10
|
export { E as Entity, a as EntityContent, b as EntityDescription, c as EntityIcon, d as EntityName } from './Entity-CVzaJDXu.js';
|
|
@@ -73,8 +73,8 @@ export { D as DateTimePicker, a as DateTimePickerContent, b as DefaultTrigger }
|
|
|
73
73
|
export { D as DatePicker, T as TimePicker } from './time-picker-BtJz6IU2.js';
|
|
74
74
|
export { AddField, Field, FieldDescription, FieldList, FieldName, FieldNullable, FieldOptional, FieldRemove, FieldType, JSONSchemaForm, NestedFields, Root, createField, fieldsToJSONSchema, jsonSchemaToFields, useJSONSchemaForm, useJSONSchemaFormField, useJSONSchemaFormNestedContext } from './components/JSONSchemaForm.es.js';
|
|
75
75
|
export { K as KeyValueList } from './key-value-list-BFGuMFbL.js';
|
|
76
|
-
import { R as ResizeHandleIndicator } from './main-sidebar-
|
|
77
|
-
export { M as MainSidebar, a as MainSidebarMobileTrigger, b as MainSidebarProvider, c as MainSidebarTrigger, g as getIsLinkActive, n as navItemClasses, u as useMainSidebar, d as useMaybeSidebar } from './main-sidebar-
|
|
76
|
+
import { R as ResizeHandleIndicator } from './main-sidebar-35yt_w11.js';
|
|
77
|
+
export { M as MainSidebar, a as MainSidebarMobileTrigger, b as MainSidebarProvider, c as MainSidebarTrigger, g as getIsLinkActive, n as navItemClasses, u as useMainSidebar, d as useMaybeSidebar } from './main-sidebar-35yt_w11.js';
|
|
78
78
|
export { P as PageHeader } from './page-header-BS_LNnKw.js';
|
|
79
79
|
export { S as Section, a as SectionRoot, b as SubSectionRoot } from './section-BUngbrvn.js';
|
|
80
80
|
export { C as CardHeading, S as SectionCard } from './section-card-BMArnkcD.js';
|
|
@@ -83,7 +83,7 @@ import { b as Tabs, a as TabList, T as Tab } from './tabs-tab-Bv9aRRTl.js';
|
|
|
83
83
|
import { T as TabContent } from './tabs-content-D-fKCtLW.js';
|
|
84
84
|
export { T as TextAndIcon, g as getShortId } from './get-short-id-B4_2mLzM.js';
|
|
85
85
|
export { C as ContentBlock, a as ContentBlocks } from './content-block-BTpK7gPz.js';
|
|
86
|
-
export { C as Column, a as Columns, M as MultiColumn } from './multi-column-
|
|
86
|
+
export { C as Column, a as Columns, M as MultiColumn } from './multi-column-e_-j_rrO.js';
|
|
87
87
|
export { C as CodeDiff } from './code-diff-lktH1err.js';
|
|
88
88
|
export { I as ItemList, a as ItemListSkeleton, g as getItemListColumnTemplate, b as getToNextItemFn, c as getToPreviousItemFn } from './helpers-BH-wPlF0.js';
|
|
89
89
|
import { N as Notice } from './Notice-D5nzvm08.js';
|
|
@@ -319,13 +319,19 @@ function MainSidebarNavLabel({ children, className, state: stateProp, ...rest })
|
|
|
319
319
|
return /* @__PURE__ */ jsx("span", { ...rest, className: cn("min-w-0 flex-1 truncate text-left", className), children });
|
|
320
320
|
}
|
|
321
321
|
|
|
322
|
-
const
|
|
322
|
+
const nestedExpandedItemClasses = (level) => {
|
|
323
|
+
if (level <= 0) return "w-full gap-2 py-1 px-3 justify-start";
|
|
324
|
+
if (level === 1) return "w-full gap-2 py-1 pr-3 pl-8 justify-start text-ui-sm h-8";
|
|
325
|
+
if (level === 2) return "w-full gap-2 py-1 pr-3 pl-10 justify-start text-ui-sm h-8";
|
|
326
|
+
return "w-full gap-2 py-1 pr-3 pl-12 justify-start text-ui-sm h-8";
|
|
327
|
+
};
|
|
328
|
+
const navItemClasses = ({ isActive, isCollapsed, isFeatured, level = 0 } = {}) => cn(
|
|
323
329
|
"flex cursor-pointer items-center text-ui-md text-neutral3 rounded-lg h-9 min-w-0 whitespace-nowrap",
|
|
324
330
|
"transition-all duration-normal ease-out-custom motion-reduce:transition-none",
|
|
325
331
|
"[&_svg]:w-4 [&_svg]:h-4 [&_svg]:shrink-0 [&_svg]:text-neutral3/70 [&_svg]:transition-colors [&_svg]:duration-normal motion-reduce:[&_svg]:transition-none",
|
|
326
332
|
"hover:bg-sidebar-nav-hover hover:text-neutral6 [&:hover_svg]:text-neutral5",
|
|
327
333
|
"focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:shadow-focus-ring",
|
|
328
|
-
!isCollapsed &&
|
|
334
|
+
!isCollapsed && nestedExpandedItemClasses(level),
|
|
329
335
|
isCollapsed && "w-full p-0 justify-center",
|
|
330
336
|
isActive && "text-neutral6 bg-sidebar-nav-active hover:bg-sidebar-nav-active hover:text-neutral6 [&_svg]:text-neutral6 [&:hover_svg]:text-neutral6",
|
|
331
337
|
isCollapsed && !isActive && "[&_svg]:text-neutral3",
|
|
@@ -341,6 +347,8 @@ function MainSidebarNavLink({
|
|
|
341
347
|
isActive,
|
|
342
348
|
className,
|
|
343
349
|
LinkComponent: LinkProp,
|
|
350
|
+
level: levelProp,
|
|
351
|
+
subItems,
|
|
344
352
|
asChild = false,
|
|
345
353
|
...props
|
|
346
354
|
}) {
|
|
@@ -349,13 +357,15 @@ function MainSidebarNavLink({
|
|
|
349
357
|
const Link = LinkProp ?? ctx?.LinkComponent ?? "a";
|
|
350
358
|
const isCollapsed = state === "collapsed";
|
|
351
359
|
const isFeatured = link?.variant === "featured";
|
|
360
|
+
const level = levelProp ?? (link?.indent ? 1 : 0);
|
|
352
361
|
const isExternal = Boolean(link?.url && /^(https?:)?\/\//.test(link.url));
|
|
353
362
|
const linkParams = isExternal ? { target: "_blank", rel: "noreferrer" } : {};
|
|
354
363
|
const needsTooltip = link ? isCollapsed || Boolean(link.tooltipMsg) : false;
|
|
355
364
|
const itemClassName = navItemClasses({
|
|
356
365
|
isActive,
|
|
357
366
|
isCollapsed,
|
|
358
|
-
isFeatured
|
|
367
|
+
isFeatured,
|
|
368
|
+
level
|
|
359
369
|
});
|
|
360
370
|
let interactiveEl = null;
|
|
361
371
|
if (asChild) {
|
|
@@ -374,10 +384,13 @@ function MainSidebarNavLink({
|
|
|
374
384
|
children
|
|
375
385
|
] });
|
|
376
386
|
}
|
|
377
|
-
return /* @__PURE__ */
|
|
378
|
-
/* @__PURE__ */
|
|
379
|
-
|
|
380
|
-
|
|
387
|
+
return /* @__PURE__ */ jsxs("li", { ...props, className: cn("flex flex-col relative min-w-0", className), children: [
|
|
388
|
+
link && needsTooltip && React__default.isValidElement(interactiveEl) ? /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
389
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { render: interactiveEl }),
|
|
390
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", align: "center", sideOffset: 16, children: link.tooltipMsg ? isCollapsed ? `${link.name} | ${link.tooltipMsg}` : link.tooltipMsg : link.name })
|
|
391
|
+
] }) : interactiveEl ?? children,
|
|
392
|
+
!isCollapsed && subItems
|
|
393
|
+
] });
|
|
381
394
|
}
|
|
382
395
|
|
|
383
396
|
function MainSidebarNavList({ className, children, ...props }) {
|
|
@@ -643,6 +656,30 @@ function MainSidebarRoot({ children, className }) {
|
|
|
643
656
|
);
|
|
644
657
|
}
|
|
645
658
|
|
|
659
|
+
function getLinkKey(link) {
|
|
660
|
+
return `${link.url}:${link.name}`;
|
|
661
|
+
}
|
|
662
|
+
function MainSidebarSectionLink({ link, activeCandidates, level = 0, isActive }) {
|
|
663
|
+
const childLinks = link.children ?? [];
|
|
664
|
+
return /* @__PURE__ */ jsx(
|
|
665
|
+
MainSidebarNavLink,
|
|
666
|
+
{
|
|
667
|
+
link,
|
|
668
|
+
isActive: isActive?.(link, activeCandidates) ?? link.isActive,
|
|
669
|
+
level,
|
|
670
|
+
subItems: childLinks.length > 0 ? /* @__PURE__ */ jsx(MainSidebarNavList, { className: "mt-0.5", children: childLinks.map((child) => /* @__PURE__ */ jsx(
|
|
671
|
+
MainSidebarSectionLink,
|
|
672
|
+
{
|
|
673
|
+
link: child,
|
|
674
|
+
activeCandidates,
|
|
675
|
+
level: level + 1,
|
|
676
|
+
isActive
|
|
677
|
+
},
|
|
678
|
+
getLinkKey(child)
|
|
679
|
+
)) }) : null
|
|
680
|
+
}
|
|
681
|
+
);
|
|
682
|
+
}
|
|
646
683
|
function MainSidebarSections({ sections, isActive, className }) {
|
|
647
684
|
const baseId = useId();
|
|
648
685
|
return /* @__PURE__ */ jsx(Fragment, { children: sections.map((section) => {
|
|
@@ -658,12 +695,13 @@ function MainSidebarSections({ sections, isActive, className }) {
|
|
|
658
695
|
showSeparator ? /* @__PURE__ */ jsx(MainSidebarNavSeparator, {}) : null,
|
|
659
696
|
section.title ? /* @__PURE__ */ jsx(MainSidebarNavHeader, { id: headerId, href: section.href, isActive: section.isHeaderActive, children: section.title }) : null,
|
|
660
697
|
/* @__PURE__ */ jsx(MainSidebarNavList, { children: section.links.map((link) => /* @__PURE__ */ jsx(
|
|
661
|
-
|
|
698
|
+
MainSidebarSectionLink,
|
|
662
699
|
{
|
|
663
700
|
link,
|
|
664
|
-
|
|
701
|
+
activeCandidates: section.links,
|
|
702
|
+
isActive
|
|
665
703
|
},
|
|
666
|
-
link
|
|
704
|
+
getLinkKey(link)
|
|
667
705
|
)) })
|
|
668
706
|
]
|
|
669
707
|
},
|
|
@@ -671,11 +709,6 @@ function MainSidebarSections({ sections, isActive, className }) {
|
|
|
671
709
|
);
|
|
672
710
|
}) });
|
|
673
711
|
}
|
|
674
|
-
function getIsLinkActive(link, pathname, siblings = []) {
|
|
675
|
-
const matches = (url) => pathname === url || pathname.startsWith(url + "/");
|
|
676
|
-
if (!matches(link.url)) return false;
|
|
677
|
-
return !siblings.some((other) => other.url !== link.url && other.url.length > link.url.length && matches(other.url));
|
|
678
|
-
}
|
|
679
712
|
|
|
680
713
|
function MainSidebarTrigger({ className, onClick, ...props }) {
|
|
681
714
|
const { desktopState, toggleSidebar } = useMainSidebar();
|
|
@@ -727,6 +760,16 @@ function MainSidebarTrigger({ className, onClick, ...props }) {
|
|
|
727
760
|
] });
|
|
728
761
|
}
|
|
729
762
|
|
|
763
|
+
function getIsLinkActive(link, pathname, siblings = []) {
|
|
764
|
+
const matches = (url) => pathname === url || pathname.startsWith(url + "/");
|
|
765
|
+
const flattenLinks = (links) => links.flatMap((item) => [item, ...flattenLinks(item.children ?? [])]);
|
|
766
|
+
if (!matches(link.url)) return false;
|
|
767
|
+
const competingLinks = [...flattenLinks(link.children ?? []), ...flattenLinks(siblings)];
|
|
768
|
+
return !competingLinks.some(
|
|
769
|
+
(other) => other.url !== link.url && other.url.length > link.url.length && matches(other.url)
|
|
770
|
+
);
|
|
771
|
+
}
|
|
772
|
+
|
|
730
773
|
const MainSidebar = Object.assign(MainSidebarRoot, {
|
|
731
774
|
Bottom: MainSidebarBottom,
|
|
732
775
|
Nav: MainSidebarNav,
|
|
@@ -742,4 +785,4 @@ const MainSidebar = Object.assign(MainSidebarRoot, {
|
|
|
742
785
|
});
|
|
743
786
|
|
|
744
787
|
export { MainSidebar as M, ResizeHandleIndicator as R, MainSidebarMobileTrigger as a, MainSidebarProvider as b, MainSidebarTrigger as c, useMaybeSidebar as d, getIsLinkActive as g, navItemClasses as n, useMainSidebar as u };
|
|
745
|
-
//# sourceMappingURL=main-sidebar-
|
|
788
|
+
//# sourceMappingURL=main-sidebar-35yt_w11.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-sidebar-35yt_w11.js","sources":["../src/ds/components/MainSidebar/main-sidebar-bottom.tsx","../src/ds/components/MainSidebar/main-sidebar-context.tsx","../src/ds/components/MainSidebar/main-sidebar-mobile-trigger.tsx","../src/ds/components/MainSidebar/main-sidebar-nav.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-header.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-label.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-item-classes.ts","../src/ds/components/MainSidebar/main-sidebar-nav-link.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-list.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-section.tsx","../src/ds/components/MainSidebar/main-sidebar-nav-separator.tsx","../src/ds/primitives/resize-handle-indicator.tsx","../src/ds/components/MainSidebar/main-sidebar-root.tsx","../src/ds/components/MainSidebar/main-sidebar-sections.tsx","../src/ds/components/MainSidebar/main-sidebar-trigger.tsx","../src/ds/components/MainSidebar/main-sidebar-link-active.ts","../src/ds/components/MainSidebar/main-sidebar.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarBottomProps = ComponentPropsWithoutRef<'div'>;\n\nexport function MainSidebarBottom({ className, children, ...props }: MainSidebarBottomProps) {\n return (\n <div className={cn('mt-auto', className)} {...props}>\n {children}\n </div>\n );\n}\n","import React from 'react';\nimport type { CSSProperties } from 'react';\nimport type { LinkComponent } from '@/ds/types/link-component';\n\nconst SIDEBAR_STATE_KEY = 'sidebar:state';\nconst SIDEBAR_WIDTH_KEY = 'sidebar:width';\n\nconst SIDEBAR_WIDTH_VAR = '--sidebar-width';\n\nexport type SidebarState = 'default' | 'collapsed';\n\ntype MainSidebarContext = {\n state: SidebarState;\n desktopState: SidebarState;\n width: number;\n minWidth: number;\n maxWidth: number;\n collapseBelow: number;\n collapsedWidth: number;\n isMobile: boolean;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n toggleSidebar: () => void;\n setWidth: (width: number) => void;\n collapse: () => void;\n expand: () => void;\n commit: () => void;\n setGestureActive: (active: boolean) => void;\n LinkComponent?: LinkComponent;\n};\n\n// Split: drawer open-state lives in its own context so NavLink/NavHeader\n// do not re-render when the mobile drawer toggles.\ntype MobileDrawerContext = {\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n};\n\nconst MainSidebarContext = React.createContext<Omit<MainSidebarContext, 'openMobile' | 'setOpenMobile'> | null>(null);\nconst MobileDrawerContext = React.createContext<MobileDrawerContext | null>(null);\n\nexport function useMainSidebar(): MainSidebarContext {\n const ctx = React.useContext(MainSidebarContext);\n const drawer = React.useContext(MobileDrawerContext);\n if (!ctx || !drawer) {\n throw new Error('useMainSidebar must be used within a MainSidebarProvider.');\n }\n return { ...ctx, ...drawer };\n}\n\nexport function useMaybeSidebar(): MainSidebarContext | null {\n const ctx = React.useContext(MainSidebarContext);\n const drawer = React.useContext(MobileDrawerContext);\n if (!ctx || !drawer) return null;\n return { ...ctx, ...drawer };\n}\n\n/** Reads only mobile drawer state. Cheap — no re-renders on sidebar resize. */\nexport function useMobileDrawer(): MobileDrawerContext {\n const drawer = React.useContext(MobileDrawerContext);\n if (!drawer) throw new Error('useMobileDrawer must be used within a MainSidebarProvider.');\n return drawer;\n}\n\nexport type MainSidebarProviderProps = {\n children: React.ReactNode;\n /** Initial state before localStorage hydrates. Defaults to `'default'`. */\n defaultState?: SidebarState;\n /** Default expanded width in px. Defaults to `240`. */\n defaultWidth?: number;\n /** Minimum draggable width in px. Defaults to `200`. */\n minWidth?: number;\n /** Maximum draggable width in px. Defaults to `480`. */\n maxWidth?: number;\n /** Drag below this value snaps the sidebar closed. Defaults to `minWidth` (snap to collapsed when dragged below the expanded minimum). Pass `0` to disable snap. */\n collapseBelow?: number;\n /** Width in px when collapsed. Defaults to `64`. Set to `0` for fully hidden. */\n collapsedWidth?: number;\n /** Disable the global ⌘B / Ctrl+B toggle shortcut. Defaults to `false`. */\n disableKeyboardShortcut?: boolean;\n /** Scope-key for localStorage. Allows multiple independent sidebars per app. */\n storageKey?: string;\n /** Mobile breakpoint in px (max-width). Below this, sidebar renders as a drawer. Defaults to `1024`. */\n mobileBreakpoint?: number;\n /** Drawer max-width on mobile in px. Actual width is `min(75vw, mobileWidth)`. Defaults to `360`. */\n mobileWidth?: number;\n /** Default LinkComponent injected into NavLink/NavHeader. Falls back to plain `<a>` if omitted. */\n LinkComponent?: LinkComponent;\n};\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\n\nconst useIsoLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\nexport function MainSidebarProvider({\n children,\n defaultState = 'default',\n defaultWidth = 240,\n minWidth = 200,\n maxWidth = 480,\n collapseBelow,\n collapsedWidth = 64,\n disableKeyboardShortcut = false,\n storageKey,\n mobileBreakpoint = 1024,\n mobileWidth = 360,\n LinkComponent,\n}: MainSidebarProviderProps) {\n // Normalize props so bad inputs (defaultWidth < minWidth, min > max, etc.) never produce a broken layout.\n const safeMin = Math.max(0, Math.min(minWidth, maxWidth));\n const safeMax = Math.max(safeMin, maxWidth);\n const safeCollapsed = Math.max(0, Math.min(collapsedWidth, safeMax));\n const safeDefault = clamp(defaultWidth, safeMin, safeMax);\n // Default snap-zone = minWidth: dragging below the expanded min snaps to collapsed,\n // since below min the sidebar cannot render its expanded layout anyway.\n // Pass `collapseBelow={0}` to disable snap.\n const safeCollapseBelow = collapseBelow ?? safeMin;\n\n const stateStorageKey = storageKey ? `${storageKey}:${SIDEBAR_STATE_KEY}` : SIDEBAR_STATE_KEY;\n const widthStorageKey = storageKey ? `${storageKey}:${SIDEBAR_WIDTH_KEY}` : SIDEBAR_WIDTH_KEY;\n\n // Hydrate synchronously from localStorage so first paint is already at the correct width.\n // Falls back to clamped defaults during SSR or when storage is unavailable.\n const readInitial = (): { state: SidebarState; width: number } => {\n if (typeof window === 'undefined') return { state: defaultState, width: safeDefault };\n try {\n let nextState: SidebarState = defaultState;\n let nextWidth = safeDefault;\n const storedState = window.localStorage.getItem(stateStorageKey);\n if (storedState === 'collapsed' || storedState === 'default') nextState = storedState;\n const storedWidth = window.localStorage.getItem(widthStorageKey);\n if (storedWidth !== null) {\n const parsed = Number(storedWidth);\n if (Number.isFinite(parsed)) nextWidth = clamp(parsed, safeMin, safeMax);\n }\n return { state: nextState, width: nextWidth };\n } catch {\n return { state: defaultState, width: safeDefault };\n }\n };\n const initialRef = React.useRef<{ state: SidebarState; width: number } | null>(null);\n if (initialRef.current === null) initialRef.current = readInitial();\n const initial = initialRef.current;\n\n const [state, setState] = React.useState<SidebarState>(initial.state);\n const [width, setWidthState] = React.useState<number>(initial.width);\n const [isMobile, setIsMobile] = React.useState(false);\n const [openMobile, setOpenMobile] = React.useState(false);\n const widthRef = React.useRef<number>(initial.width);\n const stateRef = React.useRef<SidebarState>(initial.state);\n stateRef.current = state;\n\n const scopeRef = React.useRef<HTMLDivElement | null>(null);\n\n // Watch viewport for mobile breakpoint.\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n const mq = window.matchMedia(`(max-width: ${mobileBreakpoint - 1}px)`);\n const update = () => setIsMobile(mq.matches);\n update();\n mq.addEventListener('change', update);\n return () => mq.removeEventListener('change', update);\n }, [mobileBreakpoint]);\n\n // Close mobile drawer when crossing back to desktop.\n React.useEffect(() => {\n if (!isMobile && openMobile) setOpenMobile(false);\n }, [isMobile, openMobile]);\n\n const writeCssVar = React.useCallback((px: number) => {\n const el = scopeRef.current;\n if (el) el.style.setProperty(SIDEBAR_WIDTH_VAR, `${px}px`);\n }, []);\n\n // Keep the CSS var in sync with collapsed state transitions.\n useIsoLayoutEffect(() => {\n writeCssVar(state === 'collapsed' ? safeCollapsed : widthRef.current);\n }, [state, safeCollapsed, writeCssVar]);\n\n const persistState = React.useCallback(\n (next: SidebarState) => {\n try {\n window.localStorage.setItem(stateStorageKey, next);\n } catch {}\n },\n [stateStorageKey],\n );\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) {\n setOpenMobile(prev => !prev);\n return;\n }\n setState(prev => {\n const next = prev === 'default' ? 'collapsed' : 'default';\n // Sync ref so a synchronous follow-up `commit()` (e.g. keyboard handler)\n // persists the new state instead of the stale render-time value.\n stateRef.current = next;\n persistState(next);\n return next;\n });\n }, [isMobile, persistState]);\n\n const setWidth = React.useCallback(\n (next: number) => {\n const clamped = clamp(next, safeMin, safeMax);\n widthRef.current = clamped;\n writeCssVar(clamped);\n },\n [safeMin, safeMax, writeCssVar],\n );\n\n const collapse = React.useCallback(() => {\n stateRef.current = 'collapsed';\n persistState('collapsed');\n setState('collapsed');\n }, [persistState]);\n const expand = React.useCallback(() => {\n stateRef.current = 'default';\n persistState('default');\n setState('default');\n }, [persistState]);\n\n const commit = React.useCallback(() => {\n setWidthState(widthRef.current);\n try {\n window.localStorage.setItem(stateStorageKey, stateRef.current);\n window.localStorage.setItem(widthStorageKey, String(widthRef.current));\n } catch {}\n }, [stateStorageKey, widthStorageKey]);\n\n const setGestureActive = React.useCallback((active: boolean) => {\n const el = scopeRef.current;\n if (!el) return;\n if (active) el.setAttribute('data-sidebar-gesture', 'active');\n else el.removeAttribute('data-sidebar-gesture');\n }, []);\n\n // Global ⌘B / Ctrl+B toggle. Skip when typing.\n React.useEffect(() => {\n if (disableKeyboardShortcut) return;\n const onKeyDown = (ev: KeyboardEvent) => {\n // `code` is layout-independent — works on non-Latin keyboards.\n if (ev.code !== 'KeyB') return;\n if (!(ev.metaKey || ev.ctrlKey)) return;\n if (ev.altKey || ev.shiftKey) return;\n const target = ev.target as HTMLElement | null;\n if (target) {\n const tag = target.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return;\n if (target.isContentEditable) return;\n }\n ev.preventDefault();\n toggleSidebar();\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [disableKeyboardShortcut, toggleSidebar]);\n\n const effectiveState: SidebarState = isMobile ? 'default' : state;\n\n const contextValue = React.useMemo(\n () => ({\n state: effectiveState,\n desktopState: state,\n width,\n minWidth: safeMin,\n maxWidth: safeMax,\n collapseBelow: safeCollapseBelow,\n collapsedWidth: safeCollapsed,\n isMobile,\n toggleSidebar,\n setWidth,\n collapse,\n expand,\n commit,\n setGestureActive,\n LinkComponent,\n }),\n [\n effectiveState,\n state,\n width,\n safeMin,\n safeMax,\n safeCollapseBelow,\n safeCollapsed,\n isMobile,\n toggleSidebar,\n setWidth,\n collapse,\n expand,\n commit,\n setGestureActive,\n LinkComponent,\n ],\n );\n\n const drawerValue = React.useMemo<MobileDrawerContext>(() => ({ openMobile, setOpenMobile }), [openMobile]);\n\n // CSS var owned exclusively by writeCssVar (single source of truth).\n // SSR seeds the initial value here; post-mount writeCssVar takes over.\n const scopeStyle: CSSProperties = {\n [SIDEBAR_WIDTH_VAR]: `${initial.state === 'collapsed' ? safeCollapsed : initial.width}px`,\n ['--sidebar-width-mobile' as string]: `${mobileWidth}px`,\n display: 'contents',\n } as CSSProperties;\n\n return (\n <div\n ref={scopeRef}\n data-sidebar-scope\n data-sidebar-state={state}\n data-sidebar-mobile={isMobile ? 'true' : 'false'}\n style={scopeStyle}\n suppressHydrationWarning\n >\n <MainSidebarContext.Provider value={contextValue}>\n <MobileDrawerContext.Provider value={drawerValue}>{children}</MobileDrawerContext.Provider>\n </MainSidebarContext.Provider>\n </div>\n );\n}\n","import { MenuIcon } from 'lucide-react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarMobileTriggerProps = ComponentPropsWithoutRef<'button'> & {\n /** Override the hamburger icon. */\n icon?: React.ReactNode;\n};\n\nexport function MainSidebarMobileTrigger({\n className,\n icon,\n 'aria-label': ariaLabel = 'Open navigation menu',\n onClick,\n ...props\n}: MainSidebarMobileTriggerProps) {\n // Always render; visibility toggled via scope's `data-sidebar-mobile` attribute.\n // SSR-stable and respects the configured `mobileBreakpoint`.\n const { isMobile, setOpenMobile } = useMainSidebar();\n return (\n <button\n type=\"button\"\n aria-label={ariaLabel}\n aria-hidden={!isMobile}\n tabIndex={isMobile ? 0 : -1}\n data-mobile-only\n {...props}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) setOpenMobile(true);\n }}\n className={cn(\n 'inline-flex size-10 items-center justify-center rounded-md',\n 'in-data-[sidebar-mobile=false]:hidden',\n 'text-neutral4 hover:text-neutral6 hover:bg-sidebar-nav-hover',\n 'focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-accent1',\n className,\n )}\n >\n {icon ?? <MenuIcon className=\"size-5\" />}\n </button>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { ScrollArea } from '@/ds/components/ScrollArea';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavProps = ComponentPropsWithoutRef<'nav'>;\n\nexport function MainSidebarNav({\n 'aria-label': ariaLabel = 'Main',\n children,\n className,\n ...props\n}: MainSidebarNavProps) {\n return (\n <nav aria-label={ariaLabel} className={cn('flex flex-col flex-1 min-h-0', className)} {...props}>\n <ScrollArea className=\"flex-1 min-h-0\" viewPortClassName=\"px-0.5\">\n {children}\n </ScrollArea>\n </nav>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebar } from './main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavHeaderProps = Omit<ComponentPropsWithoutRef<'header'>, 'children'> & {\n children?: React.ReactNode;\n state?: SidebarState;\n href?: string;\n isActive?: boolean;\n /** Override the Provider-level LinkComponent. Defaults to `<a>` when neither is set. */\n LinkComponent?: LinkComponent;\n};\nexport function MainSidebarNavHeader({\n children,\n className,\n state: stateProp,\n href,\n isActive,\n LinkComponent: LinkProp,\n ...props\n}: MainSidebarNavHeaderProps) {\n const ctx = useMaybeSidebar();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const isMobile = ctx?.isMobile ?? false;\n const Link: LinkComponent | 'a' = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const showTitle = state === 'default' && !isMobile;\n\n return (\n <div className={cn('min-w-0 min-h-8 flex items-center mt-2 mb-0.5', className)}>\n {showTitle ? (\n <header\n {...props}\n className={cn('min-w-0 max-w-full truncate text-ui-sm font-medium pl-3', {\n 'text-neutral5': isActive,\n 'text-neutral3/70': !isActive,\n })}\n >\n {href ? (\n <Link\n href={href}\n className={cn('block min-w-0 truncate transition-colors duration-normal', {\n 'hover:text-neutral5': !isActive,\n 'text-neutral5': isActive,\n })}\n >\n {children}\n </Link>\n ) : (\n children\n )}\n </header>\n ) : (\n <>\n {/* Keep header in DOM (visually hidden) so consumers' `id` still resolves\n for `MainSidebarSections`' `aria-labelledby`. */}\n <VisuallyHidden asChild>\n <header {...props}>{children}</header>\n </VisuallyHidden>\n <div aria-hidden=\"true\" className=\"mx-3 h-px flex-1 bg-border1\" />\n </>\n )}\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebar } from './main-sidebar-context';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavLabelProps = ComponentPropsWithoutRef<'span'> & {\n /** Override sidebar state. Defaults to context, then `'default'`. */\n state?: SidebarState;\n};\n\n/**\n * Label slot for `MainSidebar.NavLink` rows.\n *\n * Auto-hides via `VisuallyHidden` when the sidebar is collapsed (icon-only row),\n * so screen readers still announce the label without it leaking outside the\n * 36px collapsed item. Handles single-line truncation when expanded.\n *\n * Required for `asChild` consumers — the default `link={...}` path wraps the\n * name internally, but slotted elements (`<button>`, custom links) bring their\n * own children, so the label needs to opt into the collapse-aware rendering.\n */\nexport function MainSidebarNavLabel({ children, className, state: stateProp, ...rest }: MainSidebarNavLabelProps) {\n const ctx = useMaybeSidebar();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n if (state === 'collapsed') {\n return <VisuallyHidden>{children}</VisuallyHidden>;\n }\n return (\n <span {...rest} className={cn('min-w-0 flex-1 truncate text-left', className)}>\n {children}\n </span>\n );\n}\n","import { cn } from '@/lib/utils';\n\ntype ItemStyleOptions = {\n isActive?: boolean;\n isCollapsed?: boolean;\n isFeatured?: boolean;\n level?: number;\n};\n\nconst nestedExpandedItemClasses = (level: number) => {\n if (level <= 0) return 'w-full gap-2 py-1 px-3 justify-start';\n if (level === 1) return 'w-full gap-2 py-1 pr-3 pl-8 justify-start text-ui-sm h-8';\n if (level === 2) return 'w-full gap-2 py-1 pr-3 pl-10 justify-start text-ui-sm h-8';\n return 'w-full gap-2 py-1 pr-3 pl-12 justify-start text-ui-sm h-8';\n};\n\n/**\n * Shared classes for any sidebar nav row element (anchor, button, custom).\n * Apply directly to the interactive element so `asChild` and custom slotted\n * elements all receive the same styling.\n */\nexport const navItemClasses = ({ isActive, isCollapsed, isFeatured, level = 0 }: ItemStyleOptions = {}) =>\n cn(\n 'flex cursor-pointer items-center text-ui-md text-neutral3 rounded-lg h-9 min-w-0 whitespace-nowrap',\n 'transition-all duration-normal ease-out-custom motion-reduce:transition-none',\n '[&_svg]:w-4 [&_svg]:h-4 [&_svg]:shrink-0 [&_svg]:text-neutral3/70 [&_svg]:transition-colors [&_svg]:duration-normal motion-reduce:[&_svg]:transition-none',\n 'hover:bg-sidebar-nav-hover hover:text-neutral6 [&:hover_svg]:text-neutral5',\n 'focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:shadow-focus-ring',\n !isCollapsed && nestedExpandedItemClasses(level),\n isCollapsed && 'w-full p-0 justify-center',\n isActive &&\n 'text-neutral6 bg-sidebar-nav-active hover:bg-sidebar-nav-active hover:text-neutral6 [&_svg]:text-neutral6 [&:hover_svg]:text-neutral6',\n isCollapsed && !isActive && '[&_svg]:text-neutral3',\n isFeatured && 'my-2 bg-accent1Dark hover:bg-accent1Darker text-accent1 hover:text-accent1 border border-accent1/30',\n isFeatured &&\n 'dark:bg-accent1 dark:hover:bg-accent1/90 dark:text-black dark:hover:text-black dark:border-transparent',\n isFeatured &&\n '[&_svg]:text-accent1 [&:hover_svg]:text-accent1 dark:[&_svg]:text-black/75 dark:[&:hover_svg]:text-black',\n );\n","import React from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport type { SidebarState } from './main-sidebar-context';\nimport { useMaybeSidebar } from './main-sidebar-context';\nimport { navItemClasses } from './main-sidebar-nav-item-classes';\nimport { MainSidebarNavLabel } from './main-sidebar-nav-label';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { cn } from '@/lib/utils';\n\nexport type NavLink = {\n name: string;\n url: string;\n icon?: React.ReactNode;\n children?: NavLink[];\n isActive?: boolean;\n variant?: 'default' | 'featured';\n tooltipMsg?: string;\n /** @deprecated Prefer nested `children`; accepted for callers still rendering manual sublinks. */\n indent?: boolean;\n};\n\nexport type MainSidebarNavLinkProps = Omit<ComponentPropsWithoutRef<'li'>, 'children'> & {\n link?: NavLink;\n isActive?: boolean;\n state?: SidebarState;\n children?: React.ReactNode;\n /** Override the Provider-level LinkComponent for this row. Defaults to `<a>` when neither is set. */\n LinkComponent?: LinkComponent;\n /** Nesting depth for manually composed subitems. Data-driven sections set this automatically. */\n level?: number;\n /** Nested list rendered below the row while keeping valid `<li><a /><ul /></li>` structure. */\n subItems?: React.ReactNode;\n /**\n * When true, render `children` as the interactive element.\n * Use for `<button>` items or custom router Links. Item classes are forwarded\n * to the slotted element. `link.url` and `LinkComponent` are ignored; other\n * `link` presentation fields still apply when supplied.\n */\n asChild?: boolean;\n};\n\ntype SlottedNavChildProps = {\n className?: string;\n};\n\nexport function MainSidebarNavLink({\n link,\n state: stateProp,\n children,\n isActive,\n className,\n LinkComponent: LinkProp,\n level: levelProp,\n subItems,\n asChild = false,\n ...props\n}: MainSidebarNavLinkProps) {\n // Auto-inherit state + LinkComponent from context; explicit props still win.\n const ctx = useMaybeSidebar();\n const state: SidebarState = stateProp ?? ctx?.state ?? 'default';\n const Link: LinkComponent | 'a' = LinkProp ?? ctx?.LinkComponent ?? 'a';\n const isCollapsed = state === 'collapsed';\n const isFeatured = link?.variant === 'featured';\n const level = levelProp ?? (link?.indent ? 1 : 0);\n const isExternal = Boolean(link?.url && /^(https?:)?\\/\\//.test(link.url));\n const linkParams = isExternal ? { target: '_blank', rel: 'noreferrer' } : {};\n const needsTooltip = link ? isCollapsed || Boolean(link.tooltipMsg) : false;\n\n const itemClassName = navItemClasses({\n isActive,\n isCollapsed,\n isFeatured,\n level,\n });\n\n let interactiveEl: React.ReactNode = null;\n\n if (asChild) {\n if (!React.isValidElement<SlottedNavChildProps>(children)) {\n throw new Error(\n 'MainSidebarNavLink requires a valid React element child when `asChild` is true so it can apply `SlottedNavChildProps` and merge `itemClassName`.',\n );\n }\n\n interactiveEl = React.cloneElement(children, {\n className: cn(itemClassName, children.props.className),\n });\n } else if (link) {\n interactiveEl = (\n <Link href={link.url} {...linkParams} className={itemClassName}>\n {link.icon}\n <MainSidebarNavLabel state={state}>{link.name}</MainSidebarNavLabel>\n {children}\n </Link>\n );\n }\n\n return (\n <li {...props} className={cn('flex flex-col relative min-w-0', className)}>\n {link && needsTooltip && React.isValidElement(interactiveEl) ? (\n <Tooltip>\n <TooltipTrigger render={interactiveEl} />\n <TooltipContent side=\"right\" align=\"center\" sideOffset={16}>\n {link.tooltipMsg ? (isCollapsed ? `${link.name} | ${link.tooltipMsg}` : link.tooltipMsg) : link.name}\n </TooltipContent>\n </Tooltip>\n ) : (\n (interactiveEl ?? children)\n )}\n {!isCollapsed && subItems}\n </li>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavListProps = ComponentPropsWithoutRef<'ul'>;\n\nexport function MainSidebarNavList({ className, children, ...props }: MainSidebarNavListProps) {\n return (\n <ul className={cn('grid grid-cols-[minmax(0,1fr)] gap-0.5 items-start content-center', className)} {...props}>\n {children}\n </ul>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport type { NavLink } from './main-sidebar-nav-link';\nimport { cn } from '@/lib/utils';\n\nexport type NavSection = {\n key: string;\n title?: string;\n href?: string;\n links: NavLink[];\n separator?: boolean;\n isHeaderActive?: boolean;\n};\n\nexport type MainSidebarNavSectionProps = ComponentPropsWithoutRef<'section'>;\n\nexport function MainSidebarNavSection({ className, children, ...props }: MainSidebarNavSectionProps) {\n return (\n <section className={cn('grid grid-cols-[minmax(0,1fr)] items-start content-center relative', className)} {...props}>\n {children}\n </section>\n );\n}\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarNavSeparatorProps = ComponentPropsWithoutRef<'div'>;\n\nexport function MainSidebarNavSeparator({ className, ...props }: MainSidebarNavSeparatorProps) {\n return (\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={cn(\n 'min-h-5 relative',\n '[&:after]:content-[\"\"] [&:after]:block [&:after]:absolute [&:after]:h-0 [&:after]:border-border1 [&:after]:border-t [&:after]:top-1/2 [&:after]:left-3 [&:after]:right-3',\n className,\n )}\n {...props}\n />\n );\n}\n","import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\n\n// line: gradient hairline, fits a visible container edge.\n// pill: small floating pill, for handles with no container around.\nconst indicatorVariants = cva(\n 'block pointer-events-none transition-all duration-150 ease-out motion-reduce:transition-none',\n {\n variants: {\n variant: {\n line: 'h-3/4 w-px bg-linear-to-b from-transparent via-neutral6/25 to-transparent opacity-0',\n pill: 'h-10 w-0.5 rounded-full bg-surface5',\n },\n },\n defaultVariants: {\n variant: 'line',\n },\n },\n);\n\nexport type ResizeHandleIndicatorProps = VariantProps<typeof indicatorVariants> & {\n className?: string;\n};\n\n// Shared visual for resize handles (sidebar, panel separators).\n// Consumers reveal/emphasize it via their own state variant classes.\nexport const ResizeHandleIndicator = ({ variant, className }: ResizeHandleIndicatorProps) => (\n <span aria-hidden className={cn(indicatorVariants({ variant }), className)} />\n);\n","import { useCallback, useEffect, useRef } from 'react';\nimport type { KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerTitle } from '@/ds/components/Drawer';\nimport { ResizeHandleIndicator } from '@/ds/primitives/resize-handle-indicator';\nimport { VisuallyHidden } from '@/ds/primitives/visually-hidden';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarRootProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nconst KEYBOARD_STEP = 10;\nconst DRAG_THRESHOLD = 5;\n\nexport function MainSidebarRoot({ children, className }: MainSidebarRootProps) {\n const {\n state,\n width,\n minWidth,\n maxWidth,\n collapseBelow,\n collapsedWidth,\n isMobile,\n openMobile,\n setOpenMobile,\n setWidth,\n collapse,\n expand,\n commit,\n toggleSidebar,\n setGestureActive,\n } = useMainSidebar();\n const isCollapsed = state === 'collapsed';\n const isHidden = isCollapsed && collapsedWidth === 0;\n\n const draggedRef = useRef(false);\n // Tracks active drag so unmount mid-gesture can restore body styles.\n const dragCleanupRef = useRef<(() => void) | null>(null);\n\n // Restore global state if the component unmounts mid-drag.\n useEffect(() => {\n return () => {\n dragCleanupRef.current?.();\n dragCleanupRef.current = null;\n };\n }, []);\n\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) return;\n event.preventDefault();\n\n draggedRef.current = false;\n // Active styles on press, not after drag threshold.\n setGestureActive(true);\n\n const startX = event.clientX;\n\n const handle = event.currentTarget;\n const pointerId = event.pointerId;\n\n // Capture pointer: keeps :hover + col-resize cursor on handle for the\n // whole drag, even when cursor leaves the hotzone (collapsed snap-zone).\n try {\n handle.setPointerCapture(pointerId);\n } catch {\n // Pointer already gone.\n }\n\n // WYSIWYG resize: sidebar width = cursor X relative to sidebar's left edge.\n // Captured once — sidebar is `shrink-0`, left edge is stable during the gesture.\n const sidebarEl = handle.parentElement;\n const sidebarLeft = sidebarEl ? sidebarEl.getBoundingClientRect().left : 0;\n\n const prevCursor = document.body.style.cursor;\n const prevUserSelect = document.body.style.userSelect;\n\n const onMove = (ev: PointerEvent) => {\n if (ev.pointerId !== pointerId) return;\n const dx = ev.clientX - startX;\n if (!draggedRef.current) {\n if (Math.abs(dx) <= DRAG_THRESHOLD) return;\n draggedRef.current = true;\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n // Single rule, no started-state branch: cursor position alone defines state.\n const cursorWidth = ev.clientX - sidebarLeft;\n\n if (collapseBelow > 0 && cursorWidth < collapseBelow) {\n collapse();\n return;\n }\n expand();\n setWidth(cursorWidth);\n };\n const cleanup = (ev?: PointerEvent) => {\n if (ev && ev.pointerId !== pointerId) return;\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', cleanup);\n window.removeEventListener('pointercancel', cleanup);\n document.body.style.cursor = prevCursor;\n document.body.style.userSelect = prevUserSelect;\n setGestureActive(false);\n commit();\n dragCleanupRef.current = null;\n };\n dragCleanupRef.current = () => cleanup();\n // Window-level listeners: pointer moves off the narrow handle fire reliably,\n // cursor leaving the window still gets `pointerup`.\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', cleanup);\n window.addEventListener('pointercancel', cleanup);\n },\n [collapseBelow, setWidth, expand, collapse, commit, setGestureActive],\n );\n\n const onClick = useCallback(() => {\n if (draggedRef.current) {\n draggedRef.current = false;\n return;\n }\n toggleSidebar();\n }, [toggleSidebar]);\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n toggleSidebar();\n return;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (isCollapsed) return;\n setWidth(width - KEYBOARD_STEP);\n commit();\n return;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (isCollapsed) {\n expand();\n commit();\n return;\n }\n setWidth(width + KEYBOARD_STEP);\n commit();\n return;\n }\n case 'Home': {\n event.preventDefault();\n expand();\n setWidth(minWidth);\n commit();\n return;\n }\n case 'End': {\n event.preventDefault();\n expand();\n setWidth(maxWidth);\n commit();\n return;\n }\n }\n },\n [isCollapsed, width, minWidth, maxWidth, setWidth, expand, commit, toggleSidebar],\n );\n\n // Mobile: render as an off-canvas drawer via Base UI Drawer.\n // Auto-close on link navigation (standard drawer UX). Don't gate on\n // `defaultPrevented` — client-side router links call `preventDefault()` for\n // SPA navigation, and we still want to close the drawer when they do.\n const closeOnAnchor = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n const anchor = (event.target as HTMLElement).closest('a');\n if (!anchor || !anchor.hasAttribute('href')) return;\n // Skip non-primary clicks and modifier-clicks (open in new tab/window).\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n // Skip explicit external/download targets.\n if (anchor.target === '_blank' || anchor.hasAttribute('download')) return;\n setOpenMobile(false);\n },\n [setOpenMobile],\n );\n\n if (isMobile) {\n return (\n <Drawer side=\"left\" open={openMobile} onOpenChange={setOpenMobile}>\n <DrawerContent\n className={cn(\n 'w-3/4 max-w-(--sidebar-width-mobile) rounded-none border-0 bg-surface2 shadow-xl overflow-hidden',\n className,\n )}\n >\n <VisuallyHidden asChild>\n <DrawerTitle>Navigation</DrawerTitle>\n </VisuallyHidden>\n <VisuallyHidden asChild>\n <DrawerDescription>Primary site navigation drawer</DrawerDescription>\n </VisuallyHidden>\n <div onClick={closeOnAnchor} className=\"flex flex-col h-full min-h-0 px-4 py-2 overflow-hidden\">\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n );\n }\n\n // Desktop: in-flow sidebar with resize handle.\n const currentWidth = isCollapsed ? collapsedWidth : width;\n return (\n <div\n className={cn(\n 'sidebar-layout group/sidebar relative shrink-0 self-stretch min-h-0',\n 'w-(--sidebar-width)',\n 'transition-[width] duration-220 ease-[cubic-bezier(0.32,0.72,0,1)]',\n 'motion-reduce:transition-none',\n 'in-data-[sidebar-gesture=active]:transition-none',\n className,\n // Order matters for tailwind-merge: these win over consumer-supplied border classes.\n isHidden && 'border-r-0 border-transparent',\n )}\n >\n <div\n className={cn(\n 'flex flex-col h-full min-h-0 overflow-hidden',\n 'transition-opacity duration-200 motion-reduce:transition-none',\n isCollapsed ? 'px-2' : 'px-4',\n isHidden && 'opacity-0 pointer-events-none px-0',\n )}\n >\n {children}\n </div>\n\n <div\n // Focusable window-splitter pattern (WAI-ARIA APG): `separator` with\n // value props + keyboard semantics. Click toggles; Arrow keys resize.\n role=\"separator\"\n aria-orientation=\"vertical\"\n // Collapsed: omit the numeric range so AT doesn't see contradictory\n // values (valuenow=0/64 inside valuemin=200..valuemax=480). `valuetext`\n // still describes the state.\n aria-valuenow={isCollapsed ? undefined : currentWidth}\n aria-valuemin={isCollapsed ? undefined : minWidth}\n aria-valuemax={isCollapsed ? undefined : maxWidth}\n aria-valuetext={isCollapsed ? 'collapsed' : `${currentWidth} pixels`}\n aria-label={`Resize sidebar. Arrow keys to resize, Enter to ${isCollapsed ? 'expand' : 'collapse'}.`}\n tabIndex={0}\n onPointerDown={onPointerDown}\n onClick={onClick}\n onKeyDown={onKeyDown}\n className={cn(\n 'group absolute top-0 -right-1 z-10 h-full w-2 cursor-col-resize touch-none',\n 'flex items-center justify-center',\n 'focus-visible:outline-hidden',\n )}\n >\n <ResizeHandleIndicator\n className={cn(\n 'group-hover:opacity-100',\n 'group-focus-visible:opacity-100 group-focus-visible:via-accent1',\n 'in-data-[sidebar-gesture=active]:opacity-100 in-data-[sidebar-gesture=active]:via-neutral6/45',\n )}\n />\n </div>\n </div>\n );\n}\n","import { useId } from 'react';\nimport { MainSidebarNavHeader } from './main-sidebar-nav-header';\nimport { MainSidebarNavLink } from './main-sidebar-nav-link';\nimport type { NavLink } from './main-sidebar-nav-link';\nimport { MainSidebarNavList } from './main-sidebar-nav-list';\nimport { MainSidebarNavSection } from './main-sidebar-nav-section';\nimport type { NavSection } from './main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from './main-sidebar-nav-separator';\n\nexport type MainSidebarSectionsProps = {\n sections: NavSection[];\n /**\n * Called per link to decide the active state. Receives the section's links so\n * callers can use section-aware active logic without re-scanning `sections`\n * from the outside. Default: each link's `isActive`.\n */\n isActive?: (link: NavLink, activeCandidates: NavLink[]) => boolean;\n className?: string;\n};\n\ntype MainSidebarSectionLinkProps = {\n link: NavLink;\n activeCandidates: NavLink[];\n level?: number;\n isActive?: MainSidebarSectionsProps['isActive'];\n};\n\nfunction getLinkKey(link: NavLink) {\n return `${link.url}:${link.name}`;\n}\n\nfunction MainSidebarSectionLink({ link, activeCandidates, level = 0, isActive }: MainSidebarSectionLinkProps) {\n const childLinks = link.children ?? [];\n\n return (\n <MainSidebarNavLink\n link={link}\n isActive={isActive?.(link, activeCandidates) ?? link.isActive}\n level={level}\n subItems={\n childLinks.length > 0 ? (\n <MainSidebarNavList className=\"mt-0.5\">\n {childLinks.map(child => (\n <MainSidebarSectionLink\n key={getLinkKey(child)}\n link={child}\n activeCandidates={activeCandidates}\n level={level + 1}\n isActive={isActive}\n />\n ))}\n </MainSidebarNavList>\n ) : null\n }\n />\n );\n}\n\nexport function MainSidebarSections({ sections, isActive, className }: MainSidebarSectionsProps) {\n const baseId = useId();\n\n return (\n <>\n {sections.map(section => {\n const showSeparator = section.links.length > 0 && section.separator;\n const headerId = section.title ? `${baseId}-${section.key}` : undefined;\n return (\n <MainSidebarNavSection\n key={section.key}\n className={className}\n aria-labelledby={headerId}\n aria-label={!headerId ? section.key : undefined}\n >\n {/* Render separator and header independently — a section can have\n both (titled group preceded by a divider). */}\n {showSeparator ? <MainSidebarNavSeparator /> : null}\n {section.title ? (\n <MainSidebarNavHeader id={headerId} href={section.href} isActive={section.isHeaderActive}>\n {section.title}\n </MainSidebarNavHeader>\n ) : null}\n <MainSidebarNavList>\n {section.links.map(link => (\n <MainSidebarSectionLink\n key={getLinkKey(link)}\n link={link}\n activeCandidates={section.links}\n isActive={isActive}\n />\n ))}\n </MainSidebarNavList>\n </MainSidebarNavSection>\n );\n })}\n </>\n );\n}\n","import { KeyboardIcon, PanelRightIcon } from 'lucide-react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useMainSidebar } from './main-sidebar-context';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { cn } from '@/lib/utils';\n\nexport type MainSidebarTriggerProps = ComponentPropsWithoutRef<'button'>;\n\nexport function MainSidebarTrigger({ className, onClick, ...props }: MainSidebarTriggerProps) {\n // Use desktopState so the icon reflects the persisted desktop state\n // even on mobile (where `state` is forced to 'default' for the drawer).\n const { desktopState, toggleSidebar } = useMainSidebar();\n const isCollapsed = desktopState === 'collapsed';\n\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n type=\"button\"\n aria-label=\"Toggle sidebar\"\n aria-expanded={!isCollapsed}\n {...props}\n onClick={event => {\n onClick?.(event);\n if (!event.defaultPrevented) toggleSidebar();\n }}\n className={cn(\n 'flex items-center justify-center text-neutral3 rounded-md',\n 'size-9',\n isCollapsed ? 'mx-auto' : 'ml-auto',\n 'hover:bg-sidebar-nav-hover hover:text-neutral6',\n 'transition-all duration-normal ease-out-custom',\n 'focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-accent1 focus-visible:shadow-focus-ring',\n '[&_svg]:w-4 [&_svg]:h-4 [&_svg]:text-neutral3 [&:hover_svg]:text-neutral5 [&_svg]:transition-transform [&_svg]:duration-normal',\n className,\n )}\n >\n <PanelRightIcon\n className={cn({\n 'rotate-180': isCollapsed,\n })}\n />\n </button>\n }\n />\n\n <TooltipContent>\n Toggle Sidebar\n <div className=\"flex items-center gap-1 [&>svg]:w-[1em] [&>svg]:h-[1em]\">\n <KeyboardIcon /> Ctrl+B\n </div>\n </TooltipContent>\n </Tooltip>\n );\n}\n","import type { NavLink } from './main-sidebar-nav-link';\n\n/**\n * Strict active-path match with sibling-exclusion.\n * - `pathname === link.url` or starts with `link.url + '/'`\n * - Not active if any sibling link has a longer matching url (prevents `/a` lighting while `/a/b` matches).\n */\nexport function getIsLinkActive(link: NavLink, pathname: string, siblings: NavLink[] = []): boolean {\n const matches = (url: string) => pathname === url || pathname.startsWith(url + '/');\n const flattenLinks = (links: NavLink[]): NavLink[] =>\n links.flatMap(item => [item, ...flattenLinks(item.children ?? [])]);\n\n if (!matches(link.url)) return false;\n const competingLinks = [...flattenLinks(link.children ?? []), ...flattenLinks(siblings)];\n return !competingLinks.some(\n other => other.url !== link.url && other.url.length > link.url.length && matches(other.url),\n );\n}\n","import { MainSidebarBottom } from './main-sidebar-bottom';\nimport { MainSidebarMobileTrigger } from './main-sidebar-mobile-trigger';\nimport { MainSidebarNav } from './main-sidebar-nav';\nimport { MainSidebarNavHeader } from './main-sidebar-nav-header';\nimport { MainSidebarNavLabel } from './main-sidebar-nav-label';\nimport { MainSidebarNavLink } from './main-sidebar-nav-link';\nimport { MainSidebarNavList } from './main-sidebar-nav-list';\nimport { MainSidebarNavSection } from './main-sidebar-nav-section';\nimport { MainSidebarNavSeparator } from './main-sidebar-nav-separator';\nimport { MainSidebarRoot } from './main-sidebar-root';\nimport { MainSidebarSections } from './main-sidebar-sections';\nimport { MainSidebarTrigger } from './main-sidebar-trigger';\n\nexport { MainSidebarProvider, type SidebarState, type MainSidebarProviderProps } from './main-sidebar-context';\nexport { useMainSidebar, useMaybeSidebar } from './main-sidebar-context';\nexport { navItemClasses } from './main-sidebar-nav-item-classes';\nexport { type NavLink } from './main-sidebar-nav-link';\nexport { type NavSection } from './main-sidebar-nav-section';\nexport { MainSidebarTrigger } from './main-sidebar-trigger';\nexport { MainSidebarMobileTrigger } from './main-sidebar-mobile-trigger';\nexport { getIsLinkActive } from './main-sidebar-link-active';\n\nexport const MainSidebar = Object.assign(MainSidebarRoot, {\n Bottom: MainSidebarBottom,\n Nav: MainSidebarNav,\n NavSection: MainSidebarNavSection,\n NavLink: MainSidebarNavLink,\n NavLabel: MainSidebarNavLabel,\n NavHeader: MainSidebarNavHeader,\n NavList: MainSidebarNavList,\n NavSeparator: MainSidebarNavSeparator,\n Sections: MainSidebarSections,\n Trigger: MainSidebarTrigger,\n MobileTrigger: MainSidebarMobileTrigger,\n});\n"],"names":["React"],"mappings":"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"}
|