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
|
);
|
|
@@ -3489,6 +3503,11 @@ function formatTimeRangeDisplay(value, type) {
|
|
|
3489
3503
|
if (value == null || value[0] === "" || value[1] === "") return "";
|
|
3490
3504
|
return `${formatTimeDisplay(value[0], type)} ~ ${formatTimeDisplay(value[1], type)}`;
|
|
3491
3505
|
}
|
|
3506
|
+
var TIME_RANGE_SELECTOR_WIDTH = 345;
|
|
3507
|
+
var MIDDAY_FIELD_MIN_WIDTH = {
|
|
3508
|
+
sm: 178,
|
|
3509
|
+
md: 216
|
|
3510
|
+
};
|
|
3492
3511
|
function RangeTimeSelector({
|
|
3493
3512
|
value,
|
|
3494
3513
|
useMeridiem,
|
|
@@ -3778,7 +3797,9 @@ function STimeRangePicker({
|
|
|
3778
3797
|
style
|
|
3779
3798
|
}) {
|
|
3780
3799
|
const portalContainer = usePortalContainer();
|
|
3800
|
+
const triggerRef = react.useRef(null);
|
|
3781
3801
|
const [open, setOpen] = react.useState(false);
|
|
3802
|
+
const [popoverAlignOffset, setPopoverAlignOffset] = react.useState(0);
|
|
3782
3803
|
const [focused, setFocused] = react.useState(false);
|
|
3783
3804
|
const [ruleError, setRuleError] = react.useState("");
|
|
3784
3805
|
const dims = TIMEPICKER_SIZE_CONFIG[size] ?? TIMEPICKER_SIZE_CONFIG.sm;
|
|
@@ -3802,6 +3823,10 @@ function STimeRangePicker({
|
|
|
3802
3823
|
const resolvedStatus = status ?? (rules && rules.length > 0 ? ruleError !== "" ? "error" : void 0 : void 0);
|
|
3803
3824
|
const commitOpen = (next) => {
|
|
3804
3825
|
if (disabled) return;
|
|
3826
|
+
if (next) {
|
|
3827
|
+
const triggerWidth = triggerRef.current?.getBoundingClientRect().width ?? 0;
|
|
3828
|
+
setPopoverAlignOffset(Math.max(0, (triggerWidth - TIME_RANGE_SELECTOR_WIDTH) / 2));
|
|
3829
|
+
}
|
|
3805
3830
|
setOpen(next);
|
|
3806
3831
|
onOpenChange?.(next);
|
|
3807
3832
|
if (!next && rules && rules.length > 0) setRuleError(runRules(value, rules));
|
|
@@ -3828,19 +3853,32 @@ function STimeRangePicker({
|
|
|
3828
3853
|
focused: focused || open,
|
|
3829
3854
|
errorMessage: ruleError !== "" ? ruleError : errorMessage,
|
|
3830
3855
|
width,
|
|
3856
|
+
minWidth: effectiveUseMeridiem ? MIDDAY_FIELD_MIN_WIDTH[size] : dims.fieldMinWidth,
|
|
3831
3857
|
disabled,
|
|
3832
3858
|
className,
|
|
3833
|
-
style
|
|
3859
|
+
style,
|
|
3834
3860
|
children: /* @__PURE__ */ jsxRuntime.jsxs(RPopover2__namespace.Root, { open, onOpenChange: commitOpen, children: [
|
|
3835
3861
|
/* @__PURE__ */ jsxRuntime.jsx(RPopover2__namespace.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3836
|
-
"
|
|
3862
|
+
"div",
|
|
3837
3863
|
{
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
disabled,
|
|
3864
|
+
ref: triggerRef,
|
|
3865
|
+
role: "button",
|
|
3866
|
+
"aria-disabled": disabled,
|
|
3867
|
+
tabIndex: disabled ? -1 : 0,
|
|
3868
|
+
"data-name": name,
|
|
3841
3869
|
onFocus: () => setFocused(true),
|
|
3842
3870
|
onBlur: () => setFocused(false),
|
|
3843
|
-
|
|
3871
|
+
onKeyDown: (event) => {
|
|
3872
|
+
if (disabled) return;
|
|
3873
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
3874
|
+
event.preventDefault();
|
|
3875
|
+
commitOpen(!open);
|
|
3876
|
+
}
|
|
3877
|
+
},
|
|
3878
|
+
className: cn(
|
|
3879
|
+
"flex h-full w-full items-center overflow-hidden bg-transparent outline-none",
|
|
3880
|
+
disabled ? "cursor-not-allowed" : "cursor-pointer"
|
|
3881
|
+
),
|
|
3844
3882
|
style: { padding: `0 ${dims.paddingX}`, gap: dims.gap, borderRadius: dims.radius },
|
|
3845
3883
|
children: [
|
|
3846
3884
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3886,6 +3924,7 @@ function STimeRangePicker({
|
|
|
3886
3924
|
side: "bottom",
|
|
3887
3925
|
align: "start",
|
|
3888
3926
|
sideOffset: 4,
|
|
3927
|
+
alignOffset: popoverAlignOffset,
|
|
3889
3928
|
className: cn("z-50", FLOATING_SLIDE_ANIM),
|
|
3890
3929
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3891
3930
|
RangeTimeSelector,
|