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,9 +1,14 @@
1
- import { useDevContext } from "../../dev/components/dev-context";
2
- import { zodResolver } from "@hookform/resolvers/zod";
3
1
  import { useState } from "react";
2
+
3
+ import { zodResolver } from "@hookform/resolvers/zod";
4
4
  import { Controller, useForm } from "react-hook-form";
5
5
  import * as z from "zod";
6
6
 
7
+ import { SwitchPreset } from "../../components/macro/switch-preset";
8
+ import { Button } from "../../components/micro/button";
9
+ import { Field, FieldError, FieldLabel } from "../../components/micro/field";
10
+ import { Switch, SwitchThumb } from "../../components/micro/switch";
11
+ import { useDevContext } from "../../dev/components/dev-context";
7
12
  import {
8
13
  DocsCode,
9
14
  DocsH3,
@@ -15,11 +20,6 @@ import {
15
20
  } from "../../dev/components/showcase";
16
21
  import { type Size } from "../../lib/types";
17
22
 
18
- import { SwitchPreset } from "../../components/macro/switch-preset";
19
- import { Button } from "../../components/micro/button";
20
- import { Field, FieldError, FieldLabel } from "../../components/micro/field";
21
- import { Switch, SwitchThumb } from "../../components/micro/switch";
22
-
23
23
  // ──────────────────────────────────────────────────────────
24
24
  // RHF Form Demo (Macro)
25
25
  // ──────────────────────────────────────────────────────────
@@ -100,11 +100,11 @@ function SwitchMacroShowcase({ globalSize }: { globalSize: Size }) {
100
100
  <ExampleSection
101
101
  label="Tiêu chuẩn"
102
102
  description="Công tắc cơ bản có nhãn và mô tả."
103
- codeString={`<SwitchPreset className="w-full"
103
+ codeString={`<SwitchPreset
104
+ className="w-full"
104
105
  label="Chế độ máy bay"
105
106
  description="Vô hiệu hóa tất cả các kết nối không dây."
106
- />
107
- `}
107
+ />`}
108
108
  >
109
109
  <SwitchPreset
110
110
  className="w-full"
@@ -118,12 +118,11 @@ function SwitchMacroShowcase({ globalSize }: { globalSize: Size }) {
118
118
  label="Trạng thái Lỗi (Error)"
119
119
  description="Báo lỗi khi bật/tắt thất bại."
120
120
  codeString={`<div className="w-full flex flex-col gap-6">
121
- <SwitchPreset
122
- label="Kết nối mạng (Lỗi)"
123
- errorMessage="Mất kết nối mạng. Không thể lưu cài đặt."
124
- />
125
- </div>
126
- `}
121
+ <SwitchPreset
122
+ label="Kết nối mạng (Lỗi)"
123
+ errorMessage="Mất kết nối mạng. Không thể lưu cài đặt."
124
+ />
125
+ </div>`}
127
126
  >
128
127
  <div className="w-full flex flex-col gap-6">
129
128
  <SwitchPreset
@@ -140,19 +139,18 @@ function SwitchMacroShowcase({ globalSize }: { globalSize: Size }) {
140
139
  label="Khóa / Bất hoạt (Disabled)"
141
140
  description="Người dùng không thể tương tác với công tắc."
142
141
  codeString={`<div className="w-full flex flex-col gap-6">
143
- <SwitchPreset
144
- label="Đồng bộ danh bạ"
145
- description="Yêu cầu cấp quyền truy cập vào danh bạ."
146
- disabled
147
- />
148
- <SwitchPreset
149
- label="Dữ liệu di động"
150
- description="Dữ liệu di động đang bị tắt trên toàn cầu."
151
- defaultChecked
152
- disabled
153
- />
154
- </div>
155
- `}
142
+ <SwitchPreset
143
+ label="Đồng bộ danh bạ"
144
+ description="Yêu cầu cấp quyền truy cập vào danh bạ."
145
+ disabled
146
+ />
147
+ <SwitchPreset
148
+ label="Dữ liệu di động"
149
+ description="Dữ liệu di động đang bị tắt trên toàn cầu."
150
+ defaultChecked
151
+ disabled
152
+ />
153
+ </div>`}
156
154
  >
157
155
  <div className="w-full flex flex-col gap-6">
158
156
  <SwitchPreset
@@ -178,12 +176,13 @@ function SwitchMacroShowcase({ globalSize }: { globalSize: Size }) {
178
176
  label={
179
177
  <span className="flex items-center gap-2">
180
178
  Xác thực 2 bước (2FA)
181
- <span className="rounded bg-success/20 px-1.5 py-0.5 text-[10px] font-semibold text-success">KHUYÊN DÙNG</span>
179
+ <span className="rounded bg-success/20 px-1.5 py-0.5 text-[10px] font-semibold text-success">
180
+ KHUYÊN DÙNG
181
+ </span>
182
182
  </span>
183
183
  }
184
184
  description="Thêm một lớp bảo mật bổ sung cho tài khoản của bạn. Chúng tôi sẽ yêu cầu mã xác nhận mỗi khi bạn đăng nhập từ thiết bị mới."
185
- />
186
- `}
185
+ />`}
187
186
  >
188
187
  <SwitchPreset
189
188
  size={globalSize}
@@ -204,15 +203,13 @@ function SwitchMacroShowcase({ globalSize }: { globalSize: Size }) {
204
203
  <ExampleSection
205
204
  label="React State (Controlled Mode)"
206
205
  description="Sử dụng biến state của React để điều khiển."
207
- codeString={`const [checked, setChecked] = useState(false);
208
-
209
- return (
206
+ codeString={`const [checked, setChecked] = useState(false); return (
210
207
  <SwitchPreset
211
208
  checked={checked}
212
209
  onCheckedChange={(c) => setChecked(!!c)}
213
210
  label="Chế độ nhà phát triển"
214
211
  />
215
- );`}
212
+ );`}
216
213
  >
217
214
  <div className="w-full flex flex-col gap-4">
218
215
  <SwitchPreset
@@ -254,12 +251,16 @@ function SwitchMicroShowcase({ globalSize }: { globalSize: Size }) {
254
251
  label="Cơ bản (Primitive)"
255
252
  description="Kết nối thủ công Switch và SwitchThumb."
256
253
  codeString={`<div className="flex items-center gap-4">
257
- <Switch id="sw-micro">
258
- <SwitchThumb />
259
- </Switch>
260
- <label htmlFor="sw-micro" className="text-sm cursor-pointer">Công tắc đơn trần</label>
261
- </div>
262
- `}
254
+ <Switch id="sw-micro">
255
+ <SwitchThumb />
256
+ </Switch>
257
+ <label
258
+ htmlFor="sw-micro"
259
+ className="text-sm cursor-pointer"
260
+ >
261
+ Công tắc đơn trần
262
+ </label>
263
+ </div>`}
263
264
  >
264
265
  <div className="flex items-center gap-4">
265
266
  <Switch size={globalSize} id="sw-micro">
@@ -275,16 +276,35 @@ function SwitchMicroShowcase({ globalSize }: { globalSize: Size }) {
275
276
  label="Layout Đảo ngược (Reverse)"
276
277
  description="Dùng Field với orientation='horizontal' để đẩy Switch sang bên phải."
277
278
  codeString={`<div className="w-full space-y-4">
278
- <Field orientation="horizontal" className="justify-between">
279
- <FieldLabel htmlFor="switch-notif" className="font-normal cursor-pointer">Thông báo đẩy</FieldLabel>
280
- <Switch id="switch-notif" defaultChecked><SwitchThumb /></Switch>
281
- </Field>
282
- <Field orientation="horizontal" className="justify-between">
283
- <FieldLabel htmlFor="switch-dark" className="font-normal cursor-pointer">Chế độ tối (Dark Mode)</FieldLabel>
284
- <Switch id="switch-dark"><SwitchThumb /></Switch>
285
- </Field>
286
- </div>
287
- `}
279
+ <Field
280
+ orientation="horizontal"
281
+ className="justify-between"
282
+ >
283
+ <FieldLabel
284
+ htmlFor="switch-notif"
285
+ className="font-normal cursor-pointer"
286
+ >
287
+ Thông báo đẩy
288
+ </FieldLabel>
289
+ <Switch id="switch-notif" defaultChecked>
290
+ <SwitchThumb />
291
+ </Switch>
292
+ </Field>
293
+ <Field
294
+ orientation="horizontal"
295
+ className="justify-between"
296
+ >
297
+ <FieldLabel
298
+ htmlFor="switch-dark"
299
+ className="font-normal cursor-pointer"
300
+ >
301
+ Chế độ tối (Dark Mode)
302
+ </FieldLabel>
303
+ <Switch id="switch-dark">
304
+ <SwitchThumb />
305
+ </Switch>
306
+ </Field>
307
+ </div>`}
288
308
  >
289
309
  <div className="w-full space-y-4">
290
310
  <Field
@@ -326,16 +346,35 @@ function SwitchMicroShowcase({ globalSize }: { globalSize: Size }) {
326
346
  label="Khóa (Disabled)"
327
347
  description="Các công tắc đảo ngược nhưng bị vô hiệu hoá."
328
348
  codeString={`<div className="w-full space-y-4">
329
- <Field orientation="horizontal" className="justify-between">
330
- <FieldLabel htmlFor="switch-d1" className="font-normal text-muted-foreground">Bluetooth</FieldLabel>
331
- <Switch id="switch-d1" disabled defaultChecked><SwitchThumb /></Switch>
332
- </Field>
333
- <Field orientation="horizontal" className="justify-between">
334
- <FieldLabel htmlFor="switch-d2" className="font-normal text-muted-foreground">Vị trí (GPS)</FieldLabel>
335
- <Switch id="switch-d2" disabled><SwitchThumb /></Switch>
336
- </Field>
337
- </div>
338
- `}
349
+ <Field
350
+ orientation="horizontal"
351
+ className="justify-between"
352
+ >
353
+ <FieldLabel
354
+ htmlFor="switch-d1"
355
+ className="font-normal text-muted-foreground"
356
+ >
357
+ Bluetooth
358
+ </FieldLabel>
359
+ <Switch id="switch-d1" disabled defaultChecked>
360
+ <SwitchThumb />
361
+ </Switch>
362
+ </Field>
363
+ <Field
364
+ orientation="horizontal"
365
+ className="justify-between"
366
+ >
367
+ <FieldLabel
368
+ htmlFor="switch-d2"
369
+ className="font-normal text-muted-foreground"
370
+ >
371
+ Vị trí (GPS)
372
+ </FieldLabel>
373
+ <Switch id="switch-d2" disabled>
374
+ <SwitchThumb />
375
+ </Switch>
376
+ </Field>
377
+ </div>`}
339
378
  >
340
379
  <div className="w-full space-y-4">
341
380
  <Field
@@ -374,14 +413,28 @@ function SwitchMicroShowcase({ globalSize }: { globalSize: Size }) {
374
413
  <ExampleSection
375
414
  label="Trạng thái Lỗi thủ công"
376
415
  description="Tự gắn aria-invalid vào Switch."
377
- codeString={`<Field orientation="horizontal" data-invalid={true} className="justify-between items-start">
378
- <div className="grid gap-1.5">
379
- <FieldLabel htmlFor="switch-err" className="font-normal cursor-pointer">Tự động sao lưu</FieldLabel>
380
- <FieldError>Máy chủ sao lưu đang offline.</FieldError>
381
- </div>
382
- <Switch id="switch-err" aria-invalid={true} defaultChecked><SwitchThumb /></Switch>
383
- </Field>
384
- `}
416
+ codeString={`<Field
417
+ orientation="horizontal"
418
+ data-invalid={true}
419
+ className="justify-between items-start"
420
+ >
421
+ <div className="grid gap-1.5">
422
+ <FieldLabel
423
+ htmlFor="switch-err"
424
+ className="font-normal cursor-pointer"
425
+ >
426
+ Tự động sao lưu
427
+ </FieldLabel>
428
+ <FieldError>Máy chủ sao lưu đang offline.</FieldError>
429
+ </div>
430
+ <Switch
431
+ id="switch-err"
432
+ aria-invalid={true}
433
+ defaultChecked
434
+ >
435
+ <SwitchThumb />
436
+ </Switch>
437
+ </Field>`}
385
438
  >
386
439
  <Field
387
440
  orientation="horizontal"
@@ -415,52 +468,96 @@ function SwitchMicroShowcase({ globalSize }: { globalSize: Size }) {
415
468
  description="So sánh nhanh khi nào dùng Micro và Macro."
416
469
  fullWidth
417
470
  codeString={`<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
418
- {/* Story 1: Macro wins */}
419
- <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
420
- <div className="flex items-start gap-3">
421
- <span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
422
- <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>
423
- </span>
424
- <div>
425
- <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">Story 1 · Dùng Macro</p>
426
- <h3 className="mt-0.5 text-sm font-semibold text-foreground">Form thông thường</h3>
471
+ {/* Story 1: Macro wins */}
472
+ <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
473
+ <div className="flex items-start gap-3">
474
+ <span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
475
+ <svg
476
+ xmlns="http://www.w3.org/2000/svg"
477
+ className="size-4"
478
+ viewBox="0 0 24 24"
479
+ fill="none"
480
+ stroke="currentColor"
481
+ strokeWidth="2"
482
+ strokeLinecap="round"
483
+ strokeLinejoin="round"
484
+ aria-hidden="true"
485
+ >
486
+ <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
487
+ </svg>
488
+ </span>
489
+ <div>
490
+ <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
491
+ Story 1 · Dùng Macro
492
+ </p>
493
+ <h3 className="mt-0.5 text-sm font-semibold text-foreground">
494
+ Form thông thường
495
+ </h3>
496
+ </div>
427
497
  </div>
428
- </div>
429
- <p className="text-xs text-muted-foreground leading-relaxed">
430
- Bạn cần một Switch giống như Checkbox (công tắc ở bên trái, chữ bên phải). Dùng Preset cho nhanh gọn.
431
- </p>
432
- <div className="rounded-lg bg-muted/50 p-3">
433
- <SwitchPreset size="sm" label="Đồng ý điều khoản" description="Bật để tiếp tục." />
434
- </div>
435
- </div>
436
-
437
- {/* Story 2: Micro wins */}
438
- <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
439
- <div className="flex items-start gap-3">
440
- <span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
441
- <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>
442
- </span>
443
- <div>
444
- <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">Story 2 · Dùng Micro</p>
445
- <h3 className="mt-0.5 text-sm font-semibold text-foreground">Menu Cài đặt (iOS Style)</h3>
498
+ <p className="text-xs text-muted-foreground leading-relaxed">
499
+ Bạn cần một Switch giống như Checkbox (công tắc ở
500
+ bên trái, chữ bên phải). Dùng Preset cho nhanh gọn.
501
+ </p>
502
+ <div className="rounded-lg bg-muted/50 p-3">
503
+ <SwitchPreset
504
+ size="sm"
505
+ label="Đồng ý điều khoản"
506
+ description="Bật để tiếp tục."
507
+ />
446
508
  </div>
447
509
  </div>
448
- <p className="text-xs text-muted-foreground leading-relaxed">
449
- Giống như iPhone, chữ nằm bên trái và Công tắc nằm tít bên phải của dòng. Macro không hỗ trợ layout này nên bạn dùng cấu trúc Field + Micro.
450
- </p>
451
- <div className="rounded-lg bg-muted/50 p-3 border border-border divide-y">
452
- <div className="p-2 flex justify-between items-center">
453
- <span className="text-sm font-medium">Wi-Fi</span>
454
- <Switch size="sm" defaultChecked><SwitchThumb/></Switch>
510
+
511
+ {/* Story 2: Micro wins */}
512
+ <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
513
+ <div className="flex items-start gap-3">
514
+ <span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
515
+ <svg
516
+ xmlns="http://www.w3.org/2000/svg"
517
+ className="size-4"
518
+ viewBox="0 0 24 24"
519
+ fill="none"
520
+ stroke="currentColor"
521
+ strokeWidth="2"
522
+ strokeLinecap="round"
523
+ strokeLinejoin="round"
524
+ aria-hidden="true"
525
+ >
526
+ <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" />
527
+ </svg>
528
+ </span>
529
+ <div>
530
+ <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
531
+ Story 2 · Dùng Micro
532
+ </p>
533
+ <h3 className="mt-0.5 text-sm font-semibold text-foreground">
534
+ Menu Cài đặt (iOS Style)
535
+ </h3>
536
+ </div>
455
537
  </div>
456
- <div className="p-2 flex justify-between items-center">
457
- <span className="text-sm font-medium">Bluetooth</span>
458
- <Switch size="sm"><SwitchThumb/></Switch>
538
+ <p className="text-xs text-muted-foreground leading-relaxed">
539
+ Giống như iPhone, chữ nằm bên trái và Công tắc nằm
540
+ tít bên phải của dòng. Macro không hỗ trợ layout này
541
+ nên bạn dùng cấu trúc Field + Micro.
542
+ </p>
543
+ <div className="rounded-lg bg-muted/50 p-3 border border-border divide-y">
544
+ <div className="p-2 flex justify-between items-center">
545
+ <span className="text-sm font-medium">Wi-Fi</span>
546
+ <Switch size="sm" defaultChecked>
547
+ <SwitchThumb />
548
+ </Switch>
549
+ </div>
550
+ <div className="p-2 flex justify-between items-center">
551
+ <span className="text-sm font-medium">
552
+ Bluetooth
553
+ </span>
554
+ <Switch size="sm">
555
+ <SwitchThumb />
556
+ </Switch>
557
+ </div>
459
558
  </div>
460
559
  </div>
461
- </div>
462
- </div>
463
- `}
560
+ </div>`}
464
561
  >
465
562
  <div className="grid grid-cols-1 gap-6 md:grid-cols-2">
466
563
  {/* Story 1: Macro wins */}
@@ -1,3 +1,5 @@
1
+ import { useState } from "react";
2
+
1
3
  import {
2
4
  Table,
3
5
  TableBody,
@@ -15,7 +17,6 @@ import {
15
17
  Showcase,
16
18
  ShowcaseDocs,
17
19
  } from "../../dev/components/showcase";
18
- import { useState } from "react";
19
20
 
20
21
  type SortDirection = "asc" | "desc" | "none";
21
22
 
@@ -45,37 +46,48 @@ function TableMicroShowcase() {
45
46
  label="Default"
46
47
  description="Bảng tiêu chuẩn có chú thích."
47
48
  codeString={`<Table>
48
- <TableCaption>A list of your recent invoices.</TableCaption>
49
- <TableHeader>
50
- <TableRow>
51
- <TableHead className="w-[100px]">Invoice</TableHead>
52
- <TableHead>Status</TableHead>
53
- <TableHead>Method</TableHead>
54
- <TableHead className="text-right">Amount</TableHead>
55
- </TableRow>
56
- </TableHeader>
57
- <TableBody>
58
- <TableRow>
59
- <TableCell className="font-medium">INV001</TableCell>
60
- <TableCell>Paid</TableCell>
61
- <TableCell>Credit Card</TableCell>
62
- <TableCell className="text-right">\$250.00</TableCell>
63
- </TableRow>
64
- <TableRow>
65
- <TableCell className="font-medium">INV002</TableCell>
66
- <TableCell>Pending</TableCell>
67
- <TableCell>PayPal</TableCell>
68
- <TableCell className="text-right">\$150.00</TableCell>
69
- </TableRow>
70
- </TableBody>
71
- <TableFooter>
72
- <TableRow>
73
- <TableCell colSpan={3}>Total</TableCell>
74
- <TableCell className="text-right">\$2,500.00</TableCell>
75
- </TableRow>
76
- </TableFooter>
77
- </Table>
78
- `}
49
+ <TableCaption>
50
+ A list of your recent invoices.
51
+ </TableCaption>
52
+ <TableHeader>
53
+ <TableRow>
54
+ <TableHead className="w-[100px]">Invoice</TableHead>
55
+ <TableHead>Status</TableHead>
56
+ <TableHead>Method</TableHead>
57
+ <TableHead className="text-right">Amount</TableHead>
58
+ </TableRow>
59
+ </TableHeader>
60
+ <TableBody>
61
+ <TableRow>
62
+ <TableCell className="font-medium">
63
+ INV001
64
+ </TableCell>
65
+ <TableCell>Paid</TableCell>
66
+ <TableCell>Credit Card</TableCell>
67
+ <TableCell className="text-right">
68
+ $250.00
69
+ </TableCell>
70
+ </TableRow>
71
+ <TableRow>
72
+ <TableCell className="font-medium">
73
+ INV002
74
+ </TableCell>
75
+ <TableCell>Pending</TableCell>
76
+ <TableCell>PayPal</TableCell>
77
+ <TableCell className="text-right">
78
+ $150.00
79
+ </TableCell>
80
+ </TableRow>
81
+ </TableBody>
82
+ <TableFooter>
83
+ <TableRow>
84
+ <TableCell colSpan={3}>Total</TableCell>
85
+ <TableCell className="text-right">
86
+ $2,500.00
87
+ </TableCell>
88
+ </TableRow>
89
+ </TableFooter>
90
+ </Table>`}
79
91
  >
80
92
  <Table>
81
93
  <TableCaption>A list of your recent invoices.</TableCaption>