@bigtablet/design-system 2.4.1 → 2.4.3

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.css CHANGED
@@ -1372,6 +1372,47 @@
1372
1372
  pointer-events: none;
1373
1373
  }
1374
1374
 
1375
+ /* src/ui/modal/style.scss */
1376
+ @keyframes skeleton_loading {
1377
+ 0% {
1378
+ background-position: 100% 0;
1379
+ }
1380
+ 100% {
1381
+ background-position: 0 0;
1382
+ }
1383
+ }
1384
+ .modal {
1385
+ position: fixed;
1386
+ top: 0;
1387
+ right: 0;
1388
+ bottom: 0;
1389
+ left: 0;
1390
+ display: grid;
1391
+ place-items: center;
1392
+ background: rgba(0, 0, 0, 0.5);
1393
+ z-index: 100;
1394
+ }
1395
+ .modal_panel {
1396
+ background: #FFFFFF;
1397
+ border-radius: 12px;
1398
+ box-shadow: 0 3px 3px -3px rgba(0, 0, 0, 0.2), 0 9px 9px 0px rgba(0, 0, 0, 0.12);
1399
+ max-width: calc(100% - 64px);
1400
+ overflow: visible;
1401
+ }
1402
+ .modal_header {
1403
+ padding: 16px;
1404
+ border-bottom: 1px solid #E5E5E5;
1405
+ color: #121212;
1406
+ font-size: 20px;
1407
+ font-weight: 400;
1408
+ line-height: 28px;
1409
+ letter-spacing: 0px;
1410
+ }
1411
+ .modal_body {
1412
+ padding: 16px;
1413
+ overflow: visible;
1414
+ }
1415
+
1375
1416
  /* src/ui/otp-input/style.scss */
