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
|
@@ -3465,6 +3465,7 @@ var SField = forwardRef(function SField2({
|
|
|
3465
3465
|
const resolvedSuccess = status === "pass";
|
|
3466
3466
|
const showError = resolvedError && errorMessage !== "";
|
|
3467
3467
|
const interactive = !disabled && !readOnly;
|
|
3468
|
+
const hug = cssLen(width) !== void 0;
|
|
3468
3469
|
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)";
|
|
3469
3470
|
const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
3470
3471
|
const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
|
|
@@ -3473,7 +3474,13 @@ var SField = forwardRef(function SField2({
|
|
|
3473
3474
|
{
|
|
3474
3475
|
ref: rootRef,
|
|
3475
3476
|
"data-name": name || void 0,
|
|
3476
|
-
className: cn(
|
|
3477
|
+
className: cn(
|
|
3478
|
+
"h-fit flex-col",
|
|
3479
|
+
// hug 시 inline-flex 를 유지하면 기존에 세로로 쌓여 있던 필드들이 한 줄에 붙어버리므로
|
|
3480
|
+
// 블록 레벨(flex)로 두어 쌓임은 그대로 유지한다. 나란히 놓으려면 부모를 flex 로.
|
|
3481
|
+
hug ? "flex w-fit max-w-full" : "inline-flex w-full",
|
|
3482
|
+
className
|
|
3483
|
+
),
|
|
3477
3484
|
style,
|
|
3478
3485
|
onMouseEnter,
|
|
3479
3486
|
onMouseLeave,
|
|
@@ -3511,55 +3518,60 @@ var SField = forwardRef(function SField2({
|
|
|
3511
3518
|
]
|
|
3512
3519
|
}
|
|
3513
3520
|
),
|
|
3514
|
-
/* @__PURE__ */ jsxs(
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
|
|
3520
|
-
|
|
3521
|
-
|
|
3521
|
+
/* @__PURE__ */ jsxs(
|
|
3522
|
+
"div",
|
|
3523
|
+
{
|
|
3524
|
+
className: cn("flex min-w-0 flex-col", !hug && "flex-1"),
|
|
3525
|
+
style: { width: cssLen(width), minWidth: cssLen(minWidth) },
|
|
3526
|
+
children: [
|
|
3527
|
+
/* @__PURE__ */ jsxs(
|
|
3528
|
+
"div",
|
|
3529
|
+
{
|
|
3530
|
+
className: cn(
|
|
3531
|
+
"relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
|
|
3532
|
+
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]",
|
|
3533
|
+
disabled && "cursor-not-allowed"
|
|
3534
|
+
),
|
|
3535
|
+
style: {
|
|
3536
|
+
// @ts-expect-error CSS 변수
|
|
3537
|
+
"--field-bc": borderColor,
|
|
3538
|
+
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
3539
|
+
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3540
|
+
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3541
|
+
"borderRadius": s.radius,
|
|
3542
|
+
"background": bgColor,
|
|
3543
|
+
"color": textColor
|
|
3544
|
+
},
|
|
3545
|
+
"data-focused": focused || void 0,
|
|
3546
|
+
"data-hovered": hovered || void 0,
|
|
3547
|
+
children: [
|
|
3548
|
+
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxs(
|
|
3549
|
+
"div",
|
|
3550
|
+
{
|
|
3551
|
+
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",
|
|
3552
|
+
style: {
|
|
3553
|
+
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3554
|
+
width: cssLen(labelWidth),
|
|
3555
|
+
justifyContent: ALIGN[addonAlign],
|
|
3556
|
+
background: "var(--cmp-field-addonLabel-bg)",
|
|
3557
|
+
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3558
|
+
borderTopLeftRadius: s.radius - 1,
|
|
3559
|
+
borderBottomLeftRadius: s.radius - 1
|
|
3560
|
+
},
|
|
3561
|
+
children: [
|
|
3562
|
+
icon && !label && /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3563
|
+
effectiveAddonLabel
|
|
3564
|
+
]
|
|
3565
|
+
}
|
|
3566
|
+
),
|
|
3567
|
+
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3568
|
+
]
|
|
3569
|
+
}
|
|
3522
3570
|
),
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3528
|
-
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3529
|
-
"minWidth": cssLen(minWidth),
|
|
3530
|
-
"width": cssLen(width),
|
|
3531
|
-
"borderRadius": s.radius,
|
|
3532
|
-
"background": bgColor,
|
|
3533
|
-
"color": textColor
|
|
3534
|
-
},
|
|
3535
|
-
"data-focused": focused || void 0,
|
|
3536
|
-
"data-hovered": hovered || void 0,
|
|
3537
|
-
children: [
|
|
3538
|
-
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxs(
|
|
3539
|
-
"div",
|
|
3540
|
-
{
|
|
3541
|
-
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",
|
|
3542
|
-
style: {
|
|
3543
|
-
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3544
|
-
width: cssLen(labelWidth),
|
|
3545
|
-
justifyContent: ALIGN[addonAlign],
|
|
3546
|
-
background: "var(--cmp-field-addonLabel-bg)",
|
|
3547
|
-
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3548
|
-
borderTopLeftRadius: s.radius - 1,
|
|
3549
|
-
borderBottomLeftRadius: s.radius - 1
|
|
3550
|
-
},
|
|
3551
|
-
children: [
|
|
3552
|
-
icon && !label && /* @__PURE__ */ jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3553
|
-
effectiveAddonLabel
|
|
3554
|
-
]
|
|
3555
|
-
}
|
|
3556
|
-
),
|
|
3557
|
-
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3558
|
-
]
|
|
3559
|
-
}
|
|
3560
|
-
),
|
|
3561
|
-
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
|
|
3562
|
-
] })
|
|
3571
|
+
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
|
|
3572
|
+
]
|
|
3573
|
+
}
|
|
3574
|
+
)
|
|
3563
3575
|
] })
|
|
3564
3576
|
}
|
|
3565
3577
|
);
|
|
@@ -4236,6 +4248,7 @@ function SPortal({
|
|
|
4236
4248
|
viewportPadding = 0,
|
|
4237
4249
|
onOpenAutoFocus,
|
|
4238
4250
|
onCloseAutoFocus,
|
|
4251
|
+
onPointerDownOutside,
|
|
4239
4252
|
children,
|
|
4240
4253
|
className,
|
|
4241
4254
|
style,
|
|
@@ -4264,7 +4277,9 @@ function SPortal({
|
|
|
4264
4277
|
onPointerDownOutside: (e) => {
|
|
4265
4278
|
if (persistent || anchorRef.current?.contains(e.target)) {
|
|
4266
4279
|
e.preventDefault();
|
|
4280
|
+
return;
|
|
4267
4281
|
}
|
|
4282
|
+
onPointerDownOutside?.(e);
|
|
4268
4283
|
},
|
|
4269
4284
|
onFocusOutside: (e) => {
|
|
4270
4285
|
if (persistent || anchorRef.current?.contains(e.target)) {
|
|
@@ -4369,6 +4384,7 @@ var SSelect = forwardRef(function SSelect2({
|
|
|
4369
4384
|
const triggerRef = useRef(null);
|
|
4370
4385
|
const searchInputRef = useRef(null);
|
|
4371
4386
|
const listRef = useRef(null);
|
|
4387
|
+
const dismissedByPointerRef = useRef(false);
|
|
4372
4388
|
const flat = useMemo(() => flattenOptions(options), [options]);
|
|
4373
4389
|
const selectable = useMemo(() => selectableOptions(flat), [flat]);
|
|
4374
4390
|
const hasLeaf = useMemo(() => flat.some((o) => !o.isGroup), [flat]);
|
|
@@ -4398,7 +4414,9 @@ var SSelect = forwardRef(function SSelect2({
|
|
|
4398
4414
|
const commitOpen = (next) => {
|
|
4399
4415
|
setOpen(next);
|
|
4400
4416
|
onOpenChange?.(next);
|
|
4401
|
-
if (
|
|
4417
|
+
if (next) {
|
|
4418
|
+
dismissedByPointerRef.current = false;
|
|
4419
|
+
} else {
|
|
4402
4420
|
setPendingOpen(false);
|
|
4403
4421
|
setSearch("");
|
|
4404
4422
|
if (rules && rules.length > 0) {
|
|
@@ -4622,8 +4640,12 @@ var SSelect = forwardRef(function SSelect2({
|
|
|
4622
4640
|
event.preventDefault();
|
|
4623
4641
|
requestAnimationFrame(() => searchInputRef.current?.focus());
|
|
4624
4642
|
},
|
|
4643
|
+
onPointerDownOutside: () => {
|
|
4644
|
+
dismissedByPointerRef.current = true;
|
|
4645
|
+
},
|
|
4625
4646
|
onCloseAutoFocus: (event) => {
|
|
4626
4647
|
event.preventDefault();
|
|
4648
|
+
if (dismissedByPointerRef.current) return;
|
|
4627
4649
|
triggerRef.current?.focus();
|
|
4628
4650
|
},
|
|
4629
4651
|
className: "rounded-[var(--cmp-listBox-radius)] bg-[var(--cmp-listBox-bg)] shadow-[2px_2px_12px_2px_rgba(0,0,0,0.1)]",
|