@exem-ui/react 0.1.0-next.bf3c711

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 (274) hide show
  1. package/README.en.md +141 -0
  2. package/README.md +141 -0
  3. package/dist/Button-CMenVfb7.d.mts +35 -0
  4. package/dist/Button-CMenVfb7.d.ts +35 -0
  5. package/dist/Select-DMvWV_rF.d.mts +94 -0
  6. package/dist/Select-DMvWV_rF.d.ts +94 -0
  7. package/dist/avatar/index.d.mts +37 -0
  8. package/dist/avatar/index.d.ts +37 -0
  9. package/dist/avatar/index.js +13 -0
  10. package/dist/avatar/index.js.map +1 -0
  11. package/dist/avatar/index.mjs +4 -0
  12. package/dist/avatar/index.mjs.map +1 -0
  13. package/dist/badge/index.d.mts +29 -0
  14. package/dist/badge/index.d.ts +29 -0
  15. package/dist/badge/index.js +12 -0
  16. package/dist/badge/index.js.map +1 -0
  17. package/dist/badge/index.mjs +3 -0
  18. package/dist/badge/index.mjs.map +1 -0
  19. package/dist/breadcrumb/index.d.mts +43 -0
  20. package/dist/breadcrumb/index.d.ts +43 -0
  21. package/dist/breadcrumb/index.js +13 -0
  22. package/dist/breadcrumb/index.js.map +1 -0
  23. package/dist/breadcrumb/index.mjs +4 -0
  24. package/dist/breadcrumb/index.mjs.map +1 -0
  25. package/dist/button/index.d.mts +9 -0
  26. package/dist/button/index.d.ts +9 -0
  27. package/dist/button/index.js +29 -0
  28. package/dist/button/index.js.map +1 -0
  29. package/dist/button/index.mjs +12 -0
  30. package/dist/button/index.mjs.map +1 -0
  31. package/dist/checkbox/index.d.mts +54 -0
  32. package/dist/checkbox/index.d.ts +54 -0
  33. package/dist/checkbox/index.js +13 -0
  34. package/dist/checkbox/index.js.map +1 -0
  35. package/dist/checkbox/index.mjs +4 -0
  36. package/dist/checkbox/index.mjs.map +1 -0
  37. package/dist/chunk-34QIGWCT.mjs +10 -0
  38. package/dist/chunk-34QIGWCT.mjs.map +1 -0
  39. package/dist/chunk-3FPMWAQT.js +30 -0
  40. package/dist/chunk-3FPMWAQT.js.map +1 -0
  41. package/dist/chunk-3HMT3DQV.js +104 -0
  42. package/dist/chunk-3HMT3DQV.js.map +1 -0
  43. package/dist/chunk-4WAO7CUT.mjs +95 -0
  44. package/dist/chunk-4WAO7CUT.mjs.map +1 -0
  45. package/dist/chunk-5M47B2XJ.js +4096 -0
  46. package/dist/chunk-5M47B2XJ.js.map +1 -0
  47. package/dist/chunk-5QX4TO4F.js +61 -0
  48. package/dist/chunk-5QX4TO4F.js.map +1 -0
  49. package/dist/chunk-5TEFN2CW.js +97 -0
  50. package/dist/chunk-5TEFN2CW.js.map +1 -0
  51. package/dist/chunk-5TES5PG6.js +41 -0
  52. package/dist/chunk-5TES5PG6.js.map +1 -0
  53. package/dist/chunk-5TVMECVF.js +148 -0
  54. package/dist/chunk-5TVMECVF.js.map +1 -0
  55. package/dist/chunk-5WGNZX7Z.mjs +27 -0
  56. package/dist/chunk-5WGNZX7Z.mjs.map +1 -0
  57. package/dist/chunk-AQ3OIM2T.js +103 -0
  58. package/dist/chunk-AQ3OIM2T.js.map +1 -0
  59. package/dist/chunk-AU5NTBK3.js +361 -0
  60. package/dist/chunk-AU5NTBK3.js.map +1 -0
  61. package/dist/chunk-DJHGCJR4.mjs +224 -0
  62. package/dist/chunk-DJHGCJR4.mjs.map +1 -0
  63. package/dist/chunk-DPUTW5KD.mjs +74 -0
  64. package/dist/chunk-DPUTW5KD.mjs.map +1 -0
  65. package/dist/chunk-E53FHDVN.mjs +336 -0
  66. package/dist/chunk-E53FHDVN.mjs.map +1 -0
  67. package/dist/chunk-ECRQD7UU.js +82 -0
  68. package/dist/chunk-ECRQD7UU.js.map +1 -0
  69. package/dist/chunk-FB4ESGOX.mjs +59 -0
  70. package/dist/chunk-FB4ESGOX.mjs.map +1 -0
  71. package/dist/chunk-FDX4IQK5.js +76 -0
  72. package/dist/chunk-FDX4IQK5.js.map +1 -0
  73. package/dist/chunk-FOMIUDRM.js +96 -0
  74. package/dist/chunk-FOMIUDRM.js.map +1 -0
  75. package/dist/chunk-FR5F3VTU.js +139 -0
  76. package/dist/chunk-FR5F3VTU.js.map +1 -0
  77. package/dist/chunk-GW53LH3I.mjs +81 -0
  78. package/dist/chunk-GW53LH3I.mjs.map +1 -0
  79. package/dist/chunk-GXMRIT5E.mjs +94 -0
  80. package/dist/chunk-GXMRIT5E.mjs.map +1 -0
  81. package/dist/chunk-IANSI7F7.mjs +393 -0
  82. package/dist/chunk-IANSI7F7.mjs.map +1 -0
  83. package/dist/chunk-IDM6MZHF.js +415 -0
  84. package/dist/chunk-IDM6MZHF.js.map +1 -0
  85. package/dist/chunk-J5ZYQ3TP.js +104 -0
  86. package/dist/chunk-J5ZYQ3TP.js.map +1 -0
  87. package/dist/chunk-KPAUBWZA.mjs +39 -0
  88. package/dist/chunk-KPAUBWZA.mjs.map +1 -0
  89. package/dist/chunk-L7P2NDST.mjs +124 -0
  90. package/dist/chunk-L7P2NDST.mjs.map +1 -0
  91. package/dist/chunk-LZWKMQJL.mjs +3886 -0
  92. package/dist/chunk-LZWKMQJL.mjs.map +1 -0
  93. package/dist/chunk-M6OWN7QH.js +118 -0
  94. package/dist/chunk-M6OWN7QH.js.map +1 -0
  95. package/dist/chunk-MQVHREEI.js +448 -0
  96. package/dist/chunk-MQVHREEI.js.map +1 -0
  97. package/dist/chunk-MT47ECUN.js +127 -0
  98. package/dist/chunk-MT47ECUN.js.map +1 -0
  99. package/dist/chunk-N6U54JI4.mjs +126 -0
  100. package/dist/chunk-N6U54JI4.mjs.map +1 -0
  101. package/dist/chunk-NDG4LR3Q.js +139 -0
  102. package/dist/chunk-NDG4LR3Q.js.map +1 -0
  103. package/dist/chunk-PPD4BU4W.mjs +80 -0
  104. package/dist/chunk-PPD4BU4W.mjs.map +1 -0
  105. package/dist/chunk-PU5NO5EZ.js +4 -0
  106. package/dist/chunk-PU5NO5EZ.js.map +1 -0
  107. package/dist/chunk-Q442ZDTI.mjs +117 -0
  108. package/dist/chunk-Q442ZDTI.mjs.map +1 -0
  109. package/dist/chunk-QH23RO3C.mjs +137 -0
  110. package/dist/chunk-QH23RO3C.mjs.map +1 -0
  111. package/dist/chunk-REBHUF4L.js +226 -0
  112. package/dist/chunk-REBHUF4L.js.map +1 -0
  113. package/dist/chunk-RGB3QLQT.js +275 -0
  114. package/dist/chunk-RGB3QLQT.js.map +1 -0
  115. package/dist/chunk-T7U2QRLC.js +94 -0
  116. package/dist/chunk-T7U2QRLC.js.map +1 -0
  117. package/dist/chunk-TEHHJ3CS.mjs +73 -0
  118. package/dist/chunk-TEHHJ3CS.mjs.map +1 -0
  119. package/dist/chunk-TJY4MIBC.js +117 -0
  120. package/dist/chunk-TJY4MIBC.js.map +1 -0
  121. package/dist/chunk-VCMZQOQM.mjs +102 -0
  122. package/dist/chunk-VCMZQOQM.mjs.map +1 -0
  123. package/dist/chunk-VKN4H4WI.mjs +3 -0
  124. package/dist/chunk-VKN4H4WI.mjs.map +1 -0
  125. package/dist/chunk-VSB25XTY.js +12 -0
  126. package/dist/chunk-VSB25XTY.js.map +1 -0
  127. package/dist/chunk-VWTE74UT.mjs +96 -0
  128. package/dist/chunk-VWTE74UT.mjs.map +1 -0
  129. package/dist/chunk-WBTL7PBV.js +105 -0
  130. package/dist/chunk-WBTL7PBV.js.map +1 -0
  131. package/dist/chunk-WOK3EP3O.js +83 -0
  132. package/dist/chunk-WOK3EP3O.js.map +1 -0
  133. package/dist/chunk-WWT73GGM.mjs +83 -0
  134. package/dist/chunk-WWT73GGM.mjs.map +1 -0
  135. package/dist/chunk-XBDXTRK3.mjs +102 -0
  136. package/dist/chunk-XBDXTRK3.mjs.map +1 -0
  137. package/dist/chunk-YGBEKZWU.mjs +81 -0
  138. package/dist/chunk-YGBEKZWU.mjs.map +1 -0
  139. package/dist/chunk-YVFLRPFV.mjs +72 -0
  140. package/dist/chunk-YVFLRPFV.mjs.map +1 -0
  141. package/dist/chunk-ZMVBIQ2Z.mjs +253 -0
  142. package/dist/chunk-ZMVBIQ2Z.mjs.map +1 -0
  143. package/dist/chunk-ZWCMSHDP.mjs +425 -0
  144. package/dist/chunk-ZWCMSHDP.mjs.map +1 -0
  145. package/dist/flat/index.d.mts +13 -0
  146. package/dist/flat/index.d.ts +13 -0
  147. package/dist/flat/index.js +31 -0
  148. package/dist/flat/index.js.map +1 -0
  149. package/dist/flat/index.mjs +10 -0
  150. package/dist/flat/index.mjs.map +1 -0
  151. package/dist/flat/segment.d.mts +39 -0
  152. package/dist/flat/segment.d.ts +39 -0
  153. package/dist/flat/segment.js +13 -0
  154. package/dist/flat/segment.js.map +1 -0
  155. package/dist/flat/segment.mjs +4 -0
  156. package/dist/flat/segment.mjs.map +1 -0
  157. package/dist/flat/select.d.mts +58 -0
  158. package/dist/flat/select.d.ts +58 -0
  159. package/dist/flat/select.js +14 -0
  160. package/dist/flat/select.js.map +1 -0
  161. package/dist/flat/select.mjs +5 -0
  162. package/dist/flat/select.mjs.map +1 -0
  163. package/dist/flat/tooltip.d.mts +98 -0
  164. package/dist/flat/tooltip.d.ts +98 -0
  165. package/dist/flat/tooltip.js +17 -0
  166. package/dist/flat/tooltip.js.map +1 -0
  167. package/dist/flat/tooltip.mjs +4 -0
  168. package/dist/flat/tooltip.mjs.map +1 -0
  169. package/dist/icon/index.d.mts +1258 -0
  170. package/dist/icon/index.d.ts +1258 -0
  171. package/dist/icon/index.js +1672 -0
  172. package/dist/icon/index.js.map +1 -0
  173. package/dist/icon/index.mjs +3 -0
  174. package/dist/icon/index.mjs.map +1 -0
  175. package/dist/index-CXip5Wb1.d.mts +62 -0
  176. package/dist/index-Drz3P-6Y.d.ts +62 -0
  177. package/dist/index.d.mts +37 -0
  178. package/dist/index.d.ts +37 -0
  179. package/dist/index.js +150 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/index.mjs +29 -0
  182. package/dist/index.mjs.map +1 -0
  183. package/dist/input/index.d.mts +82 -0
  184. package/dist/input/index.d.ts +82 -0
  185. package/dist/input/index.js +22 -0
  186. package/dist/input/index.js.map +1 -0
  187. package/dist/input/index.mjs +5 -0
  188. package/dist/input/index.mjs.map +1 -0
  189. package/dist/loading/index.d.mts +54 -0
  190. package/dist/loading/index.d.ts +54 -0
  191. package/dist/loading/index.js +12 -0
  192. package/dist/loading/index.js.map +1 -0
  193. package/dist/loading/index.mjs +3 -0
  194. package/dist/loading/index.mjs.map +1 -0
  195. package/dist/messageBox/index.d.mts +33 -0
  196. package/dist/messageBox/index.d.ts +33 -0
  197. package/dist/messageBox/index.js +13 -0
  198. package/dist/messageBox/index.js.map +1 -0
  199. package/dist/messageBox/index.mjs +4 -0
  200. package/dist/messageBox/index.mjs.map +1 -0
  201. package/dist/modal/index.d.mts +97 -0
  202. package/dist/modal/index.d.ts +97 -0
  203. package/dist/modal/index.js +15 -0
  204. package/dist/modal/index.js.map +1 -0
  205. package/dist/modal/index.mjs +6 -0
  206. package/dist/modal/index.mjs.map +1 -0
  207. package/dist/picker/index.d.mts +12 -0
  208. package/dist/picker/index.d.ts +12 -0
  209. package/dist/picker/index.js +13 -0
  210. package/dist/picker/index.js.map +1 -0
  211. package/dist/picker/index.mjs +4 -0
  212. package/dist/picker/index.mjs.map +1 -0
  213. package/dist/progress/index.d.mts +36 -0
  214. package/dist/progress/index.d.ts +36 -0
  215. package/dist/progress/index.js +12 -0
  216. package/dist/progress/index.js.map +1 -0
  217. package/dist/progress/index.mjs +3 -0
  218. package/dist/progress/index.mjs.map +1 -0
  219. package/dist/radio/index.d.mts +39 -0
  220. package/dist/radio/index.d.ts +39 -0
  221. package/dist/radio/index.js +12 -0
  222. package/dist/radio/index.js.map +1 -0
  223. package/dist/radio/index.mjs +3 -0
  224. package/dist/radio/index.mjs.map +1 -0
  225. package/dist/scrollArea/index.d.mts +31 -0
  226. package/dist/scrollArea/index.d.ts +31 -0
  227. package/dist/scrollArea/index.js +16 -0
  228. package/dist/scrollArea/index.js.map +1 -0
  229. package/dist/scrollArea/index.mjs +3 -0
  230. package/dist/scrollArea/index.mjs.map +1 -0
  231. package/dist/segment/index.d.mts +46 -0
  232. package/dist/segment/index.d.ts +46 -0
  233. package/dist/segment/index.js +12 -0
  234. package/dist/segment/index.js.map +1 -0
  235. package/dist/segment/index.mjs +3 -0
  236. package/dist/segment/index.mjs.map +1 -0
  237. package/dist/star/index.d.mts +30 -0
  238. package/dist/star/index.d.ts +30 -0
  239. package/dist/star/index.js +12 -0
  240. package/dist/star/index.js.map +1 -0
  241. package/dist/star/index.mjs +3 -0
  242. package/dist/star/index.mjs.map +1 -0
  243. package/dist/switch/index.d.mts +32 -0
  244. package/dist/switch/index.d.ts +32 -0
  245. package/dist/switch/index.js +12 -0
  246. package/dist/switch/index.js.map +1 -0
  247. package/dist/switch/index.mjs +3 -0
  248. package/dist/switch/index.mjs.map +1 -0
  249. package/dist/tabs/index.d.mts +52 -0
  250. package/dist/tabs/index.d.ts +52 -0
  251. package/dist/tabs/index.js +12 -0
  252. package/dist/tabs/index.js.map +1 -0
  253. package/dist/tabs/index.mjs +3 -0
  254. package/dist/tabs/index.mjs.map +1 -0
  255. package/dist/tag/index.d.mts +68 -0
  256. package/dist/tag/index.d.ts +68 -0
  257. package/dist/tag/index.js +17 -0
  258. package/dist/tag/index.js.map +1 -0
  259. package/dist/tag/index.mjs +4 -0
  260. package/dist/tag/index.mjs.map +1 -0
  261. package/dist/toast/index.d.mts +175 -0
  262. package/dist/toast/index.d.ts +175 -0
  263. package/dist/toast/index.js +25 -0
  264. package/dist/toast/index.js.map +1 -0
  265. package/dist/toast/index.mjs +4 -0
  266. package/dist/toast/index.mjs.map +1 -0
  267. package/dist/tooltip/index.d.mts +26 -0
  268. package/dist/tooltip/index.d.ts +26 -0
  269. package/dist/tooltip/index.js +12 -0
  270. package/dist/tooltip/index.js.map +1 -0
  271. package/dist/tooltip/index.mjs +3 -0
  272. package/dist/tooltip/index.mjs.map +1 -0
  273. package/package.json +251 -0
  274. package/styles.css +20 -0
