sellmate-design-system-react 0.1.7 → 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 +11 -3
- package/dist/components/SActionModal/SActionModal.cjs.map +1 -1
- package/dist/components/SActionModal/SActionModal.js +11 -3
- package/dist/components/SActionModal/SActionModal.js.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs +226 -209
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.js +226 -209
- package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
- package/dist/components/SCalendar/SCalendar.cjs +9 -1
- package/dist/components/SCalendar/SCalendar.cjs.map +1 -1
- package/dist/components/SCalendar/SCalendar.js +9 -1
- package/dist/components/SCalendar/SCalendar.js.map +1 -1
- package/dist/components/SChip/SChip.cjs +9 -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 +9 -1
- package/dist/components/SChip/SChip.js.map +1 -1
- package/dist/components/SChipInput/SChipInput.cjs +260 -235
- package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
- package/dist/components/SChipInput/SChipInput.js +259 -235
- package/dist/components/SChipInput/SChipInput.js.map +1 -1
- package/dist/components/SCircleProgress/SCircleProgress.cjs +56 -58
- package/dist/components/SCircleProgress/SCircleProgress.cjs.map +1 -1
- package/dist/components/SCircleProgress/SCircleProgress.js +56 -58
- package/dist/components/SCircleProgress/SCircleProgress.js.map +1 -1
- package/dist/components/SConfirmModal/SConfirmModal.cjs +9 -1
- package/dist/components/SConfirmModal/SConfirmModal.cjs.map +1 -1
- package/dist/components/SConfirmModal/SConfirmModal.js +9 -1
- package/dist/components/SConfirmModal/SConfirmModal.js.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.cjs +247 -221
- package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.js +247 -221
- package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs +308 -256
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.js +308 -256
- package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
- package/dist/components/SDropdownButton/SDropdownButton.cjs +51 -4
- package/dist/components/SDropdownButton/SDropdownButton.cjs.map +1 -1
- package/dist/components/SDropdownButton/SDropdownButton.js +52 -5
- package/dist/components/SDropdownButton/SDropdownButton.js.map +1 -1
- package/dist/components/SField/SField.cjs +226 -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 +226 -21
- package/dist/components/SField/SField.js.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.cjs +306 -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 +306 -278
- package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
- package/dist/components/SGhostButton/SGhostButton.cjs +8 -0
- package/dist/components/SGhostButton/SGhostButton.cjs.map +1 -1
- package/dist/components/SGhostButton/SGhostButton.js +8 -0
- package/dist/components/SGhostButton/SGhostButton.js.map +1 -1
- package/dist/components/SGuide/SGuide.cjs +12 -1
- package/dist/components/SGuide/SGuide.cjs.map +1 -1
- package/dist/components/SGuide/SGuide.js +12 -1
- package/dist/components/SGuide/SGuide.js.map +1 -1
- package/dist/components/SInput/SInput.cjs +226 -209
- package/dist/components/SInput/SInput.cjs.map +1 -1
- package/dist/components/SInput/SInput.js +226 -209
- package/dist/components/SInput/SInput.js.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs +640 -453
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.d.ts +3 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.js +640 -453
- package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
- package/dist/components/SLoadingContainer/SLoadingContainer.cjs +64 -58
- package/dist/components/SLoadingContainer/SLoadingContainer.cjs.map +1 -1
- package/dist/components/SLoadingContainer/SLoadingContainer.js +64 -58
- package/dist/components/SLoadingContainer/SLoadingContainer.js.map +1 -1
- package/dist/components/SLoadingContainer/loading.cjs +64 -58
- package/dist/components/SLoadingContainer/loading.cjs.map +1 -1
- package/dist/components/SLoadingContainer/loading.js +64 -58
- package/dist/components/SLoadingContainer/loading.js.map +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.cjs +68 -61
- package/dist/components/SLoadingModal/SLoadingModal.cjs.map +1 -1
- package/dist/components/SLoadingModal/SLoadingModal.js +68 -61
- package/dist/components/SLoadingModal/SLoadingModal.js.map +1 -1
- package/dist/components/SModalContainer/SModalContainer.cjs +9 -1
- package/dist/components/SModalContainer/SModalContainer.cjs.map +1 -1
- package/dist/components/SModalContainer/SModalContainer.js +9 -1
- package/dist/components/SModalContainer/SModalContainer.js.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.cjs +334 -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 +334 -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/SPopover/SPopover.cjs +20 -3
- package/dist/components/SPopover/SPopover.cjs.map +1 -1
- package/dist/components/SPopover/SPopover.js +20 -4
- package/dist/components/SPopover/SPopover.js.map +1 -1
- package/dist/components/SPopup/SPopup.cjs +2 -2
- package/dist/components/SPopup/SPopup.cjs.map +1 -1
- package/dist/components/SPopup/SPopup.js +2 -2
- package/dist/components/SPopup/SPopup.js.map +1 -1
- package/dist/components/SPortal/SPortal.cjs +8 -0
- package/dist/components/SPortal/SPortal.cjs.map +1 -1
- package/dist/components/SPortal/SPortal.js +8 -0
- package/dist/components/SPortal/SPortal.js.map +1 -1
- package/dist/components/SSelect/SSelect.cjs +76 -32
- package/dist/components/SSelect/SSelect.cjs.map +1 -1
- package/dist/components/SSelect/SSelect.js +76 -32
- package/dist/components/SSelect/SSelect.js.map +1 -1
- package/dist/components/STable/STable.cjs +133 -91
- package/dist/components/STable/STable.cjs.map +1 -1
- package/dist/components/STable/STable.js +133 -91
- package/dist/components/STable/STable.js.map +1 -1
- package/dist/components/STextLink/STextLink.cjs +137 -3
- package/dist/components/STextLink/STextLink.cjs.map +1 -1
- package/dist/components/STextLink/STextLink.d.ts +1 -1
- package/dist/components/STextLink/STextLink.js +118 -4
- package/dist/components/STextLink/STextLink.js.map +1 -1
- package/dist/components/STextarea/STextarea.cjs +226 -21
- package/dist/components/STextarea/STextarea.cjs.map +1 -1
- package/dist/components/STextarea/STextarea.js +226 -21
- package/dist/components/STextarea/STextarea.js.map +1 -1
- package/dist/components/SToast/SToast.cjs +8 -0
- package/dist/components/SToast/SToast.cjs.map +1 -1
- package/dist/components/SToast/SToast.js +8 -0
- package/dist/components/SToast/SToast.js.map +1 -1
- package/dist/components/SToast/SToastContainer.cjs +11 -3
- package/dist/components/SToast/SToastContainer.cjs.map +1 -1
- package/dist/components/SToast/SToastContainer.js +11 -3
- package/dist/components/SToast/SToastContainer.js.map +1 -1
- package/dist/components/STooltip/STooltip.cjs +217 -14
- package/dist/components/STooltip/STooltip.cjs.map +1 -1
- package/dist/components/STooltip/STooltip.js +217 -14
- package/dist/components/STooltip/STooltip.js.map +1 -1
- package/dist/index.cjs +532 -300
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +531 -300
- package/dist/index.js.map +1 -1
- package/dist/lib/floating-anim.cjs +8 -0
- package/dist/lib/floating-anim.cjs.map +1 -1
- package/dist/lib/floating-anim.d.ts +5 -1
- package/dist/lib/floating-anim.js +8 -0
- package/dist/lib/floating-anim.js.map +1 -1
- package/dist/styles.css +175 -66
- package/dist/theme.css +49 -22
- package/package.json +1 -1
|
@@ -2951,11 +2951,11 @@ var RADIUS = 34;
|
|
|
2951
2951
|
var STROKE = 12;
|
|
2952
2952
|
var CIRCUMFERENCE = 2 * Math.PI * RADIUS;
|
|
2953
2953
|
var COLOR_MAP = {
|
|
2954
|
-
primary: { arc: "var(--cmp-
|
|
2954
|
+
primary: { arc: "var(--cmp-progress-active-color)", track: "var(--cmp-progress-color-track)" },
|
|
2955
2955
|
// inverse: 어두운 배경용 — arc 흰색, track 은 흰색 40%(회색 링)
|
|
2956
2956
|
inverse: { arc: "var(--color-white)", track: "rgba(255,255,255,0.4)" },
|
|
2957
|
-
error: { arc: "var(--color-red-75)", track: "var(--cmp-
|
|
2958
|
-
complete: { arc: "#01BB4B", track: "var(--cmp-
|
|
2957
|
+
error: { arc: "var(--color-red-75)", track: "var(--cmp-progress-color-track)" },
|
|
2958
|
+
complete: { arc: "#01BB4B", track: "var(--cmp-progress-color-track)" }
|
|
2959
2959
|
};
|
|
2960
2960
|
var clamp = (v) => Number.isFinite(v) ? Math.max(0, Math.min(100, v)) : 0;
|
|
2961
2961
|
var SCircleProgress = react.forwardRef(
|
|
@@ -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 })
|
|
@@ -3126,12 +3124,20 @@ function usePortalContainer() {
|
|
|
3126
3124
|
// src/lib/floating-anim.ts
|
|
3127
3125
|
var FLOATING_SLIDE_ANIM = [
|
|
3128
3126
|
"data-[state=open]:data-[side=top]:animate-floating-in-top",
|
|
3127
|
+
"data-[state=delayed-open]:data-[side=top]:animate-floating-in-top",
|
|
3128
|
+
"data-[state=instant-open]:data-[side=top]:animate-floating-in-top",
|
|
3129
3129
|
"data-[state=closed]:data-[side=top]:animate-floating-out-top",
|
|
3130
3130
|
"data-[state=open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
3131
|
+
"data-[state=delayed-open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
3132
|
+
"data-[state=instant-open]:data-[side=bottom]:animate-floating-in-bottom",
|
|
3131
3133
|
"data-[state=closed]:data-[side=bottom]:animate-floating-out-bottom",
|
|
3132
3134
|
"data-[state=open]:data-[side=left]:animate-floating-in-left",
|
|
3135
|
+
"data-[state=delayed-open]:data-[side=left]:animate-floating-in-left",
|
|
3136
|
+
"data-[state=instant-open]:data-[side=left]:animate-floating-in-left",
|
|
3133
3137
|
"data-[state=closed]:data-[side=left]:animate-floating-out-left",
|
|
3134
3138
|
"data-[state=open]:data-[side=right]:animate-floating-in-right",
|
|
3139
|
+
"data-[state=delayed-open]:data-[side=right]:animate-floating-in-right",
|
|
3140
|
+
"data-[state=instant-open]:data-[side=right]:animate-floating-in-right",
|
|
3135
3141
|
"data-[state=closed]:data-[side=right]:animate-floating-out-right"
|
|
3136
3142
|
].join(" ");
|
|
3137
3143
|
|
|
@@ -3326,7 +3332,8 @@ var HIDE_DELAY_MS = 100;
|
|
|
3326
3332
|
function useBody(content, message = []) {
|
|
3327
3333
|
if (content != null) return content;
|
|
3328
3334
|
if (message.length === 0) return null;
|
|
3329
|
-
|
|
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)) });
|
|
3330
3337
|
}
|
|
3331
3338
|
var STooltip = react.forwardRef(function STooltip2({
|
|
3332
3339
|
content,
|
|
@@ -3384,7 +3391,7 @@ var STooltip = react.forwardRef(function STooltip2({
|
|
|
3384
3391
|
if (disabled || body == null) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: triggerNode });
|
|
3385
3392
|
const isHover = trigger === "hover";
|
|
3386
3393
|
const contentClass = cn(
|
|
3387
|
-
"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)]",
|
|
3388
3395
|
FLOATING_SLIDE_ANIM,
|
|
3389
3396
|
className
|
|
3390
3397
|
);
|
|
@@ -3429,11 +3436,17 @@ var STooltip = react.forwardRef(function STooltip2({
|
|
|
3429
3436
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-[12px]", children: [
|
|
3430
3437
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: body }),
|
|
3431
3438
|
useClose && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3432
|
-
|
|
3439
|
+
SGhostButton,
|
|
3433
3440
|
{
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
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
|
+
}
|
|
3437
3450
|
}
|
|
3438
3451
|
)
|
|
3439
3452
|
] }),
|
|
@@ -3471,8 +3484,8 @@ function useFormField(field) {
|
|
|
3471
3484
|
}, [ctx, name]);
|
|
3472
3485
|
}
|
|
3473
3486
|
var FIELD_SIZE = {
|
|
3474
|
-
sm: { height: 28, radius: 4, fieldGap: 12, labelGap: 6, fontSize: 12, lineHeight: 20, icon:
|
|
3475
|
-
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 }
|
|
3476
3489
|
};
|
|
3477
3490
|
var ALIGN = {
|
|
3478
3491
|
start: "flex-start",
|
|
@@ -3487,6 +3500,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3487
3500
|
labelTooltip = "",
|
|
3488
3501
|
labelTooltipProps,
|
|
3489
3502
|
labelWidth,
|
|
3503
|
+
labelHeight,
|
|
3490
3504
|
size = "sm",
|
|
3491
3505
|
addonLabel = "",
|
|
3492
3506
|
addonAlign = "start",
|
|
@@ -3501,6 +3515,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3501
3515
|
readOnly = false,
|
|
3502
3516
|
width,
|
|
3503
3517
|
multiline = false,
|
|
3518
|
+
borderless = false,
|
|
3504
3519
|
children,
|
|
3505
3520
|
className,
|
|
3506
3521
|
style,
|
|
@@ -3534,8 +3549,8 @@ var SField = react.forwardRef(function SField2({
|
|
|
3534
3549
|
const resolvedSuccess = status === "pass";
|
|
3535
3550
|
const showError = resolvedError && errorMessage !== "";
|
|
3536
3551
|
const interactive = !disabled && !readOnly;
|
|
3537
|
-
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)";
|
|
3538
|
-
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)";
|
|
3539
3554
|
const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
|
|
3540
3555
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3541
3556
|
"div",
|
|
@@ -3552,7 +3567,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3552
3567
|
{
|
|
3553
3568
|
className: "flex shrink-0 items-center font-bold text-(--sys-color-field-text-default)",
|
|
3554
3569
|
style: {
|
|
3555
|
-
height: s.height,
|
|
3570
|
+
height: cssLen(labelHeight) ?? s.height,
|
|
3556
3571
|
marginRight: s.fieldGap,
|
|
3557
3572
|
width: cssLen(labelWidth),
|
|
3558
3573
|
fontSize: s.fontSize,
|
|
@@ -3578,14 +3593,14 @@ var SField = react.forwardRef(function SField2({
|
|
|
3578
3593
|
{
|
|
3579
3594
|
className: cn(
|
|
3580
3595
|
"relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
|
|
3581
|
-
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]",
|
|
3582
3597
|
disabled && "cursor-not-allowed"
|
|
3583
3598
|
),
|
|
3584
3599
|
style: {
|
|
3585
3600
|
// @ts-expect-error CSS 변수
|
|
3586
3601
|
"--field-bc": borderColor,
|
|
3587
3602
|
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
3588
|
-
...interactive && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3603
|
+
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3589
3604
|
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3590
3605
|
"width": cssLen(width),
|
|
3591
3606
|
"borderRadius": s.radius,
|
|
@@ -3630,15 +3645,28 @@ function flattenOptions(options, depth = 1) {
|
|
|
3630
3645
|
const out = [];
|
|
3631
3646
|
for (const o of options) {
|
|
3632
3647
|
const hasChildren = Array.isArray(o.children) && o.children.length > 0;
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
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
|
+
}
|
|
3642
3670
|
}
|
|
3643
3671
|
return out;
|
|
3644
3672
|
}
|
|
@@ -3762,6 +3790,9 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3762
3790
|
);
|
|
3763
3791
|
const flat = react.useMemo(() => flattenOptions(options), [options]);
|
|
3764
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;
|
|
3765
3796
|
const showSearch = useSearch && selectable.length >= SEARCH_THRESHOLD;
|
|
3766
3797
|
const labelByValue = react.useMemo(() => new Map(flat.map((o) => [o.value, o.label])), [flat]);
|
|
3767
3798
|
const rawByValue = react.useMemo(() => new Map(flat.map((o) => [o.value, o.raw])), [flat]);
|
|
@@ -3812,6 +3843,7 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3812
3843
|
const selectStore = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3813
3844
|
Ariakit__namespace.SelectProvider,
|
|
3814
3845
|
{
|
|
3846
|
+
animated: portalContainer == null ? 150 : false,
|
|
3815
3847
|
value: multi ? selected : selected[0] ?? "",
|
|
3816
3848
|
setValue: (v) => emit(Array.isArray(v) ? v : v === "" ? [] : [v]),
|
|
3817
3849
|
open,
|
|
@@ -3827,10 +3859,10 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3827
3859
|
Ariakit__namespace.Select,
|
|
3828
3860
|
{
|
|
3829
3861
|
ref: triggerRef,
|
|
3830
|
-
disabled,
|
|
3862
|
+
disabled: effectiveDisabled,
|
|
3831
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",
|
|
3832
3864
|
style: {
|
|
3833
|
-
color:
|
|
3865
|
+
color: effectiveDisabled ? "var(--cmp-select-text-disabled)" : isPlaceholder ? "var(--cmp-select-icon-default)" : "var(--cmp-select-text-default)"
|
|
3834
3866
|
},
|
|
3835
3867
|
children: [
|
|
3836
3868
|
isHtmlLabel(triggerText) ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3845,7 +3877,7 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3845
3877
|
{
|
|
3846
3878
|
name: "chevronDown",
|
|
3847
3879
|
size: 12,
|
|
3848
|
-
color:
|
|
3880
|
+
color: effectiveDisabled ? "var(--cmp-select-icon-disabled)" : "var(--cmp-select-icon-default)",
|
|
3849
3881
|
className: cn("shrink-0 transition-transform duration-200", open && "rotate-180")
|
|
3850
3882
|
}
|
|
3851
3883
|
)
|
|
@@ -3859,7 +3891,7 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3859
3891
|
portalElement: portalContainer,
|
|
3860
3892
|
gutter: 4,
|
|
3861
3893
|
sameWidth: !dropdownWidth,
|
|
3862
|
-
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",
|
|
3863
3895
|
style: {
|
|
3864
3896
|
maxHeight: dropdownHeight,
|
|
3865
3897
|
...dropdownWidth ? { width: dropdownWidth } : {},
|
|
@@ -3900,7 +3932,7 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3900
3932
|
),
|
|
3901
3933
|
hasItems ? /* @__PURE__ */ jsxRuntime.jsx(ItemList, { items: filtered, multi, selected, useSearch: showSearch }) : (
|
|
3902
3934
|
// 원본 sd-select-listbox__empty (표시할 항목이 없을 때)
|
|
3903
|
-
/* @__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." })
|
|
3904
3936
|
)
|
|
3905
3937
|
]
|
|
3906
3938
|
}
|
|
@@ -3923,7 +3955,7 @@ var SSelect = react.forwardRef(function SSelect2({
|
|
|
3923
3955
|
error: error || ruleError !== "",
|
|
3924
3956
|
status: rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0,
|
|
3925
3957
|
errorMessage: ruleError !== "" ? ruleError : errorMessage,
|
|
3926
|
-
disabled,
|
|
3958
|
+
disabled: effectiveDisabled,
|
|
3927
3959
|
width,
|
|
3928
3960
|
className,
|
|
3929
3961
|
style,
|
|
@@ -3958,7 +3990,11 @@ function ItemList({
|
|
|
3958
3990
|
{
|
|
3959
3991
|
className: cn(
|
|
3960
3992
|
"select-none py-[4px] pr-[12px] text-[12px] leading-[20px] text-[color:var(--cmp-listItem-content-default)]",
|
|
3961
|
-
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)]"
|
|
3962
3998
|
),
|
|
3963
3999
|
style: { paddingLeft: padLeft },
|
|
3964
4000
|
children: o.label
|
|
@@ -3985,15 +4021,21 @@ function ItemList({
|
|
|
3985
4021
|
"span",
|
|
3986
4022
|
{
|
|
3987
4023
|
className: cn(
|
|
3988
|
-
"flex h-[16px] w-[16px] flex-shrink-0 items-center justify-center rounded-[2px] border border-solid
|
|
3989
|
-
|
|
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
|
+
)
|
|
3990
4032
|
),
|
|
3991
4033
|
children: isSelected && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3992
4034
|
SIcon,
|
|
3993
4035
|
{
|
|
3994
4036
|
name: "checkboxCheck",
|
|
3995
4037
|
size: 12,
|
|
3996
|
-
color: "var(--cmp-checkbox-checked-icon-default)"
|
|
4038
|
+
color: o.disabled ? "var(--cmp-checkbox-checked-icon-disabled)" : "var(--cmp-checkbox-checked-icon-default)"
|
|
3997
4039
|
}
|
|
3998
4040
|
)
|
|
3999
4041
|
}
|