sellmate-design-system-react 0.6.1 → 0.8.0
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 +62 -48
- package/dist/components/SBarcodeInput/SBarcodeInput.cjs.map +1 -1
- package/dist/components/SBarcodeInput/SBarcodeInput.js +62 -48
- package/dist/components/SBarcodeInput/SBarcodeInput.js.map +1 -1
- package/dist/components/SChipInput/SChipInput.cjs +62 -48
- package/dist/components/SChipInput/SChipInput.cjs.map +1 -1
- package/dist/components/SChipInput/SChipInput.js +62 -48
- package/dist/components/SChipInput/SChipInput.js.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.cjs +62 -48
- package/dist/components/SDatePicker/SDatePicker.cjs.map +1 -1
- package/dist/components/SDatePicker/SDatePicker.js +62 -48
- package/dist/components/SDatePicker/SDatePicker.js.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs +62 -48
- package/dist/components/SDateRangePicker/SDateRangePicker.cjs.map +1 -1
- package/dist/components/SDateRangePicker/SDateRangePicker.js +62 -48
- package/dist/components/SDateRangePicker/SDateRangePicker.js.map +1 -1
- package/dist/components/SField/SField.cjs +62 -48
- package/dist/components/SField/SField.cjs.map +1 -1
- package/dist/components/SField/SField.d.ts +6 -1
- package/dist/components/SField/SField.js +62 -48
- package/dist/components/SField/SField.js.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.cjs +62 -48
- package/dist/components/SFilePicker/SFilePicker.cjs.map +1 -1
- package/dist/components/SFilePicker/SFilePicker.js +62 -48
- package/dist/components/SFilePicker/SFilePicker.js.map +1 -1
- package/dist/components/SInput/SInput.cjs +62 -48
- package/dist/components/SInput/SInput.cjs.map +1 -1
- package/dist/components/SInput/SInput.js +62 -48
- package/dist/components/SInput/SInput.js.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs +74 -49
- package/dist/components/SKeyValueTable/SKeyValueTable.cjs.map +1 -1
- package/dist/components/SKeyValueTable/SKeyValueTable.js +74 -49
- package/dist/components/SKeyValueTable/SKeyValueTable.js.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.cjs +62 -48
- package/dist/components/SNumberInput/SNumberInput.cjs.map +1 -1
- package/dist/components/SNumberInput/SNumberInput.js +62 -48
- 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 +18 -1
- package/dist/components/SPopup/SPopup.cjs.map +1 -1
- package/dist/components/SPopup/SPopup.js +18 -1
- package/dist/components/SPopup/SPopup.js.map +1 -1
- package/dist/components/SScrollArea/SScrollArea.cjs +64 -0
- package/dist/components/SScrollArea/SScrollArea.cjs.map +1 -0
- package/dist/components/SScrollArea/SScrollArea.d.ts +21 -0
- package/dist/components/SScrollArea/SScrollArea.js +62 -0
- package/dist/components/SScrollArea/SScrollArea.js.map +1 -0
- package/dist/components/SScrollArea/index.d.ts +2 -0
- package/dist/components/SScrollArea/scrollArea.config.d.ts +2 -0
- package/dist/components/SSelect/SSelect.cjs +74 -49
- package/dist/components/SSelect/SSelect.cjs.map +1 -1
- package/dist/components/SSelect/SSelect.js +74 -49
- package/dist/components/SSelect/SSelect.js.map +1 -1
- package/dist/components/SStepper/SStepper.cjs +7 -11
- package/dist/components/SStepper/SStepper.cjs.map +1 -1
- package/dist/components/SStepper/SStepper.js +7 -11
- package/dist/components/SStepper/SStepper.js.map +1 -1
- package/dist/components/STable/STable.cjs +83 -55
- package/dist/components/STable/STable.cjs.map +1 -1
- package/dist/components/STable/STable.d.ts +2 -0
- package/dist/components/STable/STable.js +83 -55
- package/dist/components/STable/STable.js.map +1 -1
- package/dist/components/STextarea/STextarea.cjs +62 -48
- package/dist/components/STextarea/STextarea.cjs.map +1 -1
- package/dist/components/STextarea/STextarea.js +62 -48
- package/dist/components/STextarea/STextarea.js.map +1 -1
- package/dist/components/STimePicker/STimePicker.cjs +91 -54
- package/dist/components/STimePicker/STimePicker.cjs.map +1 -1
- package/dist/components/STimePicker/STimePicker.js +91 -54
- package/dist/components/STimePicker/STimePicker.js.map +1 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.cjs +93 -54
- package/dist/components/STimeRangePicker/STimeRangePicker.cjs.map +1 -1
- package/dist/components/STimeRangePicker/STimeRangePicker.js +93 -54
- package/dist/components/STimeRangePicker/STimeRangePicker.js.map +1 -1
- package/dist/index.cjs +220 -81
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +218 -82
- package/dist/index.js.map +1 -1
- package/dist/lib/scrollbar.cjs +15 -0
- package/dist/lib/scrollbar.cjs.map +1 -0
- package/dist/lib/scrollbar.d.ts +32 -0
- package/dist/lib/scrollbar.js +10 -0
- package/dist/lib/scrollbar.js.map +1 -0
- package/dist/styles.css +168 -17
- package/package.json +1 -1
|
@@ -3280,6 +3280,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3280
3280
|
disabled = false,
|
|
3281
3281
|
readOnly = false,
|
|
3282
3282
|
width,
|
|
3283
|
+
minWidth,
|
|
3283
3284
|
multiline = false,
|
|
3284
3285
|
borderless = false,
|
|
3285
3286
|
children,
|
|
@@ -3315,6 +3316,7 @@ var SField = react.forwardRef(function SField2({
|
|
|
3315
3316
|
const resolvedSuccess = status === "pass";
|
|
3316
3317
|
const showError = resolvedError && errorMessage !== "";
|
|
3317
3318
|
const interactive = !disabled && !readOnly;
|
|
3319
|
+
const hug = cssLen(width) !== void 0;
|
|
3318
3320
|
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)";
|
|
3319
3321
|
const bgColor = borderless ? "transparent" : disabled ? "var(--color-grey-30)" : readOnly ? "var(--sys-color-field-bg-readOnly)" : "var(--sys-color-field-bg-default)";
|
|
3320
3322
|
const textColor = disabled ? "var(--color-grey-65)" : readOnly ? "var(--sys-color-field-text-readOnly)" : "var(--sys-color-field-text-default)";
|
|
@@ -3323,7 +3325,13 @@ var SField = react.forwardRef(function SField2({
|
|
|
3323
3325
|
{
|
|
3324
3326
|
ref: rootRef,
|
|
3325
3327
|
"data-name": name || void 0,
|
|
3326
|
-
className: cn(
|
|
3328
|
+
className: cn(
|
|
3329
|
+
"h-fit flex-col",
|
|
3330
|
+
// hug 시 inline-flex 를 유지하면 기존에 세로로 쌓여 있던 필드들이 한 줄에 붙어버리므로
|
|
3331
|
+
// 블록 레벨(flex)로 두어 쌓임은 그대로 유지한다. 나란히 놓으려면 부모를 flex 로.
|
|
3332
|
+
hug ? "flex w-fit max-w-full" : "inline-flex w-full",
|
|
3333
|
+
className
|
|
3334
|
+
),
|
|
3327
3335
|
style,
|
|
3328
3336
|
onMouseEnter,
|
|
3329
3337
|
onMouseLeave,
|
|
@@ -3361,54 +3369,60 @@ var SField = react.forwardRef(function SField2({
|
|
|
3361
3369
|
]
|
|
3362
3370
|
}
|
|
3363
3371
|
),
|
|
3364
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3365
|
-
|
|
3366
|
-
|
|
3367
|
-
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3371
|
-
|
|
3372
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3373
|
+
"div",
|
|
3374
|
+
{
|
|
3375
|
+
className: cn("flex min-w-0 flex-col", !hug && "flex-1"),
|
|
3376
|
+
style: { width: cssLen(width), minWidth: cssLen(minWidth) },
|
|
3377
|
+
children: [
|
|
3378
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3379
|
+
"div",
|
|
3380
|
+
{
|
|
3381
|
+
className: cn(
|
|
3382
|
+
"relative box-border flex min-w-0 items-stretch overflow-hidden border border-solid border-(--field-bc)",
|
|
3383
|
+
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]",
|
|
3384
|
+
disabled && "cursor-not-allowed"
|
|
3385
|
+
),
|
|
3386
|
+
style: {
|
|
3387
|
+
// @ts-expect-error CSS 변수
|
|
3388
|
+
"--field-bc": borderColor,
|
|
3389
|
+
// focused/hovered prop이 명시된 경우 강조를 즉시 반영
|
|
3390
|
+
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3391
|
+
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3392
|
+
"borderRadius": s.radius,
|
|
3393
|
+
"background": bgColor,
|
|
3394
|
+
"color": textColor
|
|
3395
|
+
},
|
|
3396
|
+
"data-focused": focused || void 0,
|
|
3397
|
+
"data-hovered": hovered || void 0,
|
|
3398
|
+
children: [
|
|
3399
|
+
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3400
|
+
"div",
|
|
3401
|
+
{
|
|
3402
|
+
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",
|
|
3403
|
+
style: {
|
|
3404
|
+
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3405
|
+
width: cssLen(labelWidth),
|
|
3406
|
+
justifyContent: ALIGN[addonAlign],
|
|
3407
|
+
background: "var(--cmp-field-addonLabel-bg)",
|
|
3408
|
+
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3409
|
+
borderTopLeftRadius: s.radius - 1,
|
|
3410
|
+
borderBottomLeftRadius: s.radius - 1
|
|
3411
|
+
},
|
|
3412
|
+
children: [
|
|
3413
|
+
icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3414
|
+
effectiveAddonLabel
|
|
3415
|
+
]
|
|
3416
|
+
}
|
|
3417
|
+
),
|
|
3418
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3419
|
+
]
|
|
3420
|
+
}
|
|
3372
3421
|
),
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
...interactive && !borderless && focused ? { boxShadow: "0px 0px 4px 0px #0071ff66" } : {},
|
|
3378
|
-
...multiline ? { minHeight: s.height } : { height: s.height },
|
|
3379
|
-
"width": cssLen(width),
|
|
3380
|
-
"borderRadius": s.radius,
|
|
3381
|
-
"background": bgColor,
|
|
3382
|
-
"color": textColor
|
|
3383
|
-
},
|
|
3384
|
-
"data-focused": focused || void 0,
|
|
3385
|
-
"data-hovered": hovered || void 0,
|
|
3386
|
-
children: [
|
|
3387
|
-
effectiveAddonLabel !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3388
|
-
"div",
|
|
3389
|
-
{
|
|
3390
|
-
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",
|
|
3391
|
-
style: {
|
|
3392
|
-
// 원본 sd-field: labelWidth가 addon 폭(--sd-field-addon-width)에도 적용됨
|
|
3393
|
-
width: cssLen(labelWidth),
|
|
3394
|
-
justifyContent: ALIGN[addonAlign],
|
|
3395
|
-
background: "var(--cmp-field-addonLabel-bg)",
|
|
3396
|
-
borderRightColor: disabled ? "var(--cmp-field-addonLabel-border-disabled)" : "var(--cmp-field-addonLabel-border-default)",
|
|
3397
|
-
borderTopLeftRadius: s.radius - 1,
|
|
3398
|
-
borderBottomLeftRadius: s.radius - 1
|
|
3399
|
-
},
|
|
3400
|
-
children: [
|
|
3401
|
-
icon && !label && /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: icon, size: s.icon, color: iconColor }),
|
|
3402
|
-
effectiveAddonLabel
|
|
3403
|
-
]
|
|
3404
|
-
}
|
|
3405
|
-
),
|
|
3406
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1", children })
|
|
3407
|
-
]
|
|
3408
|
-
}
|
|
3409
|
-
),
|
|
3410
|
-
showError ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-hint-color)", children: hint }) : null
|
|
3411
|
-
] })
|
|
3422
|
+
showError ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-errorMessage-color)", children: errorMessage }) : hint !== "" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-(--cmp-field-contents-gap) text-12 font-normal leading-20 text-(--cmp-field-hint-color)", children: hint }) : null
|
|
3423
|
+
]
|
|
3424
|
+
}
|
|
3425
|
+
)
|
|
3412
3426
|
] })
|
|
3413
3427
|
}
|
|
3414
3428
|
);
|
|
@@ -3468,6 +3482,8 @@ function formatTimeDisplay(value, type) {
|
|
|
3468
3482
|
const displayHour = hour % 12 === 0 ? 12 : hour % 12;
|
|
3469
3483
|
return `${meridiem} ${padTimePart(displayHour)}:${padTimePart(minute)}`;
|
|
3470
3484
|
}
|
|
3485
|
+
var TIME_SELECTOR_WIDTH = 136;
|
|
3486
|
+
var MERIDIEM_TIME_SELECTOR_WIDTH = 154;
|
|
3471
3487
|
function TimeSelector({
|
|
3472
3488
|
value,
|
|
3473
3489
|
useMeridiem,
|
|
@@ -3706,7 +3722,9 @@ function STimePicker({
|
|
|
3706
3722
|
style
|
|
3707
3723
|
}) {
|
|
3708
3724
|
const portalContainer = usePortalContainer();
|
|
3725
|
+
const triggerRef = react.useRef(null);
|
|
3709
3726
|
const [open, setOpen] = react.useState(false);
|
|
3727
|
+
const [popoverAlignOffset, setPopoverAlignOffset] = react.useState(0);
|
|
3710
3728
|
const [focused, setFocused] = react.useState(false);
|
|
3711
3729
|
const [ruleError, setRuleError] = react.useState("");
|
|
3712
3730
|
const dims = TIMEPICKER_SIZE_CONFIG[size] ?? TIMEPICKER_SIZE_CONFIG.sm;
|
|
@@ -3727,6 +3745,11 @@ function STimePicker({
|
|
|
3727
3745
|
const resolvedStatus = status ?? (rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0);
|
|
3728
3746
|
const commitOpen = (next) => {
|
|
3729
3747
|
if (disabled) return;
|
|
3748
|
+
if (next) {
|
|
3749
|
+
const triggerWidth = triggerRef.current?.getBoundingClientRect().width ?? 0;
|
|
3750
|
+
const selectorWidth = effectiveUseMeridiem ? MERIDIEM_TIME_SELECTOR_WIDTH : TIME_SELECTOR_WIDTH;
|
|
3751
|
+
setPopoverAlignOffset(Math.max(0, (triggerWidth - selectorWidth) / 2));
|
|
3752
|
+
}
|
|
3730
3753
|
setOpen(next);
|
|
3731
3754
|
onOpenChange?.(next);
|
|
3732
3755
|
if (!next && rules && rules.length > 0) setRuleError(runRules(value, rules));
|
|
@@ -3753,19 +3776,32 @@ function STimePicker({
|
|
|
3753
3776
|
focused: focused || open,
|
|
3754
3777
|
errorMessage: ruleError !== "" ? ruleError : errorMessage,
|
|
3755
3778
|
width,
|
|
3779
|
+
minWidth: dims.fieldMinWidth,
|
|
3756
3780
|
disabled,
|
|
3757
3781
|
className,
|
|
3758
|
-
style
|
|
3782
|
+
style,
|
|
3759
3783
|
children: /* @__PURE__ */ jsxRuntime.jsxs(RPopover2__namespace.Root, { open, onOpenChange: commitOpen, children: [
|
|
3760
3784
|
/* @__PURE__ */ jsxRuntime.jsx(RPopover2__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3761
|
-
"
|
|
3785
|
+
"div",
|
|
3762
3786
|
{
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
disabled,
|
|
3787
|
+
ref: triggerRef,
|
|
3788
|
+
role: "button",
|
|
3789
|
+
"aria-disabled": disabled,
|
|
3790
|
+
tabIndex: disabled ? -1 : 0,
|
|
3791
|
+
"data-name": name,
|
|
3766
3792
|
onFocus: () => setFocused(true),
|
|
3767
3793
|
onBlur: () => setFocused(false),
|
|
3768
|
-
|
|
3794
|
+
onKeyDown: (event) => {
|
|
3795
|
+
if (disabled) return;
|
|
3796
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
3797
|
+
event.preventDefault();
|
|
3798
|
+
commitOpen(!open);
|
|
3799
|
+
}
|
|
3800
|
+
},
|
|
3801
|
+
className: cn(
|
|
3802
|
+
"flex h-full w-full items-center overflow-hidden bg-transparent outline-none",
|
|
3803
|
+
disabled ? "cursor-not-allowed" : "cursor-pointer"
|
|
3804
|
+
),
|
|
3769
3805
|
style: { padding: `0 ${dims.paddingX}`, gap: dims.gap, borderRadius: dims.radius },
|
|
3770
3806
|
children: [
|
|
3771
3807
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3811,6 +3847,7 @@ function STimePicker({
|
|
|
3811
3847
|
side: "bottom",
|
|
3812
3848
|
align: "start",
|
|
3813
3849
|
sideOffset: 4,
|
|
3850
|
+
alignOffset: popoverAlignOffset,
|
|
3814
3851
|
className: cn("z-50", FLOATING_SLIDE_ANIM),
|
|
3815
3852
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3816
3853
|
TimeSelector,
|