gladvn 0.2.16 → 0.2.18

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 (315) hide show
  1. package/bin/cli.js +9 -6
  2. package/dist/components/macro/accordion-preset.d.ts.map +1 -1
  3. package/dist/components/macro/alert-dialog-preset.d.ts.map +1 -1
  4. package/dist/components/macro/alert-preset.d.ts.map +1 -1
  5. package/dist/components/macro/avatar-preset.d.ts.map +1 -1
  6. package/dist/components/macro/breadcrumb-preset.d.ts.map +1 -1
  7. package/dist/components/macro/card-preset.d.ts.map +1 -1
  8. package/dist/components/macro/carousel-preset.d.ts.map +1 -1
  9. package/dist/components/macro/checkbox-preset.d.ts.map +1 -1
  10. package/dist/components/macro/combobox-preset.d.ts.map +1 -1
  11. package/dist/components/macro/command-preset.d.ts +1 -1
  12. package/dist/components/macro/command-preset.d.ts.map +1 -1
  13. package/dist/components/macro/date-picker.d.ts.map +1 -1
  14. package/dist/components/macro/dialog-preset.d.ts.map +1 -1
  15. package/dist/components/macro/empty-preset.d.ts.map +1 -1
  16. package/dist/components/macro/field-preset.d.ts.map +1 -1
  17. package/dist/components/macro/input-otp-preset.d.ts +6 -0
  18. package/dist/components/macro/input-otp-preset.d.ts.map +1 -1
  19. package/dist/components/macro/input-preset.d.ts +1 -1
  20. package/dist/components/macro/input-preset.d.ts.map +1 -1
  21. package/dist/components/macro/pagination-preset.d.ts.map +1 -1
  22. package/dist/components/macro/progress-preset.d.ts.map +1 -1
  23. package/dist/components/macro/radio-group-preset.d.ts.map +1 -1
  24. package/dist/components/macro/select-preset.d.ts.map +1 -1
  25. package/dist/components/macro/slider-preset.d.ts.map +1 -1
  26. package/dist/components/macro/switch-preset.d.ts.map +1 -1
  27. package/dist/components/macro/tabs-preset.d.ts +1 -1
  28. package/dist/components/macro/tabs-preset.d.ts.map +1 -1
  29. package/dist/components/macro/textarea-preset.d.ts +1 -1
  30. package/dist/components/macro/textarea-preset.d.ts.map +1 -1
  31. package/dist/components/micro/accordion.d.ts +7 -0
  32. package/dist/components/micro/accordion.d.ts.map +1 -1
  33. package/dist/components/micro/alert-dialog.d.ts.map +1 -1
  34. package/dist/components/micro/alert.d.ts +7 -0
  35. package/dist/components/micro/alert.d.ts.map +1 -1
  36. package/dist/components/micro/aspect-ratio.d.ts +7 -0
  37. package/dist/components/micro/aspect-ratio.d.ts.map +1 -1
  38. package/dist/components/micro/avatar.d.ts.map +1 -1
  39. package/dist/components/micro/badge.d.ts +8 -1
  40. package/dist/components/micro/badge.d.ts.map +1 -1
  41. package/dist/components/micro/breadcrumb.d.ts +7 -0
  42. package/dist/components/micro/breadcrumb.d.ts.map +1 -1
  43. package/dist/components/micro/button.d.ts +8 -1
  44. package/dist/components/micro/button.d.ts.map +1 -1
  45. package/dist/components/micro/calendar.d.ts +2 -2
  46. package/dist/components/micro/calendar.d.ts.map +1 -1
  47. package/dist/components/micro/carousel.d.ts.map +1 -1
  48. package/dist/components/micro/chart.d.ts.map +1 -1
  49. package/dist/components/micro/checkbox.d.ts.map +1 -1
  50. package/dist/components/micro/collapsible.d.ts.map +1 -1
  51. package/dist/components/micro/combobox.d.ts.map +1 -1
  52. package/dist/components/micro/command.d.ts.map +1 -1
  53. package/dist/components/micro/context-menu.d.ts.map +1 -1
  54. package/dist/components/micro/dialog.d.ts.map +1 -1
  55. package/dist/components/micro/drawer.d.ts.map +1 -1
  56. package/dist/components/micro/dropdown-menu.d.ts.map +1 -1
  57. package/dist/components/micro/empty.d.ts +7 -0
  58. package/dist/components/micro/empty.d.ts.map +1 -1
  59. package/dist/components/micro/field.d.ts.map +1 -1
  60. package/dist/components/micro/hover-card.d.ts +1 -1
  61. package/dist/components/micro/hover-card.d.ts.map +1 -1
  62. package/dist/components/micro/input-group.d.ts.map +1 -1
  63. package/dist/components/micro/input-otp.d.ts.map +1 -1
  64. package/dist/components/micro/input.d.ts +7 -0
  65. package/dist/components/micro/input.d.ts.map +1 -1
  66. package/dist/components/micro/item.d.ts.map +1 -1
  67. package/dist/components/micro/label.d.ts.map +1 -1
  68. package/dist/components/micro/menubar.d.ts.map +1 -1
  69. package/dist/components/micro/navigation-menu.d.ts +8 -1
  70. package/dist/components/micro/navigation-menu.d.ts.map +1 -1
  71. package/dist/components/micro/pagination.d.ts.map +1 -1
  72. package/dist/components/micro/popover.d.ts.map +1 -1
  73. package/dist/components/micro/progress.d.ts.map +1 -1
  74. package/dist/components/micro/radio-group.d.ts.map +1 -1
  75. package/dist/components/micro/select.d.ts +1 -1
  76. package/dist/components/micro/select.d.ts.map +1 -1
  77. package/dist/components/micro/sheet.d.ts.map +1 -1
  78. package/dist/components/micro/sidebar.d.ts.map +1 -1
  79. package/dist/components/micro/skeleton.d.ts +7 -0
  80. package/dist/components/micro/skeleton.d.ts.map +1 -1
  81. package/dist/components/micro/slider.d.ts +7 -0
  82. package/dist/components/micro/slider.d.ts.map +1 -1
  83. package/dist/components/micro/sonner.d.ts.map +1 -1
  84. package/dist/components/micro/spinner.d.ts.map +1 -1
  85. package/dist/components/micro/switch.d.ts.map +1 -1
  86. package/dist/components/micro/table.d.ts.map +1 -1
  87. package/dist/components/micro/tabs.d.ts +1 -1
  88. package/dist/components/micro/tabs.d.ts.map +1 -1
  89. package/dist/components/micro/textarea.d.ts +7 -0
  90. package/dist/components/micro/textarea.d.ts.map +1 -1
  91. package/dist/components/micro/toggle-group.d.ts.map +1 -1
  92. package/dist/components/micro/toggle.d.ts.map +1 -1
  93. package/dist/components/micro/tooltip.d.ts +1 -1
  94. package/dist/components/micro/tooltip.d.ts.map +1 -1
  95. package/dist/dev/App.d.ts.map +1 -1
  96. package/dist/dev/components/code-highlighter.d.ts.map +1 -1
  97. package/dist/dev/components/dev-context.d.ts.map +1 -1
  98. package/dist/dev/components/showcase.d.ts +1 -1
  99. package/dist/dev/components/showcase.d.ts.map +1 -1
  100. package/dist/dev/data.d.ts.map +1 -1
  101. package/dist/dev/main.d.ts.map +1 -1
  102. package/dist/dev/sections/buttons.d.ts.map +1 -1
  103. package/dist/dev/sections/feedback.d.ts.map +1 -1
  104. package/dist/dev/sections/overview.d.ts.map +1 -1
  105. package/dist/dev/showcase/accordion.d.ts.map +1 -1
  106. package/dist/dev/showcase/alert-dialog.d.ts.map +1 -1
  107. package/dist/dev/showcase/alert.d.ts.map +1 -1
  108. package/dist/dev/showcase/aspect-ratio.d.ts.map +1 -1
  109. package/dist/dev/showcase/avatar.d.ts.map +1 -1
  110. package/dist/dev/showcase/breadcrumb.d.ts.map +1 -1
  111. package/dist/dev/showcase/button.d.ts.map +1 -1
  112. package/dist/dev/showcase/calendar.d.ts.map +1 -1
  113. package/dist/dev/showcase/card.d.ts.map +1 -1
  114. package/dist/dev/showcase/carousel.d.ts.map +1 -1
  115. package/dist/dev/showcase/chart.d.ts.map +1 -1
  116. package/dist/dev/showcase/checkbox.d.ts.map +1 -1
  117. package/dist/dev/showcase/collapsible.d.ts.map +1 -1
  118. package/dist/dev/showcase/combobox.d.ts.map +1 -1
  119. package/dist/dev/showcase/command.d.ts.map +1 -1
  120. package/dist/dev/showcase/context-menu.d.ts.map +1 -1
  121. package/dist/dev/showcase/dialog.d.ts.map +1 -1
  122. package/dist/dev/showcase/drawer.d.ts.map +1 -1
  123. package/dist/dev/showcase/dropdown-menu.d.ts.map +1 -1
  124. package/dist/dev/showcase/empty.d.ts.map +1 -1
  125. package/dist/dev/showcase/hover-card.d.ts.map +1 -1
  126. package/dist/dev/showcase/input-group.d.ts.map +1 -1
  127. package/dist/dev/showcase/input-otp.d.ts.map +1 -1
  128. package/dist/dev/showcase/input.d.ts.map +1 -1
  129. package/dist/dev/showcase/item.d.ts.map +1 -1
  130. package/dist/dev/showcase/kbd.d.ts.map +1 -1
  131. package/dist/dev/showcase/label.d.ts.map +1 -1
  132. package/dist/dev/showcase/menubar.d.ts.map +1 -1
  133. package/dist/dev/showcase/navigation-menu.d.ts.map +1 -1
  134. package/dist/dev/showcase/overview.d.ts.map +1 -1
  135. package/dist/dev/showcase/pagination.d.ts.map +1 -1
  136. package/dist/dev/showcase/popover.d.ts.map +1 -1
  137. package/dist/dev/showcase/progress.d.ts.map +1 -1
  138. package/dist/dev/showcase/radio-group.d.ts.map +1 -1
  139. package/dist/dev/showcase/resizable.d.ts.map +1 -1
  140. package/dist/dev/showcase/scroll-area.d.ts.map +1 -1
  141. package/dist/dev/showcase/select.d.ts.map +1 -1
  142. package/dist/dev/showcase/separator.d.ts.map +1 -1
  143. package/dist/dev/showcase/sheet.d.ts.map +1 -1
  144. package/dist/dev/showcase/sidebar.d.ts.map +1 -1
  145. package/dist/dev/showcase/skeleton.d.ts.map +1 -1
  146. package/dist/dev/showcase/slider.d.ts.map +1 -1
  147. package/dist/dev/showcase/sonner.d.ts.map +1 -1
  148. package/dist/dev/showcase/spinner.d.ts.map +1 -1
  149. package/dist/dev/showcase/switch.d.ts.map +1 -1
  150. package/dist/dev/showcase/table.d.ts.map +1 -1
  151. package/dist/dev/showcase/tabs.d.ts.map +1 -1
  152. package/dist/dev/showcase/textarea.d.ts.map +1 -1
  153. package/dist/dev/showcase/theme-provider.d.ts.map +1 -1
  154. package/dist/dev/showcase/toast.d.ts.map +1 -1
  155. package/dist/dev/showcase/toggle-group.d.ts.map +1 -1
  156. package/dist/dev/showcase/toggle.d.ts.map +1 -1
  157. package/dist/dev/showcase/tooltip.d.ts.map +1 -1
  158. package/dist/index.cjs +2 -2
  159. package/dist/index.cjs.map +1 -1
  160. package/dist/index.js +2 -2
  161. package/dist/index.js.map +1 -1
  162. package/dist/lib/utils.d.ts.map +1 -1
  163. package/package.json +3 -1
  164. package/scripts/format-codestrings.ts +87 -0
  165. package/scripts/organize-imports.ts +21 -0
  166. package/scripts/regex-format.cjs +67 -0
  167. package/scripts/tmp.tsx +25 -0
  168. package/src/components/macro/accordion-preset.test.tsx +1 -0
  169. package/src/components/macro/accordion-preset.tsx +2 -1
  170. package/src/components/macro/alert-dialog-preset.tsx +44 -43
  171. package/src/components/macro/alert-preset.tsx +7 -3
  172. package/src/components/macro/avatar-preset.tsx +2 -1
  173. package/src/components/macro/breadcrumb-preset.tsx +2 -1
  174. package/src/components/macro/card-preset.tsx +2 -1
  175. package/src/components/macro/carousel-preset.tsx +5 -2
  176. package/src/components/macro/checkbox-preset.test.tsx +1 -0
  177. package/src/components/macro/checkbox-preset.tsx +6 -2
  178. package/src/components/macro/combobox-preset.tsx +6 -3
  179. package/src/components/macro/command-preset.tsx +7 -3
  180. package/src/components/macro/date-picker.tsx +77 -59
  181. package/src/components/macro/dialog-preset.tsx +42 -38
  182. package/src/components/macro/empty-preset.tsx +2 -1
  183. package/src/components/macro/field-preset.test.tsx +1 -0
  184. package/src/components/macro/field-preset.tsx +2 -1
  185. package/src/components/macro/input-otp-preset.tsx +6 -2
  186. package/src/components/macro/input-preset.test.tsx +1 -0
  187. package/src/components/macro/input-preset.tsx +4 -2
  188. package/src/components/macro/pagination-preset.tsx +3 -1
  189. package/src/components/macro/progress-preset.test.tsx +1 -0
  190. package/src/components/macro/progress-preset.tsx +2 -1
  191. package/src/components/macro/radio-group-preset.tsx +4 -1
  192. package/src/components/macro/select-preset.tsx +35 -30
  193. package/src/components/macro/slider-preset.test.tsx +1 -0
  194. package/src/components/macro/slider-preset.tsx +4 -1
  195. package/src/components/macro/switch-preset.test.tsx +1 -0
  196. package/src/components/macro/switch-preset.tsx +4 -1
  197. package/src/components/macro/tabs-preset.test.tsx +1 -0
  198. package/src/components/macro/tabs-preset.tsx +4 -2
  199. package/src/components/macro/textarea-preset.test.tsx +1 -0
  200. package/src/components/macro/textarea-preset.tsx +4 -1
  201. package/src/components/micro/accordion.tsx +3 -2
  202. package/src/components/micro/alert-dialog.tsx +2 -1
  203. package/src/components/micro/alert.tsx +3 -2
  204. package/src/components/micro/aspect-ratio.tsx +2 -1
  205. package/src/components/micro/avatar.tsx +2 -1
  206. package/src/components/micro/badge.tsx +3 -3
  207. package/src/components/micro/breadcrumb.tsx +3 -2
  208. package/src/components/micro/button.test.tsx +1 -0
  209. package/src/components/micro/button.tsx +3 -3
  210. package/src/components/micro/calendar.tsx +10 -9
  211. package/src/components/micro/carousel.tsx +3 -2
  212. package/src/components/micro/chart.tsx +1 -0
  213. package/src/components/micro/checkbox.tsx +2 -2
  214. package/src/components/micro/collapsible.tsx +4 -2
  215. package/src/components/micro/combobox.tsx +47 -29
  216. package/src/components/micro/command.tsx +23 -16
  217. package/src/components/micro/context-menu.tsx +3 -2
  218. package/src/components/micro/dialog.tsx +2 -1
  219. package/src/components/micro/drawer.tsx +2 -1
  220. package/src/components/micro/dropdown-menu.tsx +3 -2
  221. package/src/components/micro/empty.tsx +2 -1
  222. package/src/components/micro/field.tsx +4 -3
  223. package/src/components/micro/hover-card.tsx +20 -19
  224. package/src/components/micro/input-group.tsx +5 -4
  225. package/src/components/micro/input-otp.tsx +3 -2
  226. package/src/components/micro/input.tsx +3 -2
  227. package/src/components/micro/item.tsx +1 -0
  228. package/src/components/micro/label.tsx +2 -1
  229. package/src/components/micro/menubar.tsx +2 -1
  230. package/src/components/micro/navigation-menu.tsx +18 -17
  231. package/src/components/micro/pagination.tsx +2 -1
  232. package/src/components/micro/popover.tsx +2 -1
  233. package/src/components/micro/progress.tsx +2 -1
  234. package/src/components/micro/radio-group.tsx +3 -3
  235. package/src/components/micro/select.tsx +5 -4
  236. package/src/components/micro/sheet.tsx +2 -1
  237. package/src/components/micro/sidebar.tsx +4 -1
  238. package/src/components/micro/skeleton.tsx +2 -1
  239. package/src/components/micro/slider.tsx +4 -1
  240. package/src/components/micro/sonner.tsx +2 -1
  241. package/src/components/micro/spinner.tsx +1 -2
  242. package/src/components/micro/switch.tsx +2 -2
  243. package/src/components/micro/table.tsx +2 -1
  244. package/src/components/micro/tabs.tsx +4 -3
  245. package/src/components/micro/textarea.tsx +2 -1
  246. package/src/components/micro/toggle-group.tsx +1 -0
  247. package/src/components/micro/toggle.tsx +1 -3
  248. package/src/components/micro/tooltip.tsx +9 -3
  249. package/src/dev/App.tsx +66 -41
  250. package/src/dev/components/code-highlighter.tsx +2 -1
  251. package/src/dev/components/dev-context.tsx +1 -0
  252. package/src/dev/components/showcase.tsx +13 -14
  253. package/src/dev/data.ts +206 -52
  254. package/src/dev/main.tsx +4 -4
  255. package/src/dev/sections/buttons.tsx +14 -12
  256. package/src/dev/sections/feedback.tsx +7 -2
  257. package/src/dev/sections/forms.tsx +11 -11
  258. package/src/dev/sections/overview.tsx +2 -1
  259. package/src/dev/showcase/accordion.tsx +399 -314
  260. package/src/dev/showcase/alert-dialog.tsx +387 -384
  261. package/src/dev/showcase/alert.tsx +271 -258
  262. package/src/dev/showcase/aspect-ratio.tsx +102 -105
  263. package/src/dev/showcase/avatar.tsx +216 -145
  264. package/src/dev/showcase/badge.tsx +78 -50
  265. package/src/dev/showcase/breadcrumb.tsx +88 -85
  266. package/src/dev/showcase/button.tsx +72 -96
  267. package/src/dev/showcase/calendar.tsx +41 -39
  268. package/src/dev/showcase/card.tsx +170 -148
  269. package/src/dev/showcase/carousel.tsx +239 -77
  270. package/src/dev/showcase/chart.tsx +5 -4
  271. package/src/dev/showcase/checkbox.tsx +206 -140
  272. package/src/dev/showcase/collapsible.tsx +108 -84
  273. package/src/dev/showcase/combobox.tsx +272 -199
  274. package/src/dev/showcase/command.tsx +31 -28
  275. package/src/dev/showcase/context-menu.tsx +94 -77
  276. package/src/dev/showcase/dialog.tsx +445 -424
  277. package/src/dev/showcase/drawer.tsx +142 -135
  278. package/src/dev/showcase/dropdown-menu.tsx +165 -161
  279. package/src/dev/showcase/empty.tsx +173 -158
  280. package/src/dev/showcase/hover-card.tsx +92 -52
  281. package/src/dev/showcase/input-group.tsx +193 -160
  282. package/src/dev/showcase/input-otp.tsx +109 -99
  283. package/src/dev/showcase/input.tsx +78 -42
  284. package/src/dev/showcase/item.tsx +101 -98
  285. package/src/dev/showcase/kbd.tsx +78 -62
  286. package/src/dev/showcase/label.tsx +16 -23
  287. package/src/dev/showcase/menubar.tsx +274 -251
  288. package/src/dev/showcase/navigation-menu.tsx +175 -170
  289. package/src/dev/showcase/overview.tsx +164 -148
  290. package/src/dev/showcase/pagination.tsx +101 -69
  291. package/src/dev/showcase/popover.tsx +113 -86
  292. package/src/dev/showcase/progress.tsx +99 -69
  293. package/src/dev/showcase/radio-group.tsx +217 -134
  294. package/src/dev/showcase/resizable.tsx +65 -55
  295. package/src/dev/showcase/scroll-area.tsx +32 -22
  296. package/src/dev/showcase/select.tsx +192 -136
  297. package/src/dev/showcase/separator.tsx +28 -24
  298. package/src/dev/showcase/sheet.tsx +182 -134
  299. package/src/dev/showcase/sidebar.tsx +9 -5
  300. package/src/dev/showcase/skeleton.tsx +54 -59
  301. package/src/dev/showcase/slider.tsx +158 -129
  302. package/src/dev/showcase/sonner.tsx +3 -5
  303. package/src/dev/showcase/spinner.tsx +22 -18
  304. package/src/dev/showcase/switch.tsx +207 -110
  305. package/src/dev/showcase/table.tsx +44 -32
  306. package/src/dev/showcase/tabs.tsx +272 -267
  307. package/src/dev/showcase/textarea.tsx +162 -116
  308. package/src/dev/showcase/theme-provider.tsx +596 -534
  309. package/src/dev/showcase/toast.tsx +37 -38
  310. package/src/dev/showcase/toggle-group.tsx +87 -39
  311. package/src/dev/showcase/toggle.tsx +36 -27
  312. package/src/dev/showcase/tooltip.tsx +154 -119
  313. package/src/lib/utils.test.ts +1 -0
  314. package/src/lib/utils.ts +1 -1
  315. package/src/styles/gladvn.css +1 -1