@@ -0,0 +1,117 @@
1
+ import { cva, cn } from '@exem-ui/core/utils';
2
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
3
+ import { createContext, forwardRef, useContext } from 'react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ // src/segment/Segment.tsx
7
+ var segmentListVariants = cva(
8
+ "inline-flex items-center overflow-hidden rounded-medium bg-elevation-elevation-2",
9
+ {
10
+ variants: {
11
+ size: {
12
+ small: "h-7 gap-0 p-0.5",
13
+ medium: "h-8 gap-0 p-0.5",
14
+ large: "h-10 gap-0 p-0.5"
15
+ }
16
+ },
17
+ defaultVariants: {
18
+ size: "medium"
19
+ }
20
+ }
21
+ );
22
+ var segmentItemVariants = cva(
23
+ [
24
+ "flex flex-1 items-center justify-center rounded-weak",
25
+ "focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-ring",
26
+ "disabled:cursor-not-allowed",
27
+ "data-[state=active]:bg-component-segmentedOption data-[state=active]:text-text-primary data-[state=active]:shadow-weak",
28
+ "data-[state=inactive]:text-text-tertiary data-[state=inactive]:disabled:text-text-disabled",
29
+ "transition-colors duration-200 ease-in-out"
30
+ ],
31
+ {
32
+ variants: {
33
+ size: {
34
+ small: "h-6 gap-0.5 text-body-3 font-medium",
35
+ medium: "h-7 gap-1 text-body-2 font-medium",
36
+ large: "h-9 gap-1.5 text-body-2 font-medium"
37
+ }
38
+ },
39
+ defaultVariants: {
40
+ size: "medium"
41
+ }
42
+ }
43
+ );
44
+ var segmentIconVariants = cva("flex items-center justify-center", {
45
+ variants: {
46
+ size: {
47
+ small: "size-4",
48
+ medium: "size-4",
49
+ large: "size-5"
50
+ }
51
+ },
52
+ defaultVariants: {
53
+ size: "medium"
54
+ }
55
+ });
56
+ var SegmentContext = createContext(void 0);
57
+ var useSegmentContext = () => {
58
+ const context = useContext(SegmentContext);
59
+ if (!context) {
60
+ throw new Error("Segment components must be used within a Segment");
61
+ }
62
+ return context;
63
+ };
64
+ var Segment = forwardRef(
65
+ ({ size = "medium", children, ...props }, ref) => /* @__PURE__ */ jsx(SegmentContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx(TabsPrimitive.Root, { ref, ...props, children }) })
66
+ );
67
+ Segment.List = forwardRef(
68
+ ({ className, ...props }, ref) => {
69
+ const { size } = useSegmentContext();
70
+ return /* @__PURE__ */ jsx(
71
+ TabsPrimitive.List,
72
+ {
73
+ ref,
74
+ className: cn(segmentListVariants({ size }), className),
75
+ ...props
76
+ }
77
+ );
78
+ }
79
+ );
80
+ Segment.Item = forwardRef(
81
+ ({ className, leftIcon, children, ...props }, ref) => {
82
+ const { size } = useSegmentContext();
83
+ return /* @__PURE__ */ jsxs(
84
+ TabsPrimitive.Trigger,
85
+ {
86
+ ref,
87
+ className: cn(segmentItemVariants({ size }), className),
88
+ ...props,
89
+ children: [
90
+ leftIcon && /* @__PURE__ */ jsx("span", { className: cn(segmentIconVariants({ size })), children: leftIcon }),
91
+ /* @__PURE__ */ jsx("span", { className: "flex items-center", children })
92
+ ]
93
+ }
94
+ );
95
+ }
96
+ );
97
+ Segment.Content = forwardRef(
98
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
99
+ TabsPrimitive.Content,
100
+ {
101
+ ref,
102
+ className: cn(
103
+ "ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
104
+ className
105
+ ),
106
+ ...props
107
+ }
108
+ )
109
+ );
110
+ Segment.displayName = "Segment";
111
+ Segment.List.displayName = "Segment.List";
112
+ Segment.Content.displayName = "Segment.Content";
113
+ Segment.Item.displayName = "Segment.Item";
114
+
115
+ export { Segment };
116
+ //# sourceMappingURL=chunk-Q442ZDTI.mjs.map
117
+ //# sourceMappingURL=chunk-Q442ZDTI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/segment/Segment.tsx"],"names":[],"mappings":"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","file":"chunk-Q442ZDTI.mjs","sourcesContent":["import { cn, cva } from '@exem-ui/core/utils';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport type React from 'react';\nimport { createContext, forwardRef, useContext } from 'react';\n\ntype SegmentSize = 'small' | 'medium' | 'large';\n\ntype SegmentContextValue = {\n size: SegmentSize;\n};\n\ntype SegmentListProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>;\n\ntype SegmentItemProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> & {\n /** 텍스트 왼쪽에 표시할 아이콘 요소 */\n leftIcon?: React.ReactElement<{ className?: string }>;\n};\n\ntype SegmentContentProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>;\n\ntype SegmentRootProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root> & {\n /**\n * 세그먼트 크기\n * @default 'medium'\n */\n size?: SegmentSize;\n};\n\ntype SegmentComponent = React.ForwardRefExoticComponent<\n SegmentRootProps & React.RefAttributes<React.ElementRef<typeof TabsPrimitive.Root>>\n> & {\n List: React.ForwardRefExoticComponent<SegmentListProps>;\n Item: React.ForwardRefExoticComponent<SegmentItemProps>;\n Content: React.ForwardRefExoticComponent<SegmentContentProps>;\n};\n\nconst segmentListVariants = cva(\n 'inline-flex items-center overflow-hidden rounded-medium bg-elevation-elevation-2',\n {\n variants: {\n size: {\n small: 'h-7 gap-0 p-0.5',\n medium: 'h-8 gap-0 p-0.5',\n large: 'h-10 gap-0 p-0.5',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\nconst segmentItemVariants = cva(\n [\n 'flex flex-1 items-center justify-center rounded-weak',\n 'focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed',\n 'data-[state=active]:bg-component-segmentedOption data-[state=active]:text-text-primary data-[state=active]:shadow-weak',\n 'data-[state=inactive]:text-text-tertiary data-[state=inactive]:disabled:text-text-disabled',\n 'transition-colors duration-200 ease-in-out',\n ],\n {\n variants: {\n size: {\n small: 'h-6 gap-0.5 text-body-3 font-medium',\n medium: 'h-7 gap-1 text-body-2 font-medium',\n large: 'h-9 gap-1.5 text-body-2 font-medium',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n },\n);\n\nconst segmentIconVariants = cva('flex items-center justify-center', {\n variants: {\n size: {\n small: 'size-4',\n medium: 'size-4',\n large: 'size-5',\n },\n },\n defaultVariants: {\n size: 'medium',\n },\n});\n\nconst SegmentContext = createContext<SegmentContextValue | undefined>(undefined);\n\nconst useSegmentContext = () => {\n const context = useContext(SegmentContext);\n if (!context) {\n throw new Error('Segment components must be used within a Segment');\n }\n return context;\n};\n\n/**\n * 탭 형태의 세그먼트 컨트롤 컴포넌트입니다.\n * Compound Component 패턴으로 `Segment.List`, `Segment.Item`, `Segment.Content`와 함께 사용합니다.\n *\n * @example\n * ```tsx\n * <Segment defaultValue=\"tab1\" size=\"medium\">\n * <Segment.List>\n * <Segment.Item value=\"tab1\">첫 번째</Segment.Item>\n * <Segment.Item value=\"tab2\">두 번째</Segment.Item>\n * </Segment.List>\n * <Segment.Content value=\"tab1\">첫 번째 내용</Segment.Content>\n * <Segment.Content value=\"tab2\">두 번째 내용</Segment.Content>\n * </Segment>\n * ```\n *\n * @see {@link SegmentRootProps} 루트 props 상세\n * @see {@link SegmentItemProps} 아이템 props 상세\n */\nconst Segment = forwardRef<React.ElementRef<typeof TabsPrimitive.Root>, SegmentRootProps>(\n ({ size = 'medium', children, ...props }, ref) => (\n <SegmentContext.Provider value={{ size }}>\n <TabsPrimitive.Root ref={ref} {...props}>\n {children}\n </TabsPrimitive.Root>\n </SegmentContext.Provider>\n ),\n) as SegmentComponent;\n\nSegment.List = forwardRef<React.ElementRef<typeof TabsPrimitive.List>, SegmentListProps>(\n ({ className, ...props }, ref) => {\n const { size } = useSegmentContext();\n return (\n <TabsPrimitive.List\n ref={ref}\n className={cn(segmentListVariants({ size }), className)}\n {...props}\n />\n );\n },\n) as SegmentComponent['List'];\n\nSegment.Item = forwardRef<React.ElementRef<typeof TabsPrimitive.Trigger>, SegmentItemProps>(\n ({ className, leftIcon, children, ...props }, ref) => {\n const { size } = useSegmentContext();\n\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(segmentItemVariants({ size }), className)}\n {...props}\n >\n {leftIcon && <span className={cn(segmentIconVariants({ size }))}>{leftIcon}</span>}\n <span className=\"flex items-center\">{children}</span>\n </TabsPrimitive.Trigger>\n );\n },\n) as SegmentComponent['Item'];\n\nSegment.Content = forwardRef<React.ElementRef<typeof TabsPrimitive.Content>, SegmentContentProps>(\n ({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className,\n )}\n {...props}\n />\n ),\n) as SegmentComponent['Content'];\n\nSegment.displayName = 'Segment';\nSegment.List.displayName = 'Segment.List';\nSegment.Content.displayName = 'Segment.Content';\nSegment.Item.displayName = 'Segment.Item';\n\nexport { Segment };\nexport type {\n SegmentComponent,\n SegmentRootProps,\n SegmentItemProps,\n SegmentContentProps,\n SegmentListProps,\n};\n"]}
@@ -0,0 +1,137 @@
1
+ import { ChevronLeft, ChevronRight } from './chunk-LZWKMQJL.mjs';
2
+ import { cn } from '@exem-ui/core/utils';
3
+ import { useState } from 'react';
4
+ import { getDefaultClassNames, DayPicker } from 'react-day-picker';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ function DatePickerChevron({ orientation }) {
8
+ if (orientation === "left") {
9
+ return /* @__PURE__ */ jsx(ChevronLeft, { type: "regular", className: "size-5" });
10
+ }
11
+ return /* @__PURE__ */ jsx(ChevronRight, { type: "regular", className: "size-5" });
12
+ }
13
+ function DatePickerDayButton({
14
+ day,
15
+ modifiers,
16
+ children,
17
+ className,
18
+ ...buttonProps
19
+ }) {
20
+ return /* @__PURE__ */ jsxs("button", { className: cn(className, "relative"), ...buttonProps, children: [
21
+ children,
22
+ modifiers.today && /* @__PURE__ */ jsx(
23
+ "span",
24
+ {
25
+ className: cn(
26
+ "absolute bottom-[3px] left-1/2 size-1 -translate-x-1/2 rounded-full",
27
+ modifiers.selected ? "bg-text-inverse" : "bg-icon-critical"
28
+ )
29
+ }
30
+ )
31
+ ] });
32
+ }
33
+ function DatePicker({ type = "single", showOutsideDays = true, ...rest }) {
34
+ const dayPickerProps = { ...rest, mode: type };
35
+ const defaultClassNames = getDefaultClassNames();
36
+ const [month, setMonth] = useState(
37
+ dayPickerProps.month ?? dayPickerProps.defaultMonth ?? /* @__PURE__ */ new Date()
38
+ );
39
+ const rangeSelected = type === "range" ? rest.selected : void 0;
40
+ const isRangeComplete = rangeSelected?.from != null && rangeSelected?.to != null;
41
+ const handleMonthChange = (newMonth) => {
42
+ setMonth(newMonth);
43
+ dayPickerProps.onMonthChange?.(newMonth);
44
+ };
45
+ const handleDayClick = (day, modifiers, e) => {
46
+ if (modifiers.outside) {
47
+ setMonth(new Date(day.getFullYear(), day.getMonth()));
48
+ }
49
+ dayPickerProps.onDayClick?.(day, modifiers, e);
50
+ };
51
+ return /* @__PURE__ */ jsx(
52
+ DayPicker,
53
+ {
54
+ ...dayPickerProps,
55
+ month,
56
+ onMonthChange: handleMonthChange,
57
+ onDayClick: handleDayClick,
58
+ showOutsideDays,
59
+ formatters: {
60
+ formatCaption: (date) => {
61
+ const year = date.getFullYear();
62
+ const month2 = String(date.getMonth() + 1).padStart(2, "0");
63
+ return `${year}\uB144 ${month2}\uC6D4`;
64
+ },
65
+ formatWeekdayName: (date) => date.toLocaleDateString("en-US", { weekday: "short" }),
66
+ ...dayPickerProps.formatters
67
+ },
68
+ components: {
69
+ Chevron: DatePickerChevron,
70
+ DayButton: DatePickerDayButton,
71
+ ...dayPickerProps.components
72
+ },
73
+ classNames: {
74
+ root: cn(
75
+ defaultClassNames.root,
76
+ "rounded-medium border border-border-primary bg-background-overlay p-4 shadow-medium"
77
+ ),
78
+ months: cn(defaultClassNames.months, "relative"),
79
+ month: cn(defaultClassNames.month, "flex flex-col gap-2"),
80
+ month_caption: cn(defaultClassNames.month_caption, "flex h-7 items-center px-0.5"),
81
+ caption_label: "text-body-2 font-semibold text-text-primary",
82
+ nav: cn(defaultClassNames.nav, "absolute right-0 top-0 flex h-7 items-center gap-2"),
83
+ button_previous: cn(
84
+ defaultClassNames.button_previous,
85
+ "flex size-7 items-center justify-center rounded-medium hover:bg-elevation-elevation-2"
86
+ ),
87
+ button_next: cn(
88
+ defaultClassNames.button_next,
89
+ "flex size-7 items-center justify-center rounded-medium hover:bg-elevation-elevation-2"
90
+ ),
91
+ weekday: cn(
92
+ defaultClassNames.weekday,
93
+ "size-8 text-body-3 font-regular text-text-tertiary"
94
+ ),
95
+ month_grid: cn(
96
+ defaultClassNames.month_grid,
97
+ "border-separate border-spacing-x-0 border-spacing-y-1"
98
+ ),
99
+ week: cn(defaultClassNames.week, "overflow-hidden rounded-medium"),
100
+ day: cn(defaultClassNames.day, "size-8 text-body-2 font-medium text-text-secondary"),
101
+ day_button: cn(
102
+ defaultClassNames.day_button,
103
+ "size-8 cursor-pointer rounded-full hover:border hover:border-border-focused"
104
+ ),
105
+ outside: "!text-text-disabled",
106
+ selected: cn(
107
+ "[&>button]:bg-solid-primary-default",
108
+ "[&>button]:text-text-inverse",
109
+ "[&>button]:border-0",
110
+ "[&>button]:hover:border-0"
111
+ ),
112
+ range_start: cn(
113
+ "rounded-none",
114
+ isRangeComplete && "[background:linear-gradient(to_right,transparent_50%,var(--color-elevation-elevation-2)_50%)]"
115
+ ),
116
+ range_end: cn(
117
+ "rounded-none",
118
+ isRangeComplete && "[background:linear-gradient(to_left,transparent_50%,var(--color-elevation-elevation-2)_50%)]"
119
+ ),
120
+ range_middle: cn(
121
+ "bg-elevation-elevation-2 rounded-none",
122
+ "[&>button]:!bg-transparent",
123
+ "[&>button]:!text-text-secondary"
124
+ ),
125
+ ...dayPickerProps.classNames
126
+ },
127
+ modifiersClassNames: {
128
+ today: "rdp-calendar-today",
129
+ ...dayPickerProps.modifiersClassNames
130
+ }
131
+ }
132
+ );
133
+ }
134
+
135
+ export { DatePicker };
136
+ //# sourceMappingURL=chunk-QH23RO3C.mjs.map
137
+ //# sourceMappingURL=chunk-QH23RO3C.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/picker/DatePicker.tsx"],"names":["month"],"mappings":"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","file":"chunk-QH23RO3C.mjs","sourcesContent":["import { cn } from '@exem-ui/core/utils';\nimport { type ComponentProps, useState } from 'react';\nimport { type DayButtonProps, DayPicker, getDefaultClassNames } from 'react-day-picker';\n\nimport { ChevronLeft, ChevronRight } from '../icon';\n\ntype DistributiveOmit<T, K extends string> = T extends unknown ? Omit<T, K> : never;\n\ntype DatePickerProps = DistributiveOmit<ComponentProps<typeof DayPicker>, 'mode'> & {\n /** 날짜 선택 유형 */\n type?: 'single' | 'range';\n};\n\nfunction DatePickerChevron({ orientation }: { orientation?: string }) {\n if (orientation === 'left') {\n return <ChevronLeft type=\"regular\" className=\"size-5\" />;\n }\n return <ChevronRight type=\"regular\" className=\"size-5\" />;\n}\n\nfunction DatePickerDayButton({\n day,\n modifiers,\n children,\n className,\n ...buttonProps\n}: DayButtonProps) {\n return (\n <button className={cn(className, 'relative')} {...buttonProps}>\n {children}\n {modifiers.today && (\n <span\n className={cn(\n 'absolute bottom-[3px] left-1/2 size-1 -translate-x-1/2 rounded-full',\n modifiers.selected ? 'bg-text-inverse' : 'bg-icon-critical',\n )}\n />\n )}\n </button>\n );\n}\n\nfunction DatePicker({ type = 'single', showOutsideDays = true, ...rest }: DatePickerProps) {\n const dayPickerProps = { ...rest, mode: type } as ComponentProps<typeof DayPicker>;\n const defaultClassNames = getDefaultClassNames();\n const [month, setMonth] = useState(\n dayPickerProps.month ?? dayPickerProps.defaultMonth ?? new Date(),\n );\n\n const rangeSelected =\n type === 'range' ? (rest as { selected?: { from?: Date; to?: Date } }).selected : undefined;\n const isRangeComplete = rangeSelected?.from != null && rangeSelected?.to != null;\n\n const handleMonthChange = (newMonth: Date) => {\n setMonth(newMonth);\n dayPickerProps.onMonthChange?.(newMonth);\n };\n\n const handleDayClick: ComponentProps<typeof DayPicker>['onDayClick'] = (day, modifiers, e) => {\n if (modifiers.outside) {\n setMonth(new Date(day.getFullYear(), day.getMonth()));\n }\n dayPickerProps.onDayClick?.(day, modifiers, e);\n };\n\n return (\n <DayPicker\n {...dayPickerProps}\n month={month}\n onMonthChange={handleMonthChange}\n onDayClick={handleDayClick}\n showOutsideDays={showOutsideDays}\n formatters={{\n formatCaption: (date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n return `${year}년 ${month}월`;\n },\n formatWeekdayName: (date) => date.toLocaleDateString('en-US', { weekday: 'short' }),\n ...dayPickerProps.formatters,\n }}\n components={{\n Chevron: DatePickerChevron,\n DayButton: DatePickerDayButton,\n ...dayPickerProps.components,\n }}\n classNames={{\n root: cn(\n defaultClassNames.root,\n 'rounded-medium border border-border-primary bg-background-overlay p-4 shadow-medium',\n ),\n months: cn(defaultClassNames.months, 'relative'),\n month: cn(defaultClassNames.month, 'flex flex-col gap-2'),\n month_caption: cn(defaultClassNames.month_caption, 'flex h-7 items-center px-0.5'),\n caption_label: 'text-body-2 font-semibold text-text-primary',\n nav: cn(defaultClassNames.nav, 'absolute right-0 top-0 flex h-7 items-center gap-2'),\n button_previous: cn(\n defaultClassNames.button_previous,\n 'flex size-7 items-center justify-center rounded-medium hover:bg-elevation-elevation-2',\n ),\n button_next: cn(\n defaultClassNames.button_next,\n 'flex size-7 items-center justify-center rounded-medium hover:bg-elevation-elevation-2',\n ),\n weekday: cn(\n defaultClassNames.weekday,\n 'size-8 text-body-3 font-regular text-text-tertiary',\n ),\n month_grid: cn(\n defaultClassNames.month_grid,\n 'border-separate border-spacing-x-0 border-spacing-y-1',\n ),\n week: cn(defaultClassNames.week, 'overflow-hidden rounded-medium'),\n day: cn(defaultClassNames.day, 'size-8 text-body-2 font-medium text-text-secondary'),\n day_button: cn(\n defaultClassNames.day_button,\n 'size-8 cursor-pointer rounded-full hover:border hover:border-border-focused',\n ),\n outside: '!text-text-disabled',\n selected: cn(\n '[&>button]:bg-solid-primary-default',\n '[&>button]:text-text-inverse',\n '[&>button]:border-0',\n '[&>button]:hover:border-0',\n ),\n range_start: cn(\n 'rounded-none',\n isRangeComplete &&\n '[background:linear-gradient(to_right,transparent_50%,var(--color-elevation-elevation-2)_50%)]',\n ),\n range_end: cn(\n 'rounded-none',\n isRangeComplete &&\n '[background:linear-gradient(to_left,transparent_50%,var(--color-elevation-elevation-2)_50%)]',\n ),\n range_middle: cn(\n 'bg-elevation-elevation-2 rounded-none',\n '[&>button]:!bg-transparent',\n '[&>button]:!text-text-secondary',\n ),\n ...dayPickerProps.classNames,\n }}\n modifiersClassNames={{\n today: 'rdp-calendar-today',\n ...dayPickerProps.modifiersClassNames,\n }}\n />\n );\n}\n\nexport { DatePicker };\nexport type { DatePickerProps };\n"]}
@@ -0,0 +1,226 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@exem-ui/core/utils');
4
+ var react = require('react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ // src/button/Button.tsx
8
+ var colorStyles = {
9
+ accent: {
10
+ contained: {
11
+ button: "bg-solid-accent-default hover:bg-solid-accent-hovered disabled:bg-solid-accent-disabled",
12
+ icon: "text-icon-static-light group-disabled/button:text-icon-inverse-disabled",
13
+ text: "text-text-static-light group-disabled/button:text-text-inverse-disabled"
14
+ },
15
+ outlined: {
16
+ button: "border border-border-accent hover:bg-elevation-accent disabled:border-border-accent-disabled",
17
+ icon: "text-text-accent group-disabled/button:text-text-accent-disabled",
18
+ text: "text-text-accent group-disabled/button:text-text-accent-disabled"
19
+ },
20
+ invisible: {
21
+ button: "hover:bg-elevation-accent",
22
+ icon: "text-text-accent group-disabled/button:text-text-accent-disabled",
23
+ text: "text-text-accent group-disabled/button:text-text-accent-disabled"
24
+ }
25
+ },
26
+ assistive: {
27
+ contained: {
28
+ button: "bg-elevation-elevation-2 hover:bg-elevation-elevation-3 disabled:bg-elevation-elevation-2",
29
+ icon: "text-icon-secondary group-disabled/button:text-icon-disabled",
30
+ text: "text-text-secondary group-disabled/button:text-text-disabled"
31
+ }
32
+ },
33
+ critical: {
34
+ contained: {
35
+ button: "bg-solid-critical-default hover:bg-solid-critical-hovered disabled:bg-solid-critical-disabled",
36
+ icon: "text-icon-static-light group-disabled/button:text-icon-inverse-disabled",
37
+ text: "text-text-static-light group-disabled/button:text-text-inverse-disabled"
38
+ },
39
+ outlined: {
40
+ button: "border border-border-critical hover:bg-elevation-critical disabled:border-border-critical-disabled",
41
+ icon: "text-text-critical group-disabled/button:text-text-critical-disabled",
42
+ text: "text-text-critical group-disabled/button:text-text-critical-disabled"
43
+ },
44
+ invisible: {
45
+ button: "hover:bg-elevation-critical",
46
+ icon: "text-text-critical group-disabled/button:text-text-critical-disabled",
47
+ text: "text-text-critical group-disabled/button:text-text-critical-disabled"
48
+ }
49
+ },
50
+ inverse: {
51
+ contained: {
52
+ button: "bg-elevation-elevation-0 hover:bg-elevation-elevation-2 disabled:bg-elevation-elevation-2",
53
+ icon: "text-icon-secondary group-disabled/button:text-icon-disabled",
54
+ text: "text-text-secondary group-disabled/button:text-text-disabled"
55
+ }
56
+ },
57
+ primary: {
58
+ contained: {
59
+ button: "bg-solid-primary-default hover:bg-solid-primary-hovered disabled:bg-solid-primary-disabled",
60
+ icon: "text-icon-inverse group-disabled/button:text-icon-inverse",
61
+ text: "text-text-inverse group-disabled/button:text-text-inverse"
62
+ },
63
+ outlined: {
64
+ button: "border border-border-secondary hover:bg-elevation-elevation-2 disabled:border-border-secondary",
65
+ icon: "text-icon-secondary group-disabled/button:text-icon-disabled",
66
+ text: "text-text-secondary group-disabled/button:text-text-disabled"
67
+ },
68
+ invisible: {
69
+ button: "hover:bg-elevation-elevation-2",
70
+ icon: "text-icon-secondary group-disabled/button:text-icon-disabled",
71
+ text: "text-text-secondary group-disabled/button:text-text-disabled"
72
+ }
73
+ }
74
+ };
75
+ var buttonVariants = utils.cva(
76
+ "inline-flex w-fit shrink-0 cursor-pointer flex-row items-center justify-center rounded-medium transition-colors focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed",
77
+ {
78
+ compoundVariants: [
79
+ // Primary 색상 조합
80
+ {
81
+ className: colorStyles.primary.contained.button,
82
+ color: "primary",
83
+ variant: "contained"
84
+ },
85
+ {
86
+ className: colorStyles.primary.outlined.button,
87
+ color: "primary",
88
+ variant: "outlined"
89
+ },
90
+ {
91
+ className: colorStyles.primary.invisible.button,
92
+ color: "primary",
93
+ variant: "invisible"
94
+ },
95
+ // Accent 색상 조합
96
+ {
97
+ className: colorStyles.accent.contained.button,
98
+ color: "accent",
99
+ variant: "contained"
100
+ },
101
+ {
102
+ className: colorStyles.accent.outlined.button,
103
+ color: "accent",
104
+ variant: "outlined"
105
+ },
106
+ {
107
+ className: colorStyles.accent.invisible.button,
108
+ color: "accent",
109
+ variant: "invisible"
110
+ },
111
+ // Critical 색상 조합
112
+ {
113
+ className: colorStyles.critical.contained.button,
114
+ color: "critical",
115
+ variant: "contained"
116
+ },
117
+ {
118
+ className: colorStyles.critical.outlined.button,
119
+ color: "critical",
120
+ variant: "outlined"
121
+ },
122
+ {
123
+ className: colorStyles.critical.invisible.button,
124
+ color: "critical",
125
+ variant: "invisible"
126
+ },
127
+ // Assistive 색상 조합 (contained만 지원)
128
+ {
129
+ className: colorStyles.assistive.contained.button,
130
+ color: "assistive",
131
+ variant: "contained"
132
+ },
133
+ // Inverse 색상 조합 (contained만 지원)
134
+ {
135
+ className: colorStyles.inverse.contained.button,
136
+ color: "inverse",
137
+ variant: "contained"
138
+ }
139
+ ],
140
+ defaultVariants: {
141
+ color: "primary",
142
+ size: "medium",
143
+ variant: "contained"
144
+ },
145
+ variants: {
146
+ color: {
147
+ accent: "",
148
+ assistive: "",
149
+ critical: "",
150
+ inverse: "",
151
+ primary: ""
152
+ },
153
+ size: {
154
+ xsmall: "h-6 gap-0 px-1 text-body-3 font-medium",
155
+ small: "h-7 gap-0.5 px-1.5 text-body-2 font-medium",
156
+ medium: "h-8 gap-0.5 px-2 text-body-2 font-medium",
157
+ large: "h-10 gap-1 px-2.5 text-body-1 font-medium",
158
+ xlarge: "h-12 gap-1 px-3 text-title-2 font-medium"
159
+ },
160
+ variant: {
161
+ contained: "",
162
+ outlined: "bg-transparent",
163
+ invisible: "bg-transparent"
164
+ }
165
+ }
166
+ }
167
+ );
168
+ var IconSize = {
169
+ xsmall: "h-4 w-4",
170
+ small: "h-4 w-4",
171
+ medium: "h-4 w-4",
172
+ large: "h-5 w-5",
173
+ xlarge: "h-6 w-6"
174
+ };
175
+ var Button = react.forwardRef(
176
+ ({
177
+ className,
178
+ variant = "contained",
179
+ color = "primary",
180
+ size = "medium",
181
+ icon,
182
+ children,
183
+ ...props
184
+ }, ref) => {
185
+ const validColorStyle = color === "assistive" || color === "inverse" ? colorStyles[color].contained : colorStyles[color][variant];
186
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
187
+ icon && react.cloneElement(icon, {
188
+ className: utils.cn(
189
+ "shrink-0 [&>path]:fill-current",
190
+ validColorStyle.icon,
191
+ icon.props.className,
192
+ IconSize[size ?? "medium"]
193
+ )
194
+ }),
195
+ typeof children === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
196
+ "span",
197
+ {
198
+ className: utils.cn("truncate", size === "xlarge" ? "px-1" : "px-0.5", validColorStyle.text),
199
+ children
200
+ }
201
+ ) : children
202
+ ] });
203
+ return /* @__PURE__ */ jsxRuntime.jsx(
204
+ "button",
205
+ {
206
+ className: utils.cn(
207
+ buttonVariants({
208
+ className,
209
+ color,
210
+ size,
211
+ variant
212
+ }),
213
+ "group/button"
214
+ ),
215
+ ref,
216
+ ...props,
217
+ children: content
218
+ }
219
+ );
220
+ }
221
+ );
222
+ Button.displayName = "Button";
223
+
224
+ exports.Button = Button;
225
+ //# sourceMappingURL=chunk-REBHUF4L.js.map
226
+ //# sourceMappingURL=chunk-REBHUF4L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/button/Button.tsx"],"names":["cva","forwardRef","jsxs","Fragment","cloneElement","cn","jsx"],"mappings":"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","file":"chunk-REBHUF4L.js","sourcesContent":["import { cn, cva, type VariantProps } from '@exem-ui/core/utils';\nimport type React from 'react';\nimport { cloneElement, forwardRef } from 'react';\n\ntype ButtonColorVariantCombination =\n | { color?: 'primary'; variant?: 'contained' | 'outlined' | 'invisible' }\n | { color?: 'accent'; variant?: 'contained' | 'outlined' | 'invisible' }\n | { color?: 'critical'; variant?: 'contained' | 'outlined' | 'invisible' }\n | { color?: 'assistive'; variant?: 'contained' }\n | { color?: 'inverse'; variant?: 'contained' };\n\ntype ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> &\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'color'> &\n ButtonColorVariantCombination & {\n size?: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n icon?: React.ReactElement<{ className?: string }>;\n };\n\ntype ButtonComponent = React.ForwardRefExoticComponent<\n ButtonProps & React.RefAttributes<HTMLButtonElement>\n>;\n\nconst colorStyles = {\n accent: {\n contained: {\n button:\n 'bg-solid-accent-default hover:bg-solid-accent-hovered disabled:bg-solid-accent-disabled',\n icon: 'text-icon-static-light group-disabled/button:text-icon-inverse-disabled',\n text: 'text-text-static-light group-disabled/button:text-text-inverse-disabled',\n },\n outlined: {\n button:\n 'border border-border-accent hover:bg-elevation-accent disabled:border-border-accent-disabled',\n icon: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n text: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n },\n invisible: {\n button: 'hover:bg-elevation-accent',\n icon: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n text: 'text-text-accent group-disabled/button:text-text-accent-disabled',\n },\n },\n assistive: {\n contained: {\n button:\n 'bg-elevation-elevation-2 hover:bg-elevation-elevation-3 disabled:bg-elevation-elevation-2',\n icon: 'text-icon-secondary group-disabled/button:text-icon-disabled',\n text: 'text-text-secondary group-disabled/button:text-text-disabled',\n },\n },\n critical: {\n contained: {\n button:\n 'bg-solid-critical-default hover:bg-solid-critical-hovered disabled:bg-solid-critical-disabled',\n icon: 'text-icon-static-light group-disabled/button:text-icon-inverse-disabled',\n text: 'text-text-static-light group-disabled/button:text-text-inverse-disabled',\n },\n outlined: {\n button:\n 'border border-border-critical hover:bg-elevation-critical disabled:border-border-critical-disabled',\n icon: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n text: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n },\n invisible: {\n button: 'hover:bg-elevation-critical',\n icon: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n text: 'text-text-critical group-disabled/button:text-text-critical-disabled',\n },\n },\n inverse: {\n contained: {\n button:\n 'bg-elevation-elevation-0 hover:bg-elevation-elevation-2 disabled:bg-elevation-elevation-2',\n icon: 'text-icon-secondary group-disabled/button:text-icon-disabled',\n text: 'text-text-secondary group-disabled/button:text-text-disabled',\n },\n },\n primary: {\n contained: {\n button:\n 'bg-solid-primary-default hover:bg-solid-primary-hovered disabled:bg-solid-primary-disabled',\n icon: 'text-icon-inverse group-disabled/button:text-icon-inverse',\n text: 'text-text-inverse group-disabled/button:text-text-inverse',\n },\n outlined: {\n button:\n 'border border-border-secondary hover:bg-elevation-elevation-2 disabled:border-border-secondary',\n icon: 'text-icon-secondary group-disabled/button:text-icon-disabled',\n text: 'text-text-secondary group-disabled/button:text-text-disabled',\n },\n invisible: {\n button: 'hover:bg-elevation-elevation-2',\n icon: 'text-icon-secondary group-disabled/button:text-icon-disabled',\n text: 'text-text-secondary group-disabled/button:text-text-disabled',\n },\n },\n};\n\nconst buttonVariants = cva(\n 'inline-flex w-fit shrink-0 cursor-pointer flex-row items-center justify-center rounded-medium transition-colors focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed',\n {\n compoundVariants: [\n // Primary 색상 조합\n {\n className: colorStyles.primary.contained.button,\n color: 'primary',\n variant: 'contained',\n },\n {\n className: colorStyles.primary.outlined.button,\n color: 'primary',\n variant: 'outlined',\n },\n {\n className: colorStyles.primary.invisible.button,\n color: 'primary',\n variant: 'invisible',\n },\n // Accent 색상 조합\n {\n className: colorStyles.accent.contained.button,\n color: 'accent',\n variant: 'contained',\n },\n {\n className: colorStyles.accent.outlined.button,\n color: 'accent',\n variant: 'outlined',\n },\n {\n className: colorStyles.accent.invisible.button,\n color: 'accent',\n variant: 'invisible',\n },\n // Critical 색상 조합\n {\n className: colorStyles.critical.contained.button,\n color: 'critical',\n variant: 'contained',\n },\n {\n className: colorStyles.critical.outlined.button,\n color: 'critical',\n variant: 'outlined',\n },\n {\n className: colorStyles.critical.invisible.button,\n color: 'critical',\n variant: 'invisible',\n },\n // Assistive 색상 조합 (contained만 지원)\n {\n className: colorStyles.assistive.contained.button,\n color: 'assistive',\n variant: 'contained',\n },\n // Inverse 색상 조합 (contained만 지원)\n {\n className: colorStyles.inverse.contained.button,\n color: 'inverse',\n variant: 'contained',\n },\n ],\n defaultVariants: {\n color: 'primary',\n size: 'medium',\n variant: 'contained',\n },\n variants: {\n color: {\n accent: '',\n assistive: '',\n critical: '',\n inverse: '',\n primary: '',\n },\n size: {\n xsmall: 'h-6 gap-0 px-1 text-body-3 font-medium',\n small: 'h-7 gap-0.5 px-1.5 text-body-2 font-medium',\n medium: 'h-8 gap-0.5 px-2 text-body-2 font-medium',\n large: 'h-10 gap-1 px-2.5 text-body-1 font-medium',\n xlarge: 'h-12 gap-1 px-3 text-title-2 font-medium',\n },\n variant: {\n contained: '',\n outlined: 'bg-transparent',\n invisible: 'bg-transparent',\n },\n },\n },\n);\n\nconst IconSize = {\n xsmall: 'h-4 w-4',\n small: 'h-4 w-4',\n medium: 'h-4 w-4',\n large: 'h-5 w-5',\n xlarge: 'h-6 w-6',\n};\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = 'contained',\n color = 'primary',\n size = 'medium',\n icon,\n children,\n ...props\n },\n ref,\n ) => {\n // 현재 조합의 색상 스타일 가져오기 -> assistive/inverse는 contained만 지원\n const validColorStyle =\n color === 'assistive' || color === 'inverse'\n ? colorStyles[color].contained\n : colorStyles[color][variant];\n\n const content = (\n <>\n {icon &&\n cloneElement(icon, {\n className: cn(\n 'shrink-0 [&>path]:fill-current',\n validColorStyle.icon,\n icon.props.className,\n IconSize[size ?? 'medium'],\n ),\n })}\n {typeof children === 'string' ? (\n <span\n className={cn('truncate', size === 'xlarge' ? 'px-1' : 'px-0.5', validColorStyle.text)}\n >\n {children}\n </span>\n ) : (\n children\n )}\n </>\n );\n\n return (\n <button\n className={cn(\n buttonVariants({\n className,\n color,\n size,\n variant,\n }),\n 'group/button',\n )}\n ref={ref}\n {...props}\n >\n {content}\n </button>\n );\n },\n) as ButtonComponent;\n\nButton.displayName = 'Button';\n\nexport { Button };\nexport type { ButtonComponent, ButtonProps };\n"]}