1376
1417
  @keyframes skeleton_loading {
1377
1418
  0% {
@@ -1436,47 +1477,6 @@
1436
1477
  color: #EF4444;
1437
1478
  }
1438
1479
 
1439
- /* src/ui/modal/style.scss */
1440
- @keyframes skeleton_loading {
1441
- 0% {
1442
- background-position: 100% 0;
1443
- }
1444
- 100% {
1445
- background-position: 0 0;
1446
- }
1447
- }
1448
- .modal {
1449
- position: fixed;
1450
- top: 0;
1451
- right: 0;
1452
- bottom: 0;
1453
- left: 0;
1454
- display: grid;
1455
- place-items: center;
1456
- background: rgba(0, 0, 0, 0.5);
1457
- z-index: 100;
1458
- }
1459
- .modal_panel {
1460
- background: #FFFFFF;
1461
- border-radius: 12px;
1462
- box-shadow: 0 3px 3px -3px rgba(0, 0, 0, 0.2), 0 9px 9px 0px rgba(0, 0, 0, 0.12);
1463
- max-width: calc(100% - 64px);
1464
- overflow: visible;
1465
- }
1466
- .modal_header {
1467
- padding: 16px;
1468
- border-bottom: 1px solid #E5E5E5;
1469
- color: #121212;
1470
- font-size: 20px;
1471
- font-weight: 400;
1472
- line-height: 28px;
1473
- letter-spacing: 0px;
1474
- }
1475
- .modal_body {
1476
- padding: 16px;
1477
- overflow: visible;
1478
- }
1479
-
1480
1480
  /* src/ui/pagination/style.scss */
1481
1481
  @keyframes skeleton_loading {
1482
1482
  0% {
@@ -1699,106 +1699,6 @@
1699
1699
  animation: spinner_spin 0.8s linear infinite;
1700
1700
  }
1701
1701
 
1702
- /* src/ui/toggle/style.scss */
1703
- @keyframes skeleton_loading {
1704
- 0% {
1705
- background-position: 100% 0;
1706
- }
1707
- 100% {
1708
- background-position: 0 0;
1709
- }
1710
- }
1711
- .toggle {
1712
- position: relative;
1713
- display: inline-flex;
1714
- align-items: center;
1715
- box-sizing: border-box;
1716
- width: 40px;
1717
- height: 24px;
1718
- padding: 2px;
1719
- border: 2px solid transparent;
1720
- border-radius: 9999px;
1721
- background: #B3B3B3;
1722
- transition: background 0.2s ease-in-out, border-color 0.2s ease-in-out;
1723
- cursor: pointer;
1724
- }
1725
- .toggle_thumb {
1726
- position: relative;
1727
- width: 12px;
1728
- height: 12px;
1729
- background: #FFFFFF;
1730
- border-radius: 9999px;
1731
- transition:
1732
- transform 0.2s ease-in-out,
1733
- width 0.2s ease-in-out,
1734
- height 0.2s ease-in-out,
1735
- background 0.2s ease-in-out;
1736
- transform: translateX(0);
1737
- }
1738
- .toggle_on {
1739
- background: #121212;
1740
- }
1741
- .toggle_on .toggle_thumb {
1742
- width: 20px;
1743
- height: 20px;
1744
- background: #FFFFFF;
1745
- transform: translateX(14px);
1746
- }
1747
- .toggle_on.toggle_disabled {
1748
- background: #B3B3B3;
1749
- border-color: transparent;
1750
- }
1751
- .toggle_on.toggle_disabled .toggle_thumb {
1752
- background: #FFFFFF;
1753
- }
1754
- .toggle:not(:disabled):hover {
1755
- opacity: 0.88;
1756
- }
1757
- .toggle:focus-visible {
1758
- outline: none;
1759
- box-shadow: 0 0 0 3px rgba(18, 18, 18, 0.15);
1760
- }
1761
- .toggle:not(:disabled):active .toggle_thumb {
1762
- width: 20px;
1763
- height: 20px;
1764
- }
1765
- .toggle_on:not(:disabled):active .toggle_thumb {
1766
- transform: translateX(12px);
1767
- }
1768
- .toggle_size_sm {
1769
- width: 40px;
1770
- height: 24px;
1771
- }
1772
- .toggle_size_md {
1773
- width: 48px;
1774
- height: 28px;
1775
- padding: 2px;
1776
- }
1777
- .toggle_size_md .toggle_thumb {
1778
- width: 16px;
1779
- height: 16px;
1780
- }
1781
- .toggle_size_md.toggle_on .toggle_thumb {
1782
- width: 24px;
1783
- height: 24px;
1784
- transform: translateX(18px);
1785
- }
1786
- .toggle_size_md:not(:disabled):active .toggle_thumb {
1787
- width: 24px;
1788
- height: 24px;
1789
- }
1790
- .toggle_size_md.toggle_on:not(:disabled):active .toggle_thumb {
1791
- transform: translateX(16px);
1792
- }
1793
- .toggle_disabled {
1794
- cursor: not-allowed;
1795
- border-color: transparent;
1796
- background: #B3B3B3;
1797
- }
1798
- .toggle_disabled .toggle_thumb {
1799
- background: #FFFFFF;
1800
- }
1801
-
1802
1702
  /* src/ui/textfield/style.scss */
1803
1703
  @keyframes skeleton_loading {
1804
1704
  0% {
@@ -2175,6 +2075,106 @@
2175
2075
  background: #666666;
2176
2076
  }
2177
2077
 
2078
+ /* src/ui/toggle/style.scss */
2079
+ @keyframes skeleton_loading {
2080
+ 0% {
2081
+ background-position: 100% 0;
2082
+ }
2083
+ 100% {
2084
+ background-position: 0 0;
2085
+ }
2086
+ }
2087
+ .toggle {
2088
+ position: relative;
2089
+ display: inline-flex;
2090
+ align-items: center;
2091
+ box-sizing: border-box;
2092
+ width: 40px;
2093
+ height: 24px;
2094
+ padding: 2px;
2095
+ border: 2px solid transparent;
2096
+ border-radius: 9999px;
2097
+ background: #B3B3B3;
2098
+ transition: background 0.2s ease-in-out, border-color 0.2s ease-in-out;
2099
+ cursor: pointer;
2100
+ }
2101
+ .toggle_thumb {
2102
+ position: relative;
2103
+ width: 12px;
2104
+ height: 12px;
2105
+ background: #FFFFFF;
2106
+ border-radius: 9999px;
2107
+ transition:
2108
+ transform 0.2s ease-in-out,
2109
+ width 0.2s ease-in-out,
2110
+ height 0.2s ease-in-out,
2111
+ background 0.2s ease-in-out;
2112
+ transform: translateX(0);
2113
+ }
2114
+ .toggle_on {
2115
+ background: #121212;
2116
+ }
2117
+ .toggle_on .toggle_thumb {
2118
+ width: 20px;
2119
+ height: 20px;
2120
+ background: #FFFFFF;
2121
+ transform: translateX(14px);
2122
+ }
2123
+ .toggle_on.toggle_disabled {
2124
+ background: #B3B3B3;
2125
+ border-color: transparent;
2126
+ }
2127
+ .toggle_on.toggle_disabled .toggle_thumb {
2128
+ background: #FFFFFF;
2129
+ }
2130
+ .toggle:not(:disabled):hover {
2131
+ opacity: 0.88;
2132
+ }
2133
+ .toggle:focus-visible {
2134
+ outline: none;
2135
+ box-shadow: 0 0 0 3px rgba(18, 18, 18, 0.15);
2136
+ }
2137
+ .toggle:not(:disabled):active .toggle_thumb {
2138
+ width: 20px;
2139
+ height: 20px;
2140
+ }
2141
+ .toggle_on:not(:disabled):active .toggle_thumb {
2142
+ transform: translateX(12px);
2143
+ }
2144
+ .toggle_size_sm {
2145
+ width: 40px;
2146
+ height: 24px;
2147
+ }
2148
+ .toggle_size_md {
2149
+ width: 48px;
2150
+ height: 28px;
2151
+ padding: 2px;
2152
+ }
2153
+ .toggle_size_md .toggle_thumb {
2154
+ width: 16px;
2155
+ height: 16px;
2156
+ }
2157
+ .toggle_size_md.toggle_on .toggle_thumb {
2158
+ width: 24px;
2159
+ height: 24px;
2160
+ transform: translateX(18px);
2161
+ }
2162
+ .toggle_size_md:not(:disabled):active .toggle_thumb {
2163
+ width: 24px;
2164
+ height: 24px;
2165
+ }
2166
+ .toggle_size_md.toggle_on:not(:disabled):active .toggle_thumb {
2167
+ transform: translateX(16px);
2168
+ }
2169
+ .toggle_disabled {
2170
+ cursor: not-allowed;
2171
+ border-color: transparent;
2172
+ background: #B3B3B3;
2173
+ }
2174
+ .toggle_disabled .toggle_thumb {
2175
+ background: #FFFFFF;
2176
+ }
2177
+
2178
2178
  /* src/ui/top-loading/style.scss */
2179
2179
  @keyframes skeleton_loading {
2180
2180
  0% {
package/dist/index.d.ts CHANGED
@@ -95,6 +95,14 @@ declare const colors: {
95
95
  };
96
96
  };
97
97
 
98
+ declare const elevation: {
99
+ readonly level1: "0 1px 1px -1px rgba(0, 0, 0, 0.20), 0 3px 3px 0px rgba(0, 0, 0, 0.12)";
100
+ readonly level2: "0 2px 2px -2px rgba(0, 0, 0, 0.20), 0 6px 6px 0px rgba(0, 0, 0, 0.12)";
101
+ readonly level3: "0 3px 3px -3px rgba(0, 0, 0, 0.20), 0 9px 9px 0px rgba(0, 0, 0, 0.12)";
102
+ readonly level4: "0 5px 5px -5px rgba(0, 0, 0, 0.20), 0 15px 15px 0px rgba(0, 0, 0, 0.12)";
103
+ readonly level5: "0 8px 10px -5px rgba(0, 0, 0, 0.20), 0 20px 20px 0px rgba(0, 0, 0, 0.12)";
104
+ };
105
+
98
106
  declare const motion: {
99
107
  readonly transition: {
100
108
  readonly fast: "0.1s ease-in-out";
@@ -132,14 +140,6 @@ declare const radius: {
132
140
  readonly full: "9999px";
133
141
  };
134
142
 
135
- declare const elevation: {
136
- readonly level1: "0 1px 1px -1px rgba(0, 0, 0, 0.20), 0 3px 3px 0px rgba(0, 0, 0, 0.12)";
137
- readonly level2: "0 2px 2px -2px rgba(0, 0, 0, 0.20), 0 6px 6px 0px rgba(0, 0, 0, 0.12)";
138
- readonly level3: "0 3px 3px -3px rgba(0, 0, 0, 0.20), 0 9px 9px 0px rgba(0, 0, 0, 0.12)";
139
- readonly level4: "0 5px 5px -5px rgba(0, 0, 0, 0.20), 0 15px 15px 0px rgba(0, 0, 0, 0.12)";
140
- readonly level5: "0 8px 10px -5px rgba(0, 0, 0, 0.20), 0 20px 20px 0px rgba(0, 0, 0, 0.12)";
141
- };
142
-
143
143
  declare const skeleton: {
144
144
  readonly color: {
145
145
  readonly base: "#F4F4F4";
@@ -611,6 +611,18 @@ interface DatePickerProps {
611
611
  */
612
612
  declare const DatePicker: ({ label, value, onChange, mode, startYear, endYear: endYearProp, minDate, selectableRange, disabled, fullWidth, width, yearLabel, monthLabel, dayLabel, minDateSrFormat, selectableRangeUntilTodaySrText, }: DatePickerProps) => react_jsx_runtime.JSX.Element;
613
613
 
614
+ interface DividerProps extends React$1.HTMLAttributes<HTMLHRElement> {
615
+ /** 구분선 두께 (기본값: "standard") */
616
+ weight?: "standard" | "heavy";
617
+ }
618
+ /**
619
+ * 구분선 컴포넌트를 렌더링한다.
620
+ * 콘텐츠 영역을 시각적으로 분리하는 수평 구분선을 표시한다.
621
+ * @param props 구분선 속성
622
+ * @returns 렌더링된 구분선 UI
623
+ */
624
+ declare const Divider: ({ weight, className, ...props }: DividerProps) => react_jsx_runtime.JSX.Element;
625
+
614
626
  type DropdownSize = "sm" | "md" | "lg";
615
627
  interface DropdownOption {
616
628
  value: string;
@@ -665,18 +677,6 @@ interface DropdownProps {
665
677
  */
666
678
  declare const Dropdown: ({ id, label, placeholder, options, value, onChange, defaultValue, disabled, size, fullWidth, className, }: DropdownProps) => react_jsx_runtime.JSX.Element;
667
679
 
668
- interface DividerProps extends React$1.HTMLAttributes<HTMLHRElement> {
669
- /** 구분선 두께 (기본값: "standard") */
670
- weight?: "standard" | "heavy";
671
- }
672
- /**
673
- * 구분선 컴포넌트를 렌더링한다.
674
- * 콘텐츠 영역을 시각적으로 분리하는 수평 구분선을 표시한다.
675
- * @param props 구분선 속성
676
- * @returns 렌더링된 구분선 UI
677
- */
678
- declare const Divider: ({ weight, className, ...props }: DividerProps) => react_jsx_runtime.JSX.Element;
679
-
680
680
  type FABVariant = "primary" | "additive";
681
681
  interface FABProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
682
682
  /** FAB 스타일 변형 (기본값: "primary") */
@@ -804,6 +804,28 @@ interface ListItemProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "on
804
804
  */
805
805
  declare const ListItem: ({ overline, label, supportingText, metadata, leadingElement, trailingElement, alignment, disabled, onClick, className, ...props }: ListItemProps) => react_jsx_runtime.JSX.Element;
806
806
 
807
+ interface ModalProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
808
+ /** 모달 열림 여부 */
809
+ open: boolean;
810
+ /** 모달 닫기 콜백 */
811
+ onClose?: () => void;
812
+ /** 오버레이 클릭 시 닫기 여부 (기본값: true) */
813
+ closeOnOverlay?: boolean;
814
+ /** 모달 패널 너비 (기본값: 520) */
815
+ width?: number | string;
816
+ /** 모달 헤더에 표시할 제목 */
817
+ title?: React$1.ReactNode;
818
+ /** 모달 접근성 레이블(기본값: title 또는 "Dialog") */
819
+ ariaLabel?: string;
820
+ }
821
+ /**
822
+ * 모달을 렌더링한다.
823
+ * 포커스 트랩과 스크롤 잠금을 적용하고, 열림 상태에 따라 오버레이/패널을 구성한다.
824
+ * @param props 모달 속성
825
+ * @returns 열림 상태일 때 렌더링된 모달, 닫힘 상태면 null
826
+ */
827
+ declare const Modal: ({ open, onClose, closeOnOverlay, width, title, children, className, ariaLabel, ...props }: ModalProps) => react_jsx_runtime.JSX.Element | null;
828
+
807
829
  interface OtpInputProps {
808
830
  /** OTP 자릿수 (기본값: 6) */
809
831
  length?: 4 | 6;
@@ -835,28 +857,6 @@ declare const OtpInput: {
835
857
  displayName: string;
836
858
  };
837
859
 
838
- interface ModalProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, "title"> {
839
- /** 모달 열림 여부 */
840
- open: boolean;
841
- /** 모달 닫기 콜백 */
842
- onClose?: () => void;
843
- /** 오버레이 클릭 시 닫기 여부 (기본값: true) */
844
- closeOnOverlay?: boolean;
845
- /** 모달 패널 너비 (기본값: 520) */
846
- width?: number | string;
847
- /** 모달 헤더에 표시할 제목 */
848
- title?: React$1.ReactNode;
849
- /** 모달 접근성 레이블(기본값: title 또는 "Dialog") */
850
- ariaLabel?: string;
851
- }
852
- /**
853
- * 모달을 렌더링한다.
854
- * 포커스 트랩과 스크롤 잠금을 적용하고, 열림 상태에 따라 오버레이/패널을 구성한다.
855
- * @param props 모달 속성
856
- * @returns 열림 상태일 때 렌더링된 모달, 닫힘 상태면 null
857
- */
858
- declare const Modal: ({ open, onClose, closeOnOverlay, width, title, children, className, ariaLabel, ...props }: ModalProps) => react_jsx_runtime.JSX.Element | null;
859
-
860
860
  interface PaginationProps {
861
861
  /** 현재 페이지 번호 (1-based) */
862
862
  page: number;
@@ -910,33 +910,6 @@ interface SpinnerProps {
910
910
  */
911
911
  declare const Spinner: ({ size, ariaLabel }: SpinnerProps) => react_jsx_runtime.JSX.Element;
912
912
 
913
- interface ToggleProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
914
- /** 제어형 토글 상태 */
915
- checked?: boolean;
916
- /** 비제어형 초기 토글 상태 */
917
- defaultChecked?: boolean;
918
- /** 상태 변경 시 호출되는 콜백 */
919
- onChange?: (checked: boolean) => void;
920
- /** 토글 크기 (기본값: "sm") */
921
- size?: "sm" | "md";
922
- /** 비활성화 여부 */
923
- disabled?: boolean;
924
- /** 토글 접근성 레이블(스크린 리더용) */
925
- ariaLabel: string;
926
- /** 버튼 요소 참조 */
927
- ref?: React$1.Ref<HTMLButtonElement>;
928
- }
929
- /**
930
- * 토글을 렌더링한다.
931
- * 제어형/비제어형 상태를 판별해 토글 로직을 수행하고 버튼 형태의 토글 UI를 반환한다.
932
- * @param props 토글 속성
933
- * @returns 렌더링된 토글 요소
934
- */
935
- declare const Toggle: {
936
- ({ checked, defaultChecked, onChange, size, disabled, className, ariaLabel, ref, ...props }: ToggleProps): react_jsx_runtime.JSX.Element;
937
- displayName: string;
938
- };
939
-
940
913
  type TextFieldSize = "sm" | "md";
941
914
  interface TextFieldProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, "size" | "onChange" | "value" | "defaultValue"> {
942
915
  /** 입력 필드 크기 (기본값: "md") */
@@ -1014,6 +987,33 @@ declare const useToast: () => {
1014
987
  message: (message: string, duration?: number) => void;
1015
988
  };
1016
989
 
990
+ interface ToggleProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
991
+ /** 제어형 토글 상태 */
992
+ checked?: boolean;
993
+ /** 비제어형 초기 토글 상태 */
994
+ defaultChecked?: boolean;
995
+ /** 상태 변경 시 호출되는 콜백 */
996
+ onChange?: (checked: boolean) => void;
997
+ /** 토글 크기 (기본값: "sm") */
998
+ size?: "sm" | "md";
999
+ /** 비활성화 여부 */
1000
+ disabled?: boolean;
1001
+ /** 토글 접근성 레이블(스크린 리더용) */
1002
+ ariaLabel: string;
1003
+ /** 버튼 요소 참조 */
1004
+ ref?: React$1.Ref<HTMLButtonElement>;
1005
+ }
1006
+ /**
1007
+ * 토글을 렌더링한다.
1008
+ * 제어형/비제어형 상태를 판별해 토글 로직을 수행하고 버튼 형태의 토글 UI를 반환한다.
1009
+ * @param props 토글 속성
1010
+ * @returns 렌더링된 토글 요소
1011
+ */
1012
+ declare const Toggle: {
1013
+ ({ checked, defaultChecked, onChange, size, disabled, className, ariaLabel, ref, ...props }: ToggleProps): react_jsx_runtime.JSX.Element;
1014
+ displayName: string;
1015
+ };
1016
+
1017
1017
  interface TopLoadingProps {
1018
1018
  /** 진행률 (0-100). undefined면 indeterminate 모드 */
1019
1019
  progress?: number;