@farmzone/fz-react-ui 1.0.3 → 1.0.4
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/index.cjs +96 -45
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -2
- package/dist/index.d.ts +7 -2
- package/dist/index.js +96 -45
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tw.css +87 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -78,9 +78,10 @@ var buttonVariants = classVarianceAuthority.cva(
|
|
|
78
78
|
delete: "bg-white border border-sub-red text-main-red hover:bg-red-50 disabled:bg-light-gray disabled:border-sub-lightgray-2 disabled:text-sub-lightgray-2 font-bold min-w-22",
|
|
79
79
|
reset: "bg-white border border-sub-lightgray-2 text-sub-darkgray hover:bg-gray-100 hover:text-black",
|
|
80
80
|
search: "bg-main-blue border-none text-white hover:bg-main-blue/90",
|
|
81
|
-
file: "bg-
|
|
81
|
+
file: "bg-btn-file text-white hover:bg-btn-file/90",
|
|
82
82
|
carousel: "bg-white border border-gray-300 hover:bg-gray-100 hover:text-black rounded-full",
|
|
83
83
|
accent: "btn-grad text-white rounded-full",
|
|
84
|
+
metal: "btn-metal text-white min-w-22",
|
|
84
85
|
ghost: "p-1 h-auto rounded-sm bg-transparent hover:bg-sub-lightgray text-sub-darkgray hover:bg-inherit",
|
|
85
86
|
link: "bg-transparent border-none text-main-blue underline-offset-4 hover:underline h-auto p-0"
|
|
86
87
|
},
|
|
@@ -3396,8 +3397,7 @@ function ModalContent(props) {
|
|
|
3396
3397
|
{
|
|
3397
3398
|
ref,
|
|
3398
3399
|
className: cn(
|
|
3399
|
-
"fixed left-[50%] top-[50%] max-h-[85vh] z-55 flex flex-col w-full max-w-lg translate-x-[-50%] translate-y-[-50%] bg-white rounded-lg overflow-hidden shadow-xl
|
|
3400
|
-
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
|
|
3400
|
+
"fixed left-[50%] top-[50%] max-h-[85vh] z-55 flex flex-col w-full max-w-lg translate-x-[-50%] translate-y-[-50%] bg-white rounded-lg overflow-hidden shadow-xl",
|
|
3401
3401
|
className
|
|
3402
3402
|
),
|
|
3403
3403
|
style: zIndex !== void 0 ? { zIndex } : void 0,
|
|
@@ -3408,7 +3408,7 @@ function ModalContent(props) {
|
|
|
3408
3408
|
);
|
|
3409
3409
|
}
|
|
3410
3410
|
function ModalOverlay(props) {
|
|
3411
|
-
const { isOpen: isOpen2, onClose, className, closeOnOverlayClick = true, zIndex } = props;
|
|
3411
|
+
const { ref, isOpen: isOpen2, onClose, className, closeOnOverlayClick = true, zIndex } = props;
|
|
3412
3412
|
if (!isOpen2) return null;
|
|
3413
3413
|
const handleOverlayClick = (e) => {
|
|
3414
3414
|
if (closeOnOverlayClick && e.target === e.currentTarget) {
|
|
@@ -3418,9 +3418,10 @@ function ModalOverlay(props) {
|
|
|
3418
3418
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3419
3419
|
"div",
|
|
3420
3420
|
{
|
|
3421
|
+
ref,
|
|
3421
3422
|
className: cn(
|
|
3422
3423
|
"fixed inset-0 z-54 bg-black/50",
|
|
3423
|
-
"
|
|
3424
|
+
"animate-in fade-in-0 duration-150",
|
|
3424
3425
|
className
|
|
3425
3426
|
),
|
|
3426
3427
|
style: zIndex !== void 0 ? { zIndex } : void 0,
|
|
@@ -3522,7 +3523,7 @@ function Modal(props) {
|
|
|
3522
3523
|
} = props;
|
|
3523
3524
|
const idRef = React6.useRef(/* @__PURE__ */ Symbol("modal"));
|
|
3524
3525
|
const [depth, setDepth] = React6.useState(0);
|
|
3525
|
-
React6.
|
|
3526
|
+
React6.useLayoutEffect(() => {
|
|
3526
3527
|
if (!isOpen2) return;
|
|
3527
3528
|
const id = idRef.current;
|
|
3528
3529
|
const d = modalStack.push(id);
|
|
@@ -3559,12 +3560,22 @@ function Modal(props) {
|
|
|
3559
3560
|
{
|
|
3560
3561
|
isOpen: isOpen2,
|
|
3561
3562
|
onClose,
|
|
3562
|
-
className: overlayClassName,
|
|
3563
|
+
className: cn(overlayClassName, depth > 1 && "bg-black/20"),
|
|
3563
3564
|
closeOnOverlayClick,
|
|
3564
3565
|
zIndex: overlayZ
|
|
3565
3566
|
}
|
|
3566
3567
|
),
|
|
3567
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3568
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3569
|
+
ModalContent,
|
|
3570
|
+
{
|
|
3571
|
+
className: cn(
|
|
3572
|
+
contentClassName,
|
|
3573
|
+
depth > 1 && "shadow-[0_0_0_1px_rgba(255,255,255,0.12),0_20px_50px_-5px_rgba(0,0,0,0.4)]"
|
|
3574
|
+
),
|
|
3575
|
+
zIndex: contentZ,
|
|
3576
|
+
children
|
|
3577
|
+
}
|
|
3578
|
+
)
|
|
3568
3579
|
] });
|
|
3569
3580
|
}
|
|
3570
3581
|
function ConfirmModal(props) {
|
|
@@ -4065,7 +4076,7 @@ function TableHeader(props) {
|
|
|
4065
4076
|
const subTitleClasses = column.key === "subTitle" ? "inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-blue-100 text-blue-800" : "";
|
|
4066
4077
|
if (column.align === "left") {
|
|
4067
4078
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex item-center w-full", children: [
|
|
4068
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `pl-
|
|
4079
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `pl-3 truncate ${baseClasses} ${isClickableHead} ${subTitleClasses}`, children: column.title }) }),
|
|
4069
4080
|
column.sortable && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4070
4081
|
"div",
|
|
4071
4082
|
{
|
|
@@ -4096,7 +4107,7 @@ function TableHeader(props) {
|
|
|
4096
4107
|
children: renderSortIcon(column.key)
|
|
4097
4108
|
}
|
|
4098
4109
|
),
|
|
4099
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `pr-
|
|
4110
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `pr-3 truncate ${baseClasses} ${isClickableHead} ${subTitleClasses}`, children: column.title }) })
|
|
4100
4111
|
] });
|
|
4101
4112
|
}
|
|
4102
4113
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: `px-1.5 truncate ${baseClasses} ${isClickableHead} ${subTitleClasses}`, children: column.title });
|
|
@@ -4467,7 +4478,7 @@ function SkeletonTd(props) {
|
|
|
4467
4478
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4468
4479
|
"td",
|
|
4469
4480
|
{
|
|
4470
|
-
className: `${col.key === "__checkbox__" ? "p-0" : "px-2 py-
|
|
4481
|
+
className: `${col.key === "__checkbox__" ? "p-0" : "px-2 py-4"} whitespace-nowrap text-sm border-r border-b border-gray-200/70 last:border-r-0`,
|
|
4471
4482
|
style: {
|
|
4472
4483
|
width: col.width,
|
|
4473
4484
|
minWidth: col.minWidth || col.width,
|
|
@@ -4539,7 +4550,7 @@ function TableCellContent(props) {
|
|
|
4539
4550
|
"div",
|
|
4540
4551
|
{
|
|
4541
4552
|
ref: textRef,
|
|
4542
|
-
className:
|
|
4553
|
+
className: `ellipsis-1-line table-item w-full min-w-0 ${onCellClick ? "hover:text-main cursor-pointer" : "cursor-default"}`,
|
|
4543
4554
|
style: { textAlign },
|
|
4544
4555
|
onClick: onCellClick,
|
|
4545
4556
|
children: shouldShowTooltip ? /* @__PURE__ */ jsxRuntime.jsx(Tooltip2, { content: tooltipText, position: "bottom", asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: cellContent }) }) : cellContent
|
|
@@ -5008,7 +5019,7 @@ function Table(props) {
|
|
|
5008
5019
|
id: `${col.key}-body`,
|
|
5009
5020
|
"data-row-cell": "true",
|
|
5010
5021
|
"data-col-key": col.key,
|
|
5011
|
-
className: `${isCheckbox ? "p-0" : "px-2 py-
|
|
5022
|
+
className: `${isCheckbox ? "p-0" : "px-2 py-4"} whitespace-nowrap text-sm text-gray-900 border-r border-b border-gray-200 last:border-r-0 bg-inherit group-hover:bg-gray-100 transition-all`,
|
|
5012
5023
|
style: {
|
|
5013
5024
|
width,
|
|
5014
5025
|
minWidth: minWidth || width,
|
|
@@ -5025,7 +5036,7 @@ function Table(props) {
|
|
|
5025
5036
|
tooltipText: String(record[col.key] ?? ""),
|
|
5026
5037
|
align: align ?? "",
|
|
5027
5038
|
tooltipConfig: col.key === "__checkbox__" ? false : tooltipConfig,
|
|
5028
|
-
onCellClick: col.key !== "__checkbox__" ? () => onRowClickRef.current?.(record, rowIdx) : void 0
|
|
5039
|
+
onCellClick: col.key !== "__checkbox__" && onRowClickRef.current ? () => onRowClickRef.current?.(record, rowIdx) : void 0
|
|
5029
5040
|
}
|
|
5030
5041
|
) })
|
|
5031
5042
|
},
|
|
@@ -5100,7 +5111,7 @@ function Table(props) {
|
|
|
5100
5111
|
const rest = baseRows.filter((row) => !effectiveRowOrder.includes(String(getRowKey(row.original, row.index))));
|
|
5101
5112
|
return [...ordered, ...rest];
|
|
5102
5113
|
}, [baseRows, effectiveRowOrder, getRowKey]);
|
|
5103
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-white rounded
|
|
5114
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-white rounded shadow-panel", children: [
|
|
5104
5115
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5105
5116
|
"div",
|
|
5106
5117
|
{
|
|
@@ -5124,7 +5135,7 @@ function Table(props) {
|
|
|
5124
5135
|
isColumnDraggable
|
|
5125
5136
|
}
|
|
5126
5137
|
),
|
|
5127
|
-
/* @__PURE__ */ jsxRuntime.jsx("tbody", { className: "w-full h-full", children: showSkeleton ? Array.from({ length:
|
|
5138
|
+
/* @__PURE__ */ jsxRuntime.jsx("tbody", { className: "w-full h-full", children: showSkeleton ? Array.from({ length: 3 }).map((_, rowIdx) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "hover:bg-gray-50", children: [
|
|
5128
5139
|
leadingPinnedCols.map((col, idx) => /* @__PURE__ */ jsxRuntime.jsx(SkeletonTd, { col, showSquare: idx === 0 && !!checkboxInfo }, `leading-${idx}`)),
|
|
5129
5140
|
leftColspan > 0 && /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: leftColspan, style: { padding: 0, border: "none" } }),
|
|
5130
5141
|
virtualItems.map((vc) => /* @__PURE__ */ jsxRuntime.jsx(SkeletonTd, { col: groupCols[vc.index] }, `group-${vc.index}`)),
|
|
@@ -6838,7 +6849,8 @@ function InputField(props) {
|
|
|
6838
6849
|
maxLength,
|
|
6839
6850
|
className = "",
|
|
6840
6851
|
type = "input",
|
|
6841
|
-
numbersOnly = false
|
|
6852
|
+
numbersOnly = false,
|
|
6853
|
+
autoComplete
|
|
6842
6854
|
} = config;
|
|
6843
6855
|
const inputType = type === "email" ? "email" : type === "password" ? "password" : "text";
|
|
6844
6856
|
if (readOnly) {
|
|
@@ -6863,6 +6875,7 @@ function InputField(props) {
|
|
|
6863
6875
|
maxLength,
|
|
6864
6876
|
status: "default",
|
|
6865
6877
|
className: formControlClass(hasError),
|
|
6878
|
+
autoComplete,
|
|
6866
6879
|
bare: true,
|
|
6867
6880
|
onChange: handleChange
|
|
6868
6881
|
}
|
|
@@ -7568,7 +7581,8 @@ function SubmitFormRoot(props) {
|
|
|
7568
7581
|
className = "",
|
|
7569
7582
|
formClassName,
|
|
7570
7583
|
gridClassName = "grid-cols-12",
|
|
7571
|
-
mode = "onSubmit"
|
|
7584
|
+
mode = "onSubmit",
|
|
7585
|
+
autoComplete
|
|
7572
7586
|
} = props;
|
|
7573
7587
|
const methods = reactHookForm.useForm({
|
|
7574
7588
|
resolver: zod.zodResolver(schema),
|
|
@@ -7591,6 +7605,7 @@ function SubmitFormRoot(props) {
|
|
|
7591
7605
|
id: formId,
|
|
7592
7606
|
onSubmit: handleSubmit,
|
|
7593
7607
|
className: cn2(SUBMIT_FORM_CLASS, formClassName, className),
|
|
7608
|
+
autoComplete,
|
|
7594
7609
|
noValidate: true,
|
|
7595
7610
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `grid ${gridClassName} items-stretch gap-0`, children })
|
|
7596
7611
|
}
|
|
@@ -7618,7 +7633,8 @@ function PageFilter(props) {
|
|
|
7618
7633
|
colGap = 0,
|
|
7619
7634
|
submitButtonText = "\uAC80\uC0C9",
|
|
7620
7635
|
resetButtonText = "\uCD08\uAE30\uD654",
|
|
7621
|
-
values
|
|
7636
|
+
values,
|
|
7637
|
+
primaryColor
|
|
7622
7638
|
} = props;
|
|
7623
7639
|
const [localValues, setLocalValues] = React6.useState(values);
|
|
7624
7640
|
const initialValuesRef = React6.useRef(values);
|
|
@@ -7676,6 +7692,7 @@ function PageFilter(props) {
|
|
|
7676
7692
|
onChange: handleSelectChange(optionKey),
|
|
7677
7693
|
options: option.options,
|
|
7678
7694
|
placeholder: "\uC120\uD0DD",
|
|
7695
|
+
canReset: true,
|
|
7679
7696
|
containerClassName: option.containerClassName ?? "w-30"
|
|
7680
7697
|
}
|
|
7681
7698
|
) }, String(optionKey));
|
|
@@ -7728,16 +7745,20 @@ function PageFilter(props) {
|
|
|
7728
7745
|
"div",
|
|
7729
7746
|
{
|
|
7730
7747
|
className: cn(
|
|
7731
|
-
"flex flex-col gap-3 bg-white py-3 px-5 border-t-main border-t-1 shadow-
|
|
7748
|
+
"flex flex-col gap-3 bg-white py-3 px-5 border-t-main border-t-1 shadow-panel",
|
|
7732
7749
|
containerClassName
|
|
7733
7750
|
),
|
|
7734
|
-
|
|
7735
|
-
|
|
7736
|
-
|
|
7737
|
-
|
|
7738
|
-
|
|
7739
|
-
|
|
7740
|
-
|
|
7751
|
+
style: primaryColor ? { borderTopColor: primaryColor } : void 0,
|
|
7752
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex flex-col", style: { gap: `${colGap}px` }, children: rows.map((row, ix) => {
|
|
7753
|
+
const isLastRow = rows.length - 1 === ix;
|
|
7754
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-row min-h-12", children: [
|
|
7755
|
+
row.options.map((option, index) => renderFilterOption(option, rowGap, index)),
|
|
7756
|
+
isLastRow && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-4 flex flex-row items-center gap-2", children: [
|
|
7757
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "search", onClick: handleSubmit, children: submitButtonText }),
|
|
7758
|
+
onReset && /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "reset", onClick: handleReset, children: resetButtonText })
|
|
7759
|
+
] })
|
|
7760
|
+
] }, row.options.map((opt) => String(opt.key)).join("_"));
|
|
7761
|
+
}) })
|
|
7741
7762
|
}
|
|
7742
7763
|
);
|
|
7743
7764
|
}
|
|
@@ -7749,7 +7770,9 @@ var VARIANT_STYLES = {
|
|
|
7749
7770
|
activeText: "font-semibold text-gray-800",
|
|
7750
7771
|
inactiveText: "font-normal",
|
|
7751
7772
|
indicator: "bg-blue-500",
|
|
7752
|
-
closeBtn: "hover:bg-gray-300/60",
|
|
7773
|
+
closeBtn: "rounded hover:bg-gray-300/60",
|
|
7774
|
+
closeBtnWH: "w-3.5 h-3.5",
|
|
7775
|
+
closeBtnSize: 10,
|
|
7753
7776
|
plusBtnArea: "border-l border-gray-100 bg-white",
|
|
7754
7777
|
plusBtn: "text-gray-400 hover:text-gray-600 hover:bg-gray-100",
|
|
7755
7778
|
fadeOpacity: 0.12,
|
|
@@ -7766,7 +7789,9 @@ var VARIANT_STYLES = {
|
|
|
7766
7789
|
activeText: "font-semibold text-white",
|
|
7767
7790
|
inactiveText: "font-normal",
|
|
7768
7791
|
indicator: "bg-indigo-400",
|
|
7769
|
-
closeBtn: "hover:bg-gray-600/60",
|
|
7792
|
+
closeBtn: "rounded hover:bg-gray-600/60",
|
|
7793
|
+
closeBtnWH: "w-3.5 h-3.5",
|
|
7794
|
+
closeBtnSize: 10,
|
|
7770
7795
|
plusBtnArea: "border-l border-gray-700 bg-gray-900",
|
|
7771
7796
|
plusBtn: "text-gray-500 hover:text-gray-300 hover:bg-gray-700",
|
|
7772
7797
|
fadeOpacity: 0.4,
|
|
@@ -7779,11 +7804,13 @@ var VARIANT_STYLES = {
|
|
|
7779
7804
|
"system-light": {
|
|
7780
7805
|
container: "bg-gray-200 border-b border-gray-300",
|
|
7781
7806
|
activeTab: "bg-white border-gray-300 text-slate-800 shadow-sm",
|
|
7782
|
-
inactiveTab: "bg-transparent border-gray-300/80 text-slate-500 hover:text-slate-700 hover:bg-
|
|
7807
|
+
inactiveTab: "bg-transparent border-gray-300/80 text-slate-500 hover:text-slate-700 hover:bg-[#efefef] hover:border-gray-300",
|
|
7783
7808
|
activeText: "font-semibold text-slate-800",
|
|
7784
7809
|
inactiveText: "font-medium",
|
|
7785
7810
|
indicator: "bg-[#2b2b2b]",
|
|
7786
|
-
closeBtn: "hover:
|
|
7811
|
+
closeBtn: "ml-auto text-slate-400 hover:text-slate-700",
|
|
7812
|
+
closeBtnWH: "w-4 h-4",
|
|
7813
|
+
closeBtnSize: 13,
|
|
7787
7814
|
plusBtnArea: "border-l border-gray-300 bg-gray-200",
|
|
7788
7815
|
plusBtn: "text-slate-400 hover:text-slate-600 hover:bg-gray-300",
|
|
7789
7816
|
fadeOpacity: 0.15,
|
|
@@ -7800,7 +7827,9 @@ var VARIANT_STYLES = {
|
|
|
7800
7827
|
activeText: "font-semibold text-slate-100",
|
|
7801
7828
|
inactiveText: "font-medium",
|
|
7802
7829
|
indicator: "bg-indigo-400",
|
|
7803
|
-
closeBtn: "hover:
|
|
7830
|
+
closeBtn: "ml-auto text-slate-500 hover:text-slate-200",
|
|
7831
|
+
closeBtnWH: "w-4 h-4",
|
|
7832
|
+
closeBtnSize: 13,
|
|
7804
7833
|
plusBtnArea: "border-l border-slate-700 bg-slate-900",
|
|
7805
7834
|
plusBtn: "text-slate-400 hover:text-slate-200 hover:bg-slate-700",
|
|
7806
7835
|
fadeOpacity: 0.45,
|
|
@@ -7953,12 +7982,12 @@ function MultiTabBar(props) {
|
|
|
7953
7982
|
onTabClose(tab.id);
|
|
7954
7983
|
},
|
|
7955
7984
|
className: `
|
|
7956
|
-
flex-shrink-0
|
|
7957
|
-
|
|
7985
|
+
flex-shrink-0 ${s.closeBtnWH} flex items-center justify-center
|
|
7986
|
+
transition-all duration-100 cursor-pointer
|
|
7958
7987
|
${s.closeBtn}
|
|
7959
7988
|
${isActive ? "opacity-100" : "opacity-40 group-hover:opacity-60"}
|
|
7960
7989
|
`,
|
|
7961
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { size:
|
|
7990
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { size: s.closeBtnSize, strokeWidth: 2.5 })
|
|
7962
7991
|
}
|
|
7963
7992
|
)
|
|
7964
7993
|
]
|
|
@@ -8788,7 +8817,8 @@ var VARIANT_STYLES2 = {
|
|
|
8788
8817
|
iconClass: "w-4 h-4 flex-shrink-0",
|
|
8789
8818
|
activeItemStyle: {},
|
|
8790
8819
|
activeChildStyle: {},
|
|
8791
|
-
activeGrandchildStyle: {}
|
|
8820
|
+
activeGrandchildStyle: {},
|
|
8821
|
+
footerBorder: "border-t border-gray-200"
|
|
8792
8822
|
},
|
|
8793
8823
|
dark: {
|
|
8794
8824
|
aside: "bg-gray-900 border-r border-gray-700",
|
|
@@ -8814,7 +8844,8 @@ var VARIANT_STYLES2 = {
|
|
|
8814
8844
|
iconClass: "w-4 h-4 flex-shrink-0",
|
|
8815
8845
|
activeItemStyle: {},
|
|
8816
8846
|
activeChildStyle: {},
|
|
8817
|
-
activeGrandchildStyle: {}
|
|
8847
|
+
activeGrandchildStyle: {},
|
|
8848
|
+
footerBorder: "border-t border-gray-700"
|
|
8818
8849
|
},
|
|
8819
8850
|
"system-dark": {
|
|
8820
8851
|
aside: "bg-slate-900 border-r border-slate-700",
|
|
@@ -8840,7 +8871,8 @@ var VARIANT_STYLES2 = {
|
|
|
8840
8871
|
iconClass: "w-4.5 h-4.5 flex-shrink-0",
|
|
8841
8872
|
activeItemStyle: { borderLeft: "3px solid #818cf8", paddingLeft: "9px" },
|
|
8842
8873
|
activeChildStyle: { borderLeft: "2px solid #818cf8", paddingLeft: "14px" },
|
|
8843
|
-
activeGrandchildStyle: { borderLeft: "2px solid #818cf8", paddingLeft: "10px" }
|
|
8874
|
+
activeGrandchildStyle: { borderLeft: "2px solid #818cf8", paddingLeft: "10px" },
|
|
8875
|
+
footerBorder: "border-t border-slate-700"
|
|
8844
8876
|
},
|
|
8845
8877
|
"system-light": {
|
|
8846
8878
|
aside: "bg-gray-50 border-r border-gray-200",
|
|
@@ -8881,7 +8913,8 @@ var VARIANT_STYLES2 = {
|
|
|
8881
8913
|
backgroundColor: "color-mix(in srgb, #2b2b2b 10%, transparent)",
|
|
8882
8914
|
borderLeft: "2px solid #2b2b2b",
|
|
8883
8915
|
paddingLeft: "10px"
|
|
8884
|
-
}
|
|
8916
|
+
},
|
|
8917
|
+
footerBorder: "border-t border-gray-200"
|
|
8885
8918
|
}
|
|
8886
8919
|
};
|
|
8887
8920
|
function tintedStyle(color) {
|
|
@@ -8958,6 +8991,7 @@ function Sidebar(props) {
|
|
|
8958
8991
|
onClose,
|
|
8959
8992
|
menuSections,
|
|
8960
8993
|
header,
|
|
8994
|
+
footer,
|
|
8961
8995
|
className,
|
|
8962
8996
|
showCollapseButton = false,
|
|
8963
8997
|
variant = "light",
|
|
@@ -8965,8 +8999,17 @@ function Sidebar(props) {
|
|
|
8965
8999
|
} = props;
|
|
8966
9000
|
const { pathname } = reactRouter.useLocation();
|
|
8967
9001
|
const [isCollapsed, setIsCollapsed] = React6.useState(false);
|
|
9002
|
+
const [overflowVisible, setOverflowVisible] = React6.useState(true);
|
|
8968
9003
|
const [expandedItems, setExpandedItems] = React6.useState(/* @__PURE__ */ new Set());
|
|
8969
9004
|
const [expandedSubItems, setExpandedSubItems] = React6.useState(/* @__PURE__ */ new Set());
|
|
9005
|
+
React6.useEffect(() => {
|
|
9006
|
+
if (isCollapsed) {
|
|
9007
|
+
setOverflowVisible(false);
|
|
9008
|
+
return;
|
|
9009
|
+
}
|
|
9010
|
+
const timer = setTimeout(() => setOverflowVisible(true), 300);
|
|
9011
|
+
return () => clearTimeout(timer);
|
|
9012
|
+
}, [isCollapsed]);
|
|
8970
9013
|
const s = VARIANT_STYLES2[variant];
|
|
8971
9014
|
const applier = ACCENT_APPLIERS[variant];
|
|
8972
9015
|
React6.useEffect(() => {
|
|
@@ -9028,7 +9071,7 @@ function Sidebar(props) {
|
|
|
9028
9071
|
className: `
|
|
9029
9072
|
${isCollapsed ? "w-11 min-w-11" : "min-w-60 w-62"}
|
|
9030
9073
|
transition-[width,min-width] duration-300 ease-in-out
|
|
9031
|
-
|
|
9074
|
+
relative h-screen shrink-0 overflow-x-hidden flex flex-col
|
|
9032
9075
|
${s.aside}
|
|
9033
9076
|
${className ?? ""}
|
|
9034
9077
|
`,
|
|
@@ -9041,14 +9084,14 @@ function Sidebar(props) {
|
|
|
9041
9084
|
children: isCollapsed ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PanelRightClose, { size: 18, color: primaryColor ?? s.collapseIcon }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PanelLeftClose, { size: 18, color: primaryColor ?? s.collapseIcon })
|
|
9042
9085
|
}
|
|
9043
9086
|
),
|
|
9044
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
9087
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex-1 min-h-0 hide-scrollbar ${overflowVisible ? "overflow-y-auto" : "overflow-hidden"}`, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9045
9088
|
"div",
|
|
9046
9089
|
{
|
|
9047
|
-
className: `transition-opacity duration-200 ease-in-out ${isCollapsed ? "opacity-0 pointer-events-none select-none" : "opacity-100"} ${variant === "system-dark" || variant === "system-light" ? "
|
|
9090
|
+
className: `transition-opacity duration-200 ease-in-out ${isCollapsed ? "opacity-0 pointer-events-none select-none" : "opacity-100"} ${variant === "system-dark" || variant === "system-light" ? "pb-6" : "px-4 pb-6"}`,
|
|
9048
9091
|
style: { transitionDelay: isCollapsed ? "0ms" : "150ms" },
|
|
9049
9092
|
children: [
|
|
9050
|
-
header &&
|
|
9051
|
-
/* @__PURE__ */ jsxRuntime.jsx("nav", { className:
|
|
9093
|
+
header && header,
|
|
9094
|
+
/* @__PURE__ */ jsxRuntime.jsx("nav", { className: `space-y-6 ${variant === "system-dark" || variant === "system-light" ? "px-1" : ""}`, children: menuSections.map((section, sectionIndex) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
9052
9095
|
section.title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: s.sectionTitle, children: section.title }),
|
|
9053
9096
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: section.items.map((item) => {
|
|
9054
9097
|
const isActive = !item.children && pathname === item.path;
|
|
@@ -9187,6 +9230,14 @@ function Sidebar(props) {
|
|
|
9187
9230
|
] }, section.title ?? sectionIndex)) })
|
|
9188
9231
|
]
|
|
9189
9232
|
}
|
|
9233
|
+
) }),
|
|
9234
|
+
footer && /* @__PURE__ */ jsxRuntime.jsx(
|
|
9235
|
+
"div",
|
|
9236
|
+
{
|
|
9237
|
+
className: `flex-shrink-0 transition-opacity duration-200 ease-in-out ${isCollapsed ? "opacity-0 pointer-events-none select-none" : "opacity-100"} ${s.footerBorder}`,
|
|
9238
|
+
style: { transitionDelay: isCollapsed ? "0ms" : "150ms" },
|
|
9239
|
+
children: footer
|
|
9240
|
+
}
|
|
9190
9241
|
)
|
|
9191
9242
|
]
|
|
9192
9243
|
}
|
|
@@ -9505,7 +9556,7 @@ function DetailModalFrame(props) {
|
|
|
9505
9556
|
) }),
|
|
9506
9557
|
renderExtraContent?.({ isEditMode })
|
|
9507
9558
|
] }),
|
|
9508
|
-
/* @__PURE__ */ jsxRuntime.jsx(ModalFooter, { className: "flex justify-end
|
|
9559
|
+
/* @__PURE__ */ jsxRuntime.jsx(ModalFooter, { className: "flex justify-end", children: isEditMode ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
9509
9560
|
/* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "outline", onClick: handleCancelEdit, disabled: controller.isSaving, children: "\uCDE8\uC18C" }),
|
|
9510
9561
|
/* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", form: controller.formId, variant: "save", disabled: controller.isSaving, children: "\uC800\uC7A5" })
|
|
9511
9562
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|