sellmate-design-system-react 0.1.8 → 0.1.9
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/components/SActionModal/SActionModal.cjs +1 -1
- package/dist/components/SActionModal/SActionModal.cjs.map +1 -1
- package/dist/components/SActionModal/SActionModal.js +1 -1
- package/dist/components/SActionModal/SActionModal.js.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs +218 -209
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.js +218 -209
- package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
- package/dist/components/SCalendar/SCalendar.cjs +1 -1
- package/dist/components/SCalendar/SCalendar.cjs.map +1 -1
- package/dist/components/SCalendar/SCalendar.js +1 -1
- package/dist/components/SCalendar/SCalendar.js.map +1 -1
- package/dist/components/SChip/SChip.cjs +1 -1
- package/dist/components/SChip/SChip.cjs.map +1 -1
- package/dist/components/SChip/SChip.d.ts +1 -1
- package/dist/components/SChip/SChip.js +1 -1
- package/dist/components/SChip/SChip.js.map +1 -1
- package/dist/components/SChipInput/SChipInput.cjs +235 -221
- package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
- package/dist/components/SChipInput/SChipInput.js +235 -221
- package/dist/components/SChipInput/SChipInput.js.map +1 -1
- package/dist/components/SCircleProgress/SCircleProgress.cjs +53 -55
- package/dist/components/SCircleProgress/SCircleProgress.cjs.map +1 -1
- package/dist/components/SCircleProgress/SCircleProgress.js +53 -55
- package/dist/components/SCircleProgress/SCircleProgress.js.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.cjs +223 -214
- package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.js +223 -214
- package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs +298 -263
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.js +298 -263
- package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
- package/dist/components/SDropdownButton/SDropdownButton.cjs +4 -4
- package/dist/components/SDropdownButton/SDropdownButton.cjs.map +1 -1
- package/dist/components/SDropdownButton/SDropdownButton.js +4 -4
- package/dist/components/SDropdownButton/SDropdownButton.js.map +1 -1
- package/dist/components/SField/SField.cjs +218 -21
- package/dist/components/SField/SField.cjs.map +1 -1
- package/dist/components/SField/SField.d.ts +11 -0
- package/dist/components/SField/SField.js +218 -21
- package/dist/components/SField/SField.js.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.cjs +298 -278
- package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.d.ts +4 -2
- package/dist/components/SFilePicker/SFilePicker.js +298 -278
- package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
- package/dist/components/SInput/SInput.cjs +218 -209
- package/dist/components/SInput/SInput.cjs.map +1 -1
- package/dist/components/SInput/SInput.js +218 -209
- package/dist/components/SInput/SInput.js.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs +610 -450
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +3 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.js +610 -450
- package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
- package/dist/components/SLoadingContainer/SLoadingContainer.cjs +61 -55
- package/dist/components/SLoadingContainer/SLoadingContainer.cjs.map +1 -1
- package/dist/components/SLoadingContainer/SLoadingContainer.js +61 -55
- package/dist/components/SLoadingContainer/SLoadingContainer.js.map +1 -1
- package/dist/components/SLoadingContainer/loading.cjs +61 -55
- package/dist/components/SLoadingContainer/loading.cjs.map +1 -1
- package/dist/components/SLoadingContainer/loading.js +61 -55
- package/dist/components/SLoadingContainer/loading.js.map +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.cjs +56 -57
- package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.js +56 -57
- package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.cjs +326 -50
- package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.d.ts +2 -0
- package/dist/components/SNumberInput/SNumberInput.js +326 -50
- package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
- package/dist/components/SPagination/SPagination.cjs +1 -1
- package/dist/components/SPagination/SPagination.cjs.map +1 -1
- package/dist/components/SPagination/SPagination.js +1 -1
- package/dist/components/SPagination/SPagination.js.map +1 -1
- package/dist/components/SSelect/SSelect.cjs +67 -32
- package/dist/components/SSelect/SSelect.cjs.map +1 -1
- package/dist/components/SSelect/SSelect.js +67 -32
- package/dist/components/SSelect/SSelect.js.map +1 -1
- package/dist/components/STable/STable.cjs +121 -88
- package/dist/components/STable/STable.cjs.map +1 -1
- package/dist/components/STable/STable.js +121 -88
- package/dist/components/STable/STable.js.map +1 -1
- package/dist/components/STextarea/STextarea.cjs +218 -21
- package/dist/components/STextarea/STextarea.cjs.map +1 -1
- package/dist/components/STextarea/STextarea.js +218 -21
- package/dist/components/STextarea/STextarea.js.map +1 -1
- package/dist/components/SToast/SToastContainer.cjs +3 -3
- package/dist/components/SToast/SToastContainer.cjs.map +1 -1
- package/dist/components/SToast/SToastContainer.js +3 -3
- package/dist/components/SToast/SToastContainer.js.map +1 -1
- package/dist/components/STooltip/STooltip.cjs +209 -14
- package/dist/components/STooltip/STooltip.cjs.map +1 -1
- package/dist/components/STooltip/STooltip.js +209 -14
- package/dist/components/STooltip/STooltip.js.map +1 -1
- package/dist/index.cjs +432 -260
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +432 -260
- package/dist/index.js.map +1 -1
- package/dist/styles.css +51 -27
- package/dist/theme.css +4 -2
- package/package.json +1 -1
|
@@ -2969,65 +2969,63 @@ var SCircleProgress = react.forwardRef(
|
|
|
2969
2969
|
"div",
|
|
2970
2970
|
{
|
|
2971
2971
|
ref,
|
|
2972
|
-
className: cn(
|
|
2972
|
+
className: cn(
|
|
2973
|
+
"inline-flex flex-col items-center gap-[var(--cmp-progress-circular-gap)]",
|
|
2974
|
+
className
|
|
2975
|
+
),
|
|
2973
2976
|
style,
|
|
2974
2977
|
children: [
|
|
2975
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
{
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2978
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2979
|
+
"svg",
|
|
2980
|
+
{
|
|
2981
|
+
viewBox: `0 0 ${VIEWBOX} ${VIEWBOX}`,
|
|
2982
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
2983
|
+
className: cn("h-[80px] w-[80px]", indeterminate && "origin-center animate-circle-spin"),
|
|
2984
|
+
children: [
|
|
2985
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2986
|
+
"circle",
|
|
2987
|
+
{
|
|
2988
|
+
cx: c,
|
|
2989
|
+
cy: c,
|
|
2990
|
+
r: RADIUS,
|
|
2991
|
+
fill: "none",
|
|
2992
|
+
strokeWidth: STROKE,
|
|
2993
|
+
style: { stroke: colors.track }
|
|
2994
|
+
}
|
|
2984
2995
|
),
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2988
|
-
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
2997
|
-
|
|
2998
|
-
|
|
2999
|
-
|
|
3000
|
-
|
|
3001
|
-
cy: c,
|
|
3002
|
-
r: RADIUS,
|
|
3003
|
-
fill: "none",
|
|
3004
|
-
strokeWidth: STROKE,
|
|
3005
|
-
strokeLinecap: "round",
|
|
3006
|
-
className: cn(
|
|
3007
|
-
"origin-center",
|
|
3008
|
-
indeterminate ? "animate-circle-arc" : "-rotate-90 transition-[stroke-dasharray] duration-[400ms] ease-linear"
|
|
3009
|
-
),
|
|
3010
|
-
style: {
|
|
3011
|
-
stroke: colors.arc,
|
|
3012
|
-
...indeterminate ? {} : { strokeDasharray: `${filled} ${CIRCUMFERENCE}`, strokeDashoffset: 0 }
|
|
3013
|
-
}
|
|
2996
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2997
|
+
"circle",
|
|
2998
|
+
{
|
|
2999
|
+
cx: c,
|
|
3000
|
+
cy: c,
|
|
3001
|
+
r: RADIUS,
|
|
3002
|
+
fill: "none",
|
|
3003
|
+
strokeWidth: STROKE,
|
|
3004
|
+
strokeLinecap: "round",
|
|
3005
|
+
className: cn(
|
|
3006
|
+
"origin-center",
|
|
3007
|
+
indeterminate ? "animate-circle-arc" : "-rotate-90 transition-[stroke-dasharray] duration-[400ms] ease-linear"
|
|
3008
|
+
),
|
|
3009
|
+
style: {
|
|
3010
|
+
stroke: colors.arc,
|
|
3011
|
+
...indeterminate ? {} : { strokeDasharray: `${filled} ${CIRCUMFERENCE}`, strokeDashoffset: 0 }
|
|
3014
3012
|
}
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3013
|
+
}
|
|
3014
|
+
)
|
|
3015
|
+
]
|
|
3016
|
+
}
|
|
3017
|
+
),
|
|
3018
|
+
!indeterminate && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3019
|
+
"span",
|
|
3020
|
+
{
|
|
3021
|
+
className: "text-center text-[16px] font-bold leading-[26px]",
|
|
3022
|
+
style: { color: percentColor },
|
|
3023
|
+
children: [
|
|
3024
|
+
Math.round(v),
|
|
3025
|
+
"%"
|
|
3026
|
+
]
|
|
3027
|
+
}
|
|
3028
|
+
),
|
|
3031
3029
|
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-center text-[12px] font-normal leading-[20px] text-[color:var(--cmp-progress-color-label)]", children: label })
|
|
3032
3030
|
]
|
|
3033
3031
|
}
|
|
@@ -3090,7 +3088,7 @@ function SPagination({
|
|
|
3090
3088
|
style,
|
|
3091
3089
|
children: [
|
|
3092
3090
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-[calc(var(--cmp-pagination-height)*2+var(--cmp-pagination-move-gap))] items-center justify-end gap-[var(--cmp-pagination-move-gap)]", children: prevButtons }),
|
|
3093
|
-
simple ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-[var(--cmp-pagination-height)] items-center gap-[var(--cmp-pagination-
|
|
3091
|
+
simple ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-[var(--cmp-pagination-height)] items-center gap-[var(--cmp-pagination-simple-gap)] px-[var(--cmp-pagination-paddingX)] text-[12px] font-medium leading-[20px] text-[color:var(--cmp-pagination-item-content-default)]", children: [
|
|
3094
3092
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-bold text-[color:var(--cmp-pagination-item-content-selected)]", children: currentPage }),
|
|
3095
3093
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "/" }),
|
|
3096
3094
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: lastPage })
|
|
@@ -3334,7 +3332,8 @@ var HIDE_DELAY_MS = 100;
|
|
|
3334
3332
|
function useBody(content, message = []) {
|
|
3335
3333
|
if (content != null) return content;
|
|
3336
3334
|
if (message.length === 0) return null;
|
|
3337
|
-
|
|
3335
|
+
const singleLine = message.length === 1;
|
|
3336
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: message.map((line, i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: singleLine ? "leading-[24px]" : void 0, children: line }, i)) });
|
|
3338
3337
|
}
|
|
3339
3338
|
var STooltip = react.forwardRef(function STooltip2({
|
|
3340
3339
|
content,
|
|
@@ -3392,7 +3391,7 @@ var STooltip = react.forwardRef(function STooltip2({
|
|
|
3392
3391
|
if (disabled || body == null) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: triggerNode });
|
|
3393
3392
|
const isHover = trigger === "hover";
|
|
3394
3393
|
const contentClass = cn(
|
|
3395
|
-
"z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px]",
|
|
3394
|
+
"z-50 max-w-xs rounded-[6px] px-[16px] py-[12px] text-[12px] leading-[20px] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)]",
|
|
3396
3395
|
FLOATING_SLIDE_ANIM,
|
|
3397
3396
|
className
|
|
3398
3397
|
);
|
|
@@ -3437,11 +3436,17 @@ var STooltip = react.forwardRef(function STooltip2({
|
|
|
3437
3436
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-[12px]", children: [
|
|
3438
3437
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: body }),
|
|
3439
3438
|
useClose && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3440
|
-
|
|
3439
|
+
SGhostButton,
|
|
3441
3440
|
{
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3441
|
+
icon: "close",
|
|
3442
|
+
size: "xs",
|
|
3443
|
+
intent: tooltipType === "default" ? "inverse" : "default",
|
|
3444
|
+
ariaLabel: "\uB2EB\uAE30",
|
|
3445
|
+
className: "shrink-0",
|
|
3446
|
+
onClick: () => {
|
|
3447
|
+
cancelHide();
|
|
3448
|
+
setOpen(false);
|
|
3449
|
+
}
|
|
3445
3450
|
}
|
|
3446
3451
|
)
|
|
3447
3452
|
] }),
|
|
@@ -3479,8 +3484,8 @@ function useFormField(field) {
|
|
|
3479
3484
|
}, [ctx, name]);
|
|
3480
3485
|
}
|
|
3481
3486
|
var FIELD_SIZE = {
|
|
3482
|
-
sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon:
|
|
3483
|
-
md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon:
|
|
3487
|
+
sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon: 16 },
|
|
3488
|
+
md: { height: 36, radius: 6, fieldGap: 16, labelGap: 8, fontSize: 14, lineHeight: 24, icon: 16 }
|
|
3484
3489
|
};
|
|
3485
3490
|
var ALIGN = {
|
|
3486
3491
|
start: "flex-start",
|
|
@@ -3495,6 +3500,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3495
3500
|
labelTooltip = "",
|
|
3496
3501
|
labelTooltipProps,
|
|
3497
3502
|
labelWidth,
|
|
3503
|
+
labelHeight,
|
|
3498
3504
|
size = "sm",
|
|
3499
3505
|
addonLabel = "",
|
|
3500
3506
|
addonAlign = "start",
|
|
@@ -3509,6 +3515,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3509
3515
|
readOnly = false,
|
|
3510
3516
|
width,
|
|
3511
3517
|
multiline = false,
|
|
3518
|
+
borderless = false,
|
|
3512
3519
|
children,
|
|
3513
3520
|
className,
|
|
3514
3521
|
style,
|
|
@@ -3542,8 +3549,8 @@ var SField = react.forwardRef(function SField2({
|
|
|
3542
3549
|
const resolvedSuccess = status === "pass";
|
|
3543
3550
|
const showError = resolvedError && errorMessage !== "";
|
|
3544
3551
|
const interactive = !disabled && !readOnly;
|
|
3545
|
-
const borderColor = disabled ? "var(--color-grey-45)" : interactive && focused ? "var(--sys-color-field-border-focus)" : resolvedSuccess ? "var(--sys-color-field-border-success)" : resolvedError ? "var(--sys-color-field-border-danger)" : "var(--sys-color-field-border-default)";
|
|
3546
|
-
const bgColor = disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
3552
|
+
const borderColor = borderless ? "transparent" : disabled ? "var(--color-grey-45)" : interactive && focused ? "var(--sys-color-field-border-focus)" : resolvedSuccess ? "var(--sys-color-field-border-success)" : resolvedError ? "var(--sys-color-field-border-danger)" : "var(--sys-color-field-border-default)";
|
|
3553
|
+
const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
3547
3554
|
const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
|
|
3548
3555
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3549
3556
|
"div",
|
|
@@ -3560,7 +3567,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3560
3567
|
{
|
|
3561
3568
|
className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
|
|
3562
3569
|
style: {
|
|
3563
|
-
height: s.height,
|
|
3570
|
+
height: cssLen(labelHeight) ?? s.height,
|
|
3564
3571
|
marginRight: s.fieldGap,
|
|
3565
3572
|
width: cssLen(labelWidth),
|
|
3566
3573
|
fontSize: s.fontSize,
|
|
@@ -3586,14 +3593,14 @@ var SField = react.forwardRef(function SField2({
|
|
|
3586
3593
|
{
|
|
3587
3594
|
className: cn(
|
|
3588
3595
|
"relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
|
|
3589
|
-
interactive && "hover:border-(--sys-color-field-border-focus) hover:shadow-[0px_0px_4px_0px_#0071ff66] focus-within:border-(--sys-color-field-border-focus) focus-within:shadow-[0px_0px_4px_0px_#0071ff66]",
|
|
3596
|
+
interactive && !borderless && "hover:border-(--sys-color-field-border-focus) hover:shadow-[0px_0px_4px_0px_#0071ff66] focus-within:border-(--sys-color-field-border-focus) focus-within:shadow-[0px_0px_4px_0px_#0071ff66]",
|
|
3590
3597
|
disabled && "cursor-not-allowed"
|
|
3591
3598
|
),
|
|
3592
3599
|
style: {
|
|
3593
3600
|
// @ts-expect-error CSS 변수
|
|
3594
3601
|
"--field-bc": borderColor,
|
|
3595
3602
|
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
3596
|
-
...interactive && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3603
|
+
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3597
3604
|
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3598
3605
|
"width": cssLen(width),
|
|
3599
3606
|
"borderRadius": s.radius,
|
|
@@ -3638,15 +3645,28 @@ function flattenOptions(options, depth = 1) {
|
|
|
3638
3645
|
const out = [];
|
|
3639
3646
|
for (const o of options) {
|
|
3640
3647
|
const hasChildren = Array.isArray(o.children) && o.children.length > 0;
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
|
|
3644
|
-
|
|
3645
|
-
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3648
|
+
if (hasChildren) {
|
|
3649
|
+
const childFlat = flattenOptions(o.children, depth + 1);
|
|
3650
|
+
const allChildrenDisabled = childFlat.every((c) => c.disabled);
|
|
3651
|
+
out.push({
|
|
3652
|
+
value: String(o.value),
|
|
3653
|
+
label: o.label,
|
|
3654
|
+
disabled: !!o.disabled || allChildrenDisabled,
|
|
3655
|
+
depth,
|
|
3656
|
+
isGroup: true,
|
|
3657
|
+
raw: o.value
|
|
3658
|
+
});
|
|
3659
|
+
out.push(...childFlat);
|
|
3660
|
+
} else {
|
|
3661
|
+
out.push({
|
|
3662
|
+
value: String(o.value),
|
|
3663
|
+
label: o.label,
|
|
3664
|
+
disabled: !!o.disabled,
|
|
3665
|
+
depth,
|
|
3666
|
+
isGroup: false,
|
|
3667
|
+
raw: o.value
|
|
3668
|
+
});
|
|
3669
|
+
}
|
|
3650
3670
|
}
|
|
3651
3671
|
return out;
|
|
3652
3672
|
}
|
|
@@ -3770,6 +3790,9 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3770
3790
|
);
|
|
3771
3791
|
const flat = react.useMemo(() => flattenOptions(options), [options]);
|
|
3772
3792
|
const selectable = react.useMemo(() => selectableOptions(flat), [flat]);
|
|
3793
|
+
const hasLeaf = react.useMemo(() => flat.some((o) => !o.isGroup), [flat]);
|
|
3794
|
+
const allOptionsDisabled = hasLeaf && selectable.length === 0;
|
|
3795
|
+
const effectiveDisabled = disabled || allOptionsDisabled;
|
|
3773
3796
|
const showSearch = useSearch && selectable.length >= SEARCH_THRESHOLD;
|
|
3774
3797
|
const labelByValue = react.useMemo(() => new Map(flat.map((o) => [o.value, o.label])), [flat]);
|
|
3775
3798
|
const rawByValue = react.useMemo(() => new Map(flat.map((o) => [o.value, o.raw])), [flat]);
|
|
@@ -3836,10 +3859,10 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3836
3859
|
Ariakit__namespace.Select,
|
|
3837
3860
|
{
|
|
3838
3861
|
ref: triggerRef,
|
|
3839
|
-
disabled,
|
|
3862
|
+
disabled: effectiveDisabled,
|
|
3840
3863
|
className: "flex h-full w-full cursor-pointer items-center justify-between gap-[8px] bg-transparent px-[12px] text-left text-[12px] leading-[20px] outline-none disabled:cursor-not-allowed",
|
|
3841
3864
|
style: {
|
|
3842
|
-
color:
|
|
3865
|
+
color: effectiveDisabled ? "var(--cmp-select-text-disabled)" : isPlaceholder ? "var(--cmp-select-icon-default)" : "var(--cmp-select-text-default)"
|
|
3843
3866
|
},
|
|
3844
3867
|
children: [
|
|
3845
3868
|
isHtmlLabel(triggerText) ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3854,7 +3877,7 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3854
3877
|
{
|
|
3855
3878
|
name: "chevronDown",
|
|
3856
3879
|
size: 12,
|
|
3857
|
-
color:
|
|
3880
|
+
color: effectiveDisabled ? "var(--cmp-select-icon-disabled)" : "var(--cmp-select-icon-default)",
|
|
3858
3881
|
className: cn("shrink-0 transition-transform duration-200", open && "rotate-180")
|
|
3859
3882
|
}
|
|
3860
3883
|
)
|
|
@@ -3868,7 +3891,7 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3868
3891
|
portalElement: portalContainer,
|
|
3869
3892
|
gutter: 4,
|
|
3870
3893
|
sameWidth: !dropdownWidth,
|
|
3871
|
-
className: "z-50 overflow-auto rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)]
|
|
3894
|
+
className: "z-50 overflow-auto rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)] data-[enter]:animate-floating-in-bottom data-[leave]:animate-floating-out-bottom",
|
|
3872
3895
|
style: {
|
|
3873
3896
|
maxHeight: dropdownHeight,
|
|
3874
3897
|
...dropdownWidth ? { width: dropdownWidth } : {},
|
|
@@ -3909,7 +3932,7 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3909
3932
|
),
|
|
3910
3933
|
hasItems ? /* @__PURE__ */ jsxRuntime.jsx(ItemList, { items: filtered, multi, selected, useSearch: showSearch }) : (
|
|
3911
3934
|
// 원본 sd-select-listbox__empty (표시할 항목이 없을 때)
|
|
3912
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-[12px] py-[12px] text-
|
|
3935
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-[12px] py-[12px] text-left text-[12px] leading-[20px] text-[color:var(--cmp-listItem-content-disabled)]", children: "\uD45C\uC2DC\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4." })
|
|
3913
3936
|
)
|
|
3914
3937
|
]
|
|
3915
3938
|
}
|
|
@@ -3932,7 +3955,7 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3932
3955
|
error: error || ruleError !== "",
|
|
3933
3956
|
status: rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0,
|
|
3934
3957
|
errorMessage: ruleError !== "" ? ruleError : errorMessage,
|
|
3935
|
-
disabled,
|
|
3958
|
+
disabled: effectiveDisabled,
|
|
3936
3959
|
width,
|
|
3937
3960
|
className,
|
|
3938
3961
|
style,
|
|
@@ -3967,7 +3990,11 @@ function ItemList({
|
|
|
3967
3990
|
{
|
|
3968
3991
|
className: cn(
|
|
3969
3992
|
"select-none py-[4px] pr-[12px] text-[12px] leading-[20px] text-[color:var(--cmp-listItem-content-default)]",
|
|
3970
|
-
isDepth1 ? "border-t border-solid border-[color:var(--cmp-listItem-depth1-border-color)] bg-[var(--cmp-listItem-depth1-bg-default)] font-bold" : "bg-[var(--cmp-listItem-depth2-middle-bg)] font-medium"
|
|
3993
|
+
isDepth1 ? "border-t border-solid border-[color:var(--cmp-listItem-depth1-border-color)] bg-[var(--cmp-listItem-depth1-bg-default)] font-bold" : "bg-[var(--cmp-listItem-depth2-middle-bg)] font-medium",
|
|
3994
|
+
// 하위가 전부 비활성이면(select.config 에서 bubble-up) 어미 그룹도 비활성 처리:
|
|
3995
|
+
// 텍스트는 회색(#888), depth1 그룹은 파란 배경 대신 회색(#EEE)으로 (depth2 는 #F6F6F6 유지)
|
|
3996
|
+
o.disabled && "text-[color:var(--cmp-listItem-content-disabled)]",
|
|
3997
|
+
o.disabled && isDepth1 && "bg-[var(--cmp-listItem-depth1-bg-disabled)]"
|
|
3971
3998
|
),
|
|
3972
3999
|
style: { paddingLeft: padLeft },
|
|
3973
4000
|
children: o.label
|
|
@@ -3994,15 +4021,21 @@ function ItemList({
|
|
|
3994
4021
|
"span",
|
|
3995
4022
|
{
|
|
3996
4023
|
className: cn(
|
|
3997
|
-
"flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid
|
|
3998
|
-
|
|
4024
|
+
"flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid",
|
|
4025
|
+
o.disabled ? (
|
|
4026
|
+
// 비활성: 회색 채움(#E1E1E1) + 회색 테두리(#CCCCCC)
|
|
4027
|
+
"border-[color:var(--cmp-checkbox-border-disabled)] bg-[var(--cmp-checkbox-bg-disabled)]"
|
|
4028
|
+
) : cn(
|
|
4029
|
+
"group-data-[active-item]:border-[color:var(--cmp-checkbox-checked-border-inverse)]",
|
|
4030
|
+
isSelected ? "border-[color:var(--cmp-checkbox-checked-bg-default)] bg-[var(--cmp-checkbox-checked-bg-default)] group-data-[active-item]:bg-transparent" : "border-[color:var(--cmp-checkbox-unchecked-border-default)] bg-transparent"
|
|
4031
|
+
)
|
|
3999
4032
|
),
|
|
4000
4033
|
children: isSelected && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4001
4034
|
SIcon,
|
|
4002
4035
|
{
|
|
4003
4036
|
name: "checkboxCheck",
|
|
4004
4037
|
size: 12,
|
|
4005
|
-
color: "var(--cmp-checkbox-checked-icon-default)"
|
|
4038
|
+
color: o.disabled ? "var(--cmp-checkbox-checked-icon-disabled)" : "var(--cmp-checkbox-checked-icon-default)"
|
|
4006
4039
|
}
|
|
4007
4040
|
)
|
|
4008
4041
|
}
|