@pactor-app/ui 1.46.0 → 1.47.0
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/dist/{chunk-QB2RZXDD.js → chunk-7VDIDB3K.js} +818 -874
- package/dist/{chunk-FU4P7CAM.js → chunk-B2Y6JC36.js} +281 -84
- package/dist/{chunk-XA7J5SGA.js → chunk-F7GQYNTG.js} +230 -355
- package/dist/{chunk-HU2RFIWH.js → chunk-OBSD66BK.js} +82 -7
- package/dist/{chunk-JV2V4HCI.js → chunk-RLAOCITX.js} +2 -2
- package/dist/{chunk-7OBUSV5S.js → chunk-YHTRCBKF.js} +184 -59
- package/dist/components/index.cjs +1242 -1113
- package/dist/components/index.d.cts +36 -4
- package/dist/components/index.d.ts +36 -4
- package/dist/components/index.js +6 -6
- package/dist/index.cjs +1349 -1145
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +8 -8
- package/dist/interaction/index.cjs +80 -5
- package/dist/interaction/index.d.cts +26 -0
- package/dist/interaction/index.d.ts +26 -0
- package/dist/interaction/index.js +1 -1
- package/dist/layout/index.cjs +435 -154
- package/dist/layout/index.js +3 -3
- package/dist/ui/index.js +10 -10
- package/package.json +6 -6
- package/styles.css +9 -0
package/dist/layout/index.cjs
CHANGED
|
@@ -975,14 +975,174 @@ var import_react6 = require("react");
|
|
|
975
975
|
// src/components/components/Menu/index.tsx
|
|
976
976
|
var import_react5 = require("react");
|
|
977
977
|
|
|
978
|
+
// src/ui/dropdown-menu.tsx
|
|
979
|
+
var import_menu = require("@base-ui/react/menu");
|
|
980
|
+
var import_lucide_react3 = require("lucide-react");
|
|
981
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
982
|
+
function DropdownMenu({
|
|
983
|
+
...props
|
|
984
|
+
}) {
|
|
985
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_menu.Menu.Root, { "data-slot": "dropdown-menu", ...props });
|
|
986
|
+
}
|
|
987
|
+
function DropdownMenuTrigger({
|
|
988
|
+
...props
|
|
989
|
+
}) {
|
|
990
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_menu.Menu.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
991
|
+
}
|
|
992
|
+
function DropdownMenuContent({
|
|
993
|
+
className,
|
|
994
|
+
align = "start",
|
|
995
|
+
side = "bottom",
|
|
996
|
+
sideOffset = 4,
|
|
997
|
+
...props
|
|
998
|
+
}) {
|
|
999
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_menu.Menu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1000
|
+
import_menu.Menu.Positioner,
|
|
1001
|
+
{
|
|
1002
|
+
align,
|
|
1003
|
+
side,
|
|
1004
|
+
sideOffset,
|
|
1005
|
+
className: "isolate z-50",
|
|
1006
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1007
|
+
import_menu.Menu.Popup,
|
|
1008
|
+
{
|
|
1009
|
+
"data-slot": "dropdown-menu-content",
|
|
1010
|
+
className: cn(
|
|
1011
|
+
"z-50 max-h-(--available-height) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md shadow-(color:--shadow-color) duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fill-mode-forwards data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
1012
|
+
className
|
|
1013
|
+
),
|
|
1014
|
+
...props
|
|
1015
|
+
}
|
|
1016
|
+
)
|
|
1017
|
+
}
|
|
1018
|
+
) });
|
|
1019
|
+
}
|
|
1020
|
+
function DropdownMenuItem({
|
|
1021
|
+
className,
|
|
1022
|
+
variant = "default",
|
|
1023
|
+
...props
|
|
1024
|
+
}) {
|
|
1025
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1026
|
+
import_menu.Menu.Item,
|
|
1027
|
+
{
|
|
1028
|
+
"data-slot": "dropdown-menu-item",
|
|
1029
|
+
"data-variant": variant,
|
|
1030
|
+
className: cn(
|
|
1031
|
+
"relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-(--menu-hover-background) focus:text-(--menu-hover-foreground) data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
1032
|
+
className
|
|
1033
|
+
),
|
|
1034
|
+
...props
|
|
1035
|
+
}
|
|
1036
|
+
);
|
|
1037
|
+
}
|
|
1038
|
+
function DropdownMenuSeparator({
|
|
1039
|
+
className,
|
|
1040
|
+
...props
|
|
1041
|
+
}) {
|
|
1042
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1043
|
+
import_menu.Menu.Separator,
|
|
1044
|
+
{
|
|
1045
|
+
"data-slot": "dropdown-menu-separator",
|
|
1046
|
+
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
1047
|
+
...props
|
|
1048
|
+
}
|
|
1049
|
+
);
|
|
1050
|
+
}
|
|
1051
|
+
function DropdownMenuSub({
|
|
1052
|
+
...props
|
|
1053
|
+
}) {
|
|
1054
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_menu.Menu.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
|
|
1055
|
+
}
|
|
1056
|
+
function DropdownMenuSubTrigger({
|
|
1057
|
+
className,
|
|
1058
|
+
children,
|
|
1059
|
+
...props
|
|
1060
|
+
}) {
|
|
1061
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
1062
|
+
import_menu.Menu.SubmenuTrigger,
|
|
1063
|
+
{
|
|
1064
|
+
"data-slot": "dropdown-menu-sub-trigger",
|
|
1065
|
+
className: cn(
|
|
1066
|
+
"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-(--menu-hover-background) focus:text-(--menu-hover-foreground) data-open:bg-(--menu-active-background) data-open:text-(--menu-active-foreground) [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
1067
|
+
className
|
|
1068
|
+
),
|
|
1069
|
+
...props,
|
|
1070
|
+
children: [
|
|
1071
|
+
children,
|
|
1072
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react3.ChevronRightIcon, { className: "ml-auto" })
|
|
1073
|
+
]
|
|
1074
|
+
}
|
|
1075
|
+
);
|
|
1076
|
+
}
|
|
1077
|
+
function DropdownMenuSubContent({
|
|
1078
|
+
className,
|
|
1079
|
+
sideOffset = 2,
|
|
1080
|
+
...props
|
|
1081
|
+
}) {
|
|
1082
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_menu.Menu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_menu.Menu.Positioner, { sideOffset, className: "isolate z-50", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1083
|
+
import_menu.Menu.Popup,
|
|
1084
|
+
{
|
|
1085
|
+
"data-slot": "dropdown-menu-sub-content",
|
|
1086
|
+
className: cn(
|
|
1087
|
+
"z-50 min-w-32 origin-(--transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md shadow-(color:--shadow-color) duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fill-mode-forwards data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
1088
|
+
className
|
|
1089
|
+
),
|
|
1090
|
+
...props
|
|
1091
|
+
}
|
|
1092
|
+
) }) });
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
// src/components/components/trigger-render.tsx
|
|
1096
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
1097
|
+
function triggerWrapper(slot) {
|
|
1098
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { "data-slot": slot });
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
// src/components/components/DropdownMenu/index.tsx
|
|
1102
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
1103
|
+
function renderDropdownItems(items, onSelect) {
|
|
1104
|
+
const checkable = items.some((i) => i.selected);
|
|
1105
|
+
return items.map((item, index) => {
|
|
1106
|
+
const key = item.value ?? `item-${index}`;
|
|
1107
|
+
if (item.separator) {
|
|
1108
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DropdownMenuSeparator, {}, `separator-${index}`);
|
|
1109
|
+
}
|
|
1110
|
+
const leading = item.selected ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Icon, { name: "check", size: "sm" }) : item.icon ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Icon, { name: item.icon, size: "sm" }) : checkable ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "size-4 shrink-0" }) : null;
|
|
1111
|
+
if (item.children && item.children.length > 0) {
|
|
1112
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DropdownMenuSub, { children: [
|
|
1113
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DropdownMenuSubTrigger, { disabled: item.disabled, children: [
|
|
1114
|
+
leading,
|
|
1115
|
+
item.label,
|
|
1116
|
+
item.trailing ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "ml-auto pl-4 text-xs text-muted-foreground", children: item.trailing }) : null
|
|
1117
|
+
] }),
|
|
1118
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DropdownMenuSubContent, { children: renderDropdownItems(item.children, onSelect) })
|
|
1119
|
+
] }, key);
|
|
1120
|
+
}
|
|
1121
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
1122
|
+
DropdownMenuItem,
|
|
1123
|
+
{
|
|
1124
|
+
variant: item.danger ? "destructive" : "default",
|
|
1125
|
+
disabled: item.disabled,
|
|
1126
|
+
onClick: () => item.value !== void 0 && onSelect?.(item.value),
|
|
1127
|
+
children: [
|
|
1128
|
+
leading,
|
|
1129
|
+
item.label,
|
|
1130
|
+
item.trailing ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "ml-auto pl-4 text-xs text-muted-foreground", children: item.trailing }) : null
|
|
1131
|
+
]
|
|
1132
|
+
},
|
|
1133
|
+
key
|
|
1134
|
+
);
|
|
1135
|
+
});
|
|
1136
|
+
}
|
|
1137
|
+
|
|
978
1138
|
// src/ui/tooltip.tsx
|
|
979
1139
|
var import_tooltip = require("@base-ui/react/tooltip");
|
|
980
|
-
var
|
|
1140
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
981
1141
|
function TooltipProvider({
|
|
982
1142
|
delay = 0,
|
|
983
1143
|
...props
|
|
984
1144
|
}) {
|
|
985
|
-
return /* @__PURE__ */ (0,
|
|
1145
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
986
1146
|
import_tooltip.Tooltip.Provider,
|
|
987
1147
|
{
|
|
988
1148
|
"data-slot": "tooltip-provider",
|
|
@@ -994,12 +1154,12 @@ function TooltipProvider({
|
|
|
994
1154
|
function Tooltip({
|
|
995
1155
|
...props
|
|
996
1156
|
}) {
|
|
997
|
-
return /* @__PURE__ */ (0,
|
|
1157
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_tooltip.Tooltip.Root, { "data-slot": "tooltip", ...props }) });
|
|
998
1158
|
}
|
|
999
1159
|
function TooltipTrigger({
|
|
1000
1160
|
...props
|
|
1001
1161
|
}) {
|
|
1002
|
-
return /* @__PURE__ */ (0,
|
|
1162
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_tooltip.Tooltip.Trigger, { "data-slot": "tooltip-trigger", ...props });
|
|
1003
1163
|
}
|
|
1004
1164
|
function TooltipContent({
|
|
1005
1165
|
className,
|
|
@@ -1009,14 +1169,14 @@ function TooltipContent({
|
|
|
1009
1169
|
children,
|
|
1010
1170
|
...props
|
|
1011
1171
|
}) {
|
|
1012
|
-
return /* @__PURE__ */ (0,
|
|
1172
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_tooltip.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1013
1173
|
import_tooltip.Tooltip.Positioner,
|
|
1014
1174
|
{
|
|
1015
1175
|
align,
|
|
1016
1176
|
side,
|
|
1017
1177
|
sideOffset,
|
|
1018
1178
|
className: "isolate z-50",
|
|
1019
|
-
children: /* @__PURE__ */ (0,
|
|
1179
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
1020
1180
|
import_tooltip.Tooltip.Popup,
|
|
1021
1181
|
{
|
|
1022
1182
|
"data-slot": "tooltip-content",
|
|
@@ -1027,7 +1187,7 @@ function TooltipContent({
|
|
|
1027
1187
|
...props,
|
|
1028
1188
|
children: [
|
|
1029
1189
|
children,
|
|
1030
|
-
/* @__PURE__ */ (0,
|
|
1190
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_tooltip.Tooltip.Arrow, { className: "z-50 size-2.5 rotate-45 rounded-[2px] bg-primary fill-primary data-[side=top]:-bottom-1 data-[side=bottom]:-top-1 data-[side=left]:-right-1 data-[side=right]:-left-1" })
|
|
1031
1191
|
]
|
|
1032
1192
|
}
|
|
1033
1193
|
)
|
|
@@ -1036,14 +1196,14 @@ function TooltipContent({
|
|
|
1036
1196
|
}
|
|
1037
1197
|
|
|
1038
1198
|
// src/components/components/Sidebar/rail-tooltip.tsx
|
|
1039
|
-
var
|
|
1199
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
1040
1200
|
function RailTooltip({
|
|
1041
1201
|
label,
|
|
1042
1202
|
children
|
|
1043
1203
|
}) {
|
|
1044
|
-
return /* @__PURE__ */ (0,
|
|
1045
|
-
/* @__PURE__ */ (0,
|
|
1046
|
-
/* @__PURE__ */ (0,
|
|
1204
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Tooltip, { children: [
|
|
1205
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TooltipTrigger, { render: children }),
|
|
1206
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TooltipContent, { side: "right", sideOffset: 8, children: label })
|
|
1047
1207
|
] });
|
|
1048
1208
|
}
|
|
1049
1209
|
|
|
@@ -1054,7 +1214,7 @@ var import_react4 = require("react");
|
|
|
1054
1214
|
// src/ui/sidebar.tsx
|
|
1055
1215
|
var React = __toESM(require("react"), 1);
|
|
1056
1216
|
var import_class_variance_authority2 = require("class-variance-authority");
|
|
1057
|
-
var
|
|
1217
|
+
var import_lucide_react5 = require("lucide-react");
|
|
1058
1218
|
|
|
1059
1219
|
// src/hooks/use-mobile.ts
|
|
1060
1220
|
var import_react3 = require("react");
|
|
@@ -1080,24 +1240,24 @@ function useIsMobile() {
|
|
|
1080
1240
|
|
|
1081
1241
|
// src/ui/sheet.tsx
|
|
1082
1242
|
var import_dialog = require("@base-ui/react/dialog");
|
|
1083
|
-
var
|
|
1243
|
+
var import_lucide_react4 = require("lucide-react");
|
|
1084
1244
|
var import_class_variance_authority = require("class-variance-authority");
|
|
1085
|
-
var
|
|
1245
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
1086
1246
|
function Sheet({
|
|
1087
1247
|
...props
|
|
1088
1248
|
}) {
|
|
1089
|
-
return /* @__PURE__ */ (0,
|
|
1249
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_dialog.Dialog.Root, { "data-slot": "sheet", ...props });
|
|
1090
1250
|
}
|
|
1091
1251
|
function SheetPortal({
|
|
1092
1252
|
...props
|
|
1093
1253
|
}) {
|
|
1094
|
-
return /* @__PURE__ */ (0,
|
|
1254
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_dialog.Dialog.Portal, { "data-slot": "sheet-portal", ...props });
|
|
1095
1255
|
}
|
|
1096
1256
|
function SheetOverlay({
|
|
1097
1257
|
className,
|
|
1098
1258
|
...props
|
|
1099
1259
|
}) {
|
|
1100
|
-
return /* @__PURE__ */ (0,
|
|
1260
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1101
1261
|
import_dialog.Dialog.Backdrop,
|
|
1102
1262
|
{
|
|
1103
1263
|
"data-slot": "sheet-overlay",
|
|
@@ -1131,9 +1291,9 @@ function SheetContent({
|
|
|
1131
1291
|
side = "right",
|
|
1132
1292
|
...props
|
|
1133
1293
|
}) {
|
|
1134
|
-
return /* @__PURE__ */ (0,
|
|
1135
|
-
/* @__PURE__ */ (0,
|
|
1136
|
-
/* @__PURE__ */ (0,
|
|
1294
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(SheetPortal, { "data-slot": "sheet-portal", children: [
|
|
1295
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SheetOverlay, {}),
|
|
1296
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
1137
1297
|
import_dialog.Dialog.Popup,
|
|
1138
1298
|
{
|
|
1139
1299
|
"data-slot": "sheet-content",
|
|
@@ -1141,11 +1301,11 @@ function SheetContent({
|
|
|
1141
1301
|
...props,
|
|
1142
1302
|
children: [
|
|
1143
1303
|
children,
|
|
1144
|
-
/* @__PURE__ */ (0,
|
|
1304
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
1145
1305
|
import_dialog.Dialog.Close,
|
|
1146
1306
|
{
|
|
1147
1307
|
"data-slot": "sheet-close",
|
|
1148
|
-
render: /* @__PURE__ */ (0,
|
|
1308
|
+
render: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1149
1309
|
"button",
|
|
1150
1310
|
{
|
|
1151
1311
|
type: "button",
|
|
@@ -1153,8 +1313,8 @@ function SheetContent({
|
|
|
1153
1313
|
}
|
|
1154
1314
|
),
|
|
1155
1315
|
children: [
|
|
1156
|
-
/* @__PURE__ */ (0,
|
|
1157
|
-
/* @__PURE__ */ (0,
|
|
1316
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react4.XIcon, {}),
|
|
1317
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "sr-only", children: "Close" })
|
|
1158
1318
|
]
|
|
1159
1319
|
}
|
|
1160
1320
|
)
|
|
@@ -1164,7 +1324,7 @@ function SheetContent({
|
|
|
1164
1324
|
] });
|
|
1165
1325
|
}
|
|
1166
1326
|
function SheetHeader({ className, ...props }) {
|
|
1167
|
-
return /* @__PURE__ */ (0,
|
|
1327
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1168
1328
|
"div",
|
|
1169
1329
|
{
|
|
1170
1330
|
"data-slot": "sheet-header",
|
|
@@ -1177,7 +1337,7 @@ function SheetTitle({
|
|
|
1177
1337
|
className,
|
|
1178
1338
|
...props
|
|
1179
1339
|
}) {
|
|
1180
|
-
return /* @__PURE__ */ (0,
|
|
1340
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1181
1341
|
import_dialog.Dialog.Title,
|
|
1182
1342
|
{
|
|
1183
1343
|
"data-slot": "sheet-title",
|
|
@@ -1190,7 +1350,7 @@ function SheetDescription({
|
|
|
1190
1350
|
className,
|
|
1191
1351
|
...props
|
|
1192
1352
|
}) {
|
|
1193
|
-
return /* @__PURE__ */ (0,
|
|
1353
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1194
1354
|
import_dialog.Dialog.Description,
|
|
1195
1355
|
{
|
|
1196
1356
|
"data-slot": "sheet-description",
|
|
@@ -1201,7 +1361,7 @@ function SheetDescription({
|
|
|
1201
1361
|
}
|
|
1202
1362
|
|
|
1203
1363
|
// src/ui/sidebar.tsx
|
|
1204
|
-
var
|
|
1364
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1205
1365
|
var SIDEBAR_COOKIE_NAME = "sidebar_state";
|
|
1206
1366
|
var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
|
|
1207
1367
|
var SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
@@ -1265,7 +1425,7 @@ function SidebarProvider({
|
|
|
1265
1425
|
}),
|
|
1266
1426
|
[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
|
|
1267
1427
|
);
|
|
1268
|
-
return /* @__PURE__ */ (0,
|
|
1428
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipProvider, { delay: 0, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1269
1429
|
"div",
|
|
1270
1430
|
{
|
|
1271
1431
|
"data-slot": "sidebar-wrapper",
|
|
@@ -1289,7 +1449,7 @@ function SidebarRoot({
|
|
|
1289
1449
|
}) {
|
|
1290
1450
|
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
1291
1451
|
if (collapsible === "none") {
|
|
1292
|
-
return /* @__PURE__ */ (0,
|
|
1452
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1293
1453
|
"div",
|
|
1294
1454
|
{
|
|
1295
1455
|
"data-slot": "sidebar",
|
|
@@ -1303,7 +1463,7 @@ function SidebarRoot({
|
|
|
1303
1463
|
);
|
|
1304
1464
|
}
|
|
1305
1465
|
if (isMobile) {
|
|
1306
|
-
return /* @__PURE__ */ (0,
|
|
1466
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1307
1467
|
SheetContent,
|
|
1308
1468
|
{
|
|
1309
1469
|
"data-sidebar": "sidebar",
|
|
@@ -1315,16 +1475,16 @@ function SidebarRoot({
|
|
|
1315
1475
|
},
|
|
1316
1476
|
side,
|
|
1317
1477
|
children: [
|
|
1318
|
-
/* @__PURE__ */ (0,
|
|
1319
|
-
/* @__PURE__ */ (0,
|
|
1320
|
-
/* @__PURE__ */ (0,
|
|
1478
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(SheetHeader, { className: "sr-only", children: [
|
|
1479
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SheetTitle, { children: "Sidebar" }),
|
|
1480
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(SheetDescription, { children: "Displays the mobile sidebar." })
|
|
1321
1481
|
] }),
|
|
1322
|
-
/* @__PURE__ */ (0,
|
|
1482
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex h-full w-full flex-col", children })
|
|
1323
1483
|
]
|
|
1324
1484
|
}
|
|
1325
1485
|
) });
|
|
1326
1486
|
}
|
|
1327
|
-
return /* @__PURE__ */ (0,
|
|
1487
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1328
1488
|
"div",
|
|
1329
1489
|
{
|
|
1330
1490
|
className: "group peer hidden text-sidebar-foreground md:block",
|
|
@@ -1334,7 +1494,7 @@ function SidebarRoot({
|
|
|
1334
1494
|
"data-side": side,
|
|
1335
1495
|
"data-slot": "sidebar",
|
|
1336
1496
|
children: [
|
|
1337
|
-
/* @__PURE__ */ (0,
|
|
1497
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1338
1498
|
"div",
|
|
1339
1499
|
{
|
|
1340
1500
|
"data-slot": "sidebar-gap",
|
|
@@ -1346,7 +1506,7 @@ function SidebarRoot({
|
|
|
1346
1506
|
)
|
|
1347
1507
|
}
|
|
1348
1508
|
),
|
|
1349
|
-
/* @__PURE__ */ (0,
|
|
1509
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1350
1510
|
"div",
|
|
1351
1511
|
{
|
|
1352
1512
|
"data-slot": "sidebar-container",
|
|
@@ -1362,7 +1522,7 @@ function SidebarRoot({
|
|
|
1362
1522
|
className
|
|
1363
1523
|
),
|
|
1364
1524
|
...props,
|
|
1365
|
-
children: /* @__PURE__ */ (0,
|
|
1525
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1366
1526
|
"div",
|
|
1367
1527
|
{
|
|
1368
1528
|
"data-sidebar": "sidebar",
|
|
@@ -1378,7 +1538,7 @@ function SidebarRoot({
|
|
|
1378
1538
|
);
|
|
1379
1539
|
}
|
|
1380
1540
|
function SidebarInset({ className, ...props }) {
|
|
1381
|
-
return /* @__PURE__ */ (0,
|
|
1541
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1382
1542
|
"main",
|
|
1383
1543
|
{
|
|
1384
1544
|
"data-slot": "sidebar-inset",
|
|
@@ -1394,7 +1554,7 @@ function SidebarInset({ className, ...props }) {
|
|
|
1394
1554
|
);
|
|
1395
1555
|
}
|
|
1396
1556
|
function SidebarHeader({ className, ...props }) {
|
|
1397
|
-
return /* @__PURE__ */ (0,
|
|
1557
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1398
1558
|
"div",
|
|
1399
1559
|
{
|
|
1400
1560
|
"data-slot": "sidebar-header",
|
|
@@ -1405,7 +1565,7 @@ function SidebarHeader({ className, ...props }) {
|
|
|
1405
1565
|
);
|
|
1406
1566
|
}
|
|
1407
1567
|
function SidebarFooter({ className, ...props }) {
|
|
1408
|
-
return /* @__PURE__ */ (0,
|
|
1568
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1409
1569
|
"div",
|
|
1410
1570
|
{
|
|
1411
1571
|
"data-slot": "sidebar-footer",
|
|
@@ -1416,7 +1576,7 @@ function SidebarFooter({ className, ...props }) {
|
|
|
1416
1576
|
);
|
|
1417
1577
|
}
|
|
1418
1578
|
function SidebarContent({ className, ...props }) {
|
|
1419
|
-
return /* @__PURE__ */ (0,
|
|
1579
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1420
1580
|
"div",
|
|
1421
1581
|
{
|
|
1422
1582
|
"data-slot": "sidebar-content",
|
|
@@ -1443,7 +1603,7 @@ function renderAsChild(children, dataSlot, className, rest) {
|
|
|
1443
1603
|
});
|
|
1444
1604
|
}
|
|
1445
1605
|
function SidebarMenu({ className, ...props }) {
|
|
1446
|
-
return /* @__PURE__ */ (0,
|
|
1606
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1447
1607
|
"ul",
|
|
1448
1608
|
{
|
|
1449
1609
|
"data-slot": "sidebar-menu",
|
|
@@ -1454,7 +1614,7 @@ function SidebarMenu({ className, ...props }) {
|
|
|
1454
1614
|
);
|
|
1455
1615
|
}
|
|
1456
1616
|
function SidebarMenuItem({ className, ...props }) {
|
|
1457
|
-
return /* @__PURE__ */ (0,
|
|
1617
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1458
1618
|
"li",
|
|
1459
1619
|
{
|
|
1460
1620
|
"data-slot": "sidebar-menu-item",
|
|
@@ -1501,7 +1661,7 @@ function SidebarMenuButton({
|
|
|
1501
1661
|
"data-size": size,
|
|
1502
1662
|
"data-active": isActive,
|
|
1503
1663
|
...props
|
|
1504
|
-
}) : /* @__PURE__ */ (0,
|
|
1664
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1505
1665
|
"button",
|
|
1506
1666
|
{
|
|
1507
1667
|
"data-slot": "sidebar-menu-button",
|
|
@@ -1521,9 +1681,9 @@ function SidebarMenuButton({
|
|
|
1521
1681
|
children: tooltip
|
|
1522
1682
|
};
|
|
1523
1683
|
}
|
|
1524
|
-
return /* @__PURE__ */ (0,
|
|
1525
|
-
/* @__PURE__ */ (0,
|
|
1526
|
-
/* @__PURE__ */ (0,
|
|
1684
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Tooltip, { children: [
|
|
1685
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipTrigger, { render: button }),
|
|
1686
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1527
1687
|
TooltipContent,
|
|
1528
1688
|
{
|
|
1529
1689
|
side: "right",
|
|
@@ -1536,7 +1696,7 @@ function SidebarMenuButton({
|
|
|
1536
1696
|
}
|
|
1537
1697
|
|
|
1538
1698
|
// src/components/components/Sidebar/index.tsx
|
|
1539
|
-
var
|
|
1699
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1540
1700
|
function useSidebarDrawer() {
|
|
1541
1701
|
try {
|
|
1542
1702
|
const ctx = useSidebar();
|
|
@@ -1558,9 +1718,9 @@ function useOptionalRenderer() {
|
|
|
1558
1718
|
function SidebarContentSlot({ content }) {
|
|
1559
1719
|
const renderer = useOptionalRenderer();
|
|
1560
1720
|
if (renderer !== null && typeof content === "object" && content !== null && !("$$typeof" in content) && "type" in content) {
|
|
1561
|
-
return /* @__PURE__ */ (0,
|
|
1721
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_jsx_runtime13.Fragment, { children: renderer.renderChildren([content]) });
|
|
1562
1722
|
}
|
|
1563
|
-
return /* @__PURE__ */ (0,
|
|
1723
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_jsx_runtime13.Fragment, { children: content });
|
|
1564
1724
|
}
|
|
1565
1725
|
function isBrandObject(brand) {
|
|
1566
1726
|
return typeof brand === "object" && brand !== null && !("$$typeof" in brand) && "title" in brand;
|
|
@@ -1570,8 +1730,8 @@ function BrandNode({ brand, collapsed }) {
|
|
|
1570
1730
|
return null;
|
|
1571
1731
|
}
|
|
1572
1732
|
if (isBrandObject(brand)) {
|
|
1573
|
-
return /* @__PURE__ */ (0,
|
|
1574
|
-
brand.logo ? /* @__PURE__ */ (0,
|
|
1733
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
|
|
1734
|
+
brand.logo ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1575
1735
|
"img",
|
|
1576
1736
|
{
|
|
1577
1737
|
"data-slot": "sidebar-brand-logo",
|
|
@@ -1580,27 +1740,27 @@ function BrandNode({ brand, collapsed }) {
|
|
|
1580
1740
|
className: "size-6 shrink-0"
|
|
1581
1741
|
}
|
|
1582
1742
|
) : null,
|
|
1583
|
-
collapsed ? null : /* @__PURE__ */ (0,
|
|
1743
|
+
collapsed ? null : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "truncate text-sm font-semibold", children: brand.title })
|
|
1584
1744
|
] });
|
|
1585
1745
|
}
|
|
1586
|
-
return /* @__PURE__ */ (0,
|
|
1746
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_jsx_runtime13.Fragment, { children: brand });
|
|
1587
1747
|
}
|
|
1588
1748
|
function SidebarNavItems({ items }) {
|
|
1589
|
-
return /* @__PURE__ */ (0,
|
|
1749
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SidebarMenu, { children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SidebarNavEntry, { item, depth: 0 }, item.href ?? item.label ?? index)) });
|
|
1590
1750
|
}
|
|
1591
1751
|
function SidebarNavEntry({ item, depth }) {
|
|
1592
|
-
const iconNode = item.icon ? /* @__PURE__ */ (0,
|
|
1752
|
+
const iconNode = item.icon ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { name: item.icon, size: "sm" }) : null;
|
|
1593
1753
|
const labelNode = item.label;
|
|
1594
|
-
const button = item.href ? /* @__PURE__ */ (0,
|
|
1754
|
+
const button = item.href ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SidebarMenuButton, { asChild: true, tooltip: item.label, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("a", { href: item.href, children: [
|
|
1595
1755
|
iconNode,
|
|
1596
|
-
/* @__PURE__ */ (0,
|
|
1597
|
-
] }) }) : /* @__PURE__ */ (0,
|
|
1756
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: labelNode })
|
|
1757
|
+
] }) }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SidebarMenuButton, { tooltip: item.label, children: [
|
|
1598
1758
|
iconNode,
|
|
1599
|
-
/* @__PURE__ */ (0,
|
|
1759
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: labelNode })
|
|
1600
1760
|
] });
|
|
1601
|
-
return /* @__PURE__ */ (0,
|
|
1761
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SidebarMenuItem, { children: [
|
|
1602
1762
|
button,
|
|
1603
|
-
item.children && item.children.length > 0 && /* @__PURE__ */ (0,
|
|
1763
|
+
item.children && item.children.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: cn("ml-4"), children: item.children.map((child, index) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1604
1764
|
SidebarNavEntry,
|
|
1605
1765
|
{
|
|
1606
1766
|
item: child,
|
|
@@ -1624,13 +1784,13 @@ function Sidebar({
|
|
|
1624
1784
|
style,
|
|
1625
1785
|
children
|
|
1626
1786
|
}) {
|
|
1627
|
-
return /* @__PURE__ */ (0,
|
|
1787
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1628
1788
|
SidebarProvider,
|
|
1629
1789
|
{
|
|
1630
1790
|
defaultOpen: !defaultCollapsed,
|
|
1631
1791
|
className,
|
|
1632
1792
|
style,
|
|
1633
|
-
children: /* @__PURE__ */ (0,
|
|
1793
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1634
1794
|
SidebarInner,
|
|
1635
1795
|
{
|
|
1636
1796
|
brand,
|
|
@@ -1675,20 +1835,20 @@ function SidebarInner({
|
|
|
1675
1835
|
}
|
|
1676
1836
|
}, [locationKey, setOpenMobile]);
|
|
1677
1837
|
const collapsedEffective = collapsible === true && collapsed && !isMobile;
|
|
1678
|
-
const brandNode = /* @__PURE__ */ (0,
|
|
1838
|
+
const brandNode = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(BrandNode, { brand, collapsed: collapsedEffective });
|
|
1679
1839
|
const collapsedBrandLogo = collapsedEffective && isBrandObject(brand) && brand.logo ? brand.logo : null;
|
|
1680
|
-
const sidebarContent = content !== void 0 && content !== null ? /* @__PURE__ */ (0,
|
|
1681
|
-
return /* @__PURE__ */ (0,
|
|
1682
|
-
/* @__PURE__ */ (0,
|
|
1840
|
+
const sidebarContent = content !== void 0 && content !== null ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SidebarContentSlot, { content }) : items.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SidebarNavItems, { items }) : null;
|
|
1841
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
|
|
1842
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
1683
1843
|
SidebarRoot,
|
|
1684
1844
|
{
|
|
1685
1845
|
collapsible: collapsible ? "icon" : "offcanvas",
|
|
1686
1846
|
children: [
|
|
1687
|
-
(brand !== void 0 || collapsible) && /* @__PURE__ */ (0,
|
|
1847
|
+
(brand !== void 0 || collapsible) && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1688
1848
|
SidebarHeader,
|
|
1689
1849
|
{
|
|
1690
1850
|
className: brand === void 0 ? "h-9" : void 0,
|
|
1691
|
-
children: /* @__PURE__ */ (0,
|
|
1851
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
1692
1852
|
"div",
|
|
1693
1853
|
{
|
|
1694
1854
|
"data-slot": "sidebar-brand",
|
|
@@ -1699,7 +1859,7 @@ function SidebarInner({
|
|
|
1699
1859
|
collapsedBrandLogo && "h-auto flex-col gap-1 py-1.5"
|
|
1700
1860
|
),
|
|
1701
1861
|
children: [
|
|
1702
|
-
collapsedEffective ? collapsedBrandLogo && isBrandObject(brand) ? /* @__PURE__ */ (0,
|
|
1862
|
+
collapsedEffective ? collapsedBrandLogo && isBrandObject(brand) ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1703
1863
|
"img",
|
|
1704
1864
|
{
|
|
1705
1865
|
"data-slot": "sidebar-brand-logo",
|
|
@@ -1707,8 +1867,8 @@ function SidebarInner({
|
|
|
1707
1867
|
alt: brand.title,
|
|
1708
1868
|
className: "size-6 shrink-0"
|
|
1709
1869
|
}
|
|
1710
|
-
) : null : /* @__PURE__ */ (0,
|
|
1711
|
-
collapsible && !isMobile && /* @__PURE__ */ (0,
|
|
1870
|
+
) : null : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: brandNode }),
|
|
1871
|
+
collapsible && !isMobile && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1712
1872
|
"button",
|
|
1713
1873
|
{
|
|
1714
1874
|
type: "button",
|
|
@@ -1717,7 +1877,7 @@ function SidebarInner({
|
|
|
1717
1877
|
"aria-expanded": !collapsedEffective,
|
|
1718
1878
|
className: "flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-md text-sidebar-foreground/60 transition-colors hover:bg-sidebar-accent hover:text-sidebar-foreground",
|
|
1719
1879
|
onClick: toggleSidebar,
|
|
1720
|
-
children: /* @__PURE__ */ (0,
|
|
1880
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { name: collapsedEffective ? "chevron-right" : "chevron-left", size: 16 })
|
|
1721
1881
|
}
|
|
1722
1882
|
)
|
|
1723
1883
|
]
|
|
@@ -1725,27 +1885,27 @@ function SidebarInner({
|
|
|
1725
1885
|
)
|
|
1726
1886
|
}
|
|
1727
1887
|
),
|
|
1728
|
-
/* @__PURE__ */ (0,
|
|
1729
|
-
sidebarFooter !== void 0 && sidebarFooter !== null && /* @__PURE__ */ (0,
|
|
1888
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SidebarContent, { children: sidebarContent }),
|
|
1889
|
+
sidebarFooter !== void 0 && sidebarFooter !== null && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1730
1890
|
SidebarFooter,
|
|
1731
1891
|
{
|
|
1732
1892
|
className: cn(
|
|
1733
1893
|
collapsedEffective && "items-center px-0 [&_[data-slot=flex]]:justify-center [&_[data-slot=icon]]:hidden [&_[data-slot=text]]:hidden"
|
|
1734
1894
|
),
|
|
1735
|
-
children: /* @__PURE__ */ (0,
|
|
1895
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SidebarContentSlot, { content: sidebarFooter })
|
|
1736
1896
|
}
|
|
1737
1897
|
)
|
|
1738
1898
|
]
|
|
1739
1899
|
}
|
|
1740
1900
|
),
|
|
1741
|
-
/* @__PURE__ */ (0,
|
|
1742
|
-
drawer && /* @__PURE__ */ (0,
|
|
1901
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SidebarInset, { children: [
|
|
1902
|
+
drawer && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
1743
1903
|
"div",
|
|
1744
1904
|
{
|
|
1745
1905
|
"data-slot": "sidebar-topbar",
|
|
1746
1906
|
className: "flex h-14 items-center gap-2 border-b border-sidebar-border bg-sidebar px-3 md:hidden",
|
|
1747
1907
|
children: [
|
|
1748
|
-
/* @__PURE__ */ (0,
|
|
1908
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1749
1909
|
"button",
|
|
1750
1910
|
{
|
|
1751
1911
|
type: "button",
|
|
@@ -1753,7 +1913,7 @@ function SidebarInner({
|
|
|
1753
1913
|
"aria-label": t("pactor.layout.openNavigation"),
|
|
1754
1914
|
className: "flex size-8 items-center justify-center rounded-md text-sidebar-foreground/60 transition-colors hover:bg-sidebar-accent hover:text-sidebar-foreground",
|
|
1755
1915
|
onClick: toggleSidebar,
|
|
1756
|
-
children: /* @__PURE__ */ (0,
|
|
1916
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { name: "menu", size: 18 })
|
|
1757
1917
|
}
|
|
1758
1918
|
),
|
|
1759
1919
|
brandNode
|
|
@@ -1765,8 +1925,17 @@ function SidebarInner({
|
|
|
1765
1925
|
] });
|
|
1766
1926
|
}
|
|
1767
1927
|
|
|
1928
|
+
// src/components/components/Tooltip/index.tsx
|
|
1929
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1930
|
+
function Tooltip2({ content, side, children, className, style }) {
|
|
1931
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Tooltip, { children: [
|
|
1932
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TooltipTrigger, { render: triggerWrapper("tooltip-trigger-wrap"), children }),
|
|
1933
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TooltipContent, { side, className, style, children: content })
|
|
1934
|
+
] });
|
|
1935
|
+
}
|
|
1936
|
+
|
|
1768
1937
|
// src/components/components/Menu/index.tsx
|
|
1769
|
-
var
|
|
1938
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
1770
1939
|
function collectAncestors(items, target, into, trail = []) {
|
|
1771
1940
|
for (const item of items) {
|
|
1772
1941
|
if (item.key === target) {
|
|
@@ -1786,22 +1955,32 @@ function Menu2({
|
|
|
1786
1955
|
collapsible = false,
|
|
1787
1956
|
collapsed: collapsedProp,
|
|
1788
1957
|
defaultExpandedKeys,
|
|
1958
|
+
defaultExpandAll = false,
|
|
1959
|
+
chevronPlacement = "right",
|
|
1789
1960
|
onSelect,
|
|
1961
|
+
onItemAction,
|
|
1790
1962
|
className,
|
|
1791
1963
|
style
|
|
1792
1964
|
}) {
|
|
1793
1965
|
const drawer = useSidebarDrawer();
|
|
1794
1966
|
const collapsed = collapsedProp ?? (mode === "inline" && drawer?.collapsed === true);
|
|
1795
1967
|
const collapsibleOn = collapsible && mode === "inline" && !collapsed;
|
|
1796
|
-
const [
|
|
1968
|
+
const [baseExpandedKeys] = (0, import_react5.useState)(() => {
|
|
1797
1969
|
const initial = new Set(defaultExpandedKeys ?? []);
|
|
1798
1970
|
if (selectedKey !== void 0) {
|
|
1799
1971
|
collectAncestors(items, selectedKey, initial);
|
|
1800
1972
|
}
|
|
1801
1973
|
return initial;
|
|
1802
1974
|
});
|
|
1975
|
+
const [toggledKeys, setToggledKeys] = (0, import_react5.useState)(
|
|
1976
|
+
() => /* @__PURE__ */ new Set()
|
|
1977
|
+
);
|
|
1978
|
+
const isExpanded = (key) => {
|
|
1979
|
+
const base = defaultExpandAll || baseExpandedKeys.has(key);
|
|
1980
|
+
return toggledKeys.has(key) ? !base : base;
|
|
1981
|
+
};
|
|
1803
1982
|
const toggleExpanded = (key) => {
|
|
1804
|
-
|
|
1983
|
+
setToggledKeys((prev) => {
|
|
1805
1984
|
const next = new Set(prev);
|
|
1806
1985
|
if (next.has(key)) {
|
|
1807
1986
|
next.delete(key);
|
|
@@ -1812,7 +1991,7 @@ function Menu2({
|
|
|
1812
1991
|
});
|
|
1813
1992
|
};
|
|
1814
1993
|
let previousGroup;
|
|
1815
|
-
return /* @__PURE__ */ (0,
|
|
1994
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1816
1995
|
"nav",
|
|
1817
1996
|
{
|
|
1818
1997
|
"data-slot": "menu",
|
|
@@ -1829,8 +2008,8 @@ function Menu2({
|
|
|
1829
2008
|
groupLabel = item.group;
|
|
1830
2009
|
}
|
|
1831
2010
|
previousGroup = item.group;
|
|
1832
|
-
return /* @__PURE__ */ (0,
|
|
1833
|
-
groupLabel !== void 0 && /* @__PURE__ */ (0,
|
|
2011
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { "data-slot": "menu-group-entry", children: [
|
|
2012
|
+
groupLabel !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1834
2013
|
"div",
|
|
1835
2014
|
{
|
|
1836
2015
|
"data-slot": "menu-group",
|
|
@@ -1838,7 +2017,7 @@ function Menu2({
|
|
|
1838
2017
|
children: groupLabel
|
|
1839
2018
|
}
|
|
1840
2019
|
),
|
|
1841
|
-
/* @__PURE__ */ (0,
|
|
2020
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1842
2021
|
MenuEntry,
|
|
1843
2022
|
{
|
|
1844
2023
|
item,
|
|
@@ -1846,9 +2025,11 @@ function Menu2({
|
|
|
1846
2025
|
depth: 0,
|
|
1847
2026
|
selectedKey,
|
|
1848
2027
|
onSelect,
|
|
2028
|
+
onItemAction,
|
|
1849
2029
|
collapsed,
|
|
1850
2030
|
collapsible: collapsibleOn,
|
|
1851
|
-
|
|
2031
|
+
chevronPlacement,
|
|
2032
|
+
isExpanded,
|
|
1852
2033
|
onToggle: toggleExpanded
|
|
1853
2034
|
}
|
|
1854
2035
|
)
|
|
@@ -1863,16 +2044,20 @@ function MenuEntry({
|
|
|
1863
2044
|
depth,
|
|
1864
2045
|
selectedKey,
|
|
1865
2046
|
onSelect,
|
|
2047
|
+
onItemAction,
|
|
1866
2048
|
collapsed = false,
|
|
1867
2049
|
collapsible = false,
|
|
1868
|
-
|
|
2050
|
+
chevronPlacement = "right",
|
|
2051
|
+
isExpanded,
|
|
1869
2052
|
onToggle
|
|
1870
2053
|
}) {
|
|
1871
|
-
const selected = item.key === selectedKey;
|
|
1872
2054
|
const hasChildren = (item.children?.length ?? 0) > 0;
|
|
1873
|
-
const isDirectory =
|
|
1874
|
-
const
|
|
2055
|
+
const isDirectory = item.children !== void 0 && mode === "inline" && !collapsed;
|
|
2056
|
+
const canToggle = collapsible && isDirectory && hasChildren;
|
|
2057
|
+
const expanded = canToggle && isExpanded?.(item.key) === true;
|
|
2058
|
+
const selected = !isDirectory && item.key === selectedKey;
|
|
1875
2059
|
const railDirectory = collapsed && hasChildren;
|
|
2060
|
+
const hasRowExtras = !collapsed && (item.trailing !== void 0 || (item.actions?.length ?? 0) > 0);
|
|
1876
2061
|
const [flyoutOpen, setFlyoutOpen] = (0, import_react5.useState)(false);
|
|
1877
2062
|
const flyoutTimer = (0, import_react5.useRef)(void 0);
|
|
1878
2063
|
const flyoutOpenNow = () => {
|
|
@@ -1884,20 +2069,37 @@ function MenuEntry({
|
|
|
1884
2069
|
flyoutTimer.current = window.setTimeout(() => setFlyoutOpen(false), 200);
|
|
1885
2070
|
};
|
|
1886
2071
|
(0, import_react5.useEffect)(() => () => window.clearTimeout(flyoutTimer.current), []);
|
|
1887
|
-
const
|
|
2072
|
+
const chevron = canToggle ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
2073
|
+
"span",
|
|
2074
|
+
{
|
|
2075
|
+
"data-slot": "menu-item-chevron",
|
|
2076
|
+
className: cn(
|
|
2077
|
+
"shrink-0 transition-transform",
|
|
2078
|
+
expanded && "rotate-180"
|
|
2079
|
+
),
|
|
2080
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Icon, { name: "chevron-down", size: "sm" })
|
|
2081
|
+
}
|
|
2082
|
+
) : null;
|
|
2083
|
+
const button = /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
1888
2084
|
"button",
|
|
1889
2085
|
{
|
|
1890
2086
|
type: "button",
|
|
1891
2087
|
"data-slot": "menu-item",
|
|
1892
2088
|
"aria-current": selected ? "page" : void 0,
|
|
1893
|
-
"aria-expanded":
|
|
2089
|
+
"aria-expanded": canToggle ? expanded : railDirectory ? flyoutOpen : void 0,
|
|
1894
2090
|
disabled: item.disabled,
|
|
1895
2091
|
className: cn(
|
|
1896
|
-
|
|
2092
|
+
// w-full 兜底非 flex 父容器(rail / flyout);flex-1 min-w-0 供
|
|
2093
|
+
// 行容器(trailing / actions 与按钮同级)内收缩
|
|
2094
|
+
"flex w-full min-w-0 flex-1 items-center gap-2 text-sm transition-colors",
|
|
1897
2095
|
mode === "horizontal" ? "px-3 py-2" : "px-3 py-2 text-left",
|
|
1898
2096
|
collapsed && "justify-center px-0",
|
|
1899
|
-
|
|
1900
|
-
item.disabled
|
|
2097
|
+
// 行容器形态下圆角与悬浮/选中底色由 menu-item-row 承担,按钮本体透明
|
|
2098
|
+
hasRowExtras ? item.disabled ? "cursor-not-allowed" : "cursor-pointer" : cn(
|
|
2099
|
+
"rounded-md",
|
|
2100
|
+
selected ? "bg-(--menu-active-background) font-medium text-(--menu-active-foreground)" : "cursor-pointer text-foreground hover:bg-(--menu-hover-background)/50",
|
|
2101
|
+
item.disabled && "cursor-not-allowed opacity-50 hover:bg-transparent hover:text-muted-foreground"
|
|
2102
|
+
)
|
|
1901
2103
|
),
|
|
1902
2104
|
style: mode === "inline" && depth > 0 && !collapsed ? { paddingLeft: 12 + depth * 16 } : void 0,
|
|
1903
2105
|
onMouseEnter: railDirectory ? flyoutOpenNow : void 0,
|
|
@@ -1906,16 +2108,17 @@ function MenuEntry({
|
|
|
1906
2108
|
if (item.disabled) return;
|
|
1907
2109
|
if (railDirectory) return;
|
|
1908
2110
|
if (isDirectory) {
|
|
1909
|
-
onToggle?.(item.key);
|
|
1910
|
-
|
|
1911
|
-
onSelect?.(item.key);
|
|
2111
|
+
if (canToggle) onToggle?.(item.key);
|
|
2112
|
+
return;
|
|
1912
2113
|
}
|
|
2114
|
+
onSelect?.(item.key);
|
|
1913
2115
|
},
|
|
1914
2116
|
children: [
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
item.
|
|
2117
|
+
chevronPlacement === "left" ? chevron : null,
|
|
2118
|
+
item.icon ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Icon, { name: item.icon, size: "sm" }) : null,
|
|
2119
|
+
collapsed ? null : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "min-w-0 flex-1 truncate text-left", children: item.label }),
|
|
2120
|
+
item.dot && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { "data-slot": "menu-item-dot", className: "size-1.5 shrink-0 rounded-full bg-destructive" }) : null,
|
|
2121
|
+
item.badge !== void 0 && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1919
2122
|
"span",
|
|
1920
2123
|
{
|
|
1921
2124
|
"data-slot": "menu-item-badge",
|
|
@@ -1923,24 +2126,14 @@ function MenuEntry({
|
|
|
1923
2126
|
children: item.badge
|
|
1924
2127
|
}
|
|
1925
2128
|
) : null,
|
|
1926
|
-
|
|
1927
|
-
"span",
|
|
1928
|
-
{
|
|
1929
|
-
"data-slot": "menu-item-chevron",
|
|
1930
|
-
className: cn(
|
|
1931
|
-
"shrink-0 transition-transform",
|
|
1932
|
-
expanded && "rotate-180"
|
|
1933
|
-
),
|
|
1934
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Icon, { name: "chevron-down", size: "sm" })
|
|
1935
|
-
}
|
|
1936
|
-
) : null
|
|
2129
|
+
chevronPlacement === "left" ? null : chevron
|
|
1937
2130
|
]
|
|
1938
2131
|
}
|
|
1939
2132
|
);
|
|
1940
|
-
return /* @__PURE__ */ (0,
|
|
1941
|
-
railDirectory ? /* @__PURE__ */ (0,
|
|
1942
|
-
/* @__PURE__ */ (0,
|
|
1943
|
-
/* @__PURE__ */ (0,
|
|
2133
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { "data-slot": "menu-entry", "data-key": item.key, children: [
|
|
2134
|
+
railDirectory ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Popover, { open: flyoutOpen, onOpenChange: setFlyoutOpen, children: [
|
|
2135
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(PopoverTrigger, { render: button }),
|
|
2136
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
1944
2137
|
PopoverContent,
|
|
1945
2138
|
{
|
|
1946
2139
|
"data-slot": "menu-flyout",
|
|
@@ -1957,23 +2150,67 @@ function MenuEntry({
|
|
|
1957
2150
|
}
|
|
1958
2151
|
},
|
|
1959
2152
|
children: [
|
|
1960
|
-
/* @__PURE__ */ (0,
|
|
1961
|
-
item.children?.map((child) => /* @__PURE__ */ (0,
|
|
2153
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "px-3 pt-2 pb-1 text-xs font-semibold text-muted-foreground", children: item.label }),
|
|
2154
|
+
item.children?.map((child) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1962
2155
|
MenuEntry,
|
|
1963
2156
|
{
|
|
1964
2157
|
item: child,
|
|
1965
2158
|
mode: "inline",
|
|
1966
2159
|
depth: 0,
|
|
1967
2160
|
selectedKey,
|
|
1968
|
-
onSelect
|
|
2161
|
+
onSelect,
|
|
2162
|
+
onItemAction
|
|
1969
2163
|
},
|
|
1970
2164
|
child.key
|
|
1971
2165
|
))
|
|
1972
2166
|
]
|
|
1973
2167
|
}
|
|
1974
2168
|
)
|
|
1975
|
-
] }) : collapsed ? /* @__PURE__ */ (0,
|
|
1976
|
-
|
|
2169
|
+
] }) : collapsed ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(RailTooltip, { label: item.label, children: button }) : hasRowExtras ? (
|
|
2170
|
+
// 行容器:按钮主体 + 右端弱提示文本 / 操作按钮(同级节点,避免按钮
|
|
2171
|
+
// 嵌套按钮;操作点击不冒泡到 onSelect / 目录 toggle)。悬浮/选中
|
|
2172
|
+
// 底色覆盖整行,文字与右端操作不产生割裂感
|
|
2173
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
2174
|
+
"div",
|
|
2175
|
+
{
|
|
2176
|
+
"data-slot": "menu-item-row",
|
|
2177
|
+
className: cn(
|
|
2178
|
+
"flex w-full items-center gap-1 rounded-md pr-1.5 transition-colors",
|
|
2179
|
+
selected ? "bg-(--menu-active-background) font-medium text-(--menu-active-foreground)" : "text-foreground hover:bg-(--menu-hover-background)/50",
|
|
2180
|
+
item.disabled && "opacity-50"
|
|
2181
|
+
),
|
|
2182
|
+
children: [
|
|
2183
|
+
button,
|
|
2184
|
+
item.trailing !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
2185
|
+
"span",
|
|
2186
|
+
{
|
|
2187
|
+
"data-slot": "menu-item-trailing",
|
|
2188
|
+
className: "shrink-0 text-xs text-muted-foreground",
|
|
2189
|
+
children: item.trailing
|
|
2190
|
+
}
|
|
2191
|
+
) : null,
|
|
2192
|
+
(item.actions?.length ?? 0) > 0 ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
2193
|
+
"span",
|
|
2194
|
+
{
|
|
2195
|
+
"data-slot": "menu-item-actions",
|
|
2196
|
+
className: "flex shrink-0 items-center gap-0.5",
|
|
2197
|
+
children: item.actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
2198
|
+
MenuItemActionButton,
|
|
2199
|
+
{
|
|
2200
|
+
itemKey: item.key,
|
|
2201
|
+
action,
|
|
2202
|
+
disabled: item.disabled,
|
|
2203
|
+
onItemAction
|
|
2204
|
+
},
|
|
2205
|
+
action.key
|
|
2206
|
+
))
|
|
2207
|
+
}
|
|
2208
|
+
) : null
|
|
2209
|
+
]
|
|
2210
|
+
}
|
|
2211
|
+
)
|
|
2212
|
+
) : button,
|
|
2213
|
+
railDirectory || canToggle && !expanded ? null : item.children?.map((child) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1977
2214
|
MenuEntry,
|
|
1978
2215
|
{
|
|
1979
2216
|
item: child,
|
|
@@ -1981,18 +2218,62 @@ function MenuEntry({
|
|
|
1981
2218
|
depth: depth + 1,
|
|
1982
2219
|
selectedKey,
|
|
1983
2220
|
onSelect,
|
|
2221
|
+
onItemAction,
|
|
1984
2222
|
collapsed,
|
|
1985
2223
|
collapsible,
|
|
1986
|
-
|
|
2224
|
+
chevronPlacement,
|
|
2225
|
+
isExpanded,
|
|
1987
2226
|
onToggle
|
|
1988
2227
|
},
|
|
1989
2228
|
child.key
|
|
1990
2229
|
))
|
|
1991
2230
|
] });
|
|
1992
2231
|
}
|
|
2232
|
+
function MenuItemActionButton({
|
|
2233
|
+
itemKey,
|
|
2234
|
+
action,
|
|
2235
|
+
disabled,
|
|
2236
|
+
onItemAction
|
|
2237
|
+
}) {
|
|
2238
|
+
const button = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
2239
|
+
"button",
|
|
2240
|
+
{
|
|
2241
|
+
type: "button",
|
|
2242
|
+
"data-slot": "menu-item-action",
|
|
2243
|
+
"data-action": action.key,
|
|
2244
|
+
disabled,
|
|
2245
|
+
className: "shrink-0 cursor-pointer rounded p-0.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
2246
|
+
onClick: (event) => {
|
|
2247
|
+
if (action.menu) return;
|
|
2248
|
+
event.stopPropagation();
|
|
2249
|
+
if (disabled) return;
|
|
2250
|
+
onItemAction?.({ key: itemKey, action: action.key });
|
|
2251
|
+
},
|
|
2252
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Icon, { name: action.icon, size: "sm" })
|
|
2253
|
+
}
|
|
2254
|
+
);
|
|
2255
|
+
if (!action.menu) {
|
|
2256
|
+
return action.tooltip ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Tooltip2, { content: action.tooltip, children: button }) : button;
|
|
2257
|
+
}
|
|
2258
|
+
if (disabled) return button;
|
|
2259
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(DropdownMenu, { children: [
|
|
2260
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
2261
|
+
DropdownMenuTrigger,
|
|
2262
|
+
{
|
|
2263
|
+
nativeButton: false,
|
|
2264
|
+
render: triggerWrapper("menu-item-action-trigger"),
|
|
2265
|
+
children: button
|
|
2266
|
+
}
|
|
2267
|
+
),
|
|
2268
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(DropdownMenuContent, { side: "bottom", align: "end", className: "min-w-32", children: renderDropdownItems(
|
|
2269
|
+
action.menu,
|
|
2270
|
+
(value) => onItemAction?.({ key: itemKey, action: `${action.key}:${value}` })
|
|
2271
|
+
) })
|
|
2272
|
+
] });
|
|
2273
|
+
}
|
|
1993
2274
|
|
|
1994
2275
|
// src/layout/chat/ChatLayout.tsx
|
|
1995
|
-
var
|
|
2276
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1996
2277
|
function ChatLayout({
|
|
1997
2278
|
brand,
|
|
1998
2279
|
menu,
|
|
@@ -2047,7 +2328,7 @@ function ChatLayout({
|
|
|
2047
2328
|
bridge.push(item.path);
|
|
2048
2329
|
}
|
|
2049
2330
|
};
|
|
2050
|
-
const sidebarContent = sidebar !== void 0 && sidebar !== null ? sidebar : menuItems.length > 0 ? /* @__PURE__ */ (0,
|
|
2331
|
+
const sidebarContent = sidebar !== void 0 && sidebar !== null ? sidebar : menuItems.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2051
2332
|
Menu2,
|
|
2052
2333
|
{
|
|
2053
2334
|
items: menuItems.map((item) => chatMenuItemToUiMenuItem(item)),
|
|
@@ -2055,7 +2336,7 @@ function ChatLayout({
|
|
|
2055
2336
|
onSelect: handleSelect
|
|
2056
2337
|
}
|
|
2057
2338
|
) : void 0;
|
|
2058
|
-
return /* @__PURE__ */ (0,
|
|
2339
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2059
2340
|
Sidebar,
|
|
2060
2341
|
{
|
|
2061
2342
|
brand,
|
|
@@ -2063,7 +2344,7 @@ function ChatLayout({
|
|
|
2063
2344
|
sidebarFooter,
|
|
2064
2345
|
collapsible,
|
|
2065
2346
|
locationKey: routeProp?.path ?? bridgePath,
|
|
2066
|
-
children: /* @__PURE__ */ (0,
|
|
2347
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
2067
2348
|
"div",
|
|
2068
2349
|
{
|
|
2069
2350
|
"data-slot": "chat-layout-content",
|
|
@@ -2117,7 +2398,7 @@ function menuItemToMenuData(item) {
|
|
|
2117
2398
|
}
|
|
2118
2399
|
|
|
2119
2400
|
// src/ui/card.tsx
|
|
2120
|
-
var
|
|
2401
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
2121
2402
|
var cardRoundedClasses = {
|
|
2122
2403
|
none: "rounded-none",
|
|
2123
2404
|
sm: "rounded-sm",
|
|
@@ -2132,7 +2413,7 @@ function Card({
|
|
|
2132
2413
|
rounded = "lg",
|
|
2133
2414
|
...props
|
|
2134
2415
|
}) {
|
|
2135
|
-
return /* @__PURE__ */ (0,
|
|
2416
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
2136
2417
|
"div",
|
|
2137
2418
|
{
|
|
2138
2419
|
"data-slot": "card",
|
|
@@ -2146,7 +2427,7 @@ function Card({
|
|
|
2146
2427
|
);
|
|
2147
2428
|
}
|
|
2148
2429
|
function CardHeader({ className, ...props }) {
|
|
2149
|
-
return /* @__PURE__ */ (0,
|
|
2430
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
2150
2431
|
"div",
|
|
2151
2432
|
{
|
|
2152
2433
|
"data-slot": "card-header",
|
|
@@ -2159,7 +2440,7 @@ function CardHeader({ className, ...props }) {
|
|
|
2159
2440
|
);
|
|
2160
2441
|
}
|
|
2161
2442
|
function CardTitle({ className, ...props }) {
|
|
2162
|
-
return /* @__PURE__ */ (0,
|
|
2443
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
2163
2444
|
"div",
|
|
2164
2445
|
{
|
|
2165
2446
|
"data-slot": "card-title",
|
|
@@ -2169,7 +2450,7 @@ function CardTitle({ className, ...props }) {
|
|
|
2169
2450
|
);
|
|
2170
2451
|
}
|
|
2171
2452
|
function CardContent({ className, ...props }) {
|
|
2172
|
-
return /* @__PURE__ */ (0,
|
|
2453
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
2173
2454
|
"div",
|
|
2174
2455
|
{
|
|
2175
2456
|
"data-slot": "card-content",
|
|
@@ -2180,26 +2461,26 @@ function CardContent({ className, ...props }) {
|
|
|
2180
2461
|
}
|
|
2181
2462
|
|
|
2182
2463
|
// src/layout/basic/LoginLayout.tsx
|
|
2183
|
-
var
|
|
2464
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
2184
2465
|
function LoginLayout({
|
|
2185
2466
|
variant = "center",
|
|
2186
2467
|
brand,
|
|
2187
2468
|
children
|
|
2188
2469
|
}) {
|
|
2189
|
-
const brandBlock = /* @__PURE__ */ (0,
|
|
2470
|
+
const brandBlock = /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { "data-slot": "login-brand", className: "flex flex-col items-center gap-2", children: [
|
|
2190
2471
|
brand.logo,
|
|
2191
|
-
/* @__PURE__ */ (0,
|
|
2192
|
-
brand.description !== void 0 && /* @__PURE__ */ (0,
|
|
2472
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("h1", { className: "text-xl font-semibold", children: brand.title }),
|
|
2473
|
+
brand.description !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "text-sm text-muted-foreground", children: brand.description })
|
|
2193
2474
|
] });
|
|
2194
2475
|
if (variant === "split") {
|
|
2195
|
-
return /* @__PURE__ */ (0,
|
|
2476
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
2196
2477
|
"div",
|
|
2197
2478
|
{
|
|
2198
2479
|
"data-slot": "login-layout",
|
|
2199
2480
|
"data-variant": "split",
|
|
2200
2481
|
className: "grid min-h-screen grid-cols-2 bg-background text-foreground",
|
|
2201
2482
|
children: [
|
|
2202
|
-
/* @__PURE__ */ (0,
|
|
2483
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
2203
2484
|
"div",
|
|
2204
2485
|
{
|
|
2205
2486
|
"data-slot": "login-brand-panel",
|
|
@@ -2207,7 +2488,7 @@ function LoginLayout({
|
|
|
2207
2488
|
children: brandBlock
|
|
2208
2489
|
}
|
|
2209
2490
|
),
|
|
2210
|
-
/* @__PURE__ */ (0,
|
|
2491
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
2211
2492
|
"div",
|
|
2212
2493
|
{
|
|
2213
2494
|
"data-slot": "login-form-panel",
|
|
@@ -2219,37 +2500,37 @@ function LoginLayout({
|
|
|
2219
2500
|
}
|
|
2220
2501
|
);
|
|
2221
2502
|
}
|
|
2222
|
-
return /* @__PURE__ */ (0,
|
|
2503
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
2223
2504
|
"div",
|
|
2224
2505
|
{
|
|
2225
2506
|
"data-slot": "login-layout",
|
|
2226
2507
|
"data-variant": "center",
|
|
2227
2508
|
className: "flex min-h-screen items-center justify-center bg-muted/40 text-foreground",
|
|
2228
|
-
children: /* @__PURE__ */ (0,
|
|
2229
|
-
/* @__PURE__ */ (0,
|
|
2230
|
-
/* @__PURE__ */ (0,
|
|
2509
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Card, { "data-slot": "login-card", className: "w-full max-w-sm gap-4 py-6", children: [
|
|
2510
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(CardHeader, { className: "px-6", children: [
|
|
2511
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CardTitle, { className: "sr-only", children: brand.title }),
|
|
2231
2512
|
brandBlock
|
|
2232
2513
|
] }),
|
|
2233
|
-
/* @__PURE__ */ (0,
|
|
2514
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CardContent, { className: "flex flex-col gap-4 px-6", children })
|
|
2234
2515
|
] })
|
|
2235
2516
|
}
|
|
2236
2517
|
);
|
|
2237
2518
|
}
|
|
2238
2519
|
|
|
2239
2520
|
// src/layout/basic/LandingLayout.tsx
|
|
2240
|
-
var
|
|
2521
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
2241
2522
|
function LandingLayout({
|
|
2242
2523
|
navbar,
|
|
2243
2524
|
footer,
|
|
2244
2525
|
children
|
|
2245
2526
|
}) {
|
|
2246
|
-
return /* @__PURE__ */ (0,
|
|
2527
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
2247
2528
|
"div",
|
|
2248
2529
|
{
|
|
2249
2530
|
"data-slot": "landing-layout",
|
|
2250
2531
|
className: "flex min-h-screen flex-col bg-background text-foreground",
|
|
2251
2532
|
children: [
|
|
2252
|
-
navbar !== void 0 && /* @__PURE__ */ (0,
|
|
2533
|
+
navbar !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2253
2534
|
"header",
|
|
2254
2535
|
{
|
|
2255
2536
|
"data-slot": "landing-navbar",
|
|
@@ -2257,8 +2538,8 @@ function LandingLayout({
|
|
|
2257
2538
|
children: navbar
|
|
2258
2539
|
}
|
|
2259
2540
|
),
|
|
2260
|
-
/* @__PURE__ */ (0,
|
|
2261
|
-
footer !== void 0 && /* @__PURE__ */ (0,
|
|
2541
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("main", { "data-slot": "landing-content", className: "flex-1", children }),
|
|
2542
|
+
footer !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2262
2543
|
"footer",
|
|
2263
2544
|
{
|
|
2264
2545
|
"data-slot": "landing-footer",
|