@pylerai/design-system 2.4.0 → 2.5.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.
Files changed (43) hide show
  1. package/README.md +2 -1
  2. package/dist/components/ui/badge.d.ts +3 -0
  3. package/dist/components/ui/badge.js +28 -20
  4. package/dist/components/ui/button.d.ts +1 -1
  5. package/dist/components/ui/button.js +38 -25
  6. package/dist/components/ui/dropdown.js +89 -86
  7. package/dist/components/ui/input.js +30 -30
  8. package/dist/components/ui/label.d.ts +1 -1
  9. package/dist/components/ui/label.js +11 -10
  10. package/dist/components/ui/media-slider.d.ts +20 -0
  11. package/dist/components/ui/media-slider.js +90 -0
  12. package/dist/components/ui/progress-bar.d.ts +21 -0
  13. package/dist/components/ui/progress-bar.js +45 -0
  14. package/dist/components/ui/search-field.js +45 -43
  15. package/dist/components/ui/table.js +33 -33
  16. package/dist/components/ui/tabs.js +24 -24
  17. package/dist/components/ui/timeline-tracks.d.ts +66 -0
  18. package/dist/components/ui/timeline-tracks.js +80 -0
  19. package/dist/components/ui/timeline.d.ts +31 -0
  20. package/dist/components/ui/timeline.js +119 -0
  21. package/dist/components/ui/toast.js +5 -5
  22. package/dist/components/ui/video-player.d.ts +29 -0
  23. package/dist/components/ui/video-player.js +174 -0
  24. package/dist/index.d.ts +7 -1
  25. package/dist/index.js +38 -32
  26. package/dist/lib/field-box.d.ts +13 -0
  27. package/dist/lib/field-box.js +11 -0
  28. package/dist/lib/format-time.d.ts +5 -0
  29. package/dist/lib/format-time.js +8 -0
  30. package/dist/lib/icons.d.ts +6 -0
  31. package/dist/lib/icons.js +68 -44
  32. package/dist/lib/utils.d.ts +1 -0
  33. package/dist/lib/utils.js +14 -7
  34. package/dist/style.css +1 -1
  35. package/dist/tokens/pyler-light.d.ts +12 -0
  36. package/dist/tokens/pyler-light.js +27 -23
  37. package/dist/tokens/shadow-radius.d.ts +3 -3
  38. package/dist/tokens/shadow-radius.js +3 -3
  39. package/dist/tokens/typography.d.ts +8 -2
  40. package/dist/tokens/typography.js +6 -0
  41. package/package.json +1 -1
  42. package/pyler-tailwind-colors.cjs +4 -0
  43. package/pyler-typography.cjs +7 -0
@@ -1,6 +1,7 @@
1
1
  "use client";
2
- import { jsxs as i, jsx as e } from "react/jsx-runtime";
2
+ import { jsxs as l, jsx as e } from "react/jsx-runtime";
3
3
  import { EyeOnIcon as E, EyeOffIcon as P } from "../../lib/icons.js";
4
+ import { fieldBoxClasses as V } from "../../lib/field-box.js";
4
5
  import { cn as d } from "../../lib/utils.js";
5
6
  import * as o from "react";
