@mdigital_ui/ui 0.1.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 (205) hide show
  1. package/README.md +296 -0
  2. package/dist/accordion/index.js +5 -0
  3. package/dist/accordion/index.js.map +1 -0
  4. package/dist/badge/index.js +5 -0
  5. package/dist/badge/index.js.map +1 -0
  6. package/dist/button/index.js +6 -0
  7. package/dist/button/index.js.map +1 -0
  8. package/dist/card/index.js +4 -0
  9. package/dist/card/index.js.map +1 -0
  10. package/dist/carousel/index.js +3 -0
  11. package/dist/carousel/index.js.map +1 -0
  12. package/dist/cascader/index.js +4 -0
  13. package/dist/cascader/index.js.map +1 -0
  14. package/dist/chart/index.js +4 -0
  15. package/dist/chart/index.js.map +1 -0
  16. package/dist/checkbox/index.js +5 -0
  17. package/dist/checkbox/index.js.map +1 -0
  18. package/dist/checkbox-group/index.js +4 -0
  19. package/dist/checkbox-group/index.js.map +1 -0
  20. package/dist/chunk-2JGAYDZR.js +181 -0
  21. package/dist/chunk-2JGAYDZR.js.map +1 -0
  22. package/dist/chunk-3PFA3YG6.js +228 -0
  23. package/dist/chunk-3PFA3YG6.js.map +1 -0
  24. package/dist/chunk-4OMLQCUV.js +96 -0
  25. package/dist/chunk-4OMLQCUV.js.map +1 -0
  26. package/dist/chunk-4P5EMRFI.js +298 -0
  27. package/dist/chunk-4P5EMRFI.js.map +1 -0
  28. package/dist/chunk-5UEWVFF6.js +212 -0
  29. package/dist/chunk-5UEWVFF6.js.map +1 -0
  30. package/dist/chunk-5VCGW53O.js +332 -0
  31. package/dist/chunk-5VCGW53O.js.map +1 -0
  32. package/dist/chunk-75XESYGN.js +49 -0
  33. package/dist/chunk-75XESYGN.js.map +1 -0
  34. package/dist/chunk-7AEGBABZ.js +1102 -0
  35. package/dist/chunk-7AEGBABZ.js.map +1 -0
  36. package/dist/chunk-AOITJRSV.js +134 -0
  37. package/dist/chunk-AOITJRSV.js.map +1 -0
  38. package/dist/chunk-AWPKZYHT.js +152 -0
  39. package/dist/chunk-AWPKZYHT.js.map +1 -0
  40. package/dist/chunk-BNILRB4T.js +37 -0
  41. package/dist/chunk-BNILRB4T.js.map +1 -0
  42. package/dist/chunk-BP434VYV.js +448 -0
  43. package/dist/chunk-BP434VYV.js.map +1 -0
  44. package/dist/chunk-C7SXY3ZV.js +65 -0
  45. package/dist/chunk-C7SXY3ZV.js.map +1 -0
  46. package/dist/chunk-CLLQDCDR.js +560 -0
  47. package/dist/chunk-CLLQDCDR.js.map +1 -0
  48. package/dist/chunk-CWHFK7ZC.js +128 -0
  49. package/dist/chunk-CWHFK7ZC.js.map +1 -0
  50. package/dist/chunk-D3JWPGCA.js +123 -0
  51. package/dist/chunk-D3JWPGCA.js.map +1 -0
  52. package/dist/chunk-DOKTHDG3.js +55 -0
  53. package/dist/chunk-DOKTHDG3.js.map +1 -0
  54. package/dist/chunk-DPOSWW22.js +126 -0
  55. package/dist/chunk-DPOSWW22.js.map +1 -0
  56. package/dist/chunk-E2CYDDYC.js +39 -0
  57. package/dist/chunk-E2CYDDYC.js.map +1 -0
  58. package/dist/chunk-EYTOKUBM.js +401 -0
  59. package/dist/chunk-EYTOKUBM.js.map +1 -0
  60. package/dist/chunk-FGWSUPVW.js +356 -0
  61. package/dist/chunk-FGWSUPVW.js.map +1 -0
  62. package/dist/chunk-FPOXTCYV.js +166 -0
  63. package/dist/chunk-FPOXTCYV.js.map +1 -0
  64. package/dist/chunk-FTJOSVTY.js +104 -0
  65. package/dist/chunk-FTJOSVTY.js.map +1 -0
  66. package/dist/chunk-FYHQDFKE.js +164 -0
  67. package/dist/chunk-FYHQDFKE.js.map +1 -0
  68. package/dist/chunk-H2HIBD5Y.js +158 -0
  69. package/dist/chunk-H2HIBD5Y.js.map +1 -0
  70. package/dist/chunk-J3G5WWGR.js +53 -0
  71. package/dist/chunk-J3G5WWGR.js.map +1 -0
  72. package/dist/chunk-JZCHZ4B3.js +487 -0
  73. package/dist/chunk-JZCHZ4B3.js.map +1 -0
  74. package/dist/chunk-KBCBVH7B.js +51 -0
  75. package/dist/chunk-KBCBVH7B.js.map +1 -0
  76. package/dist/chunk-KNQ7UQ2W.js +143 -0
  77. package/dist/chunk-KNQ7UQ2W.js.map +1 -0
  78. package/dist/chunk-KTBPIEP2.js +102 -0
  79. package/dist/chunk-KTBPIEP2.js.map +1 -0
  80. package/dist/chunk-L3SP7GHC.js +1023 -0
  81. package/dist/chunk-L3SP7GHC.js.map +1 -0
  82. package/dist/chunk-LBJG2UWT.js +100 -0
  83. package/dist/chunk-LBJG2UWT.js.map +1 -0
  84. package/dist/chunk-MLDX3Z67.js +470 -0
  85. package/dist/chunk-MLDX3Z67.js.map +1 -0
  86. package/dist/chunk-NNSS366W.js +331 -0
  87. package/dist/chunk-NNSS366W.js.map +1 -0
  88. package/dist/chunk-OQANRZPV.js +197 -0
  89. package/dist/chunk-OQANRZPV.js.map +1 -0
  90. package/dist/chunk-OW5A5IIF.js +175 -0
  91. package/dist/chunk-OW5A5IIF.js.map +1 -0
  92. package/dist/chunk-R225A5II.js +187 -0
  93. package/dist/chunk-R225A5II.js.map +1 -0
  94. package/dist/chunk-ROR4E6IE.js +119 -0
  95. package/dist/chunk-ROR4E6IE.js.map +1 -0
  96. package/dist/chunk-RPAQAZTI.js +54 -0
  97. package/dist/chunk-RPAQAZTI.js.map +1 -0
  98. package/dist/chunk-RQBXZKTH.js +452 -0
  99. package/dist/chunk-RQBXZKTH.js.map +1 -0
  100. package/dist/chunk-S5XJXU52.js +178 -0
  101. package/dist/chunk-S5XJXU52.js.map +1 -0
  102. package/dist/chunk-SAVE5ACL.js +324 -0
  103. package/dist/chunk-SAVE5ACL.js.map +1 -0
  104. package/dist/chunk-SERJ3TZE.js +640 -0
  105. package/dist/chunk-SERJ3TZE.js.map +1 -0
  106. package/dist/chunk-SK5ECBBK.js +175 -0
  107. package/dist/chunk-SK5ECBBK.js.map +1 -0
  108. package/dist/chunk-SOV4PE3P.js +218 -0
  109. package/dist/chunk-SOV4PE3P.js.map +1 -0
  110. package/dist/chunk-W7BQYIXF.js +687 -0
  111. package/dist/chunk-W7BQYIXF.js.map +1 -0
  112. package/dist/chunk-XMAH5PDW.js +59 -0
  113. package/dist/chunk-XMAH5PDW.js.map +1 -0
  114. package/dist/chunk-XOBGEMQY.js +94 -0
  115. package/dist/chunk-XOBGEMQY.js.map +1 -0
  116. package/dist/chunk-YNNAOXU5.js +57 -0
  117. package/dist/chunk-YNNAOXU5.js.map +1 -0
  118. package/dist/chunk-YZVSDRJD.js +253 -0
  119. package/dist/chunk-YZVSDRJD.js.map +1 -0
  120. package/dist/collapse/index.js +4 -0
  121. package/dist/collapse/index.js.map +1 -0
  122. package/dist/command/index.js +5 -0
  123. package/dist/command/index.js.map +1 -0
  124. package/dist/date-picker/index.js +5 -0
  125. package/dist/date-picker/index.js.map +1 -0
  126. package/dist/descriptions/index.js +4 -0
  127. package/dist/descriptions/index.js.map +1 -0
  128. package/dist/drawer/index.js +4 -0
  129. package/dist/drawer/index.js.map +1 -0
  130. package/dist/dropdown/index.js +5 -0
  131. package/dist/dropdown/index.js.map +1 -0
  132. package/dist/empty/index.js +4 -0
  133. package/dist/empty/index.js.map +1 -0
  134. package/dist/fetching-overlay/index.js +5 -0
  135. package/dist/fetching-overlay/index.js.map +1 -0
  136. package/dist/image/index.js +4 -0
  137. package/dist/image/index.js.map +1 -0
  138. package/dist/index.d.ts +2672 -0
  139. package/dist/index.js +976 -0
  140. package/dist/index.js.map +1 -0
  141. package/dist/input/index.js +5 -0
  142. package/dist/input/index.js.map +1 -0
  143. package/dist/input-group/index.js +4 -0
  144. package/dist/input-group/index.js.map +1 -0
  145. package/dist/input-otp/index.js +4 -0
  146. package/dist/input-otp/index.js.map +1 -0
  147. package/dist/input-password/index.js +6 -0
  148. package/dist/input-password/index.js.map +1 -0
  149. package/dist/kbd/index.js +4 -0
  150. package/dist/kbd/index.js.map +1 -0
  151. package/dist/modal/index.js +4 -0
  152. package/dist/modal/index.js.map +1 -0
  153. package/dist/multi-select/index.js +5 -0
  154. package/dist/multi-select/index.js.map +1 -0
  155. package/dist/notification/index.js +4 -0
  156. package/dist/notification/index.js.map +1 -0
  157. package/dist/pagination/index.js +4 -0
  158. package/dist/pagination/index.js.map +1 -0
  159. package/dist/popover/index.js +4 -0
  160. package/dist/popover/index.js.map +1 -0
  161. package/dist/progress/index.js +4 -0
  162. package/dist/progress/index.js.map +1 -0
  163. package/dist/radio/index.js +4 -0
  164. package/dist/radio/index.js.map +1 -0
  165. package/dist/radio-group/index.js +4 -0
  166. package/dist/radio-group/index.js.map +1 -0
  167. package/dist/rating/index.js +4 -0
  168. package/dist/rating/index.js.map +1 -0
  169. package/dist/ribbon/index.js +4 -0
  170. package/dist/ribbon/index.js.map +1 -0
  171. package/dist/select/index.js +6 -0
  172. package/dist/select/index.js.map +1 -0
  173. package/dist/skeleton/index.js +4 -0
  174. package/dist/skeleton/index.js.map +1 -0
  175. package/dist/slider/index.js +4 -0
  176. package/dist/slider/index.js.map +1 -0
  177. package/dist/spinner/index.js +4 -0
  178. package/dist/spinner/index.js.map +1 -0
  179. package/dist/stepper/index.js +4 -0
  180. package/dist/stepper/index.js.map +1 -0
  181. package/dist/styles/base.css +161 -0
  182. package/dist/styles/global.css +633 -0
  183. package/dist/styles/themes/dark.css +84 -0
  184. package/dist/styles/themes/light.css +84 -0
  185. package/dist/switch/index.js +4 -0
  186. package/dist/switch/index.js.map +1 -0
  187. package/dist/table/index.js +12 -0
  188. package/dist/table/index.js.map +1 -0
  189. package/dist/tabs/index.js +5 -0
  190. package/dist/tabs/index.js.map +1 -0
  191. package/dist/textarea/index.js +4 -0
  192. package/dist/textarea/index.js.map +1 -0
  193. package/dist/toggle/index.js +4 -0
  194. package/dist/toggle/index.js.map +1 -0
  195. package/dist/toggle-group/index.js +4 -0
  196. package/dist/toggle-group/index.js.map +1 -0
  197. package/dist/tooltip/index.js +4 -0
  198. package/dist/tooltip/index.js.map +1 -0
  199. package/dist/transfer/index.js +6 -0
  200. package/dist/transfer/index.js.map +1 -0
  201. package/dist/tree/index.js +4 -0
  202. package/dist/tree/index.js.map +1 -0
  203. package/dist/tree-select/index.js +6 -0
  204. package/dist/tree-select/index.js.map +1 -0
  205. package/package.json +107 -0
