@mondrianai/runyourai-design-system 0.0.25 → 0.0.26

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.mts CHANGED
@@ -132,7 +132,12 @@ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, V
132
132
  */
133
133
  iconEnd?: React$1.ReactNode;
134
134
  }
135
- declare function Button({ className, variant, size, asChild, loading, iconStart, iconEnd, disabled, children, ...props }: ButtonProps): react_jsx_runtime.JSX.Element;
135
+ /**
136
+ * ref를 받는 이유 — Popover/Tooltip/Drawer/Modal 등 DS 컴포넌트가 트리거를 Radix `asChild`(Slot)로
137
+ * 렌더하고, Slot은 자식에 ref를 붙인다. peerDependencies가 react>=18이라 React 19의 ref-as-prop에
138
+ * 기댈 수 없으므로 forwardRef가 필요하다. (React 18에서는 없으면 ref 경고와 함께 위치 계산이 깨진다)
139
+ */
140
+ declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
136
141
 
137
142
  declare function Card({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
138
143
  declare function CardHeader({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
@@ -534,8 +539,13 @@ interface IconProps extends React$1.SVGProps<SVGSVGElement> {
534
539
  * Inline SVG icon component.
535
540
  * Uses `stroke="currentColor"` so color is controlled via CSS `text-*` classes.
536
541
  * Renders the same paths as lucide-react but without the library dependency.
542
+ *
543
+ * ref를 받는 이유 — Tooltip/Popover/Drawer 등이 트리거를 Radix `asChild`(Slot)로 렌더하고,
544
+ * Slot은 자식에 ref를 붙인다. peerDependencies가 react>=18이라 React 19의 ref-as-prop에
545
+ * 기댈 수 없으므로 forwardRef가 필요하다. (React 18에서는 ref가 죽어 Popper가 앵커를 잡지
546
+ * 못하고, 툴팁이 열려도 화면 밖에 머문다)
537
547
  */
538
- declare function Icon({ name, className, strokeWidth, ...props }: IconProps): react_jsx_runtime.JSX.Element | null;
548
+ declare const Icon: React$1.ForwardRefExoticComponent<Omit<IconProps, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
539
549
 
540
550
  declare function Input({ className, type, ...props }: React$1.ComponentProps<"input">): react_jsx_runtime.JSX.Element;
541
551
 
@@ -896,7 +906,7 @@ declare function SidebarLink({ href, className, style, onClick, children, }: {
896
906
  onClick?: () => void;
897
907
  children: React$1.ReactNode;
898
908
  }): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
899
- declare function Sidebar({ logo, menus, avatar, utilities, panelTopContent, panelCenterContent, panelBottomContent, className, LinkComponent, isPanelOpen: isPanelOpenProp, onPanelOpenChange, mainMenuIconSize, }: {
909
+ declare function Sidebar({ logo, menus, avatar, utilities, panelTopContent, panelCenterContent, panelBottomContent, className, LinkComponent, isPanelOpen: isPanelOpenProp, onPanelOpenChange, mainMenuIconSize, labels, }: {
900
910
  logo: React$1.ReactNode;
901
911
  menus: SidebarMainMenuItem[];
902
912
  avatar: React$1.ReactNode;
@@ -920,6 +930,20 @@ declare function Sidebar({ logo, menus, avatar, utilities, panelTopContent, pane
920
930
  * - `'lg'`: 40px
921
931
  */
922
932
  mainMenuIconSize?: 'md' | 'lg';
933
+ /**
934
+ * 접근성 이름 — 스크린 리더에만 노출되는 문자열이라 화면에는 보이지 않는다.
935
+ * 미지정 시 한국어 기본값을 쓰므로, 다국어 앱은 번역된 문자열을 넘긴다.
936
+ */
937
+ labels?: {
938
+ /** 사이드바 전체(landmark). 기본값 '사이드바' */
939
+ sidebar?: string;
940
+ /** 좌측 서비스 내비게이터. 기본값 '메인 메뉴' */
941
+ mainMenu?: string;
942
+ /** 서브 메뉴 패널. 기본값은 활성 메뉴 제목 */
943
+ panel?: string;
944
+ /** 패널 닫기 버튼. 기본값 '패널 닫기' */
945
+ panelClose?: string;
946
+ };
923
947
  }): react_jsx_runtime.JSX.Element;
924
948
 
925
949
  interface SkeletonProps extends React$1.HTMLAttributes<HTMLDivElement> {
@@ -979,8 +1003,12 @@ interface TabsProps<T extends string = string> {
979
1003
  */
980
1004
  declare function Tabs<T extends string = string>({ allTabs, current, onTabChange, block, className, }: TabsProps<T>): react_jsx_runtime.JSX.Element;
981
1005
 
1006
+ /**
1007
+ * 좌우 여백은 아이콘 단독 사용 시 정사각(min-w)을 유지하도록 좁게 둔다.
1008
+ * 라벨을 함께 두는 그룹(ToggleGroup)은 자체 여백을 쓴다.
1009
+ */
982
1010
  declare const toggleSizeClasses: {
983
- readonly sm: "h-7 min-w-7 px-1.5 text-sm";
1011
+ readonly sm: "h-7 min-w-7 px-1.5 text-xs";
984
1012
  readonly md: "h-9 min-w-9 px-2 text-sm";
985
1013
  readonly lg: "h-10 min-w-10 px-2.5 text-base";
986
1014
  };
@@ -996,19 +1024,33 @@ declare function Toggle({ size, className, ...props }: ToggleProps): react_jsx_r
996
1024
 
997
1025
  interface ToggleGroupItemData<T extends string = string> {
998
1026
  value: T;
999
- children: React.ReactNode;
1027
+ children: React$1.ReactNode;
1000
1028
  disabled?: boolean;
1001
1029
  }
1002
1030
  interface ToggleGroupBaseProps<T extends string = string> {
1003
1031
  items: ToggleGroupItemData<T>[];
1004
1032
  /**
1005
- * outlined — 컨테이너 border + 아이템 사이 divider (default)
1006
- * noBorder — border 없음, 아이템마다 rounded-md 독립 적용
1033
+ * bordered — 컨테이너 border + 아이템 사이 divider (default)
1034
+ * noBorder — border 없이 붙은 묶음
1035
+ * chip — 아이템이 독립 알약(rounded-full)으로 떨어지고, 폭이 모자라면 줄바꿈된다
1007
1036
  */
1008
- variant?: 'bordered' | 'noBorder';
1037
+ variant?: 'bordered' | 'noBorder' | 'chip';
1038
+ /**
1039
+ * 선택된 항목에 쓸 Button variant. 기본 'outline'(흰 배경 + 테두리).
1040
+ * 선택되지 않은 항목은 'secondary'(연회색 배경)로 고정이라, 선택된 쪽이 배경에서 떠 보인다.
1041
+ * 더 강한 강조가 필요하면 'primary'를 넘긴다.
1042
+ */
1043
+ selectedStyle?: ButtonProps['variant'];
1009
1044
  disabled?: boolean;
1010
1045
  size?: 'sm' | 'md' | 'lg';
1011
1046
  className?: string;
1047
+ /**
1048
+ * 그룹(radiogroup/group)의 접근성 이름. 화면에 보이는 제목이 따로 없다면 반드시 지정한다.
1049
+ * 보이는 제목이 있으면 `aria-labelledby`로 그 요소를 가리키는 편이 낫다.
1050
+ */
1051
+ 'aria-label'?: string;
1052
+ /** 그룹의 접근성 이름을 다른 요소에서 가져올 때 쓴다(`aria-label`보다 우선). */
1053
+ 'aria-labelledby'?: string;
1012
1054
  }
1013
1055
  interface ToggleGroupSingleProps<T extends string = string> extends ToggleGroupBaseProps<T> {
1014
1056
  type?: 'single';
@@ -1021,7 +1063,16 @@ interface ToggleGroupMultipleProps<T extends string = string> extends ToggleGrou
1021
1063
  onValueChange?: (value: T[]) => void;
1022
1064
  }
1023
1065
  type ToggleGroupProps<T extends string = string> = ToggleGroupSingleProps<T> | ToggleGroupMultipleProps<T>;
1024
- declare function ToggleGroup<T extends string = string>({ items, variant, disabled, size, className, ...rest }: ToggleGroupProps<T>): react_jsx_runtime.JSX.Element;
1066
+ /**
1067
+ * 여러 항목 중 하나(single) 또는 여럿(multiple)을 고르는 버튼 그룹.
1068
+ * 항목은 DS Button으로 렌더링되므로 색/상태 스타일이 버튼과 일관된다.
1069
+ *
1070
+ * 선택 방식에 따라 역할이 달라진다 (WAI-ARIA APG).
1071
+ * - single — 상호배타 선택이므로 `radiogroup`/`radio`. 그룹 전체가 탭 스톱 하나이고
1072
+ * 좌우/상하 화살표로 이동하며 이동과 동시에 선택된다.
1073
+ * - multiple — 각각 독립 on/off이므로 `aria-pressed` 토글 버튼 묶음.
1074
+ */
1075
+ declare function ToggleGroup<T extends string = string>({ items, variant, selectedStyle, disabled, size, className, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, ...rest }: ToggleGroupProps<T>): react_jsx_runtime.JSX.Element;
1025
1076
 
1026
1077
  interface CircleIndicatorProps {
1027
1078
  /** 사용량 (바이트 또는 임의 단위) */
@@ -1272,9 +1323,20 @@ interface TooltipWithIconProps {
1272
1323
  content: string;
1273
1324
  /** 트리거 아이콘 이름 (Lucide). @default "info" */
1274
1325
  iconName?: string;
1326
+ /**
1327
+ * 트리거 버튼의 접근성 이름. 기본값은 `content`다.
1328
+ * 기본값이면 스크린 리더가 이름과 설명으로 같은 문장을 두 번 읽으므로,
1329
+ * 다국어 앱은 '도움말' 같은 짧은 번역 문자열을 넘기는 편이 낫다.
1330
+ */
1331
+ triggerLabel?: string;
1332
+ /** 트리거 버튼에 적용된다(크기·색). 아이콘은 버튼 크기를 채운다. */
1275
1333
  className?: string;
1276
1334
  }
1277
- declare function TooltipWithIcon({ content, iconName, className, }: TooltipWithIconProps): react_jsx_runtime.JSX.Element | null;
1335
+ /**
1336
+ * 트리거를 `<button>`으로 두는 이유 — 아이콘(svg)은 `aria-hidden`이고 탭 순서에도 없어
1337
+ * 트리거로 쓰면 키보드·스크린 리더 사용자가 툴팁에 도달할 수 없다.
1338
+ */
1339
+ declare function TooltipWithIcon({ content, iconName, triggerLabel, className, }: TooltipWithIconProps): react_jsx_runtime.JSX.Element | null;
1278
1340
 
1279
1341
  /**
1280
1342
  * 사용자 메시지 말풍선.
package/dist/index.d.ts CHANGED
@@ -132,7 +132,12 @@ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, V
132
132
  */
133
133
  iconEnd?: React$1.ReactNode;
134
134
  }
135
- declare function Button({ className, variant, size, asChild, loading, iconStart, iconEnd, disabled, children, ...props }: ButtonProps): react_jsx_runtime.JSX.Element;
135
+ /**
136
+ * ref를 받는 이유 — Popover/Tooltip/Drawer/Modal 등 DS 컴포넌트가 트리거를 Radix `asChild`(Slot)로
137
+ * 렌더하고, Slot은 자식에 ref를 붙인다. peerDependencies가 react>=18이라 React 19의 ref-as-prop에
138
+ * 기댈 수 없으므로 forwardRef가 필요하다. (React 18에서는 없으면 ref 경고와 함께 위치 계산이 깨진다)
139
+ */
140
+ declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
136
141
 
137
142
  declare function Card({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
138
143
  declare function CardHeader({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
@@ -534,8 +539,13 @@ interface IconProps extends React$1.SVGProps<SVGSVGElement> {
534
539
  * Inline SVG icon component.
535
540
  * Uses `stroke="currentColor"` so color is controlled via CSS `text-*` classes.
536
541
  * Renders the same paths as lucide-react but without the library dependency.
542
+ *
543
+ * ref를 받는 이유 — Tooltip/Popover/Drawer 등이 트리거를 Radix `asChild`(Slot)로 렌더하고,
544
+ * Slot은 자식에 ref를 붙인다. peerDependencies가 react>=18이라 React 19의 ref-as-prop에
545
+ * 기댈 수 없으므로 forwardRef가 필요하다. (React 18에서는 ref가 죽어 Popper가 앵커를 잡지
546
+ * 못하고, 툴팁이 열려도 화면 밖에 머문다)
537
547
  */
538
- declare function Icon({ name, className, strokeWidth, ...props }: IconProps): react_jsx_runtime.JSX.Element | null;
548
+ declare const Icon: React$1.ForwardRefExoticComponent<Omit<IconProps, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
539
549
 
540
550
  declare function Input({ className, type, ...props }: React$1.ComponentProps<"input">): react_jsx_runtime.JSX.Element;
541
551
 
@@ -896,7 +906,7 @@ declare function SidebarLink({ href, className, style, onClick, children, }: {
896
906
  onClick?: () => void;
897
907
  children: React$1.ReactNode;
898
908
  }): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
899
- declare function Sidebar({ logo, menus, avatar, utilities, panelTopContent, panelCenterContent, panelBottomContent, className, LinkComponent, isPanelOpen: isPanelOpenProp, onPanelOpenChange, mainMenuIconSize, }: {
909
+ declare function Sidebar({ logo, menus, avatar, utilities, panelTopContent, panelCenterContent, panelBottomContent, className, LinkComponent, isPanelOpen: isPanelOpenProp, onPanelOpenChange, mainMenuIconSize, labels, }: {
900
910
  logo: React$1.ReactNode;
901
911
  menus: SidebarMainMenuItem[];
902
912
  avatar: React$1.ReactNode;
@@ -920,6 +930,20 @@ declare function Sidebar({ logo, menus, avatar, utilities, panelTopContent, pane
920
930
  * - `'lg'`: 40px
921
931
  */
922
932
  mainMenuIconSize?: 'md' | 'lg';
933
+ /**
934
+ * 접근성 이름 — 스크린 리더에만 노출되는 문자열이라 화면에는 보이지 않는다.
935
+ * 미지정 시 한국어 기본값을 쓰므로, 다국어 앱은 번역된 문자열을 넘긴다.
936
+ */
937
+ labels?: {
938
+ /** 사이드바 전체(landmark). 기본값 '사이드바' */
939
+ sidebar?: string;
940
+ /** 좌측 서비스 내비게이터. 기본값 '메인 메뉴' */
941
+ mainMenu?: string;
942
+ /** 서브 메뉴 패널. 기본값은 활성 메뉴 제목 */
943
+ panel?: string;
944
+ /** 패널 닫기 버튼. 기본값 '패널 닫기' */
945
+ panelClose?: string;
946
+ };
923
947
  }): react_jsx_runtime.JSX.Element;
924
948
 
925
949
  interface SkeletonProps extends React$1.HTMLAttributes<HTMLDivElement> {
@@ -979,8 +1003,12 @@ interface TabsProps<T extends string = string> {
979
1003
  */
980
1004
  declare function Tabs<T extends string = string>({ allTabs, current, onTabChange, block, className, }: TabsProps<T>): react_jsx_runtime.JSX.Element;
981
1005
 
1006
+ /**
1007
+ * 좌우 여백은 아이콘 단독 사용 시 정사각(min-w)을 유지하도록 좁게 둔다.
1008
+ * 라벨을 함께 두는 그룹(ToggleGroup)은 자체 여백을 쓴다.
1009
+ */
982
1010
  declare const toggleSizeClasses: {
983
- readonly sm: "h-7 min-w-7 px-1.5 text-sm";
1011
+ readonly sm: "h-7 min-w-7 px-1.5 text-xs";
984
1012
  readonly md: "h-9 min-w-9 px-2 text-sm";
985
1013
  readonly lg: "h-10 min-w-10 px-2.5 text-base";
986
1014
  };
@@ -996,19 +1024,33 @@ declare function Toggle({ size, className, ...props }: ToggleProps): react_jsx_r
996
1024
 
997
1025
  interface ToggleGroupItemData<T extends string = string> {
998
1026
  value: T;
999
- children: React.ReactNode;
1027
+ children: React$1.ReactNode;
1000
1028
  disabled?: boolean;
1001
1029
  }
1002
1030
  interface ToggleGroupBaseProps<T extends string = string> {
1003
1031
  items: ToggleGroupItemData<T>[];
1004
1032
  /**
1005
- * outlined — 컨테이너 border + 아이템 사이 divider (default)
1006
- * noBorder — border 없음, 아이템마다 rounded-md 독립 적용
1033
+ * bordered — 컨테이너 border + 아이템 사이 divider (default)
1034
+ * noBorder — border 없이 붙은 묶음
1035
+ * chip — 아이템이 독립 알약(rounded-full)으로 떨어지고, 폭이 모자라면 줄바꿈된다
1007
1036
  */
1008
- variant?: 'bordered' | 'noBorder';
1037
+ variant?: 'bordered' | 'noBorder' | 'chip';
1038
+ /**
1039
+ * 선택된 항목에 쓸 Button variant. 기본 'outline'(흰 배경 + 테두리).
1040
+ * 선택되지 않은 항목은 'secondary'(연회색 배경)로 고정이라, 선택된 쪽이 배경에서 떠 보인다.
1041
+ * 더 강한 강조가 필요하면 'primary'를 넘긴다.
1042
+ */
1043
+ selectedStyle?: ButtonProps['variant'];
1009
1044
  disabled?: boolean;
1010
1045
  size?: 'sm' | 'md' | 'lg';
1011
1046
  className?: string;
1047
+ /**
1048
+ * 그룹(radiogroup/group)의 접근성 이름. 화면에 보이는 제목이 따로 없다면 반드시 지정한다.
1049
+ * 보이는 제목이 있으면 `aria-labelledby`로 그 요소를 가리키는 편이 낫다.
1050
+ */
1051
+ 'aria-label'?: string;
1052
+ /** 그룹의 접근성 이름을 다른 요소에서 가져올 때 쓴다(`aria-label`보다 우선). */
1053
+ 'aria-labelledby'?: string;
1012
1054
  }
1013
1055
  interface ToggleGroupSingleProps<T extends string = string> extends ToggleGroupBaseProps<T> {
1014
1056
  type?: 'single';
@@ -1021,7 +1063,16 @@ interface ToggleGroupMultipleProps<T extends string = string> extends ToggleGrou
1021
1063
  onValueChange?: (value: T[]) => void;
1022
1064
  }
1023
1065
  type ToggleGroupProps<T extends string = string> = ToggleGroupSingleProps<T> | ToggleGroupMultipleProps<T>;
1024
- declare function ToggleGroup<T extends string = string>({ items, variant, disabled, size, className, ...rest }: ToggleGroupProps<T>): react_jsx_runtime.JSX.Element;
1066
+ /**
1067
+ * 여러 항목 중 하나(single) 또는 여럿(multiple)을 고르는 버튼 그룹.
1068
+ * 항목은 DS Button으로 렌더링되므로 색/상태 스타일이 버튼과 일관된다.
1069
+ *
1070
+ * 선택 방식에 따라 역할이 달라진다 (WAI-ARIA APG).
1071
+ * - single — 상호배타 선택이므로 `radiogroup`/`radio`. 그룹 전체가 탭 스톱 하나이고
1072
+ * 좌우/상하 화살표로 이동하며 이동과 동시에 선택된다.
1073
+ * - multiple — 각각 독립 on/off이므로 `aria-pressed` 토글 버튼 묶음.
1074
+ */
1075
+ declare function ToggleGroup<T extends string = string>({ items, variant, selectedStyle, disabled, size, className, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, ...rest }: ToggleGroupProps<T>): react_jsx_runtime.JSX.Element;
1025
1076
 
1026
1077
  interface CircleIndicatorProps {
1027
1078
  /** 사용량 (바이트 또는 임의 단위) */
@@ -1272,9 +1323,20 @@ interface TooltipWithIconProps {
1272
1323
  content: string;
1273
1324
  /** 트리거 아이콘 이름 (Lucide). @default "info" */
1274
1325
  iconName?: string;
1326
+ /**
1327
+ * 트리거 버튼의 접근성 이름. 기본값은 `content`다.
1328
+ * 기본값이면 스크린 리더가 이름과 설명으로 같은 문장을 두 번 읽으므로,
1329
+ * 다국어 앱은 '도움말' 같은 짧은 번역 문자열을 넘기는 편이 낫다.
1330
+ */
1331
+ triggerLabel?: string;
1332
+ /** 트리거 버튼에 적용된다(크기·색). 아이콘은 버튼 크기를 채운다. */
1275
1333
  className?: string;
1276
1334
  }
1277
- declare function TooltipWithIcon({ content, iconName, className, }: TooltipWithIconProps): react_jsx_runtime.JSX.Element | null;
1335
+ /**
1336
+ * 트리거를 `<button>`으로 두는 이유 — 아이콘(svg)은 `aria-hidden`이고 탭 순서에도 없어
1337
+ * 트리거로 쓰면 키보드·스크린 리더 사용자가 툴팁에 도달할 수 없다.
1338
+ */
1339
+ declare function TooltipWithIcon({ content, iconName, triggerLabel, className, }: TooltipWithIconProps): react_jsx_runtime.JSX.Element | null;
1278
1340
 
1279
1341
  /**
1280
1342
  * 사용자 메시지 말풍선.