sellmate-design-system-react 0.7.0 → 0.8.1
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/SBarcodeInput/SBarcodeInput.cjs +61 -49
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.js +61 -49
- package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
- package/dist/components/SChipInput/SChipInput.cjs +64 -49
- package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
- package/dist/components/SChipInput/SChipInput.js +64 -49
- package/dist/components/SChipInput/SChipInput.js.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.cjs +61 -49
- package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.js +61 -49
- package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs +61 -49
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.js +61 -49
- package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
- package/dist/components/SField/SField.cjs +61 -49
- package/dist/components/SField/SField.cjs.map +1 -1
- package/dist/components/SField/SField.d.ts +5 -2
- package/dist/components/SField/SField.js +61 -49
- package/dist/components/SField/SField.js.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.cjs +61 -49
- package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.js +61 -49
- package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
- package/dist/components/SInput/SInput.cjs +61 -49
- package/dist/components/SInput/SInput.cjs.map +1 -1
- package/dist/components/SInput/SInput.js +61 -49
- package/dist/components/SInput/SInput.js.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs +72 -50
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.js +72 -50
- package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.cjs +61 -49
- package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.js +61 -49
- package/dist/components/SNumberInput/SNumberInput.js.map +1 -1
- package/dist/components/SPage/SPage.cjs +19 -2
- package/dist/components/SPage/SPage.cjs.map +1 -1
- package/dist/components/SPage/SPage.d.ts +7 -1
- package/dist/components/SPage/SPage.js +19 -2
- package/dist/components/SPage/SPage.js.map +1 -1
- package/dist/components/SPage/index.d.ts +1 -0
- package/dist/components/SPage/page.config.d.ts +8 -0
- package/dist/components/SPopup/SPopup.cjs.map +1 -1
- package/dist/components/SPopup/SPopup.js.map +1 -1
- package/dist/components/SPortal/SPortal.cjs +3 -0
- package/dist/components/SPortal/SPortal.cjs.map +1 -1
- package/dist/components/SPortal/SPortal.d.ts +3 -1
- package/dist/components/SPortal/SPortal.js +3 -0
- package/dist/components/SPortal/SPortal.js.map +1 -1
- package/dist/components/SScrollArea/SScrollArea.cjs.map +1 -1
- package/dist/components/SScrollArea/SScrollArea.js.map +1 -1
- package/dist/components/SSelect/SSelect.cjs +72 -50
- package/dist/components/SSelect/SSelect.cjs.map +1 -1
- package/dist/components/SSelect/SSelect.js +72 -50
- package/dist/components/SSelect/SSelect.js.map +1 -1
- package/dist/components/STable/STable.cjs +78 -56
- package/dist/components/STable/STable.cjs.map +1 -1
- package/dist/components/STable/STable.d.ts +2 -0
- package/dist/components/STable/STable.js +78 -56
- package/dist/components/STable/STable.js.map +1 -1
- package/dist/components/STextarea/STextarea.cjs +61 -49
- package/dist/components/STextarea/STextarea.cjs.map +1 -1
- package/dist/components/STextarea/STextarea.js +61 -49
- package/dist/components/STextarea/STextarea.js.map +1 -1
- package/dist/components/STimePicker/STimePicker.cjs +61 -49
- package/dist/components/STimePicker/STimePicker.cjs.map +1 -1
- package/dist/components/STimePicker/STimePicker.js +61 -49
- package/dist/components/STimePicker/STimePicker.js.map +1 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.cjs +61 -49
- package/dist/components/STimeRangePicker/STimeRangePicker.cjs.map +1 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.js +61 -49
- package/dist/components/STimeRangePicker/STimeRangePicker.js.map +1 -1
- package/dist/index.cjs +95 -58
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +95 -59
- package/dist/index.js.map +1 -1
- package/dist/lib/scrollbar.cjs +2 -0
- package/dist/lib/scrollbar.cjs.map +1 -1
- package/dist/lib/scrollbar.d.ts +13 -1
- package/dist/lib/scrollbar.js +2 -1
- package/dist/lib/scrollbar.js.map +1 -1
- package/dist/styles.css +53 -3
- package/package.json +1 -1
|
@@ -3372,6 +3372,7 @@ var SField = forwardRef(function SField2({
|
|
|
3372
3372
|
const resolvedSuccess = status === "pass";
|
|
3373
3373
|
const showError = resolvedError && errorMessage !== "";
|
|
3374
3374
|
const interactive = !disabled && !readOnly;
|
|
3375
|
+
const hug = cssLen(width) !== void 0;
|
|
3375
3376
|
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)";
|
|
3376
3377
|
const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
3377
3378
|
const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
|
|
@@ -3380,7 +3381,13 @@ var SField = forwardRef(function SField2({
|
|
|
3380
3381
|
{
|
|
3381
3382
|
ref: rootRef,
|
|
3382
3383
|
"data-name": name || void 0,
|
|
3383
|
-
className: cn(
|
|
3384
|
+
className: cn(
|
|
3385
|
+
"h-fit flex-col",
|
|
3386
|
+
// hug 시 inline-flex 를 유지하면 기존에 세로로 쌓여 있던 필드들이 한 줄에 붙어버리므로
|
|
3387
|
+
// 블록 레벨(flex)로 두어 쌓임은 그대로 유지한다. 나란히 놓으려면 부모를 flex 로.
|
|
3388
|
+
hug ? "flex w-fit max-w-full" : "inline-flex w-full",
|
|
3389
|
+
className
|
|
3390
|
+
),
|
|
3384
3391
|
style,
|
|
3385
3392
|
onMouseEnter,
|
|
3386
3393
|
onMouseLeave,
|
|
@@ -3418,55 +3425,60 @@ var SField = forwardRef(function SField2({
|
|
|
3418
3425
|
]
|
|
3419
3426
|
}
|
|
3420
3427
|
),
|
|
3421
|
-
/* @__PURE__ */ jsxs(
|
|
3422
|
-
|
|
3423
|
-
|
|
3424
|
-
|
|
3425
|
-
|
|
3426
|
-
|
|
3427
|
-
|
|
3428
|
-
|
|
3428
|
+
/* @__PURE__ */ jsxs(
|
|
3429
|
+
"div",
|
|
3430
|
+
{
|
|
3431
|
+
className: cn("flex min-w-0 flex-col", !hug && "flex-1"),
|
|
3432
|
+
style: { width: cssLen(width), minWidth: cssLen(minWidth) },
|
|
3433
|
+
children: [
|
|
3434
|
+
/* @__PURE__ */ jsxs(
|
|
3435
|
+
"div",
|
|
3436
|
+
{
|
|
3437
|
+
className: cn(
|
|
3438
|
+
"relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
|
|
3439
|
+
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]",
|
|
3440
|
+
disabled && "cursor-not-allowed"
|
|
3441
|
+
),
|
|
3442
|
+
style: {
|
|
3443
|
+
// @ts-expect-error CSS 변수
|
|
3444
|
+
"--field-bc": borderColor,
|
|
3445
|
+
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
3446
|
+
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3447
|
+
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3448
|
+
"borderRadius": s.radius,
|
|
3449
|
+
"background": bgColor,
|
|
3450
|
+
"color": textColor
|
|
3451
|
+
},
|
|
3452
|
+
"data-focused": focused || void 0,
|
|
3453
|
+
"data-hovered": hovered || void 0,
|
|
3454
|
+
children: [
|
|
3455
|
+
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxs(
|
|
3456
|
+
"div",
|
|
3457
|
+
{
|
|
3458
|
+
className: "flex shrink-0 items-center gap-(--cmp-field-addonLabel-gap) whitespace-nowrap border-r border-solid px-(--cmp-field-addonLabel-paddingX) text-12 font-medium leading-20",
|
|
3459
|
+
style: {
|
|
3460
|
+
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3461
|
+
width: cssLen(labelWidth),
|
|
3462
|
+
justifyContent: ALIGN[addonAlign],
|
|
3463
|
+
background: "var(--cmp-field-addonLabel-bg)",
|
|
3464
|
+
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3465
|
+
borderTopLeftRadius: s.radius - 1,
|
|
3466
|
+
borderBottomLeftRadius: s.radius - 1
|
|
3467
|
+
},
|
|
3468
|
+
children: [
|
|
3469
|
+
icon && !label && /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3470
|
+
effectiveAddonLabel
|
|
3471
|
+
]
|
|
3472
|
+
}
|
|
3473
|
+
),
|
|
3474
|
+
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3475
|
+
]
|
|
3476
|
+
}
|
|
3429
3477
|
),
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3435
|
-
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3436
|
-
"minWidth": cssLen(minWidth),
|
|
3437
|
-
"width": cssLen(width),
|
|
3438
|
-
"borderRadius": s.radius,
|
|
3439
|
-
"background": bgColor,
|
|
3440
|
-
"color": textColor
|
|
3441
|
-
},
|
|
3442
|
-
"data-focused": focused || void 0,
|
|
3443
|
-
"data-hovered": hovered || void 0,
|
|
3444
|
-
children: [
|
|
3445
|
-
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxs(
|
|
3446
|
-
"div",
|
|
3447
|
-
{
|
|
3448
|
-
className: "flex shrink-0 items-center gap-(--cmp-field-addonLabel-gap) whitespace-nowrap border-r border-solid px-(--cmp-field-addonLabel-paddingX) text-12 font-medium leading-20",
|
|
3449
|
-
style: {
|
|
3450
|
-
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3451
|
-
width: cssLen(labelWidth),
|
|
3452
|
-
justifyContent: ALIGN[addonAlign],
|
|
3453
|
-
background: "var(--cmp-field-addonLabel-bg)",
|
|
3454
|
-
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3455
|
-
borderTopLeftRadius: s.radius - 1,
|
|
3456
|
-
borderBottomLeftRadius: s.radius - 1
|
|
3457
|
-
},
|
|
3458
|
-
children: [
|
|
3459
|
-
icon && !label && /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3460
|
-
effectiveAddonLabel
|
|
3461
|
-
]
|
|
3462
|
-
}
|
|
3463
|
-
),
|
|
3464
|
-
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3465
|
-
]
|
|
3466
|
-
}
|
|
3467
|
-
),
|
|
3468
|
-
showError ? /* @__PURE__ */ jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-hint-color)", children: hint }) : null
|
|
3469
|
-
] })
|
|
3478
|
+
showError ? /* @__PURE__ */ jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-hint-color)", children: hint }) : null
|
|
3479
|
+
]
|
|
3480
|
+
}
|
|
3481
|
+
)
|
|
3470
3482
|
] })
|
|
3471
3483
|
}
|
|
3472
3484
|
);
|
|
@@ -3487,6 +3499,7 @@ function SPortal({
|
|
|
3487
3499
|
viewportPadding = 0,
|
|
3488
3500
|
onOpenAutoFocus,
|
|
3489
3501
|
onCloseAutoFocus,
|
|
3502
|
+
onPointerDownOutside,
|
|
3490
3503
|
children,
|
|
3491
3504
|
className,
|
|
3492
3505
|
style,
|
|
@@ -3515,7 +3528,9 @@ function SPortal({
|
|
|
3515
3528
|
onPointerDownOutside: (e) => {
|
|
3516
3529
|
if (persistent || anchorRef.current?.contains(e.target)) {
|
|
3517
3530
|
e.preventDefault();
|
|
3531
|
+
return;
|
|
3518
3532
|
}
|
|
3533
|
+
onPointerDownOutside?.(e);
|
|
3519
3534
|
},
|
|
3520
3535
|
onFocusOutside: (e) => {
|
|
3521
3536
|
if (persistent || anchorRef.current?.contains(e.target)) {
|
|
@@ -3620,6 +3635,7 @@ var SSelect = forwardRef(function SSelect2({
|
|
|
3620
3635
|
const triggerRef = useRef(null);
|
|
3621
3636
|
const searchInputRef = useRef(null);
|
|
3622
3637
|
const listRef = useRef(null);
|
|
3638
|
+
const dismissedByPointerRef = useRef(false);
|
|
3623
3639
|
const flat = useMemo(() => flattenOptions(options), [options]);
|
|
3624
3640
|
const selectable = useMemo(() => selectableOptions(flat), [flat]);
|
|
3625
3641
|
const hasLeaf = useMemo(() => flat.some((o) => !o.isGroup), [flat]);
|
|
@@ -3649,7 +3665,9 @@ var SSelect = forwardRef(function SSelect2({
|
|
|
3649
3665
|
const commitOpen = (next) => {
|
|
3650
3666
|
setOpen(next);
|
|
3651
3667
|
onOpenChange?.(next);
|
|
3652
|
-
if (
|
|
3668
|
+
if (next) {
|
|
3669
|
+
dismissedByPointerRef.current = false;
|
|
3670
|
+
} else {
|
|
3653
3671
|
setPendingOpen(false);
|
|
3654
3672
|
setSearch("");
|
|
3655
3673
|
if (rules && rules.length > 0) {
|
|
@@ -3873,8 +3891,12 @@ var SSelect = forwardRef(function SSelect2({
|
|
|
3873
3891
|
event.preventDefault();
|
|
3874
3892
|
requestAnimationFrame(() => searchInputRef.current?.focus());
|
|
3875
3893
|
},
|
|
3894
|
+
onPointerDownOutside: () => {
|
|
3895
|
+
dismissedByPointerRef.current = true;
|
|
3896
|
+
},
|
|
3876
3897
|
onCloseAutoFocus: (event) => {
|
|
3877
3898
|
event.preventDefault();
|
|
3899
|
+
if (dismissedByPointerRef.current) return;
|
|
3878
3900
|
triggerRef.current?.focus();
|
|
3879
3901
|
},
|
|
3880
3902
|
className: "rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)]",
|