@@ -1,16 +1,4 @@
1
- import { useDevContext } from "../../dev/components/dev-context";
2
- import {
3
- DocsCode,
4
- DocsH3,
5
- DocsP,
6
- ExampleGrid,
7
- ExampleSection,
8
- Showcase,
9
- ShowcaseDocs,
10
- } from "../../dev/components/showcase";
11
- import { type Size } from "../../lib/types";
12
1
  import { ShieldIcon, WrenchIcon } from "lucide-react";
13
- import { useState } from "react";
14
2
 
15
3
  import { InputOTPPreset } from "../../components/macro/input-otp-preset";
16
4
  import {
@@ -25,6 +13,17 @@ import {
25
13
  InputOTPSeparator,
26
14
  InputOTPSlot,
27
15
  } from "../../components/micro/input-otp";
16
+ import { useDevContext } from "../../dev/components/dev-context";
17
+ import {
18
+ DocsCode,
19
+ DocsH3,
20
+ DocsP,
21
+ ExampleGrid,
22
+ ExampleSection,
23
+ Showcase,
24
+ ShowcaseDocs,
25
+ } from "../../dev/components/showcase";
26
+ import { type Size } from "../../lib/types";
28
27
 
29
28
  // ──────────────────────────────────────────────────────────
30
29
  // SECTION 1: Macro Content
@@ -37,11 +36,11 @@ function InputOTPMacroShowcase({ globalSize }: { globalSize: Size }) {
37
36
  label="Tiêu chuẩn (2 nhóm)"
38
37
  description="Chia mã 6 số thành 2 nhóm (mỗi nhóm 3 số) cách nhau bởi dấu gạch ngang."
39
38
  codeString={`<InputOTPPreset
40
- groups={[3, 3]}
41
- size="md"
42
- label="Mã xác thực"
43
- description="Vui lòng nhập mã 6 số được gửi tới điện thoại của bạn."
44
- />`}
39
+ groups={[3, 3]}
40
+ size="md"
41
+ label="Mã xác thực"
42
+ description="Vui lòng nhập mã 6 số được gửi tới điện thoại của bạn."
43
+ />`}
45
44
  >
46
45
  <InputOTPPreset
47
46
  className="w-full"
@@ -56,11 +55,11 @@ function InputOTPMacroShowcase({ globalSize }: { globalSize: Size }) {
56
55
  label="Trạng thái Lỗi (Error)"
57
56
  description="Hiển thị viền đỏ và thông báo lỗi khi nhập sai mã."
58
57
  codeString={`<InputOTPPreset
59
- groups={[3, 3]}
60
- size="md"
61
- label="Mã bảo mật"
62
- errorMessage="Mã xác nhận không chính xác. Vui lòng thử lại."
63
- />`}
58
+ groups={[3, 3]}
59
+ size="md"
60
+ label="Mã bảo mật"
61
+ errorMessage="Mã xác nhận không chính xác. Vui lòng thử lại."
62
+ />`}
64
63
  >
65
64
  <InputOTPPreset
66
65
  className="w-full"
@@ -77,12 +76,12 @@ function InputOTPMacroShowcase({ globalSize }: { globalSize: Size }) {
77
76
  label="Khóa / Bất hoạt (Disabled)"
78
77
  description="Người dùng không thể nhập mã khi ở trạng thái này."
79
78
  codeString={`<InputOTPPreset
80
- groups={[4]}
81
- size="md"
82
- label="Mã khôi phục"
83
- description="Tài khoản của bạn đang bị khóa tạm thời."
84
- disabled
85
- />`}
79
+ groups={[4]}
80
+ size="md"
81
+ label="Mã khôi phục"
82
+ description="Tài khoản của bạn đang bị khóa tạm thời."
83
+ disabled
84
+ />`}
86
85
  >
87
86
  <InputOTPPreset
88
87
  className="w-full"
@@ -98,11 +97,13 @@ function InputOTPMacroShowcase({ globalSize }: { globalSize: Size }) {
98
97
  label="Tuỳ biến Nhóm & Dấu phân cách"
99
98
  description="Dùng mảng groups tuỳ ý và đổi icon phân cách."
100
99
  codeString={`<InputOTPPreset
101
- groups={[2, 2, 2]}
102
- separator={<span className="text-muted-foreground/50">/</span>}
103
- size="md"
104
- label="Ngày sinh (DD/MM/YY)"
105
- />`}
100
+ groups={[2, 2, 2]}
101
+ separator={
102
+ <span className="text-muted-foreground/50">/</span>
103
+ }
104
+ size="md"
105
+ label="Ngày sinh (DD/MM/YY)"
106
+ />`}
106
107
  >
107
108
  <div className="w-full flex flex-col gap-6">
108
109
  <InputOTPPreset
@@ -134,17 +135,17 @@ function InputOTPMicroShowcase({ globalSize }: { globalSize: Size }) {
134
135
  label="Cơ bản (Primitive)"
135
136
  description="Mã 6 chữ số liền mạch không có dấu phân cách."
136
137
  codeString={`<Field size="md">
137
- <FieldLabel htmlFor="otp-basic">Mã PIN</FieldLabel>
138
- <FieldContent>
139
- <InputOTP id="otp-basic" size="md" maxLength={6}>
140
- <InputOTPGroup>
141
- {Array.from({ length: 6 }).map((_, i) => (
142
- <InputOTPSlot key={i} index={i} />
143
- ))}
144
- </InputOTPGroup>
145
- </InputOTP>
146
- </FieldContent>
147
- </Field>`}
138
+ <FieldLabel htmlFor="otp-basic">Mã PIN</FieldLabel>
139
+ <FieldContent>
140
+ <InputOTP id="otp-basic" size="md" maxLength={6}>
141
+ <InputOTPGroup>
142
+ {Array.from({ length: 6 }).map((_, i) => (
143
+ <InputOTPSlot key={i} index={i} />
144
+ ))}
145
+ </InputOTPGroup>
146
+ </InputOTP>
147
+ </FieldContent>
148
+ </Field>`}
148
149
  >
149
150
  <Field className="w-full" size={globalSize}>
150
151
  <FieldLabel htmlFor="tf-otp-0">Mã PIN</FieldLabel>
@@ -167,23 +168,23 @@ function InputOTPMicroShowcase({ globalSize }: { globalSize: Size }) {
167
168
  label="Phân tách thủ công"
168
169
  description="Tự chèn InputOTPSeparator vào giữa các nhóm."
169
170
  codeString={`<Field size="md">
170
- <FieldLabel htmlFor="otp-sep">Mã bảo mật</FieldLabel>
171
- <FieldContent>
172
- <InputOTP id="otp-sep" size="md" maxLength={6}>
173
- <InputOTPGroup>
174
- {Array.from({ length: 3 }).map((_, i) => (
175
- <InputOTPSlot key={i} index={i} />
176
- ))}
177
- </InputOTPGroup>
178
- <InputOTPSeparator />
179
- <InputOTPGroup>
180
- {Array.from({ length: 3 }).map((_, i) => (
181
- <InputOTPSlot key={i + 3} index={i + 3} />
182
- ))}
183
- </InputOTPGroup>
184
- </InputOTP>
185
- </FieldContent>
186
- </Field>`}
171
+ <FieldLabel htmlFor="otp-sep">Mã bảo mật</FieldLabel>
172
+ <FieldContent>
173
+ <InputOTP id="otp-sep" size="md" maxLength={6}>
174
+ <InputOTPGroup>
175
+ {Array.from({ length: 3 }).map((_, i) => (
176
+ <InputOTPSlot key={i} index={i} />
177
+ ))}
178
+ </InputOTPGroup>
179
+ <InputOTPSeparator />
180
+ <InputOTPGroup>
181
+ {Array.from({ length: 3 }).map((_, i) => (
182
+ <InputOTPSlot key={i + 3} index={i + 3} />
183
+ ))}
184
+ </InputOTPGroup>
185
+ </InputOTP>
186
+ </FieldContent>
187
+ </Field>`}
187
188
  >
188
189
  <Field className="w-full" size={globalSize}>
189
190
  <FieldLabel htmlFor="tf-otp-1">Mã bảo mật</FieldLabel>
@@ -217,18 +218,18 @@ function InputOTPMicroShowcase({ globalSize }: { globalSize: Size }) {
217
218
  label="Trạng thái Lỗi thủ công"
218
219
  description="Gắn data-invalid vào Field để thay đổi màu sắc."
219
220
  codeString={`<Field size="md" data-invalid={true}>
220
- <FieldLabel htmlFor="otp-err">Mã xác minh</FieldLabel>
221
- <FieldContent>
222
- <InputOTP id="otp-err" size="md" maxLength={4}>
223
- <InputOTPGroup>
224
- {Array.from({ length: 4 }).map((_, i) => (
225
- <InputOTPSlot key={i} index={i} />
226
- ))}
227
- </InputOTPGroup>
228
- </InputOTP>
229
- </FieldContent>
230
- <FieldError>Mã không hợp lệ.</FieldError>
231
- </Field>`}
221
+ <FieldLabel htmlFor="otp-err">Mã xác minh</FieldLabel>
222
+ <FieldContent>
223
+ <InputOTP id="otp-err" size="md" maxLength={4}>
224
+ <InputOTPGroup>
225
+ {Array.from({ length: 4 }).map((_, i) => (
226
+ <InputOTPSlot key={i} index={i} />
227
+ ))}
228
+ </InputOTPGroup>
229
+ </InputOTP>
230
+ </FieldContent>
231
+ <FieldError>Mã không hợp lệ.</FieldError>
232
+ </Field>`}
232
233
  >
233
234
  <Field className="w-full" size={globalSize} data-invalid={true}>
234
235
  <FieldLabel htmlFor="tf-otp-err">Mã xác minh</FieldLabel>
@@ -252,17 +253,22 @@ function InputOTPMicroShowcase({ globalSize }: { globalSize: Size }) {
252
253
  label="Disabled thủ công"
253
254
  description="Truyền thuộc tính disabled."
254
255
  codeString={`<Field size="md">
255
- <FieldLabel htmlFor="otp-disabled">Mã OTP</FieldLabel>
256
- <FieldContent>
257
- <InputOTP id="otp-disabled" size="md" maxLength={4} disabled>
258
- <InputOTPGroup>
259
- {Array.from({ length: 4 }).map((_, i) => (
260
- <InputOTPSlot key={i} index={i} />
261
- ))}
262
- </InputOTPGroup>
263
- </InputOTP>
264
- </FieldContent>
265
- </Field>`}
256
+ <FieldLabel htmlFor="otp-disabled">Mã OTP</FieldLabel>
257
+ <FieldContent>
258
+ <InputOTP
259
+ id="otp-disabled"
260
+ size="md"
261
+ maxLength={4}
262
+ disabled
263
+ >
264
+ <InputOTPGroup>
265
+ {Array.from({ length: 4 }).map((_, i) => (
266
+ <InputOTPSlot key={i} index={i} />
267
+ ))}
268
+ </InputOTPGroup>
269
+ </InputOTP>
270
+ </FieldContent>
271
+ </Field>`}
266
272
  >
267
273
  <Field className="w-full" size={globalSize}>
268
274
  <FieldLabel htmlFor="tf-otp-d">Mã OTP</FieldLabel>
@@ -287,22 +293,26 @@ function InputOTPMicroShowcase({ globalSize }: { globalSize: Size }) {
287
293
  description="So sánh nhanh khi nào dùng Micro và Macro."
288
294
  fullWidth
289
295
  codeString={`{/* Macro — đơn giản, 1 dòng khai báo */}
290
- <InputOTPPreset groups={[3, 3]} size="md" label="Mã xác thực" />
296
+ <InputOTPPreset
297
+ groups={[3, 3]}
298
+ size="md"
299
+ label="Mã xác thực"
300
+ />
291
301
 
292
- {/* Micro — khi cần custom từng slot */}
293
- <InputOTP size="md" maxLength={6}>
294
- <InputOTPGroup>
295
- {Array.from({ length: 3 }).map((_, i) => (
296
- <InputOTPSlot key={i} index={i} />
297
- ))}
298
- </InputOTPGroup>
299
- <InputOTPSeparator />
300
- <InputOTPGroup>
301
- {Array.from({ length: 3 }).map((_, i) => (
302
- <InputOTPSlot key={i + 3} index={i + 3} />
303
- ))}
304
- </InputOTPGroup>
305
- </InputOTP>`}
302
+ {/* Micro — khi cần custom từng slot */}
303
+ <InputOTP size="md" maxLength={6}>
304
+ <InputOTPGroup>
305
+ {Array.from({ length: 3 }).map((_, i) => (
306
+ <InputOTPSlot key={i} index={i} />
307
+ ))}
308
+ </InputOTPGroup>
309
+ <InputOTPSeparator />
310
+ <InputOTPGroup>
311
+ {Array.from({ length: 3 }).map((_, i) => (
312
+ <InputOTPSlot key={i + 3} index={i + 3} />
313
+ ))}
314
+ </InputOTPGroup>
315
+ </InputOTP>`}
306
316
  >
307
317
  <div className="grid grid-cols-1 gap-6 md:grid-cols-2">
308
318
  {/* Story 1: Macro wins */}
@@ -1,18 +1,6 @@
1
- import { useDevContext } from "../../dev/components/dev-context";
2
- import {
3
- DocsCode,
4
- DocsH3,
5
- DocsLi,
6
- DocsP,
7
- DocsUl,
8
- ExampleGrid,
9
- ExampleSection,
10
- Showcase,
11
- ShowcaseDocs,
12
- } from "../../dev/components/showcase";
13
1
  import { LinkIcon, SearchIcon } from "lucide-react";
14
- import { useState } from "react";
15
2
 
3
+ import { InputPreset } from "../../components/macro/input-preset";
16
4
  import {
17
5
  Field,
18
6
  FieldContent,
@@ -27,10 +15,20 @@ import {
27
15
  InputGroupInput,
28
16
  InputGroupText,
29
17
  } from "../../components/micro/input-group";
18
+ import { useDevContext } from "../../dev/components/dev-context";
19
+ import {
20
+ DocsCode,
21
+ DocsH3,
22
+ DocsLi,
23
+ DocsP,
24
+ DocsUl,
25
+ ExampleGrid,
26
+ ExampleSection,
27
+ Showcase,
28
+ ShowcaseDocs,
29
+ } from "../../dev/components/showcase";
30
30
  import { type Size } from "../../lib/types";
31
31
 
32
- import { InputPreset } from "../../components/macro/input-preset";
33
-
34
32
  // ──────────────────────────────────────────────────────────
35
33
  // SECTION 1: Macro Content
36
34
  // ──────────────────────────────────────────────────────────
@@ -359,38 +357,76 @@ function InputMicroShowcase({ globalSize }: { globalSize: Size }) {
359
357
  description="So sánh nhanh khi nào dùng Micro và Macro."
360
358
  fullWidth
361
359
  codeString={`<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
362
- {/* Story 1: Macro wins */}
363
- <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
364
- <div className="flex items-start gap-3">
365
- <span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
366
- <svg xmlns="http://www.w3.org/2000/svg" className="size-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
367
- </span>
368
- <div>
369
- <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">Story 1 · Dùng Macro</p>
370
- <h3 className="mt-0.5 text-sm font-semibold text-foreground">Form nhập liệu tiêu chuẩn</h3>
360
+ {/* Story 1: Macro wins */}
361
+ <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
362
+ <div className="flex items-start gap-3">
363
+ <span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
364
+ <svg
365
+ xmlns="http://www.w3.org/2000/svg"
366
+ className="size-4"
367
+ viewBox="0 0 24 24"
368
+ fill="none"
369
+ stroke="currentColor"
370
+ strokeWidth="2"
371
+ strokeLinecap="round"
372
+ strokeLinejoin="round"
373
+ aria-hidden="true"
374
+ >
375
+ <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
376
+ </svg>
377
+ </span>
378
+ <div>
379
+ <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
380
+ Story 1 · Dùng Macro
381
+ </p>
382
+ <h3 className="mt-0.5 text-sm font-semibold text-foreground">
383
+ Form nhập liệu tiêu chuẩn
384
+ </h3>
385
+ </div>
371
386
  </div>
387
+ <p className="text-xs text-muted-foreground leading-relaxed">
388
+ Khi bạn cần một trường nhập liệu đầy đủ nhãn
389
+ (Label), mô tả (Description), báo lỗi (Error) mà
390
+ không muốn phải lắp ráp thủ công bằng{" "}
391
+ <DocsCode>Field</DocsCode>.
392
+ </p>
372
393
  </div>
373
- <p className="text-xs text-muted-foreground leading-relaxed">
374
- Khi bạn cần một trường nhập liệu đầy đủ nhãn (Label), mô tả (Description), báo lỗi (Error) mà không muốn phải lắp ráp thủ công bằng <DocsCode>Field</DocsCode>.
375
- </p>
376
- </div>
377
394
 
378
- {/* Story 2: Micro wins */}
379
- <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
380
- <div className="flex items-start gap-3">
381
- <span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
382
- <svg xmlns="http://www.w3.org/2000/svg" className="size-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg>
383
- </span>
384
- <div>
385
- <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">Story 2 · Dùng Micro</p>
386
- <h3 className="mt-0.5 text-sm font-semibold text-foreground">Input nằm trong Navbar hoặc Toolbar</h3>
395
+ {/* Story 2: Micro wins */}
396
+ <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
397
+ <div className="flex items-start gap-3">
398
+ <span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
399
+ <svg
400
+ xmlns="http://www.w3.org/2000/svg"
401
+ className="size-4"
402
+ viewBox="0 0 24 24"
403
+ fill="none"
404
+ stroke="currentColor"
405
+ strokeWidth="2"
406
+ strokeLinecap="round"
407
+ strokeLinejoin="round"
408
+ aria-hidden="true"
409
+ >
410
+ <path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z" />
411
+ </svg>
412
+ </span>
413
+ <div>
414
+ <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
415
+ Story 2 · Dùng Micro
416
+ </p>
417
+ <h3 className="mt-0.5 text-sm font-semibold text-foreground">
418
+ Input nằm trong Navbar hoặc Toolbar
419
+ </h3>
420
+ </div>
387
421
  </div>
422
+ <p className="text-xs text-muted-foreground leading-relaxed">
423
+ Chỉ cần một thẻ <DocsCode>Input</DocsCode> đơn giản
424
+ để tìm kiếm nhanh, không cần nhãn hay mô tả cầu kỳ,
425
+ hoặc khi phải nhúng nó vào một component phức tạp
426
+ khác.
427
+ </p>
388
428
  </div>
389
- <p className="text-xs text-muted-foreground leading-relaxed">
390
- Chỉ cần một thẻ <DocsCode>Input</DocsCode> đơn giản để tìm kiếm nhanh, không cần nhãn hay mô tả cầu kỳ, hoặc khi phải nhúng nó vào một component phức tạp khác.
391
- </p>
392
- </div>
393
- </div>`}
429
+ </div>`}
394
430
  >
395
431
  <div className="grid grid-cols-1 gap-6 md:grid-cols-2">
396
432
  <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">