sellmate-design-system-react 9.0.0-beta.80 → 9.0.0-beta.83

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/index.d.ts CHANGED
@@ -67,6 +67,7 @@ export * from './components/SPieChart';
67
67
  export * from './components/SDonutChart';
68
68
  export * from './components/SToast';
69
69
  export * from './components/SSkeleton';
70
+ export * from './components/STimeline';
70
71
  export * from './components/SForm';
71
72
  export * from './components/SField';
72
73
  export * from './components/SCheckbox';
package/dist/index.js CHANGED
@@ -5142,16 +5142,22 @@ var STextarea = /* @__PURE__ */ forwardRef(function STextarea2({
5142
5142
  },
5143
5143
  [ref]
5144
5144
  );
5145
+ const autoSizedRef = useRef(false);
5146
+ const styleHeight = textareaStyle?.height;
5145
5147
  useLayoutEffect(() => {
5146
5148
  const el = innerRef.current;
5147
5149
  if (el == null) return;
5148
5150
  if (!autogrow) {
5149
- el.style.height = "";
5151
+ if (autoSizedRef.current) {
5152
+ el.style.height = typeof styleHeight === "number" ? `${styleHeight}px` : styleHeight ?? "";
5153
+ autoSizedRef.current = false;
5154
+ }
5150
5155
  return;
5151
5156
  }
5152
5157
  el.style.height = "auto";
5153
5158
  el.style.height = `${el.scrollHeight}px`;
5154
- }, [autogrow, maxHeight, minHeight, rows, value]);
5159
+ autoSizedRef.current = true;
5160
+ }, [autogrow, maxHeight, minHeight, rows, styleHeight, value]);
5155
5161
  useFormField({
5156
5162
  name: rest.name,
5157
5163
  validate: () => {
@@ -22621,10 +22627,13 @@ var SKELETON_TYPES = [
22621
22627
  "switch"
22622
22628
  ];
22623
22629
  var SKELETON_ANIMATIONS = ["wave", "pulse", "fade", "none"];
22630
+ var SKELETON_MODES = ["light", "dark"];
22624
22631
  var SKELETON_TYPE_CONFIG = {
22625
- rect: { radius: "var(--sys-radius-control-sm)" },
22632
+ rect: { radius: "var(--cmp-skeleton-radius)" },
22626
22633
  circle: { width: "48px", height: "48px", radius: "50%" },
22627
- text: { radius: "var(--sys-radius-control-sm)" },
22634
+ // 세로를 절반(scale-y-50)으로 줄여 그리므로 세로 반지름을 두 배로 줘야 모서리가 둥글게 남는다.
22635
+ // 칠하는 높이가 한 줄의 절반이라 스켈레톤 radius 는 알약처럼 보여 한 단계 작은 값을 쓴다
22636
+ text: { radius: "var(--radius-2) / calc(var(--radius-2) * 2)" },
22628
22637
  button: {
22629
22638
  width: "90px",
22630
22639
  height: "var(--cmp-button-sm-height)",
@@ -22648,13 +22657,18 @@ var SKELETON_TYPE_CONFIG = {
22648
22657
  radius: "var(--cmp-switch-radius)"
22649
22658
  }
22650
22659
  };
22660
+ var wave = (alpha) => `linear-gradient(90deg, transparent, color-mix(in srgb, var(--cmp-skeleton-highlight) ${alpha}, transparent), transparent)`;
22651
22661
  var SKELETON_COLORS = {
22652
- /** Quasar rgba(0,0,0,.12) ≈ 흰 바탕 위 #E1E1E1 */
22653
- bg: "var(--sys-color-disabled-bg)",
22654
- /** Quasar rgba(0,0,0,.05) 테두리 — 배경보다 한 단계 짙게 */
22655
- border: "color-mix(in srgb, var(--sys-color-border-strong) 25%, transparent)",
22656
- /** Quasar rgba(255,255,255,.5) 하이라이트 띠 */
22657
- wave: "linear-gradient(90deg, transparent, color-mix(in srgb, var(--sys-color-bg-frame) 50%, transparent), transparent)"
22662
+ light: {
22663
+ bg: "color-mix(in srgb, var(--cmp-skeleton-bg-dark) var(--cmp-skeleton-opacity), transparent)",
22664
+ /** Quasar rgba(255,255,255,.5) 하이라이트 띠 */
22665
+ wave: wave("50%")
22666
+ },
22667
+ dark: {
22668
+ bg: "color-mix(in srgb, var(--cmp-skeleton-bg-light) var(--cmp-skeleton-opacity), transparent)",
22669
+ /** 어두운 면에서 50% 흰 띠는 너무 튀어 바탕과 같은 투명도로 낮춘다 (Quasar dark 도 .1) */
22670
+ wave: wave("var(--cmp-skeleton-opacity)")
22671
+ }
22658
22672
  };
22659
22673
  var ANIMATION_CLASS = {
22660
22674
  pulse: "animate-skeleton-pulse",
@@ -22663,10 +22677,10 @@ var ANIMATION_CLASS = {
22663
22677
  var toCss = (v) => typeof v === "number" ? `${v}px` : v;
22664
22678
  var SSkeleton = /* @__PURE__ */ forwardRef(function SSkeleton2({
22665
22679
  type = "rect",
22680
+ mode = "light",
22666
22681
  animation = "wave",
22667
22682
  animationSpeed = 1500,
22668
22683
  square = false,
22669
- bordered = false,
22670
22684
  size,
22671
22685
  width,
22672
22686
  height,
@@ -22675,6 +22689,7 @@ var SSkeleton = /* @__PURE__ */ forwardRef(function SSkeleton2({
22675
22689
  ...props
22676
22690
  }, ref) {
22677
22691
  const t = SKELETON_TYPE_CONFIG[type];
22692
+ const colors = SKELETON_COLORS[mode];
22678
22693
  const duration = `${animationSpeed}ms`;
22679
22694
  return /* @__PURE__ */ jsxs(
22680
22695
  "div",
@@ -22686,7 +22701,6 @@ var SSkeleton = /* @__PURE__ */ forwardRef(function SSkeleton2({
22686
22701
  "box-border cursor-wait select-none",
22687
22702
  // text 는 transform 이 아니라 scale 속성으로 줄여서 pulse 의 transform 애니메이션과 겹치지 않는다
22688
22703
  type === "text" && "scale-y-50",
22689
- bordered && "border border-solid",
22690
22704
  animation === "wave" && "relative overflow-hidden",
22691
22705
  animation !== "wave" && animation !== "none" && ANIMATION_CLASS[animation],
22692
22706
  "motion-reduce:animate-none",
@@ -22696,8 +22710,7 @@ var SSkeleton = /* @__PURE__ */ forwardRef(function SSkeleton2({
22696
22710
  width: toCss(width ?? size) ?? t.width,
22697
22711
  height: toCss(height ?? size) ?? t.height,
22698
22712
  borderRadius: square ? 0 : t.radius,
22699
- background: SKELETON_COLORS.bg,
22700
- borderColor: bordered ? SKELETON_COLORS.border : void 0,
22713
+ background: colors.bg,
22701
22714
  animationDuration: animation === "pulse" || animation === "fade" ? duration : void 0,
22702
22715
  ...style
22703
22716
  },
@@ -22707,13 +22720,81 @@ var SSkeleton = /* @__PURE__ */ forwardRef(function SSkeleton2({
22707
22720
  "span",
22708
22721
  {
22709
22722
  className: "absolute inset-0 animate-skeleton-wave motion-reduce:hidden",
22710
- style: { background: SKELETON_COLORS.wave, animationDuration: duration }
22723
+ style: {
22724
+ background: colors.wave,
22725
+ animationDuration: duration,
22726
+ transform: "translateX(-100%)"
22727
+ }
22711
22728
  }
22712
22729
  )
22713
22730
  ]
22714
22731
  }
22715
22732
  );
22716
22733
  });
22734
+ var STimelineImpl = /* @__PURE__ */ forwardRef(function STimeline({ groups, emptyText = "\uB0B4\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.", className, ...rest }, ref) {
22735
+ const filled = groups.filter((group) => group.entries.length > 0);
22736
+ if (filled.length === 0) {
22737
+ return /* @__PURE__ */ jsx(
22738
+ "div",
22739
+ {
22740
+ ref,
22741
+ className: cn(
22742
+ "typo-body-sm-default flex h-full items-center justify-center text-[color:var(--cmp-timeline-empty-color)]",
22743
+ className
22744
+ ),
22745
+ ...rest,
22746
+ children: emptyText
22747
+ }
22748
+ );
22749
+ }
22750
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col", className), ...rest, children: filled.map((group, groupIndex) => {
22751
+ const isLastGroup = groupIndex === filled.length - 1;
22752
+ return /* @__PURE__ */ jsxs("section", { children: [
22753
+ /* @__PURE__ */ jsx("div", { className: "typo-body-sm-bold py-[var(--cmp-timeline-heading-paddingY)] text-[color:var(--cmp-timeline-heading-color)]", children: group.heading }),
22754
+ /* @__PURE__ */ jsx("ol", { className: "m-0 flex list-none flex-col p-0", children: group.entries.map((entry, entryIndex) => {
22755
+ const isFirstEntry = entryIndex === 0;
22756
+ const isLastEntry = entryIndex === group.entries.length - 1;
22757
+ return (
22758
+ // 시각 열 너비는 토큰이 없다 — 줄마다 grid 가 따로라 auto 로 두면 열이 어긋나므로 고정한다.
22759
+ /* @__PURE__ */ jsxs(
22760
+ "li",
22761
+ {
22762
+ className: "grid grid-cols-[52px_var(--cmp-timeline-rail-dot-size)_minmax(0,1fr)]",
22763
+ children: [
22764
+ /* @__PURE__ */ 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 }),
22765
+ /* @__PURE__ */ jsxs("div", { "aria-hidden": true, className: "relative", children: [
22766
+ !(isLastGroup && isLastEntry) && /* @__PURE__ */ jsx(
22767
+ "span",
22768
+ {
22769
+ className: cn(
22770
+ "absolute left-1/2 w-[var(--cmp-timeline-rail-line-width)] -translate-x-1/2 bg-[var(--cmp-timeline-rail-line-color)]",
22771
+ isFirstEntry && groupIndex > 0 ? "top-0" : "top-[14px]",
22772
+ isLastEntry ? "bottom-0" : "bottom-[-8px]"
22773
+ )
22774
+ }
22775
+ ),
22776
+ /* @__PURE__ */ 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)]" })
22777
+ ] }),
22778
+ /* @__PURE__ */ jsx(
22779
+ "div",
22780
+ {
22781
+ className: cn(
22782
+ "min-w-0 pl-[var(--cmp-timeline-entry-horizontalGap)]",
22783
+ !isLastEntry && "pb-[var(--cmp-timeline-entry-gap)]"
22784
+ ),
22785
+ children: entry.content
22786
+ }
22787
+ )
22788
+ ]
22789
+ },
22790
+ entry.key
22791
+ )
22792
+ );
22793
+ }) })
22794
+ ] }, group.key ?? groupIndex);
22795
+ }) });
22796
+ });
22797
+ var STimeline2 = /* @__PURE__ */ withDisplayName(STimelineImpl, "STimeline");
22717
22798
  var SForm = /* @__PURE__ */ forwardRef(function SForm2({ formClassName, onSubmit, onValidationError, children, className, style }, ref) {
22718
22799
  const formRef = useRef(null);
22719
22800
  const fieldsRef = useRef(/* @__PURE__ */ new Set());
@@ -28455,6 +28536,6 @@ function STimeRangePicker({
28455
28536
  );
28456
28537
  }
28457
28538
 
28458
- export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BAR_GAP, BAR_SIZE_MAX, BAR_SIZE_MIN, BUTTON_COLORS, BUTTON_SIZES, CALENDAR_BOARD_DAY_BG, CALENDAR_BOARD_DAY_COLORS, CALENDAR_BOARD_EVENT_COLORS, CALENDAR_BOARD_EVENT_PRESETS, CALENDAR_BOARD_MAX_VISIBLE_EVENTS, CHAT_ATTACHED_FILE_CONFIG, CHAT_FILE_CONFIG, CHAT_MESSAGE_DIRECTIONS, CHAT_MESSAGE_READ_STATUSES, CHAT_MESSAGE_VARIANTS, CHIP_COLORS, COLOR_KEYS, CONTEXT_ALERT_ICON_COLOR, CONTEXT_ALERT_INTENTS, CONTEXT_ALERT_SURFACE, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, LAUNCHER_LIST_BOX_CONSOLE_HEIGHT, LAUNCHER_LIST_BOX_CONSOLE_ICON, LAUNCHER_LIST_BOX_CONSOLE_LABEL, LAUNCHER_LIST_BOX_LAYOUT, LAUNCHER_LIST_BOX_LOGO_HEIGHT, LAUNCHER_LIST_BOX_TRAILING_ICON, LAUNCHER_LIST_BOX_WIDTH, LAUNCHER_SERVICES, LAUNCHER_SERVICE_CATALOG, LOGO_DEFAULT_SIZE, LOGO_DIRECTIONS, LOGO_MODES, LOGO_NAMES, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, PAGE_CONTENT_WIDTHS, PAGE_HEADER_VARIANTS, PAGE_PADDINGS, RangeCalendar, SAccountListBox, SActionModal, SBadge, SBarChart, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCalendarBoard, SCallout, SCard, SChatAttachedFile2 as SChatAttachedFile, SChatFile2 as SChatFile, SChatInput2 as SChatInput, SChatMessage2 as SChatMessage, SChatSystemMessage2 as SChatSystemMessage, SCheckbox, SChip2 as SChip, SChipFilter, SChipInput, SCircleProgress, SConfirmModal, SContextAlert, SDatePicker, SDatePickerMonthListbox, SDatePickerYearListbox, SDateRangePicker, SDivider, SDonutChart, SDraggableGroup, SDraggableItem2 as SDraggableItem, SDraggableList, SDraggableProvider, SDrawer, SDropdownButton2 as SDropdownButton, SEDITOR_DEFAULT_FONT_SIZE, SEDITOR_HEADING_LABELS, SEDITOR_HEADING_LEVELS, SEditor, SExpansionItem, SExpansionList2 as SExpansionList, SField, SFilePicker, SForm, SGhostButton, SGnb, SGnbSystem, SGnbSystemContext, SGuide, SIcon, SImage, SInput, SKELETON_ANIMATIONS, SKELETON_TYPES, SKELETON_TYPE_CONFIG, SKeyValueTable, SLAYOUT_MIN_WIDTH, SLauncherListBox, SLayout, SLayoutContext, SLineChart, SLinearProgress, SList2 as SList, SListItem2 as SListItem, SLoadingContainer, SLoadingModal, SLoginCard2 as SLoginCard, SLogo, SMeatballButton2 as SMeatballButton, SModal, SModalOutlet, SNumberInput, SPage, SPageHeader, SPagination, SPieChart, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioCard, SRadioCardGroup, SRadioGroup, SSPLITTER_UNITS, SScrollArea, SSearchInput, SSectionHeaderCard2 as SSectionHeaderCard, SSelect2 as SSelect, SSkeleton, SSplitter2 as SSplitter, SStepper, SSwitch, SSystemActionButton, STEPPER_SIZES, STable2 as STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, SToast, SToastContainer, SToggle, STooltip2 as STooltip, STree2 as STree, STreeItem2 as STreeItem, SYSTEM_ACTION_BUTTON_COLORS, SYSTEM_ACTION_BUTTON_COLOR_CONFIG, SYSTEM_ACTION_BUTTON_LAYOUT, SYSTEM_ACTION_BUTTON_TYPES, SYSTEM_ACTION_BUTTON_TYPE_CONFIG, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, fieldWidthValue, fileExtension, findGnbAncestors, findGnbRailValue, formatFileSize, isColorKey, isFieldWidthGrade, loading, normalizeExtension, resolveColor, useSLayout };
28539
+ export { ACCOUNT_LIST_BOX_ICONS, ACCOUNT_LIST_BOX_ITEM_TONES, ACCOUNT_LIST_BOX_LABELS, ACCOUNT_LIST_BOX_LAYOUT, ACCOUNT_LIST_BOX_TONE_CONFIG, BADGE_COLORS, BAR_GAP, BAR_SIZE_MAX, BAR_SIZE_MIN, BUTTON_COLORS, BUTTON_SIZES, CALENDAR_BOARD_DAY_BG, CALENDAR_BOARD_DAY_COLORS, CALENDAR_BOARD_EVENT_COLORS, CALENDAR_BOARD_EVENT_PRESETS, CALENDAR_BOARD_MAX_VISIBLE_EVENTS, CHAT_ATTACHED_FILE_CONFIG, CHAT_FILE_CONFIG, CHAT_MESSAGE_DIRECTIONS, CHAT_MESSAGE_READ_STATUSES, CHAT_MESSAGE_VARIANTS, CHIP_COLORS, COLOR_KEYS, CONTEXT_ALERT_ICON_COLOR, CONTEXT_ALERT_INTENTS, CONTEXT_ALERT_SURFACE, FIELD_WIDTH_GRADES, GNB_COLORS, GNB_COMMON, GNB_FOLD_MS, GNB_FULL_LOGO_WIDTH, GNB_HEADER, GNB_MENU, GNB_MENU_WIDTH, GNB_RAIL, GNB_RAIL_WIDTH, GNB_SYSTEM_COLORS, GNB_SYSTEM_COLOR_CONFIG, GNB_SYSTEM_LAYOUT, GNB_SYSTEM_PLACEMENTS, GNB_SYSTEM_TOP_COLOR_CONFIG, ICONS, IMAGE_FITS, LAUNCHER_LIST_BOX_CONSOLE_HEIGHT, LAUNCHER_LIST_BOX_CONSOLE_ICON, LAUNCHER_LIST_BOX_CONSOLE_LABEL, LAUNCHER_LIST_BOX_LAYOUT, LAUNCHER_LIST_BOX_LOGO_HEIGHT, LAUNCHER_LIST_BOX_TRAILING_ICON, LAUNCHER_LIST_BOX_WIDTH, LAUNCHER_SERVICES, LAUNCHER_SERVICE_CATALOG, LOGO_DEFAULT_SIZE, LOGO_DIRECTIONS, LOGO_MODES, LOGO_NAMES, PAGE_BACKGROUNDS, PAGE_CONTENT_HEIGHTS, PAGE_CONTENT_WIDTHS, PAGE_HEADER_VARIANTS, PAGE_PADDINGS, RangeCalendar, SAccountListBox, SActionModal, SBadge, SBarChart, SBarcodeInput, SButton, SCROLL_AREA_AXES, SCalendar, SCalendarBoard, SCallout, SCard, SChatAttachedFile2 as SChatAttachedFile, SChatFile2 as SChatFile, SChatInput2 as SChatInput, SChatMessage2 as SChatMessage, SChatSystemMessage2 as SChatSystemMessage, SCheckbox, SChip2 as SChip, SChipFilter, SChipInput, SCircleProgress, SConfirmModal, SContextAlert, SDatePicker, SDatePickerMonthListbox, SDatePickerYearListbox, SDateRangePicker, SDivider, SDonutChart, SDraggableGroup, SDraggableItem2 as SDraggableItem, SDraggableList, SDraggableProvider, SDrawer, SDropdownButton2 as SDropdownButton, SEDITOR_DEFAULT_FONT_SIZE, SEDITOR_HEADING_LABELS, SEDITOR_HEADING_LEVELS, SEditor, SExpansionItem, SExpansionList2 as SExpansionList, SField, SFilePicker, SForm, SGhostButton, SGnb, SGnbSystem, SGnbSystemContext, SGuide, SIcon, SImage, SInput, SKELETON_ANIMATIONS, SKELETON_MODES, SKELETON_TYPES, SKELETON_TYPE_CONFIG, SKeyValueTable, SLAYOUT_MIN_WIDTH, SLauncherListBox, SLayout, SLayoutContext, SLineChart, SLinearProgress, SList2 as SList, SListItem2 as SListItem, SLoadingContainer, SLoadingModal, SLoginCard2 as SLoginCard, SLogo, SMeatballButton2 as SMeatballButton, SModal, SModalOutlet, SNumberInput, SPage, SPageHeader, SPagination, SPieChart, SPopover, SPopup, SPortal, SRadio, SRadioButton, SRadioCard, SRadioCardGroup, SRadioGroup, SSPLITTER_UNITS, SScrollArea, SSearchInput, SSectionHeaderCard2 as SSectionHeaderCard, SSelect2 as SSelect, SSkeleton, SSplitter2 as SSplitter, SStepper, SSwitch, SSystemActionButton, STEPPER_SIZES, STable2 as STable, STableBar, STabs, STag, STextLink, STextarea, STimePicker, STimeRangePicker, STimeline2 as STimeline, SToast, SToastContainer, SToggle, STooltip2 as STooltip, STree2 as STree, STreeItem2 as STreeItem, SYSTEM_ACTION_BUTTON_COLORS, SYSTEM_ACTION_BUTTON_COLOR_CONFIG, SYSTEM_ACTION_BUTTON_LAYOUT, SYSTEM_ACTION_BUTTON_TYPES, SYSTEM_ACTION_BUTTON_TYPE_CONFIG, TAG_COLORS, TAG_SHAPES, TAG_SIZES, TIMEPICKER_SIZES, TIMEPICKER_SIZE_CONFIG, buttonPreset, cn, fieldWidthValue, fileExtension, findGnbAncestors, findGnbRailValue, formatFileSize, isColorKey, isFieldWidthGrade, loading, normalizeExtension, resolveColor, useSLayout };
28459
28540
  //# sourceMappingURL=index.js.map
28460
28541
  //# sourceMappingURL=index.js.map