sellmate-design-system-react 9.0.0-beta.80 → 9.0.0-beta.85
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/AGENTS.md +39 -14
- package/dist/components/SGhostButton/README.md +2 -1
- package/dist/components/SGhostButton/SGhostButton.d.ts +1 -1
- package/dist/components/SRadioButton/README.md +1 -0
- package/dist/components/SRadioButton/SRadioButton.d.ts +8 -2
- package/dist/components/SSkeleton/README.md +13 -1
- package/dist/components/SSkeleton/SSkeleton.d.ts +7 -3
- package/dist/components/SSkeleton/index.d.ts +1 -1
- package/dist/components/SSkeleton/skeleton.config.d.ts +8 -6
- package/dist/components/STimeline/README.md +41 -0
- package/dist/components/STimeline/STimeline.d.ts +27 -0
- package/dist/components/STimeline/index.d.ts +1 -0
- package/dist/index.cjs +176 -47
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +175 -48
- package/dist/index.js.map +1 -1
- package/dist/llms-full.txt +101 -18
- package/dist/llms.txt +44 -18
- package/dist/styles.css +106 -4
- package/dist/theme.css +25 -2
- package/eslint/scale.gen.mjs +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -4875,8 +4875,22 @@ function useFormField(field) {
|
|
|
4875
4875
|
}, [ctx, name]);
|
|
4876
4876
|
}
|
|
4877
4877
|
var FIELD_SIZE = {
|
|
4878
|
-
sm: {
|
|
4879
|
-
|
|
4878
|
+
sm: {
|
|
4879
|
+
height: 28,
|
|
4880
|
+
radius: 4,
|
|
4881
|
+
fieldGap: 12,
|
|
4882
|
+
labelGap: 6,
|
|
4883
|
+
labelTypo: "typo-field-sm-bold",
|
|
4884
|
+
icon: 16
|
|
4885
|
+
},
|
|
4886
|
+
md: {
|
|
4887
|
+
height: 36,
|
|
4888
|
+
radius: 6,
|
|
4889
|
+
fieldGap: 16,
|
|
4890
|
+
labelGap: 8,
|
|
4891
|
+
labelTypo: "typo-field-md-bold",
|
|
4892
|
+
icon: 16
|
|
4893
|
+
}
|
|
4880
4894
|
};
|
|
4881
4895
|
var ALIGN = {
|
|
4882
4896
|
start: "flex-start",
|
|
@@ -4986,7 +5000,10 @@ var SField = /* @__PURE__ */ react.forwardRef(function SField2({
|
|
|
4986
5000
|
label !== "" && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4987
5001
|
"div",
|
|
4988
5002
|
{
|
|
4989
|
-
className:
|
|
5003
|
+
className: cn(
|
|
5004
|
+
"flex shrink-0 items-center text-(--sys-color-field-text-default)",
|
|
5005
|
+
s.labelTypo
|
|
5006
|
+
),
|
|
4990
5007
|
style: {
|
|
4991
5008
|
// 위에 선 라벨은 제 글줄 높이만 차지한다 — 컨트롤 높이에 맞춰 늘리면
|
|
4992
5009
|
// 라벨과 컨트롤 사이가 간격 토큰보다 넓어진다. 줄 세우기용 labelWidth 도
|
|
@@ -4995,9 +5012,7 @@ var SField = /* @__PURE__ */ react.forwardRef(function SField2({
|
|
|
4995
5012
|
height: cssLen(labelHeight) ?? s.height,
|
|
4996
5013
|
marginRight: s.fieldGap,
|
|
4997
5014
|
width: cssLen(labelWidth)
|
|
4998
|
-
}
|
|
4999
|
-
fontSize: s.fontSize,
|
|
5000
|
-
lineHeight: `${s.lineHeight}px`
|
|
5015
|
+
}
|
|
5001
5016
|
},
|
|
5002
5017
|
children: [
|
|
5003
5018
|
icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -5170,16 +5185,22 @@ var STextarea = /* @__PURE__ */ react.forwardRef(function STextarea2({
|
|
|
5170
5185
|
},
|
|
5171
5186
|
[ref]
|
|
5172
5187
|
);
|
|
5188
|
+
const autoSizedRef = react.useRef(false);
|
|
5189
|
+
const styleHeight = textareaStyle?.height;
|
|
5173
5190
|
react.useLayoutEffect(() => {
|
|
5174
5191
|
const el = innerRef.current;
|
|
5175
5192
|
if (el == null) return;
|
|
5176
5193
|
if (!autogrow) {
|
|
5177
|
-
|
|
5194
|
+
if (autoSizedRef.current) {
|
|
5195
|
+
el.style.height = typeof styleHeight === "number" ? `${styleHeight}px` : styleHeight ?? "";
|
|
5196
|
+
autoSizedRef.current = false;
|
|
5197
|
+
}
|
|
5178
5198
|
return;
|
|
5179
5199
|
}
|
|
5180
5200
|
el.style.height = "auto";
|
|
5181
5201
|
el.style.height = `${el.scrollHeight}px`;
|
|
5182
|
-
|
|
5202
|
+
autoSizedRef.current = true;
|
|
5203
|
+
}, [autogrow, maxHeight, minHeight, rows, styleHeight, value]);
|
|
5183
5204
|
useFormField({
|
|
5184
5205
|
name: rest.name,
|
|
5185
5206
|
validate: () => {
|
|
@@ -18794,7 +18815,8 @@ function SCalendar({
|
|
|
18794
18815
|
className: cn(
|
|
18795
18816
|
"flex h-[var(--cmp-datepicker-calendar-day-circle-size)] w-[var(--cmp-datepicker-calendar-day-circle-size)] items-center justify-center rounded-[var(--cmp-datepicker-calendar-day-circle-radius)] border border-solid border-transparent text-[14px] leading-[var(--cmp-datepicker-calendar-day-circle-size)]",
|
|
18796
18817
|
selected ? "bg-[var(--cmp-datepicker-calendar-day-select-bg)] text-[color:var(--cmp-datepicker-calendar-day-select-text)]" : disabled ? "text-[color:var(--cmp-datepicker-calendar-day-disabled-text)]" : "text-[color:var(--cmp-datepicker-calendar-day-default-text)] hover:border-[color:var(--cmp-datepicker-calendar-day-hover-border)] hover:text-[color:var(--cmp-datepicker-calendar-day-hover-text)]",
|
|
18797
|
-
|
|
18818
|
+
// 오늘: datepicker.calendar.day.typography.bold (→ typography.field.md.bold) 의 굵기
|
|
18819
|
+
isToday && !disabled && "font-semibold"
|
|
18798
18820
|
),
|
|
18799
18821
|
children: cell.inCurrentMonth ? cell.day : ""
|
|
18800
18822
|
}
|
|
@@ -19522,7 +19544,8 @@ function RangeCalendar({
|
|
|
19522
19544
|
"relative z-[1] flex h-[var(--cmp-datepicker-calendar-day-circle-size)] w-[var(--cmp-datepicker-calendar-day-circle-size)] items-center justify-center rounded-[var(--cmp-datepicker-calendar-day-circle-radius)] border border-solid border-transparent bg-transparent text-[14px]",
|
|
19523
19545
|
!cell.inCurrentMonth ? "invisible pointer-events-none" : disabled ? "cursor-not-allowed" : "cursor-pointer",
|
|
19524
19546
|
isEdge ? "bg-[var(--cmp-datepicker-calendar-day-select-bg)] text-[color:var(--cmp-datepicker-calendar-day-select-text)]" : disabled ? "text-[color:var(--cmp-datepicker-calendar-day-disabled-text)]" : "text-[color:var(--cmp-datepicker-calendar-day-default-text)] hover:border-[color:var(--cmp-datepicker-calendar-day-hover-border)] hover:text-[color:var(--cmp-datepicker-calendar-day-hover-text)]",
|
|
19525
|
-
|
|
19547
|
+
// 오늘: datepicker.calendar.day.typography.bold (→ typography.field.md.bold) 의 굵기
|
|
19548
|
+
isToday && !disabled && "font-semibold"
|
|
19526
19549
|
),
|
|
19527
19550
|
children: cell.inCurrentMonth ? cell.day : ""
|
|
19528
19551
|
}
|
|
@@ -21754,32 +21777,57 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
|
|
|
21754
21777
|
`area-gradient-${seriesIndex}`
|
|
21755
21778
|
)) });
|
|
21756
21779
|
}, [area, plotted, colorAt, gradientId]);
|
|
21757
|
-
const
|
|
21780
|
+
const linePaths = react.useMemo(
|
|
21758
21781
|
() => plotted.flatMap(
|
|
21759
|
-
(row, seriesIndex) => runsOf(row).
|
|
21782
|
+
(row, seriesIndex) => runsOf(row).flatMap((run, runIndex) => {
|
|
21760
21783
|
const d = linePath(run, smooth);
|
|
21761
|
-
|
|
21762
|
-
|
|
21784
|
+
return d ? [{ key: `${seriesIndex}-${runIndex}`, seriesIndex, d }] : [];
|
|
21785
|
+
})
|
|
21786
|
+
),
|
|
21787
|
+
[plotted, smooth]
|
|
21788
|
+
);
|
|
21789
|
+
const strokeShape = {
|
|
21790
|
+
strokeWidth: LINE_WIDTH,
|
|
21791
|
+
strokeDasharray: lineStyle === "dashed" ? LINE_DASH : void 0
|
|
21792
|
+
};
|
|
21793
|
+
const lines = linePaths.map(({ key, seriesIndex, d }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
21794
|
+
"path",
|
|
21795
|
+
{
|
|
21796
|
+
"aria-hidden": true,
|
|
21797
|
+
d,
|
|
21798
|
+
fill: "none",
|
|
21799
|
+
strokeLinecap: "round",
|
|
21800
|
+
strokeLinejoin: "round",
|
|
21801
|
+
style: { ...strokeShape, stroke: colorAt(seriesIndex), strokeOpacity: LINE_OPACITY }
|
|
21802
|
+
},
|
|
21803
|
+
`line-${key}`
|
|
21804
|
+
));
|
|
21805
|
+
const areaMaskId = `${gradientId}-area-mask`;
|
|
21806
|
+
const areaMask = area ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
21807
|
+
"mask",
|
|
21808
|
+
{
|
|
21809
|
+
id: areaMaskId,
|
|
21810
|
+
maskUnits: "userSpaceOnUse",
|
|
21811
|
+
x: 0,
|
|
21812
|
+
y: 0,
|
|
21813
|
+
width: size.width,
|
|
21814
|
+
height: size.height,
|
|
21815
|
+
children: [
|
|
21816
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: size.width, height: size.height, style: { fill: "white" } }),
|
|
21817
|
+
linePaths.map(({ key, d }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
21763
21818
|
"path",
|
|
21764
21819
|
{
|
|
21765
|
-
"aria-hidden": true,
|
|
21766
21820
|
d,
|
|
21767
21821
|
fill: "none",
|
|
21768
21822
|
strokeLinecap: "round",
|
|
21769
21823
|
strokeLinejoin: "round",
|
|
21770
|
-
style: {
|
|
21771
|
-
stroke: colorAt(seriesIndex),
|
|
21772
|
-
strokeWidth: LINE_WIDTH,
|
|
21773
|
-
strokeOpacity: LINE_OPACITY,
|
|
21774
|
-
strokeDasharray: lineStyle === "dashed" ? LINE_DASH : void 0
|
|
21775
|
-
}
|
|
21824
|
+
style: { ...strokeShape, stroke: "black" }
|
|
21776
21825
|
},
|
|
21777
|
-
`
|
|
21778
|
-
)
|
|
21779
|
-
|
|
21780
|
-
|
|
21781
|
-
|
|
21782
|
-
);
|
|
21826
|
+
`mask-${key}`
|
|
21827
|
+
))
|
|
21828
|
+
]
|
|
21829
|
+
}
|
|
21830
|
+
) : null;
|
|
21783
21831
|
const { pointHalos, pointDots } = react.useMemo(() => {
|
|
21784
21832
|
const halos = [];
|
|
21785
21833
|
const dots = [];
|
|
@@ -21953,7 +22001,8 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
|
|
|
21953
22001
|
}
|
|
21954
22002
|
),
|
|
21955
22003
|
areaGradients,
|
|
21956
|
-
|
|
22004
|
+
areaMask,
|
|
22005
|
+
area && /* @__PURE__ */ jsxRuntime.jsx("g", { mask: `url(#${areaMaskId})`, children: areas }),
|
|
21957
22006
|
lines,
|
|
21958
22007
|
pointHalos,
|
|
21959
22008
|
pointDots,
|
|
@@ -22649,10 +22698,13 @@ var SKELETON_TYPES = [
|
|
|
22649
22698
|
"switch"
|
|
22650
22699
|
];
|
|
22651
22700
|
var SKELETON_ANIMATIONS = ["wave", "pulse", "fade", "none"];
|
|
22701
|
+
var SKELETON_MODES = ["light", "dark"];
|
|
22652
22702
|
var SKELETON_TYPE_CONFIG = {
|
|
22653
|
-
rect: { radius: "var(--
|
|
22703
|
+
rect: { radius: "var(--cmp-skeleton-radius)" },
|
|
22654
22704
|
circle: { width: "48px", height: "48px", radius: "50%" },
|
|
22655
|
-
|
|
22705
|
+
// 세로를 절반(scale-y-50)으로 줄여 그리므로 세로 반지름을 두 배로 줘야 모서리가 둥글게 남는다.
|
|
22706
|
+
// 칠하는 높이가 한 줄의 절반이라 스켈레톤 radius 는 알약처럼 보여 한 단계 작은 값을 쓴다
|
|
22707
|
+
text: { radius: "var(--radius-2) / calc(var(--radius-2) * 2)" },
|
|
22656
22708
|
button: {
|
|
22657
22709
|
width: "90px",
|
|
22658
22710
|
height: "var(--cmp-button-sm-height)",
|
|
@@ -22676,13 +22728,18 @@ var SKELETON_TYPE_CONFIG = {
|
|
|
22676
22728
|
radius: "var(--cmp-switch-radius)"
|
|
22677
22729
|
}
|
|
22678
22730
|
};
|
|
22731
|
+
var wave = (alpha) => `linear-gradient(90deg, transparent, color-mix(in srgb, var(--cmp-skeleton-highlight) ${alpha}, transparent), transparent)`;
|
|
22679
22732
|
var SKELETON_COLORS = {
|
|
22680
|
-
|
|
22681
|
-
|
|
22682
|
-
|
|
22683
|
-
|
|
22684
|
-
|
|
22685
|
-
|
|
22733
|
+
light: {
|
|
22734
|
+
bg: "color-mix(in srgb, var(--cmp-skeleton-bg-dark) var(--cmp-skeleton-opacity), transparent)",
|
|
22735
|
+
/** Quasar rgba(255,255,255,.5) 하이라이트 띠 */
|
|
22736
|
+
wave: wave("50%")
|
|
22737
|
+
},
|
|
22738
|
+
dark: {
|
|
22739
|
+
bg: "color-mix(in srgb, var(--cmp-skeleton-bg-light) var(--cmp-skeleton-opacity), transparent)",
|
|
22740
|
+
/** 어두운 면에서 50% 흰 띠는 너무 튀어 바탕과 같은 투명도로 낮춘다 (Quasar dark 도 .1) */
|
|
22741
|
+
wave: wave("var(--cmp-skeleton-opacity)")
|
|
22742
|
+
}
|
|
22686
22743
|
};
|
|
22687
22744
|
var ANIMATION_CLASS = {
|
|
22688
22745
|
pulse: "animate-skeleton-pulse",
|
|
@@ -22691,10 +22748,10 @@ var ANIMATION_CLASS = {
|
|
|
22691
22748
|
var toCss = (v) => typeof v === "number" ? `${v}px` : v;
|
|
22692
22749
|
var SSkeleton = /* @__PURE__ */ react.forwardRef(function SSkeleton2({
|
|
22693
22750
|
type = "rect",
|
|
22751
|
+
mode = "light",
|
|
22694
22752
|
animation = "wave",
|
|
22695
22753
|
animationSpeed = 1500,
|
|
22696
22754
|
square = false,
|
|
22697
|
-
bordered = false,
|
|
22698
22755
|
size,
|
|
22699
22756
|
width,
|
|
22700
22757
|
height,
|
|
@@ -22703,6 +22760,7 @@ var SSkeleton = /* @__PURE__ */ react.forwardRef(function SSkeleton2({
|
|
|
22703
22760
|
...props
|
|
22704
22761
|
}, ref) {
|
|
22705
22762
|
const t = SKELETON_TYPE_CONFIG[type];
|
|
22763
|
+
const colors = SKELETON_COLORS[mode];
|
|
22706
22764
|
const duration = `${animationSpeed}ms`;
|
|
22707
22765
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
22708
22766
|
"div",
|
|
@@ -22714,7 +22772,6 @@ var SSkeleton = /* @__PURE__ */ react.forwardRef(function SSkeleton2({
|
|
|
22714
22772
|
"box-border cursor-wait select-none",
|
|
22715
22773
|
// text 는 transform 이 아니라 scale 속성으로 줄여서 pulse 의 transform 애니메이션과 겹치지 않는다
|
|
22716
22774
|
type === "text" && "scale-y-50",
|
|
22717
|
-
bordered && "border border-solid",
|
|
22718
22775
|
animation === "wave" && "relative overflow-hidden",
|
|
22719
22776
|
animation !== "wave" && animation !== "none" && ANIMATION_CLASS[animation],
|
|
22720
22777
|
"motion-reduce:animate-none",
|
|
@@ -22724,8 +22781,7 @@ var SSkeleton = /* @__PURE__ */ react.forwardRef(function SSkeleton2({
|
|
|
22724
22781
|
width: toCss(width ?? size) ?? t.width,
|
|
22725
22782
|
height: toCss(height ?? size) ?? t.height,
|
|
22726
22783
|
borderRadius: square ? 0 : t.radius,
|
|
22727
|
-
background:
|
|
22728
|
-
borderColor: bordered ? SKELETON_COLORS.border : void 0,
|
|
22784
|
+
background: colors.bg,
|
|
22729
22785
|
animationDuration: animation === "pulse" || animation === "fade" ? duration : void 0,
|
|
22730
22786
|
...style
|
|
22731
22787
|
},
|
|
@@ -22735,13 +22791,81 @@ var SSkeleton = /* @__PURE__ */ react.forwardRef(function SSkeleton2({
|
|
|
22735
22791
|
"span",
|
|
22736
22792
|
{
|
|
22737
22793
|
className: "absolute inset-0 animate-skeleton-wave motion-reduce:hidden",
|
|
22738
|
-
style: {
|
|
22794
|
+
style: {
|
|
22795
|
+
background: colors.wave,
|
|
22796
|
+
animationDuration: duration,
|
|
22797
|
+
transform: "translateX(-100%)"
|
|
22798
|
+
}
|
|
22739
22799
|
}
|
|
22740
22800
|
)
|
|
22741
22801
|
]
|
|
22742
22802
|
}
|
|
22743
22803
|
);
|
|
22744
22804
|
});
|
|
22805
|
+
var STimelineImpl = /* @__PURE__ */ react.forwardRef(function STimeline({ groups, emptyText = "\uB0B4\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.", className, ...rest }, ref) {
|
|
22806
|
+
const filled = groups.filter((group) => group.entries.length > 0);
|
|
22807
|
+
if (filled.length === 0) {
|
|
22808
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22809
|
+
"div",
|
|
22810
|
+
{
|
|
22811
|
+
ref,
|
|
22812
|
+
className: cn(
|
|
22813
|
+
"typo-body-sm-default flex h-full items-center justify-center text-[color:var(--cmp-timeline-empty-color)]",
|
|
22814
|
+
className
|
|
22815
|
+
),
|
|
22816
|
+
...rest,
|
|
22817
|
+
children: emptyText
|
|
22818
|
+
}
|
|
22819
|
+
);
|
|
22820
|
+
}
|
|
22821
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("flex flex-col", className), ...rest, children: filled.map((group, groupIndex) => {
|
|
22822
|
+
const isLastGroup = groupIndex === filled.length - 1;
|
|
22823
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
|
|
22824
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "typo-body-sm-bold py-[var(--cmp-timeline-heading-paddingY)] text-[color:var(--cmp-timeline-heading-color)]", children: group.heading }),
|
|
22825
|
+
/* @__PURE__ */ jsxRuntime.jsx("ol", { className: "m-0 flex list-none flex-col p-0", children: group.entries.map((entry, entryIndex) => {
|
|
22826
|
+
const isFirstEntry = entryIndex === 0;
|
|
22827
|
+
const isLastEntry = entryIndex === group.entries.length - 1;
|
|
22828
|
+
return (
|
|
22829
|
+
// 시각 열 너비는 토큰이 없다 — 줄마다 grid 가 따로라 auto 로 두면 열이 어긋나므로 고정한다.
|
|
22830
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
22831
|
+
"li",
|
|
22832
|
+
{
|
|
22833
|
+
className: "grid grid-cols-[52px_var(--cmp-timeline-rail-dot-size)_minmax(0,1fr)]",
|
|
22834
|
+
children: [
|
|
22835
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "typo-body-sm-medium whitespace-nowrap pr-[var(--cmp-timeline-entry-horizontalGap)] text-right text-[color:var(--cmp-timeline-time-color)]", children: entry.time }),
|
|
22836
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { "aria-hidden": true, className: "relative", children: [
|
|
22837
|
+
!(isLastGroup && isLastEntry) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
22838
|
+
"span",
|
|
22839
|
+
{
|
|
22840
|
+
className: cn(
|
|
22841
|
+
"absolute left-1/2 w-[var(--cmp-timeline-rail-line-width)] -translate-x-1/2 bg-[var(--cmp-timeline-rail-line-color)]",
|
|
22842
|
+
isFirstEntry && groupIndex > 0 ? "top-0" : "top-[14px]",
|
|
22843
|
+
isLastEntry ? "bottom-0" : "bottom-[-8px]"
|
|
22844
|
+
)
|
|
22845
|
+
}
|
|
22846
|
+
),
|
|
22847
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-0 top-[6px] size-[var(--cmp-timeline-rail-dot-size)] rounded-[var(--cmp-timeline-rail-dot-radius)] bg-[var(--cmp-timeline-rail-dot-bg)]" })
|
|
22848
|
+
] }),
|
|
22849
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22850
|
+
"div",
|
|
22851
|
+
{
|
|
22852
|
+
className: cn(
|
|
22853
|
+
"min-w-0 pl-[var(--cmp-timeline-entry-horizontalGap)]",
|
|
22854
|
+
!isLastEntry && "pb-[var(--cmp-timeline-entry-gap)]"
|
|
22855
|
+
),
|
|
22856
|
+
children: entry.content
|
|
22857
|
+
}
|
|
22858
|
+
)
|
|
22859
|
+
]
|
|
22860
|
+
},
|
|
22861
|
+
entry.key
|
|
22862
|
+
)
|
|
22863
|
+
);
|
|
22864
|
+
}) })
|
|
22865
|
+
] }, group.key ?? groupIndex);
|
|
22866
|
+
}) });
|
|
22867
|
+
});
|
|
22868
|
+
var STimeline2 = /* @__PURE__ */ withDisplayName(STimelineImpl, "STimeline");
|
|
22745
22869
|
var SForm = /* @__PURE__ */ react.forwardRef(function SForm2({ formClassName, onSubmit, onValidationError, children, className, style }, ref) {
|
|
22746
22870
|
const formRef = react.useRef(null);
|
|
22747
22871
|
const fieldsRef = react.useRef(/* @__PURE__ */ new Set());
|
|
@@ -22827,6 +22951,7 @@ function SRadioButton({
|
|
|
22827
22951
|
value,
|
|
22828
22952
|
size = "sm",
|
|
22829
22953
|
disabled = false,
|
|
22954
|
+
readOnly = false,
|
|
22830
22955
|
name,
|
|
22831
22956
|
showTooltip = false,
|
|
22832
22957
|
onValueChange,
|
|
@@ -22844,11 +22969,13 @@ function SRadioButton({
|
|
|
22844
22969
|
{
|
|
22845
22970
|
role: "radiogroup",
|
|
22846
22971
|
"aria-disabled": disabled,
|
|
22972
|
+
"aria-readonly": readOnly || void 0,
|
|
22847
22973
|
className: cn("inline-flex isolate", className),
|
|
22848
22974
|
style,
|
|
22849
22975
|
children: options.map((o, i) => {
|
|
22850
22976
|
const selected = o.value === value;
|
|
22851
22977
|
const od = disabled || o.disabled;
|
|
22978
|
+
const ro = readOnly && !od;
|
|
22852
22979
|
const first = i === 0;
|
|
22853
22980
|
const last = i === options.length - 1;
|
|
22854
22981
|
const tooltip = showTooltip && o.tooltip ? o.tooltip : void 0;
|
|
@@ -22860,7 +22987,7 @@ function SRadioButton({
|
|
|
22860
22987
|
name,
|
|
22861
22988
|
"aria-checked": selected,
|
|
22862
22989
|
disabled: od,
|
|
22863
|
-
onClick: () => !od && !selected && onValueChange?.(o.value),
|
|
22990
|
+
onClick: () => !od && !ro && !selected && onValueChange?.(o.value),
|
|
22864
22991
|
onMouseEnter: tooltip ? () => setHoveredValue(o.value) : void 0,
|
|
22865
22992
|
onMouseLeave: tooltip ? () => setHoveredValue(null) : void 0,
|
|
22866
22993
|
onFocus: tooltip ? () => setHoveredValue(o.value) : void 0,
|
|
@@ -22869,8 +22996,8 @@ function SRadioButton({
|
|
|
22869
22996
|
"relative box-border grow inline-flex items-center justify-center whitespace-nowrap border border-solid font-medium transition-colors",
|
|
22870
22997
|
first ? "" : "-ml-px",
|
|
22871
22998
|
selected ? "z-10" : "",
|
|
22872
|
-
!od && !selected && "hover:!bg-[var(--cmp-radioButton-bg-hover)] hover:!text-[color:var(--cmp-radioButton-content-hover)] hover:!border-[color:var(--cmp-radioButton-bg-hover)] hover:z-10",
|
|
22873
|
-
od ? "cursor-not-allowed" : "cursor-pointer"
|
|
22999
|
+
!od && !ro && !selected && "hover:!bg-[var(--cmp-radioButton-bg-hover)] hover:!text-[color:var(--cmp-radioButton-content-hover)] hover:!border-[color:var(--cmp-radioButton-bg-hover)] hover:z-10",
|
|
23000
|
+
od ? "cursor-not-allowed" : ro ? "cursor-default" : "cursor-pointer"
|
|
22874
23001
|
),
|
|
22875
23002
|
style: {
|
|
22876
23003
|
height: `var(--cmp-radioButton-${size}-height)`,
|
|
@@ -22883,9 +23010,9 @@ function SRadioButton({
|
|
|
22883
23010
|
last ? s.radius : "0",
|
|
22884
23011
|
first ? s.radius : "0"
|
|
22885
23012
|
].join(" "),
|
|
22886
|
-
background: od ? "var(--cmp-radioButton-bg-disabled)" : "var(--cmp-radioButton-bg-default)",
|
|
22887
|
-
borderColor: od ? "var(--cmp-radioButton-border-disabled)" : selected ? "var(--cmp-radioButton-border-select)" : "var(--cmp-radioButton-border-default)",
|
|
22888
|
-
color: od ? "var(--cmp-radioButton-content-disabled)" : selected ? "var(--cmp-radioButton-content-select)" : "var(--cmp-radioButton-content-default)"
|
|
23013
|
+
background: od ? "var(--cmp-radioButton-bg-disabled)" : ro ? "var(--cmp-radioButton-bg-readOnly)" : "var(--cmp-radioButton-bg-default)",
|
|
23014
|
+
borderColor: od ? "var(--cmp-radioButton-border-disabled)" : selected ? ro ? "var(--cmp-radioButton-border-readOnly)" : "var(--cmp-radioButton-border-select)" : "var(--cmp-radioButton-border-default)",
|
|
23015
|
+
color: od ? "var(--cmp-radioButton-content-disabled)" : selected && !ro ? "var(--cmp-radioButton-content-select)" : "var(--cmp-radioButton-content-default)"
|
|
22889
23016
|
},
|
|
22890
23017
|
children: o.label
|
|
22891
23018
|
},
|
|
@@ -28598,6 +28725,7 @@ exports.SIcon = SIcon;
|
|
|
28598
28725
|
exports.SImage = SImage;
|
|
28599
28726
|
exports.SInput = SInput;
|
|
28600
28727
|
exports.SKELETON_ANIMATIONS = SKELETON_ANIMATIONS;
|
|
28728
|
+
exports.SKELETON_MODES = SKELETON_MODES;
|
|
28601
28729
|
exports.SKELETON_TYPES = SKELETON_TYPES;
|
|
28602
28730
|
exports.SKELETON_TYPE_CONFIG = SKELETON_TYPE_CONFIG;
|
|
28603
28731
|
exports.SKeyValueTable = SKeyValueTable;
|
|
@@ -28648,6 +28776,7 @@ exports.STextLink = STextLink;
|
|
|
28648
28776
|
exports.STextarea = STextarea;
|
|
28649
28777
|
exports.STimePicker = STimePicker;
|
|
28650
28778
|
exports.STimeRangePicker = STimeRangePicker;
|
|
28779
|
+
exports.STimeline = STimeline2;
|
|
28651
28780
|
exports.SToast = SToast;
|
|
28652
28781
|
exports.SToastContainer = SToastContainer;
|
|
28653
28782
|
exports.SToggle = SToggle;
|