6
7
  const I = {
@@ -16,11 +17,11 @@ const I = {
16
17
  container: "h-8 px-3 py-1.5 gap-1.5",
17
18
  text: "text-body-3-r"
18
19
  }
19
- }, V = o.forwardRef(
20
+ }, $ = o.forwardRef(
20
21
  ({
21
22
  label: r,
22
23
  showLabel: c = !0,
23
- require: l,
24
+ require: i,
24
25
  message: n,
25
26
  hint: s,
26
27
  error: t,
@@ -28,47 +29,46 @@ const I = {
28
29
  size: a = "lg",
29
30
  wrapperClassName: F,
30
31
  className: j,
31
- disabled: b,
32
- readOnly: f,
32
+ disabled: f,
33
+ readOnly: b,
33
34
  type: u,
34
35
  ...h
35
- }, k) => {
36
- const [m, R] = o.useState(!1), g = u === "password", T = g ? m ? "text" : "password" : u, p = o.useId(), y = h.id ?? p, N = `${p}-message`, v = `${p}-description`, B = [n ? N : null, t || s ? v : null].filter(Boolean).join(" ") || void 0, w = x ?? (g ? /* @__PURE__ */ e(
36
+ }, R) => {
37
+ const [m, k] = o.useState(!1), y = u === "password", B = y ? m ? "text" : "password" : u, p = o.useId(), g = h.id ?? p, N = `${p}-message`, v = `${p}-description`, C = [n ? N : null, t || s ? v : null].filter(Boolean).join(" ") || void 0, w = x ?? (y ? /* @__PURE__ */ e(
37
38
  "button",
38
39
  {
39
40
  type: "button",
40
- onClick: () => R((C) => !C),
41
+ onClick: () => k((T) => !T),
41
42
  className: "flex items-center justify-center text-ds-text-normal",
42
43
  tabIndex: -1,
43
44
  "aria-label": m ? "비밀번호 숨기기" : "비밀번호 보기",
44
45
  children: m ? /* @__PURE__ */ e(E, {}) : /* @__PURE__ */ e(P, {})
45
46
  }
46
47
  ) : null);
47
- return /* @__PURE__ */ i("div", { className: d("flex flex-col gap-2", F), children: [
48
- c && r && /* @__PURE__ */ i("div", { className: "flex items-start gap-0.5 whitespace-nowrap", children: [
49
- /* @__PURE__ */ e("label", { htmlFor: y, className: "text-body-2-r text-ds-text-strong", children: r }),
50
- l && /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "text-body-2-r text-ds-primary-red-normal", children: "*" })
48
+ return /* @__PURE__ */ l("div", { className: d("flex flex-col gap-2", F), children: [
49
+ c && r && /* @__PURE__ */ l("div", { className: "flex items-start gap-0.5 whitespace-nowrap", children: [
50
+ /* @__PURE__ */ e("label", { htmlFor: g, className: "text-body-2-r text-ds-text-strong", children: r }),
51
+ i && /* @__PURE__ */ e("span", { "aria-hidden": "true", className: "text-body-2-r text-ds-primary-red-normal", children: "*" })
51
52
  ] }),
52
53
  n && /* @__PURE__ */ e("p", { id: N, className: "text-body-4-r text-ds-text-strong", children: n }),
53
- /* @__PURE__ */ i(
54
+ /* @__PURE__ */ l(
54
55
  "div",
55
56
  {
56
57
  className: d(
57
- "flex items-center overflow-hidden bg-ds-background-default border rounded-ds-md transition-colors",
58
- t ? "border-ds-primary-red-normal" : "border-ds-line-normal hover:border-ds-line-strong focus-within:border-ds-primary-blue-normal",
59
- (b || f) && "bg-ds-surface-normal",
58
+ "flex items-center overflow-hidden border rounded-ds-md transition-colors",
59
+ V({ disabled: f, readOnly: b, error: !!t }),
60
60
  I[a].container
61
61
  ),
62
62
  children: [
63
63
  /* @__PURE__ */ e(
64
64
  "input",
65
65
  {
66
- ref: k,
67
- id: y,
68
- type: T,
66
+ ref: R,
67
+ id: g,
68
+ type: B,
69
69
  "aria-invalid": t ? !0 : void 0,
70
- "aria-describedby": B,
71
- "aria-required": l || void 0,
70
+ "aria-describedby": C,
71
+ "aria-required": i || void 0,
72
72
  className: d(
73
73
  "flex-1 min-w-0 bg-transparent outline-none font-sans",
74
74
  "text-ds-text-strong placeholder:text-ds-text-normal",
@@ -76,8 +76,8 @@ const I = {
76
76
  I[a].text,
77
77
  j
78
78
  ),
79
- disabled: b,
80
- readOnly: f,
79
+ disabled: f,
80
+ readOnly: b,
81
81
  ...h
82
82
  }
83
83
  ),
@@ -99,11 +99,11 @@ const I = {
99
99
  ] });
100
100
  }
101
101
  );
102
- V.displayName = "InputField";
103
- const $ = o.forwardRef(
104
- ({ label: r, showLabel: c = !0, wrapperClassName: l, className: n, ...s }, t) => {
102
+ $.displayName = "InputField";
103
+ const z = o.forwardRef(
104
+ ({ label: r, showLabel: c = !0, wrapperClassName: i, className: n, ...s }, t) => {
105
105
  const x = o.useId(), a = s.id ?? x;
106
- return /* @__PURE__ */ i("div", { className: d("flex flex-col gap-2", l), children: [
106
+ return /* @__PURE__ */ l("div", { className: d("flex flex-col gap-2", i), children: [
107
107
  c && r && /* @__PURE__ */ e("label", { htmlFor: a, className: "text-body-2-r text-ds-text-strong", children: r }),
108
108
  /* @__PURE__ */ e("div", { className: "overflow-hidden border border-ds-line-normal bg-ds-background-default rounded-ds-md p-3 hover:border-ds-line-strong focus-within:border-ds-primary-blue-normal transition-colors", children: /* @__PURE__ */ e(
109
109
  "textarea",
@@ -122,8 +122,8 @@ const $ = o.forwardRef(
122
122
  ] });
123
123
  }
124
124
  );
125
- $.displayName = "TextField";
125
+ z.displayName = "TextField";
126
126
  export {
127
- V as InputField,
128
- $ as TextField
127
+ $ as InputField,
128
+ z as TextField
129
129
  };
@@ -1,7 +1,7 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
2
  import * as React from "react";
3
3
  declare const labelVariants: (props?: ({
4
- variant?: "label-1-r" | null | undefined;
4
+ variant?: "label-1-r" | "label-1-sb" | null | undefined;
5
5
  as?: "p" | "span" | "label" | "div" | null | undefined;
6
6
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
7
  export interface LabelProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof labelVariants> {
@@ -2,14 +2,15 @@
2
2
  import { jsx as s } from "react/jsx-runtime";
3
3
  import { cn as i } from "../../lib/utils.js";
4
4
  import { Slot as m } from "@radix-ui/react-slot";
5
- import { cva as p } from "class-variance-authority";
6
- import * as b from "react";
7
- const c = p(
5
+ import { cva as b } from "class-variance-authority";
6
+ import * as p from "react";
7
+ const c = b(
8
8
  "text-foreground leading-tight",
9
9
  {
10
10
  variants: {
11
11
  variant: {
12
- "label-1-r": "text-label-1-r"
12
+ "label-1-r": "text-label-1-r",
13
+ "label-1-sb": "text-label-1-sb"
13
14
  },
14
15
  as: {
15
16
  label: "",
@@ -23,15 +24,15 @@ const c = p(
23
24
  as: "label"
24
25
  }
25
26
  }
26
- ), f = b.forwardRef(
27
- ({ className: t, variant: r, as: e, asChild: o, ...l }, n) => {
28
- const a = e || "label";
27
+ ), f = p.forwardRef(
28
+ ({ className: t, variant: e, as: l, asChild: r, ...o }, n) => {
29
+ const a = l || "label";
29
30
  return /* @__PURE__ */ s(
30
- o ? m : a,
31
+ r ? m : a,
31
32
  {
32
- className: i(c({ variant: r, as: a, className: t })),
33
+ className: i(c({ variant: e, as: a, className: t })),
33
34
  ref: n,
34
- ...l
35
+ ...o
35
36
  }
36
37
  );
37
38
  }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * VideoPlayer 내부용 슬라이더 (시크바 · 볼륨). 공개 API 아님 — index.tsx 에서 export 하지 않는다.
3
+ * 네이티브 range 는 트랙·썸 스타일을 브라우저별 pseudo-element 로 따로 맞춰야 해서
4
+ * div + pointer capture 로 구현하고 `role="slider"` 와 키보드(←→↑↓·Home·End)를 붙였다.
5
+ */
6
+ export interface MediaSliderProps {
7
+ /** 0~1 */
8
+ value: number;
9
+ onChange: (value: number) => void;
10
+ orientation?: "horizontal" | "vertical";
11
+ /** 16px 원형 손잡이 표시 (시크바) */
12
+ showThumb?: boolean;
13
+ /** 키보드 한 번에 움직이는 양 (0~1). 기본 0.05 */
14
+ step?: number;
15
+ "aria-label": string;
16
+ "aria-valuetext"?: string;
17
+ className?: string;
18
+ }
19
+ declare function MediaSlider({ value, onChange, orientation, showThumb, step, className, ...aria }: MediaSliderProps): import("react/jsx-runtime").JSX.Element;
20
+ export { MediaSlider };
@@ -0,0 +1,90 @@
1
+ "use client";
2
+ import { jsxs as h, jsx as u } from "react/jsx-runtime";
3
+ import { cn as o, clamp as l } from "../../lib/utils.js";
4
+ import * as x from "react";
5
+ function N({
6
+ value: c,
7
+ onChange: a,
8
+ orientation: d = "horizontal",
9
+ showThumb: v = !1,
10
+ step: i = 0.05,
11
+ className: w,
12
+ ...p
13
+ }) {
14
+ const f = x.useRef(null), n = d === "vertical", r = l(Number.isFinite(c) ? c : 0, 0, 1), m = (e) => {
15
+ const t = f.current?.getBoundingClientRect();
16
+ return t ? n ? l((t.bottom - e.clientY) / t.height, 0, 1) : l((e.clientX - t.left) / t.width, 0, 1) : r;
17
+ }, b = (e) => {
18
+ a(m(e));
19
+ try {
20
+ e.currentTarget.setPointerCapture(e.pointerId);
21
+ } catch {
22
+ }
23
+ }, y = (e) => {
24
+ e.currentTarget.hasPointerCapture?.(e.pointerId) && a(m(e));
25
+ }, g = (e) => {
26
+ const t = {
27
+ ArrowRight: r + i,
28
+ ArrowUp: r + i,
29
+ ArrowLeft: r - i,
30
+ ArrowDown: r - i,
31
+ Home: 0,
32
+ End: 1
33
+ };
34
+ e.key in t && (e.preventDefault(), a(l(t[e.key], 0, 1)));
35
+ }, s = `${r * 100}%`;
36
+ return /* @__PURE__ */ h(
37
+ "div",
38
+ {
39
+ role: "slider",
40
+ tabIndex: 0,
41
+ "aria-orientation": d,
42
+ "aria-valuemin": 0,
43
+ "aria-valuemax": 100,
44
+ "aria-valuenow": Math.round(r * 100),
45
+ ...p,
46
+ onPointerDown: b,
47
+ onPointerMove: y,
48
+ onKeyDown: g,
49
+ className: o(
50
+ // 4px 트랙이지만 손가락·마우스 히트 영역은 16px 로 넓힌다
51
+ "relative flex cursor-pointer touch-none items-center justify-center outline-none focus-visible:ring-2 focus-visible:ring-ds-primitive-white",
52
+ n ? "h-full w-4 flex-col" : "h-4 w-full",
53
+ w
54
+ ),
55
+ children: [
56
+ /* @__PURE__ */ h(
57
+ "div",
58
+ {
59
+ ref: f,
60
+ className: o("relative rounded-full", n ? "h-full w-1" : "h-1 w-full"),
61
+ children: [
62
+ /* @__PURE__ */ u("div", { className: o("absolute inset-0 rounded-full bg-ds-primitive-white", !n && "opacity-50") }),
63
+ /* @__PURE__ */ u(
64
+ "div",
65
+ {
66
+ className: o(
67
+ "absolute rounded-full bg-ds-primary-blue-normal",
68
+ n ? "inset-x-0 bottom-0" : "inset-y-0 left-0"
69
+ ),
70
+ style: n ? { height: s } : { width: s }
71
+ }
72
+ )
73
+ ]
74
+ }
75
+ ),
76
+ v && /* @__PURE__ */ u(
77
+ "div",
78
+ {
79
+ "aria-hidden": !0,
80
+ className: "pointer-events-none absolute size-4 -translate-x-1/2 rounded-full bg-ds-primary-blue-normal",
81
+ style: { left: s }
82
+ }
83
+ )
84
+ ]
85
+ }
86
+ );
87
+ }
88
+ export {
89
+ N as MediaSlider
90
+ };
@@ -0,0 +1,21 @@
1
+ import { DsSize } from '../../lib/size';
2
+ import * as React from "react";
3
+ export type ProgressBarVariant = "normal" | "large";
4
+ export type ProgressBarSize = Extract<DsSize, "md" | "sm">;
5
+ /**
6
+ * `role="progressbar"` 라 접근 이름이 필요하다 — `aria-label` 또는 `aria-labelledby` 를 반드시 넘긴다
7
+ * (없으면 axe `aria-progressbar-name` 위반).
8
+ */
9
+ export interface ProgressBarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
10
+ /** 진행률 0~100. 범위 밖 값은 잘린다. */
11
+ value: number;
12
+ /**
13
+ * - `normal`: 검은 테두리 캡슐 + 안쪽 파란 막대 (Figma Bar/Normal)
14
+ * - `large`: 16px 각진 막대, 테두리 없음 (Figma Bar/Large)
15
+ */
16
+ variant?: ProgressBarVariant;
17
+ /** `normal` 전용 높이 — md 10px · sm 8px. `large` 는 무시한다. */
18
+ size?: ProgressBarSize;
19
+ }
20
+ declare const ProgressBar: React.ForwardRefExoticComponent<ProgressBarProps & React.RefAttributes<HTMLDivElement>>;
21
+ export { ProgressBar };
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx as o } from "react/jsx-runtime";
3
+ import { cn as r, clamp as c } from "../../lib/utils.js";
4
+ import * as u from "react";
5
+ const s = {
6
+ md: { track: "h-[10px]", fill: "min-w-[6px]" },
7
+ sm: { track: "h-[8px]", fill: "min-w-[4px]" }
8
+ }, p = u.forwardRef(
9
+ ({ value: a, variant: n = "normal", size: e = "md", className: d, ...t }, m) => {
10
+ const l = c(Number.isFinite(a) ? a : 0, 0, 100), i = n === "large";
11
+ return /* @__PURE__ */ o(
12
+ "div",
13
+ {
14
+ ref: m,
15
+ role: "progressbar",
16
+ "aria-valuemin": 0,
17
+ "aria-valuemax": 100,
18
+ "aria-valuenow": Math.round(l),
19
+ className: r(
20
+ "w-full overflow-hidden",
21
+ i ? "h-4 bg-ds-surface-normal" : r(
22
+ "rounded-full border border-ds-primitive-black bg-ds-background-default p-px",
23
+ s[e].track
24
+ ),
25
+ d
26
+ ),
27
+ ...t,
28
+ children: /* @__PURE__ */ o(
29
+ "div",
30
+ {
31
+ className: r(
32
+ "h-full bg-ds-primary-blue-normal transition-[width] duration-200",
33
+ !i && r("rounded-full", s[e].fill)
34
+ ),
35
+ style: { width: `${l}%` }
36
+ }
37
+ )
38
+ }
39
+ );
40
+ }
41
+ );
42
+ p.displayName = "ProgressBar";
43
+ export {
44
+ p as ProgressBar
45
+ };
@@ -1,9 +1,10 @@
1
1
  "use client";
2
- import { jsxs as p, jsx as t } from "react/jsx-runtime";
3
- import { SearchIcon as v, CloseIcon as w } from "../../lib/icons.js";
4
- import { cn as r } from "../../lib/utils.js";
5
- import * as b from "react";
6
- const f = {
2
+ import { jsxs as f, jsx as e } from "react/jsx-runtime";
3
+ import { SearchIcon as w, CloseIcon as C } from "../../lib/icons.js";
4
+ import { fieldBoxClasses as j } from "../../lib/field-box.js";
5
+ import { cn as s } from "../../lib/utils.js";
6
+ import * as h from "react";
7
+ const b = {
7
8
  lg: {
8
9
  container: "h-11 px-3 gap-1.5",
9
10
  text: "text-body-2-r"
@@ -16,77 +17,78 @@ const f = {
16
17
  container: "h-8 px-3 gap-1.5",
17
18
  text: "text-body-3-r"
18
19
  }
19
- }, k = b.forwardRef(
20
+ }, k = h.forwardRef(
20
21
  ({
21
- label: d,
22
- showLabel: h = !0,
23
- showIcon: u = !0,
24
- size: a = "lg",
25
- error: e,
26
- hint: s,
27
- onClear: o,
28
- wrapperClassName: g,
22
+ label: r,
23
+ showLabel: u = !0,
24
+ showIcon: g = !0,
25
+ size: d = "lg",
26
+ error: t,
27
+ hint: n,
28
+ onClear: i,
29
+ wrapperClassName: N,
29
30
  className: y,
30
- disabled: n,
31
- value: i,
31
+ disabled: o,
32
+ readOnly: a,
33
+ value: c,
32
34
  ...l
33
- }, N) => {
34
- const I = !n && !!o && !!i, c = b.useId(), m = l.id ?? c, x = `${c}-description`;
35
- return /* @__PURE__ */ p("div", { className: r("flex flex-col gap-2", g), children: [
36
- h && d && /* @__PURE__ */ t("label", { htmlFor: m, className: "text-body-2-r text-ds-text-strong", children: d }),
37
- /* @__PURE__ */ p(
35
+ }, I) => {
36
+ const v = !o && !a && !!i && !!c, x = h.useId(), m = l.id ?? x, p = `${x}-description`;
37
+ return /* @__PURE__ */ f("div", { className: s("flex flex-col gap-2", N), children: [
38
+ u && r && /* @__PURE__ */ e("label", { htmlFor: m, className: "text-body-2-r text-ds-text-strong", children: r }),
39
+ /* @__PURE__ */ f(
38
40
  "div",
39
41
  {
40
- className: r(
41
- "flex items-center overflow-hidden bg-ds-background-default border rounded-ds-md transition-colors",
42
- e ? "border-ds-primary-red-normal" : "border-ds-line-normal hover:border-ds-line-strong focus-within:border-ds-primary-blue-normal",
43
- n && "bg-ds-surface-normal",
44
- f[a].container
42
+ className: s(
43
+ "flex items-center overflow-hidden border rounded-ds-md transition-colors",
44
+ j({ disabled: o, readOnly: a, error: !!t }),
45
+ b[d].container
45
46
  ),
46
47
  children: [
47
- u && /* @__PURE__ */ t(v, { className: "shrink-0 text-ds-text-normal" }),
48
- /* @__PURE__ */ t(
48
+ g && /* @__PURE__ */ e(w, { className: "shrink-0 text-ds-text-normal" }),
49
+ /* @__PURE__ */ e(
49
50
  "input",
50
51
  {
51
- ref: N,
52
+ ref: I,
52
53
  id: m,
53
- value: i,
54
- "aria-invalid": e ? !0 : void 0,
55
- "aria-describedby": e || s ? x : void 0,
56
- className: r(
54
+ value: c,
55
+ "aria-invalid": t ? !0 : void 0,
56
+ "aria-describedby": t || n ? p : void 0,
57
+ className: s(
57
58
  "flex-1 min-w-0 bg-transparent outline-none font-sans",
58
59
  "text-ds-text-strong placeholder:text-ds-text-normal",
59
60
  "disabled:text-ds-text-disabled",
60
- f[a].text,
61
+ b[d].text,
61
62
  y
62
63
  ),
63
- disabled: n,
64
+ disabled: o,
65
+ readOnly: a,
64
66
  ...l
65
67
  }
66
68
  ),
67
- I && /* @__PURE__ */ t(
69
+ v && /* @__PURE__ */ e(
68
70
  "button",
69
71
  {
70
72
  type: "button",
71
- onClick: o,
73
+ onClick: i,
72
74
  "aria-label": "검색어 지우기",
73
75
  className: "flex items-center justify-center",
74
76
  tabIndex: -1,
75
- children: /* @__PURE__ */ t(w, { className: "shrink-0 text-ds-text-normal" })
77
+ children: /* @__PURE__ */ e(C, { className: "shrink-0 text-ds-text-normal" })
76
78
  }
77
79
  )
78
80
  ]
79
81
  }
80
82
  ),
81
- (e || s) && /* @__PURE__ */ t(
83
+ (t || n) && /* @__PURE__ */ e(
82
84
  "p",
83
85
  {
84
- id: x,
85
- className: r(
86
+ id: p,
87
+ className: s(
86
88
  "text-body-4-r",
87
- e ? "text-ds-primary-red-normal" : "text-ds-text-normal"
89
+ t ? "text-ds-primary-red-normal" : "text-ds-text-normal"
88
90
  ),
89
- children: e ?? s
91
+ children: t ?? n
90
92
  }
91
93
  )
92
94
  ] });