@@ -0,0 +1,356 @@
1
+ import { cn, iconSizes } from './chunk-YNNAOXU5.js';
2
+ import { cva } from 'class-variance-authority';
3
+ import { ChevronsLeft, ChevronLeft, MoreHorizontal, ChevronRight, ChevronsRight } from 'lucide-react';
4
+ import React, { useState } from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var paginationVariants = cva("inline-flex items-center gap-1", {
8
+ variants: {
9
+ size: {
10
+ xs: "text-xs",
11
+ sm: "text-sm",
12
+ md: "text-base",
13
+ lg: "text-lg"
14
+ }
15
+ },
16
+ defaultVariants: {
17
+ size: "md"
18
+ }
19
+ });
20
+ var paginationItemVariants = cva(
21
+ "inline-flex items-center justify-center rounded-md font-medium outline-none transition-all cursor-pointer border min-w-fit",
22
+ {
23
+ variants: {
24
+ size: {
25
+ xs: "h-6 min-w-6 px-1.5 text-xs",
26
+ sm: "h-8 min-w-8 px-2 text-sm",
27
+ md: "h-10 min-w-10 px-3 text-base",
28
+ lg: "h-12 min-w-12 px-4 text-lg"
29
+ },
30
+ disabled: {
31
+ true: "opacity-50 cursor-not-allowed",
32
+ false: ""
33
+ }
34
+ },
35
+ defaultVariants: {
36
+ size: "md",
37
+ disabled: false
38
+ }
39
+ }
40
+ );
41
+ var colorStyles = {
42
+ default: {
43
+ default: "border-border bg-background text-text-primary hover:bg-surface hover:border-text-primary",
44
+ solid: "border-surface bg-surface text-text-primary hover:bg-surface/80",
45
+ soft: "border-border bg-surface/50 text-text-primary hover:bg-surface"
46
+ },
47
+ primary: {
48
+ default: "border-border bg-background text-text-primary hover:bg-primary/10 hover:border-primary",
49
+ solid: "border-primary bg-primary text-background hover:bg-primary/90",
50
+ soft: "border-primary/30 bg-primary/10 text-primary hover:bg-primary/20"
51
+ },
52
+ secondary: {
53
+ default: "border-border bg-background text-text-primary hover:bg-secondary/10 hover:border-secondary",
54
+ solid: "border-secondary bg-secondary text-background hover:bg-secondary/90",
55
+ soft: "border-secondary/30 bg-secondary/10 text-secondary hover:bg-secondary/20"
56
+ },
57
+ accent: {
58
+ default: "border-border bg-background text-text-primary hover:bg-accent/10 hover:border-accent",
59
+ solid: "border-accent bg-accent text-background hover:bg-accent/90",
60
+ soft: "border-accent/30 bg-accent/10 text-accent hover:bg-accent/20"
61
+ },
62
+ success: {
63
+ default: "border-border bg-background text-text-primary hover:bg-success/10 hover:border-success",
64
+ solid: "border-success bg-success text-background hover:bg-success/90",
65
+ soft: "border-success/30 bg-success/10 text-success hover:bg-success/20"
66
+ },
67
+ error: {
68
+ default: "border-border bg-background text-text-primary hover:bg-error/10 hover:border-error",
69
+ solid: "border-error bg-error text-background hover:bg-error/90",
70
+ soft: "border-error/30 bg-error/10 text-error hover:bg-error/20"
71
+ },
72
+ warning: {
73
+ default: "border-border bg-background text-text-primary hover:bg-warning/10 hover:border-warning",
74
+ solid: "border-warning bg-warning text-background hover:bg-warning/90",
75
+ soft: "border-warning/30 bg-warning/10 text-warning hover:bg-warning/20"
76
+ },
77
+ info: {
78
+ default: "border-border bg-background text-text-primary hover:bg-info/10 hover:border-info",
79
+ solid: "border-info bg-info text-background hover:bg-info/90",
80
+ soft: "border-info/30 bg-info/10 text-info hover:bg-info/20"
81
+ }
82
+ };
83
+ var activeColorStyles = {
84
+ default: {
85
+ default: "border-text-primary bg-surface text-text-primary",
86
+ solid: "border-border bg-surface text-text-primary",
87
+ soft: "border-border bg-surface text-text-primary"
88
+ },
89
+ primary: {
90
+ default: "border-primary bg-primary/10 text-primary",
91
+ solid: "border-primary bg-primary-hover text-background",
92
+ soft: "border-primary bg-primary/20 text-primary"
93
+ },
94
+ secondary: {
95
+ default: "border-secondary bg-secondary/10 text-secondary",
96
+ solid: "border-secondary bg-secondary text-background",
97
+ soft: "border-secondary bg-secondary/20 text-secondary"
98
+ },
99
+ accent: {
100
+ default: "border-accent bg-accent/10 text-accent",
101
+ solid: "border-accent bg-accent text-background",
102
+ soft: "border-accent bg-accent/20 text-accent"
103
+ },
104
+ success: {
105
+ default: "border-success bg-success/10 text-success",
106
+ solid: "border-success bg-success text-background",
107
+ soft: "border-success bg-success/20 text-success"
108
+ },
109
+ error: {
110
+ default: "border-error bg-error/10 text-error",
111
+ solid: "border-error bg-error text-background",
112
+ soft: "border-error bg-error/20 text-error"
113
+ },
114
+ warning: {
115
+ default: "border-warning bg-warning/10 text-warning",
116
+ solid: "border-warning bg-warning text-background",
117
+ soft: "border-warning bg-warning/20 text-warning"
118
+ },
119
+ info: {
120
+ default: "border-info bg-info/10 text-info",
121
+ solid: "border-info bg-info text-background",
122
+ soft: "border-info bg-info/20 text-info"
123
+ }
124
+ };
125
+ var Pagination = React.memo(
126
+ ({
127
+ total,
128
+ current: controlledCurrent,
129
+ defaultCurrent = 1,
130
+ pageSize: controlledPageSize,
131
+ defaultPageSize = 10,
132
+ onChange,
133
+ onShowSizeChange,
134
+ color = "default",
135
+ size = "md",
136
+ variant = "default",
137
+ showSizeChanger = false,
138
+ pageSizeOptions = [10, 20, 50, 100],
139
+ showQuickJumper = false,
140
+ showFirstLastButtons = false,
141
+ showTotal,
142
+ disabled = false,
143
+ className
144
+ }) => {
145
+ const [internalCurrent, setInternalCurrent] = useState(defaultCurrent);
146
+ const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);
147
+ const current = controlledCurrent !== void 0 ? controlledCurrent : internalCurrent;
148
+ const pageSize = controlledPageSize !== void 0 ? controlledPageSize : internalPageSize;
149
+ const totalPages = Math.ceil(total / pageSize);
150
+ const handlePageChange = (page) => {
151
+ if (disabled || page === current || page < 1 || page > totalPages) return;
152
+ if (controlledCurrent === void 0) {
153
+ setInternalCurrent(page);
154
+ }
155
+ onChange?.(page, pageSize);
156
+ };
157
+ const handlePageSizeChange = (newSize) => {
158
+ if (disabled) return;
159
+ const newTotalPages = Math.ceil(total / newSize);
160
+ const newCurrent = current > newTotalPages ? newTotalPages : current;
161
+ if (controlledPageSize === void 0) {
162
+ setInternalPageSize(newSize);
163
+ }
164
+ if (controlledCurrent === void 0 && newCurrent !== current) {
165
+ setInternalCurrent(newCurrent);
166
+ }
167
+ onShowSizeChange?.(newCurrent, newSize);
168
+ onChange?.(newCurrent, newSize);
169
+ };
170
+ const getPageNumbers = () => {
171
+ const pages = [];
172
+ const showPages = 5;
173
+ if (totalPages <= showPages + 2) {
174
+ for (let i = 1; i <= totalPages; i++) {
175
+ pages.push(i);
176
+ }
177
+ } else {
178
+ pages.push(1);
179
+ if (current <= 3) {
180
+ for (let i = 2; i <= 4; i++) {
181
+ pages.push(i);
182
+ }
183
+ pages.push("ellipsis");
184
+ } else if (current >= totalPages - 2) {
185
+ pages.push("ellipsis");
186
+ for (let i = totalPages - 3; i < totalPages; i++) {
187
+ pages.push(i);
188
+ }
189
+ } else {
190
+ pages.push("ellipsis");
191
+ pages.push(current - 1);
192
+ pages.push(current);
193
+ pages.push(current + 1);
194
+ pages.push("ellipsis");
195
+ }
196
+ pages.push(totalPages);
197
+ }
198
+ return pages;
199
+ };
200
+ const range = [
201
+ (current - 1) * pageSize + 1,
202
+ Math.min(current * pageSize, total)
203
+ ];
204
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-4", className), children: [
205
+ showTotal && /* @__PURE__ */ jsx("div", { className: "text-text-secondary text-sm", children: showTotal(total, range) }),
206
+ /* @__PURE__ */ jsxs("div", { className: paginationVariants({ size }), children: [
207
+ showFirstLastButtons && /* @__PURE__ */ jsx(
208
+ "button",
209
+ {
210
+ onClick: () => handlePageChange(1),
211
+ disabled: disabled || current === 1,
212
+ className: cn(
213
+ paginationItemVariants({
214
+ size,
215
+ disabled: disabled || current === 1
216
+ }),
217
+ colorStyles[color][variant]
218
+ ),
219
+ "aria-label": "First page",
220
+ children: /* @__PURE__ */ jsx(ChevronsLeft, { className: iconSizes[size] })
221
+ }
222
+ ),
223
+ /* @__PURE__ */ jsx(
224
+ "button",
225
+ {
226
+ onClick: () => handlePageChange(current - 1),
227
+ disabled: disabled || current === 1,
228
+ className: cn(
229
+ paginationItemVariants({
230
+ size,
231
+ disabled: disabled || current === 1
232
+ }),
233
+ colorStyles[color][variant]
234
+ ),
235
+ "aria-label": "Previous page",
236
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: iconSizes[size] })
237
+ }
238
+ ),
239
+ getPageNumbers().map(
240
+ (page, index) => page === "ellipsis" ? /* @__PURE__ */ jsx(
241
+ "span",
242
+ {
243
+ className: cn(
244
+ paginationItemVariants({ size, disabled: false }),
245
+ colorStyles[color]["soft"],
246
+ "border-none pointer-events-none"
247
+ ),
248
+ children: /* @__PURE__ */ jsx(MoreHorizontal, { className: iconSizes[size] })
249
+ },
250
+ `ellipsis-${index}`
251
+ ) : /* @__PURE__ */ jsx(
252
+ "button",
253
+ {
254
+ onClick: () => handlePageChange(page),
255
+ disabled,
256
+ className: cn(
257
+ paginationItemVariants({ size, disabled }),
258
+ current === page ? activeColorStyles[color][variant] : colorStyles[color][variant]
259
+ ),
260
+ children: page
261
+ },
262
+ page
263
+ )
264
+ ),
265
+ /* @__PURE__ */ jsx(
266
+ "button",
267
+ {
268
+ onClick: () => handlePageChange(current + 1),
269
+ disabled: disabled || current === totalPages,
270
+ className: cn(
271
+ paginationItemVariants({
272
+ size,
273
+ disabled: disabled || current === totalPages
274
+ }),
275
+ colorStyles[color][variant]
276
+ ),
277
+ "aria-label": "Next page",
278
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: iconSizes[size] })
279
+ }
280
+ ),
281
+ showFirstLastButtons && /* @__PURE__ */ jsx(
282
+ "button",
283
+ {
284
+ onClick: () => handlePageChange(totalPages),
285
+ disabled: disabled || current === totalPages,
286
+ className: cn(
287
+ paginationItemVariants({
288
+ size,
289
+ disabled: disabled || current === totalPages
290
+ }),
291
+ colorStyles[color][variant]
292
+ ),
293
+ "aria-label": "Last page",
294
+ children: /* @__PURE__ */ jsx(ChevronsRight, { className: iconSizes[size] })
295
+ }
296
+ )
297
+ ] }),
298
+ showSizeChanger && /* @__PURE__ */ jsx(
299
+ "select",
300
+ {
301
+ value: pageSize,
302
+ onChange: (e) => handlePageSizeChange(Number(e.target.value)),
303
+ disabled,
304
+ className: cn(
305
+ paginationItemVariants({ size, disabled }),
306
+ colorStyles[color][variant],
307
+ "cursor-pointer"
308
+ ),
309
+ children: pageSizeOptions.map((option) => /* @__PURE__ */ jsxs(
310
+ "option",
311
+ {
312
+ value: option,
313
+ children: [
314
+ option,
315
+ " / page"
316
+ ]
317
+ },
318
+ option
319
+ ))
320
+ }
321
+ ),
322
+ showQuickJumper && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
323
+ /* @__PURE__ */ jsx("span", { className: "text-text-secondary text-sm", children: "Go to" }),
324
+ /* @__PURE__ */ jsx(
325
+ "input",
326
+ {
327
+ type: "number",
328
+ min: 1,
329
+ max: totalPages,
330
+ disabled,
331
+ onKeyDown: (e) => {
332
+ if (e.key === "Enter") {
333
+ const value = parseInt(e.target.value);
334
+ if (value >= 1 && value <= totalPages) {
335
+ handlePageChange(value);
336
+ e.target.value = "";
337
+ }
338
+ }
339
+ },
340
+ className: cn(
341
+ paginationItemVariants({ size, disabled }),
342
+ colorStyles[color][variant],
343
+ "w-16 text-center"
344
+ )
345
+ }
346
+ )
347
+ ] })
348
+ ] });
349
+ }
350
+ );
351
+ Pagination.displayName = "Pagination";
352
+ var pagination_default = Pagination;
353
+
354
+ export { pagination_default };
355
+ //# sourceMappingURL=chunk-FGWSUPVW.js.map
356
+ //# sourceMappingURL=chunk-FGWSUPVW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pagination/index.tsx"],"names":[],"mappings":"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","file":"chunk-FGWSUPVW.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n MoreHorizontal,\n} from 'lucide-react'\nimport React, { useState } from 'react'\n\nimport { cn, iconSizes } from '../utils'\nimport type { PaginationProps } from './types'\n\nconst paginationVariants = cva('inline-flex items-center gap-1', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nconst paginationItemVariants = cva(\n 'inline-flex items-center justify-center rounded-md font-medium outline-none transition-all cursor-pointer border min-w-fit',\n {\n variants: {\n size: {\n xs: 'h-6 min-w-6 px-1.5 text-xs',\n sm: 'h-8 min-w-8 px-2 text-sm',\n md: 'h-10 min-w-10 px-3 text-base',\n lg: 'h-12 min-w-12 px-4 text-lg',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n disabled: false,\n },\n },\n)\n\nconst colorStyles = {\n default: {\n default:\n 'border-border bg-background text-text-primary hover:bg-surface hover:border-text-primary',\n solid: 'border-surface bg-surface text-text-primary hover:bg-surface/80',\n soft: 'border-border bg-surface/50 text-text-primary hover:bg-surface',\n },\n primary: {\n default:\n 'border-border bg-background text-text-primary hover:bg-primary/10 hover:border-primary',\n solid: 'border-primary bg-primary text-background hover:bg-primary/90',\n soft: 'border-primary/30 bg-primary/10 text-primary hover:bg-primary/20',\n },\n secondary: {\n default:\n 'border-border bg-background text-text-primary hover:bg-secondary/10 hover:border-secondary',\n solid:\n 'border-secondary bg-secondary text-background hover:bg-secondary/90',\n soft: 'border-secondary/30 bg-secondary/10 text-secondary hover:bg-secondary/20',\n },\n accent: {\n default:\n 'border-border bg-background text-text-primary hover:bg-accent/10 hover:border-accent',\n solid: 'border-accent bg-accent text-background hover:bg-accent/90',\n soft: 'border-accent/30 bg-accent/10 text-accent hover:bg-accent/20',\n },\n success: {\n default:\n 'border-border bg-background text-text-primary hover:bg-success/10 hover:border-success',\n solid: 'border-success bg-success text-background hover:bg-success/90',\n soft: 'border-success/30 bg-success/10 text-success hover:bg-success/20',\n },\n error: {\n default:\n 'border-border bg-background text-text-primary hover:bg-error/10 hover:border-error',\n solid: 'border-error bg-error text-background hover:bg-error/90',\n soft: 'border-error/30 bg-error/10 text-error hover:bg-error/20',\n },\n warning: {\n default:\n 'border-border bg-background text-text-primary hover:bg-warning/10 hover:border-warning',\n solid: 'border-warning bg-warning text-background hover:bg-warning/90',\n soft: 'border-warning/30 bg-warning/10 text-warning hover:bg-warning/20',\n },\n info: {\n default:\n 'border-border bg-background text-text-primary hover:bg-info/10 hover:border-info',\n solid: 'border-info bg-info text-background hover:bg-info/90',\n soft: 'border-info/30 bg-info/10 text-info hover:bg-info/20',\n },\n}\n\nconst activeColorStyles = {\n default: {\n default: 'border-text-primary bg-surface text-text-primary',\n solid: 'border-border bg-surface text-text-primary',\n soft: 'border-border bg-surface text-text-primary',\n },\n primary: {\n default: 'border-primary bg-primary/10 text-primary',\n solid: 'border-primary bg-primary-hover text-background',\n soft: 'border-primary bg-primary/20 text-primary',\n },\n secondary: {\n default: 'border-secondary bg-secondary/10 text-secondary',\n solid: 'border-secondary bg-secondary text-background',\n soft: 'border-secondary bg-secondary/20 text-secondary',\n },\n accent: {\n default: 'border-accent bg-accent/10 text-accent',\n solid: 'border-accent bg-accent text-background',\n soft: 'border-accent bg-accent/20 text-accent',\n },\n success: {\n default: 'border-success bg-success/10 text-success',\n solid: 'border-success bg-success text-background',\n soft: 'border-success bg-success/20 text-success',\n },\n error: {\n default: 'border-error bg-error/10 text-error',\n solid: 'border-error bg-error text-background',\n soft: 'border-error bg-error/20 text-error',\n },\n warning: {\n default: 'border-warning bg-warning/10 text-warning',\n solid: 'border-warning bg-warning text-background',\n soft: 'border-warning bg-warning/20 text-warning',\n },\n info: {\n default: 'border-info bg-info/10 text-info',\n solid: 'border-info bg-info text-background',\n soft: 'border-info bg-info/20 text-info',\n },\n}\n\nconst Pagination = React.memo<PaginationProps>(\n ({\n total,\n current: controlledCurrent,\n defaultCurrent = 1,\n pageSize: controlledPageSize,\n defaultPageSize = 10,\n onChange,\n onShowSizeChange,\n color = 'default',\n size = 'md',\n variant = 'default',\n showSizeChanger = false,\n pageSizeOptions = [10, 20, 50, 100],\n showQuickJumper = false,\n showFirstLastButtons = false,\n showTotal,\n disabled = false,\n className,\n }) => {\n const [internalCurrent, setInternalCurrent] = useState(defaultCurrent)\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize)\n\n const current =\n controlledCurrent !== undefined ? controlledCurrent : internalCurrent\n const pageSize =\n controlledPageSize !== undefined ? controlledPageSize : internalPageSize\n const totalPages = Math.ceil(total / pageSize)\n\n const handlePageChange = (page: number) => {\n if (disabled || page === current || page < 1 || page > totalPages) return\n\n if (controlledCurrent === undefined) {\n setInternalCurrent(page)\n }\n onChange?.(page, pageSize)\n }\n\n const handlePageSizeChange = (newSize: number) => {\n if (disabled) return\n\n const newTotalPages = Math.ceil(total / newSize)\n const newCurrent = current > newTotalPages ? newTotalPages : current\n\n if (controlledPageSize === undefined) {\n setInternalPageSize(newSize)\n }\n if (controlledCurrent === undefined && newCurrent !== current) {\n setInternalCurrent(newCurrent)\n }\n\n onShowSizeChange?.(newCurrent, newSize)\n onChange?.(newCurrent, newSize)\n }\n\n const getPageNumbers = () => {\n const pages: (number | 'ellipsis')[] = []\n const showPages = 5\n\n if (totalPages <= showPages + 2) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n pages.push(1)\n\n if (current <= 3) {\n for (let i = 2; i <= 4; i++) {\n pages.push(i)\n }\n pages.push('ellipsis')\n } else if (current >= totalPages - 2) {\n pages.push('ellipsis')\n for (let i = totalPages - 3; i < totalPages; i++) {\n pages.push(i)\n }\n } else {\n pages.push('ellipsis')\n pages.push(current - 1)\n pages.push(current)\n pages.push(current + 1)\n pages.push('ellipsis')\n }\n\n pages.push(totalPages)\n }\n\n return pages\n }\n\n const range: [number, number] = [\n (current - 1) * pageSize + 1,\n Math.min(current * pageSize, total),\n ]\n\n return (\n <div className={cn('flex items-center gap-4', className)}>\n {showTotal && (\n <div className=\"text-text-secondary text-sm\">\n {showTotal(total, range)}\n </div>\n )}\n\n <div className={paginationVariants({ size })}>\n {/* First Page Button */}\n {showFirstLastButtons && (\n <button\n onClick={() => handlePageChange(1)}\n disabled={disabled || current === 1}\n className={cn(\n paginationItemVariants({\n size,\n disabled: disabled || current === 1,\n }),\n colorStyles[color][variant],\n )}\n aria-label=\"First page\"\n >\n <ChevronsLeft className={iconSizes[size]} />\n </button>\n )}\n\n {/* Previous Button */}\n <button\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n className={cn(\n paginationItemVariants({\n size,\n disabled: disabled || current === 1,\n }),\n colorStyles[color][variant],\n )}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className={iconSizes[size]} />\n </button>\n\n {/* Page Numbers */}\n {getPageNumbers().map((page, index) =>\n page === 'ellipsis' ? (\n <span\n key={`ellipsis-${index}`}\n className={cn(\n paginationItemVariants({ size, disabled: false }),\n colorStyles[color]['soft'],\n 'border-none pointer-events-none',\n )}\n >\n <MoreHorizontal className={iconSizes[size]} />\n </span>\n ) : (\n <button\n key={page}\n onClick={() => handlePageChange(page)}\n disabled={disabled}\n className={cn(\n paginationItemVariants({ size, disabled }),\n current === page\n ? activeColorStyles[color][variant]\n : colorStyles[color][variant],\n )}\n >\n {page}\n </button>\n ),\n )}\n\n {/* Next Button */}\n <button\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n className={cn(\n paginationItemVariants({\n size,\n disabled: disabled || current === totalPages,\n }),\n colorStyles[color][variant],\n )}\n aria-label=\"Next page\"\n >\n <ChevronRight className={iconSizes[size]} />\n </button>\n\n {/* Last Page Button */}\n {showFirstLastButtons && (\n <button\n onClick={() => handlePageChange(totalPages)}\n disabled={disabled || current === totalPages}\n className={cn(\n paginationItemVariants({\n size,\n disabled: disabled || current === totalPages,\n }),\n colorStyles[color][variant],\n )}\n aria-label=\"Last page\"\n >\n <ChevronsRight className={iconSizes[size]} />\n </button>\n )}\n </div>\n\n {/* Page Size Changer */}\n {showSizeChanger && (\n <select\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n disabled={disabled}\n className={cn(\n paginationItemVariants({ size, disabled }),\n colorStyles[color][variant],\n 'cursor-pointer',\n )}\n >\n {pageSizeOptions.map((option) => (\n <option\n key={option}\n value={option}\n >\n {option} / page\n </option>\n ))}\n </select>\n )}\n\n {/* Quick Jumper */}\n {showQuickJumper && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-text-secondary text-sm\">Go to</span>\n <input\n type=\"number\"\n min={1}\n max={totalPages}\n disabled={disabled}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const value = parseInt((e.target as HTMLInputElement).value)\n if (value >= 1 && value <= totalPages) {\n handlePageChange(value)\n ;(e.target as HTMLInputElement).value = ''\n }\n }\n }}\n className={cn(\n paginationItemVariants({ size, disabled }),\n colorStyles[color][variant],\n 'w-16 text-center',\n )}\n />\n </div>\n )}\n </div>\n )\n },\n)\n\nPagination.displayName = 'Pagination'\n\nexport type * from './types'\nexport default Pagination\n"]}
@@ -0,0 +1,166 @@
1
+ import { getValidationStatus, cn, statusMessageVariants } from './chunk-YNNAOXU5.js';
2
+ import { cva } from 'class-variance-authority';
3
+ import React from 'react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ var textareaVariants = cva(
7
+ "w-full rounded-md focus:border-primary transition-colors text-text-primary placeholder:text-text-muted disabled:opacity-50 disabled:cursor-not-allowed read-only:bg-surface read-only:cursor-default outline-none",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ outline: "bg-background border border-border",
12
+ filled: "bg-surface border border-transparent"
13
+ },
14
+ status: {
15
+ default: "",
16
+ error: "!border-error focus:!border-error",
17
+ warning: "!border-warning focus:!border-warning",
18
+ info: "!border-info focus:!border-info",
19
+ success: "!border-success focus:!border-success"
20
+ },
21
+ size: {
22
+ xs: "min-h-20 p-2 text-xs",
23
+ sm: "min-h-[var(--textarea-min-height)] p-[var(--textarea-padding-sm)] text-sm",
24
+ md: "min-h-[var(--textarea-min-height)] p-[var(--textarea-padding-md)] text-base",
25
+ lg: "min-h-[var(--textarea-min-height)] p-[var(--textarea-padding-lg)] text-lg"
26
+ },
27
+ resize: {
28
+ none: "resize-none",
29
+ vertical: "resize-y",
30
+ horizontal: "resize-x",
31
+ both: "resize"
32
+ },
33
+ fullWidth: {
34
+ true: "w-full",
35
+ false: "max-w-full"
36
+ }
37
+ },
38
+ defaultVariants: {
39
+ variant: "outline",
40
+ status: "default",
41
+ size: "md",
42
+ resize: "vertical",
43
+ fullWidth: true
44
+ }
45
+ }
46
+ );
47
+ var Textarea = React.memo(
48
+ ({
49
+ variant = "outline",
50
+ size = "md",
51
+ label,
52
+ helperText,
53
+ messagePosition = "bottom",
54
+ error,
55
+ warning,
56
+ info,
57
+ success,
58
+ resize = "vertical",
59
+ showCount = false,
60
+ maxLength,
61
+ autoResize = false,
62
+ fullWidth = true,
63
+ className,
64
+ value,
65
+ onChange,
66
+ ref,
67
+ ...props
68
+ }) => {
69
+ const internalRef = React.useRef(null);
70
+ const textareaRef = ref || internalRef;
71
+ const [internalValue, setInternalValue] = React.useState(value || "");
72
+ const currentValue = value !== void 0 ? value : internalValue;
73
+ const currentLength = String(currentValue).length;
74
+ const { status, message: helperMessage } = getValidationStatus({
75
+ error,
76
+ warning,
77
+ info,
78
+ success,
79
+ helperText
80
+ });
81
+ const handleChange = React.useCallback(
82
+ (e) => {
83
+ if (value === void 0) {
84
+ setInternalValue(e.target.value);
85
+ }
86
+ onChange?.(e);
87
+ },
88
+ [value, onChange]
89
+ );
90
+ React.useEffect(() => {
91
+ if (autoResize && textareaRef.current) {
92
+ textareaRef.current.style.height = "auto";
93
+ textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;
94
+ }
95
+ }, [currentValue, autoResize, textareaRef]);
96
+ const textareaElement = /* @__PURE__ */ jsx(
97
+ "textarea",
98
+ {
99
+ ref: textareaRef,
100
+ className: cn(
101
+ textareaVariants({
102
+ variant,
103
+ status,
104
+ size,
105
+ resize: autoResize ? "none" : resize,
106
+ fullWidth
107
+ }),
108
+ autoResize && "overflow-hidden",
109
+ className
110
+ ),
111
+ maxLength,
112
+ value: currentValue,
113
+ onChange: handleChange,
114
+ "aria-invalid": status === "error",
115
+ "aria-describedby": helperMessage ? `textarea-helper-${status}` : void 0,
116
+ ...props
117
+ }
118
+ );
119
+ if (!label && !helperMessage && !showCount) return textareaElement;
120
+ return /* @__PURE__ */ jsxs(
121
+ "div",
122
+ {
123
+ className: cn(
124
+ "w-full flex flex-col relative",
125
+ !fullWidth && "inline-block"
126
+ ),
127
+ children: [
128
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2 items-center relative mb-0.5", children: [
129
+ label && /* @__PURE__ */ jsxs("p", { className: "text-sm font-medium text-text-secondary", children: [
130
+ label,
131
+ props.required && /* @__PURE__ */ jsx("span", { className: "text-error ml-1", children: "*" })
132
+ ] }),
133
+ helperMessage && messagePosition === "top" && /* @__PURE__ */ jsx(
134
+ "p",
135
+ {
136
+ id: `textarea-helper-${status}`,
137
+ className: statusMessageVariants({ status }),
138
+ children: helperMessage
139
+ }
140
+ ),
141
+ showCount && maxLength && /* @__PURE__ */ jsxs("span", { className: "text-xs text-text-secondary absolute right-0", children: [
142
+ currentLength,
143
+ "/",
144
+ maxLength
145
+ ] })
146
+ ] }),
147
+ textareaElement,
148
+ helperMessage && messagePosition === "bottom" && /* @__PURE__ */ jsx(
149
+ "p",
150
+ {
151
+ id: `textarea-helper-${status}`,
152
+ className: cn(statusMessageVariants({ status }), "mt-0.5"),
153
+ children: helperMessage
154
+ }
155
+ )
156
+ ]
157
+ }
158
+ );
159
+ }
160
+ );
161
+ Textarea.displayName = "Textarea";
162
+ var textarea_default = Textarea;
163
+
164
+ export { textarea_default };
165
+ //# sourceMappingURL=chunk-FPOXTCYV.js.map
166
+ //# sourceMappingURL=chunk-FPOXTCYV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/textarea/index.tsx"],"names":[],"mappings":"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","file":"chunk-FPOXTCYV.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport React from 'react'\n\nimport { cn, getValidationStatus, statusMessageVariants } from '../utils'\nimport type { TextareaProps } from './types'\n\nconst textareaVariants = cva(\n 'w-full rounded-md focus:border-primary transition-colors text-text-primary placeholder:text-text-muted disabled:opacity-50 disabled:cursor-not-allowed read-only:bg-surface read-only:cursor-default outline-none',\n {\n variants: {\n variant: {\n outline: 'bg-background border border-border',\n filled: 'bg-surface border border-transparent',\n },\n status: {\n default: '',\n error: '!border-error focus:!border-error',\n warning: '!border-warning focus:!border-warning',\n info: '!border-info focus:!border-info',\n success: '!border-success focus:!border-success',\n },\n size: {\n xs: 'min-h-20 p-2 text-xs',\n sm: 'min-h-[var(--textarea-min-height)] p-[var(--textarea-padding-sm)] text-sm',\n md: 'min-h-[var(--textarea-min-height)] p-[var(--textarea-padding-md)] text-base',\n lg: 'min-h-[var(--textarea-min-height)] p-[var(--textarea-padding-lg)] text-lg',\n },\n resize: {\n none: 'resize-none',\n vertical: 'resize-y',\n horizontal: 'resize-x',\n both: 'resize',\n },\n fullWidth: {\n true: 'w-full',\n false: 'max-w-full',\n },\n },\n defaultVariants: {\n variant: 'outline',\n status: 'default',\n size: 'md',\n resize: 'vertical',\n fullWidth: true,\n },\n },\n)\n\nconst Textarea = React.memo<TextareaProps>(\n ({\n variant = 'outline',\n size = 'md',\n label,\n helperText,\n messagePosition = 'bottom',\n error,\n warning,\n info,\n success,\n resize = 'vertical',\n showCount = false,\n maxLength,\n autoResize = false,\n fullWidth = true,\n className,\n value,\n onChange,\n ref,\n ...props\n }) => {\n const internalRef = React.useRef<HTMLTextAreaElement>(null)\n const textareaRef =\n (ref as React.RefObject<HTMLTextAreaElement>) || internalRef\n const [internalValue, setInternalValue] = React.useState(value || '')\n const currentValue = value !== undefined ? value : internalValue\n const currentLength = String(currentValue).length\n\n // Use shared validation status utility\n const { status, message: helperMessage } = getValidationStatus({\n error,\n warning,\n info,\n success,\n helperText,\n })\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value)\n }\n onChange?.(e)\n },\n [value, onChange],\n )\n\n React.useEffect(() => {\n if (autoResize && textareaRef.current) {\n textareaRef.current.style.height = 'auto'\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`\n }\n }, [currentValue, autoResize, textareaRef])\n\n const textareaElement = (\n <textarea\n ref={textareaRef}\n className={cn(\n textareaVariants({\n variant,\n status,\n size,\n resize: autoResize ? 'none' : resize,\n fullWidth,\n }),\n autoResize && 'overflow-hidden',\n className,\n )}\n maxLength={maxLength}\n value={currentValue}\n onChange={handleChange}\n aria-invalid={status === 'error'}\n aria-describedby={\n helperMessage ? `textarea-helper-${status}` : undefined\n }\n {...props}\n />\n )\n\n if (!label && !helperMessage && !showCount) return textareaElement\n\n return (\n <div\n className={cn(\n 'w-full flex flex-col relative',\n !fullWidth && 'inline-block',\n )}\n >\n <div className=\"flex gap-2 items-center relative mb-0.5\">\n {label && (\n <p className=\"text-sm font-medium text-text-secondary\">\n {label}\n {props.required && <span className=\"text-error ml-1\">*</span>}\n </p>\n )}\n {helperMessage && messagePosition === 'top' && (\n <p\n id={`textarea-helper-${status}`}\n className={statusMessageVariants({ status })}\n >\n {helperMessage}\n </p>\n )}\n {showCount && maxLength && (\n <span className=\"text-xs text-text-secondary absolute right-0\">\n {currentLength}/{maxLength}\n </span>\n )}\n </div>\n {textareaElement}\n {helperMessage && messagePosition === 'bottom' && (\n <p\n id={`textarea-helper-${status}`}\n className={cn(statusMessageVariants({ status }), 'mt-0.5')}\n >\n {helperMessage}\n </p>\n )}\n </div>\n )\n },\n)\n\nTextarea.displayName = 'Textarea'\n\nexport type * from './types'\nexport default Textarea\n"]}