gladvn 0.2.36 → 0.2.37

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 (134) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/scripts/strip-comments.ts +79 -0
  4. package/src/blocks/auth-form.tsx +34 -30
  5. package/src/blocks/auth-recovery.tsx +9 -13
  6. package/src/blocks/auth-split.tsx +46 -36
  7. package/src/blocks/settings.tsx +84 -117
  8. package/src/components/macro/alert-preset.tsx +3 -1
  9. package/src/components/macro/carousel-preset.tsx +0 -1
  10. package/src/components/macro/checkbox-preset.test.tsx +2 -2
  11. package/src/components/macro/checkbox-preset.tsx +1 -2
  12. package/src/components/macro/command-preset.tsx +1 -1
  13. package/src/components/macro/date-picker.tsx +5 -18
  14. package/src/components/macro/dialog-preset.tsx +5 -3
  15. package/src/components/macro/input-preset.tsx +0 -1
  16. package/src/components/macro/select-preset.tsx +1 -1
  17. package/src/components/macro/switch-preset.test.tsx +1 -1
  18. package/src/components/micro/accordion.test.tsx +6 -12
  19. package/src/components/micro/alert-dialog.tsx +0 -2
  20. package/src/components/micro/alert.test.tsx +5 -8
  21. package/src/components/micro/alert.tsx +0 -2
  22. package/src/components/micro/badge.test.tsx +5 -7
  23. package/src/components/micro/badge.tsx +1 -3
  24. package/src/components/micro/button.test.tsx +19 -26
  25. package/src/components/micro/button.tsx +3 -11
  26. package/src/components/micro/calendar.tsx +12 -13
  27. package/src/components/micro/card.test.tsx +3 -5
  28. package/src/components/micro/carousel.tsx +0 -1
  29. package/src/components/micro/chart.tsx +3 -2
  30. package/src/components/micro/checkbox.test.tsx +9 -18
  31. package/src/components/micro/combobox.tsx +1 -3
  32. package/src/components/micro/command.tsx +23 -11
  33. package/src/components/micro/context-menu.tsx +0 -2
  34. package/src/components/micro/dialog.test.tsx +6 -14
  35. package/src/components/micro/dialog.tsx +0 -2
  36. package/src/components/micro/drawer.tsx +0 -3
  37. package/src/components/micro/dropdown-menu.test.tsx +8 -14
  38. package/src/components/micro/dropdown-menu.tsx +0 -2
  39. package/src/components/micro/field.tsx +3 -3
  40. package/src/components/micro/hover-card.tsx +0 -2
  41. package/src/components/micro/input-group.tsx +9 -42
  42. package/src/components/micro/input.test.tsx +15 -24
  43. package/src/components/micro/navigation-menu.tsx +0 -2
  44. package/src/components/micro/popover.test.tsx +5 -9
  45. package/src/components/micro/progress.tsx +5 -1
  46. package/src/components/micro/select.test.tsx +5 -18
  47. package/src/components/micro/select.tsx +3 -5
  48. package/src/components/micro/separator.tsx +1 -1
  49. package/src/components/micro/sheet.test.tsx +6 -14
  50. package/src/components/micro/sheet.tsx +0 -2
  51. package/src/components/micro/sidebar.tsx +5 -6
  52. package/src/components/micro/sonner.tsx +0 -1
  53. package/src/components/micro/switch.test.tsx +9 -18
  54. package/src/components/micro/switch.tsx +1 -1
  55. package/src/components/micro/tabs.test.tsx +5 -11
  56. package/src/components/micro/theme-provider.tsx +0 -12
  57. package/src/components/micro/toggle-group.tsx +1 -12
  58. package/src/components/micro/tooltip.test.tsx +7 -12
  59. package/src/dev/App.tsx +6 -6
  60. package/src/dev/components/BlockViewer.tsx +15 -4
  61. package/src/dev/components/Container.tsx +20 -0
  62. package/src/dev/components/GladvnLogo.tsx +3 -9
  63. package/src/dev/components/code-highlighter.tsx +5 -3
  64. package/src/dev/components/showcase.tsx +116 -168
  65. package/src/dev/sections/buttons.tsx +4 -9
  66. package/src/dev/sections/display.tsx +68 -72
  67. package/src/dev/sections/feedback.tsx +304 -314
  68. package/src/dev/sections/forms.tsx +10 -14
  69. package/src/dev/sections/interactive.tsx +32 -32
  70. package/src/dev/sections/overview.tsx +2 -10
  71. package/src/dev/showcase/accordion.tsx +512 -554
  72. package/src/dev/showcase/alert-dialog.tsx +525 -565
  73. package/src/dev/showcase/alert.tsx +352 -402
  74. package/src/dev/showcase/aspect-ratio.tsx +167 -193
  75. package/src/dev/showcase/avatar.tsx +231 -269
  76. package/src/dev/showcase/badge.tsx +92 -140
  77. package/src/dev/showcase/breadcrumb.tsx +113 -135
  78. package/src/dev/showcase/button.tsx +140 -173
  79. package/src/dev/showcase/calendar.tsx +187 -237
  80. package/src/dev/showcase/card.tsx +229 -261
  81. package/src/dev/showcase/carousel.tsx +288 -315
  82. package/src/dev/showcase/chart.tsx +44 -50
  83. package/src/dev/showcase/checkbox.tsx +286 -330
  84. package/src/dev/showcase/collapsible.tsx +143 -160
  85. package/src/dev/showcase/combobox.tsx +327 -369
  86. package/src/dev/showcase/command.tsx +106 -120
  87. package/src/dev/showcase/context-menu.tsx +93 -107
  88. package/src/dev/showcase/dialog.tsx +585 -630
  89. package/src/dev/showcase/drawer.tsx +176 -196
  90. package/src/dev/showcase/dropdown-menu.tsx +183 -201
  91. package/src/dev/showcase/empty.tsx +232 -274
  92. package/src/dev/showcase/hover-card.tsx +153 -180
  93. package/src/dev/showcase/input-group.tsx +221 -253
  94. package/src/dev/showcase/input-otp.tsx +204 -250
  95. package/src/dev/showcase/input.tsx +246 -325
  96. package/src/dev/showcase/item.tsx +134 -152
  97. package/src/dev/showcase/kbd.tsx +149 -172
  98. package/src/dev/showcase/label.tsx +50 -68
  99. package/src/dev/showcase/menubar.tsx +194 -213
  100. package/src/dev/showcase/navigation-menu.tsx +119 -133
  101. package/src/dev/showcase/overview-components/ArchitectureSection.tsx +126 -0
  102. package/src/dev/showcase/overview-components/CodeBlock.tsx +50 -0
  103. package/src/dev/showcase/overview-components/ColorPaletteSection.tsx +44 -0
  104. package/src/dev/showcase/overview-components/DashboardPreview.tsx +159 -0
  105. package/src/dev/showcase/overview-components/FeatureGridSection.tsx +535 -0
  106. package/src/dev/showcase/overview-components/FooterCTA.tsx +137 -0
  107. package/src/dev/showcase/overview-components/HeroSection.tsx +65 -0
  108. package/src/dev/showcase/overview-components/PrinciplesSection.tsx +128 -0
  109. package/src/dev/showcase/overview.tsx +21 -1163
  110. package/src/dev/showcase/pagination.tsx +144 -190
  111. package/src/dev/showcase/popover.tsx +181 -196
  112. package/src/dev/showcase/progress.tsx +141 -189
  113. package/src/dev/showcase/radio-group.tsx +272 -332
  114. package/src/dev/showcase/resizable.tsx +119 -141
  115. package/src/dev/showcase/scroll-area.tsx +21 -36
  116. package/src/dev/showcase/select.tsx +262 -322
  117. package/src/dev/showcase/separator.tsx +75 -73
  118. package/src/dev/showcase/sheet.tsx +333 -361
  119. package/src/dev/showcase/sidebar.tsx +53 -59
  120. package/src/dev/showcase/skeleton.tsx +93 -112
  121. package/src/dev/showcase/slider.tsx +244 -296
  122. package/src/dev/showcase/sonner.tsx +251 -258
  123. package/src/dev/showcase/spinner.tsx +46 -67
  124. package/src/dev/showcase/switch.tsx +298 -362
  125. package/src/dev/showcase/table.tsx +76 -80
  126. package/src/dev/showcase/tabs.tsx +302 -355
  127. package/src/dev/showcase/textarea.tsx +240 -293
  128. package/src/dev/showcase/toast.tsx +48 -54
  129. package/src/dev/showcase/toggle-group.tsx +104 -129
  130. package/src/dev/showcase/toggle.tsx +82 -102
  131. package/src/dev/showcase/tooltip.tsx +173 -192
  132. package/src/dev/showcase/why.tsx +6 -12
  133. package/src/hooks/use-mobile.test.ts +3 -2
  134. package/src/lib/utils.test.ts +5 -4
@@ -8,7 +8,7 @@ import { useDevContext } from "../../dev/components/dev-context";
8
8
  import {
9
9
  DocsP,
10
10
  ExampleGrid,
11
- ExampleSection,
11
+ ShowcaseExample,
12
12
  Showcase,
13
13
  ShowcaseDocs
14
14
  } from "../../dev/components/showcase";
@@ -26,37 +26,30 @@ function CalendarMicroShowcase({ globalSize }: { globalSize: Size }) {
26
26
  to: new Date(2026, 5, 25) });
27
27
 
28
28
  return (
29
- <div className="space-y-10 mt-6">
29
+ <div className="space-y-10">
30
30
  <ExampleGrid>
31
- {/* ── Single Date ── */}
32
- <ExampleSection
33
- label="Single Date"
34
- description="Chọn một ngày duy nhất."
35
- codeString={`const [date, setDate] = React.useState<Date | undefined>(new Date())
31
+ <ShowcaseExample title="Single Date" description="Chọn một ngày duy nhất." code={`const [date, setDate] = React.useState<Date | undefined>(new Date())
36
32
 
37
33
  <Calendar
38
34
  mode="single"
39
35
  selected={date}
40
36
  onSelect={setDate}
41
37
  className="rounded-xl border border-border shadow"
42
- />`}
43
- >
44
- <div className="border border-border rounded-xl inline-block bg-card p-3">
45
- <Calendar
46
- size={globalSize}
47
- mode="single"
48
- selected={singleDate}
49
- onSelect={setSingleDate}
50
- className="w-full"
51
- />
52
- </div>
53
- </ExampleSection>
38
+ />`} preview={
39
+ <>
40
+ <div className="border border-border rounded-xl inline-block bg-card p-3">
41
+ <Calendar
42
+ size={globalSize}
43
+ mode="single"
44
+ selected={singleDate}
45
+ onSelect={setSingleDate}
46
+ className="w-full"
47
+ />
48
+ </div>
49
+ </>
50
+ } />
54
51
 
55
- {/* ── Date Range ── */}
56
- <ExampleSection
57
- label="Date Range"
58
- description="Chọn một phạm vi ngày."
59
- codeString={`const [date, setDate] = React.useState<DateRange | undefined>({
52
+ <ShowcaseExample title="Date Range" description="Chọn một phạm vi ngày." code={`const [date, setDate] = React.useState<DateRange | undefined>({
60
53
  from: new Date(2026, 5, 15),
61
54
  to: new Date(2026, 5, 25) })
62
55
 
@@ -65,117 +58,103 @@ function CalendarMicroShowcase({ globalSize }: { globalSize: Size }) {
65
58
  selected={date}
66
59
  onSelect={setDate}
67
60
  className="rounded-xl border border-border shadow"
68
- />`}
69
- >
70
- <div className="border border-border rounded-xl inline-block bg-card p-3">
71
- <Calendar
72
- size={globalSize}
73
- mode="range"
74
- selected={dateRange}
75
- onSelect={setDateRange}
76
- className="w-full"
77
- />
78
- </div>
79
- </ExampleSection>
61
+ />`} preview={
62
+ <>
63
+ <div className="border border-border rounded-xl inline-block bg-card p-3">
64
+ <Calendar
65
+ size={globalSize}
66
+ mode="range"
67
+ selected={dateRange}
68
+ onSelect={setDateRange}
69
+ className="w-full"
70
+ />
71
+ </div>
72
+ </>
73
+ } />
80
74
  </ExampleGrid>
81
75
 
82
76
  <ExampleGrid>
83
- {/* ── Multiple Dates ── */}
84
- <ExampleSection
85
- label="Multiple Dates"
86
- description="Chọn nhiều ngày rời rạc (mode='multiple')."
87
- codeString={`const [dates, setDates] = React.useState<Date[] | undefined>([])
77
+ <ShowcaseExample title="Multiple Dates" description="Chọn nhiều ngày rời rạc (mode='multiple')." code={`const [dates, setDates] = React.useState<Date[] | undefined>([])
88
78
 
89
79
  <Calendar
90
80
  mode="multiple"
91
81
  selected={dates}
92
82
  onSelect={setDates}
93
83
  className="rounded-xl border border-border shadow"
94
- />`}
95
- >
96
- <div className="border border-border rounded-xl inline-block bg-card p-3">
97
- <Calendar
98
- size={globalSize}
99
- mode="multiple"
100
- selected={multipleDates}
101
- onSelect={setMultipleDates}
102
- className="w-full"
103
- />
104
- </div>
105
- </ExampleSection>
84
+ />`} preview={
85
+ <>
86
+ <div className="border border-border rounded-xl inline-block bg-card p-3">
87
+ <Calendar
88
+ size={globalSize}
89
+ mode="multiple"
90
+ selected={multipleDates}
91
+ onSelect={setMultipleDates}
92
+ className="w-full"
93
+ />
94
+ </div>
95
+ </>
96
+ } />
106
97
 
107
- {/* ── Disabled Dates ── */}
108
- <ExampleSection
109
- label="Disabled Dates"
110
- description="Vô hiệu hóa chọn ngày (VD: ngày trong quá khứ)."
111
- codeString={`<Calendar
98
+ <ShowcaseExample title="Disabled Dates" description="Vô hiệu hóa chọn ngày (VD: ngày trong quá khứ)." code={`<Calendar
112
99
  mode="single"
113
100
  disabled={(date) => date < new Date()}
114
101
  className="rounded-xl border border-border shadow"
115
- />`}
116
- >
117
- <div className="border border-border rounded-xl inline-block bg-card p-3">
118
- <Calendar
119
- size={globalSize}
120
- mode="single"
121
- disabled={(date) => date < new Date(2026, 5, 15)}
122
- defaultMonth={new Date(2026, 5, 15)}
123
- className="w-full"
124
- />
125
- </div>
126
- </ExampleSection>
102
+ />`} preview={
103
+ <>
104
+ <div className="border border-border rounded-xl inline-block bg-card p-3">
105
+ <Calendar
106
+ size={globalSize}
107
+ mode="single"
108
+ disabled={(date) => date < new Date(2026, 5, 15)}
109
+ defaultMonth={new Date(2026, 5, 15)}
110
+ className="w-full"
111
+ />
112
+ </div>
113
+ </>
114
+ } />
127
115
  </ExampleGrid>
128
116
 
129
- {/* ── Two Months ── */}
130
- <ExampleSection
131
- label="Two Months"
132
- description="Hiển thị 2 tháng liền kề (numberOfMonths=2) thường dùng cho Date Range."
133
- codeString={`<Calendar
117
+ <ShowcaseExample title="Two Months" description="Hiển thị 2 tháng liền kề (numberOfMonths=2) thường dùng cho Date Range." code={`<Calendar
134
118
  mode="range"
135
119
  selected={date}
136
120
  onSelect={setDate}
137
121
  numberOfMonths={2}
138
122
  className="rounded-xl border border-border shadow"
139
- />`}
140
- >
141
- <div className="border border-border rounded-xl inline-block bg-card p-3 overflow-x-auto max-w-full">
142
- <Calendar
143
- size={globalSize}
144
- mode="range"
145
- selected={dateRange}
146
- onSelect={setDateRange}
147
- numberOfMonths={2}
148
- className="w-full"
149
- />
150
- </div>
151
- </ExampleSection>
123
+ />`} preview={
124
+ <>
125
+ <div className="border border-border rounded-xl inline-block bg-card p-3 overflow-x-auto max-w-full">
126
+ <Calendar
127
+ size={globalSize}
128
+ mode="range"
129
+ selected={dateRange}
130
+ onSelect={setDateRange}
131
+ numberOfMonths={2}
132
+ className="w-full"
133
+ />
134
+ </div>
135
+ </>
136
+ } />
152
137
 
153
- {/* ── With Navigation Dropdown ── */}
154
- <ExampleSection
155
- label="With Navigation"
156
- description="Lịch với điều hướng thả xuống cho tháng/năm."
157
- codeString={`<Calendar
138
+ <ShowcaseExample title="With Navigation" description="Lịch với điều hướng thả xuống cho tháng/năm." code={`<Calendar
158
139
  mode="single"
159
140
  captionLayout="dropdown"
160
141
  className="rounded-xl border border-border shadow"
161
- />`}
162
- >
163
- <div className="border border-border rounded-xl inline-block bg-card p-3">
164
- <Calendar
165
- size={globalSize}
166
- mode="single"
167
- captionLayout="dropdown"
168
- className="w-full"
169
- />
170
- </div>
171
- </ExampleSection>
142
+ />`} preview={
143
+ <>
144
+ <div className="border border-border rounded-xl inline-block bg-card p-3">
145
+ <Calendar
146
+ size={globalSize}
147
+ mode="single"
148
+ captionLayout="dropdown"
149
+ className="w-full"
150
+ />
151
+ </div>
152
+ </>
153
+ } />
172
154
  </div>
173
155
  );
174
156
  }
175
157
 
176
- // ──────────────────────────────────────────────────────────
177
- // SECTION 3: Macro Showcase
178
- // ──────────────────────────────────────────────────────────
179
158
  function CalendarMacroShowcase({ globalSize }: { globalSize: Size }) {
180
159
  const [singleDate, setSingleDate] = useState<Date | undefined>(undefined);
181
160
  const [rangeDate, setRangeDate] = useState<DateRange | undefined>(undefined);
@@ -187,81 +166,69 @@ function CalendarMacroShowcase({ globalSize }: { globalSize: Size }) {
187
166
  const [lgDate, setLgDate] = useState<Date | undefined>(undefined);
188
167
 
189
168
  return (
190
- <div className="space-y-10 mt-6">
191
- {/* ── Single Date ── */}
169
+ <div className="space-y-10">
192
170
  <ExampleGrid>
193
- <ExampleSection
194
- label="Single Date"
195
- description="DatePicker cơ bản chọn một ngày."
196
- codeString={`const [date, setDate] = React.useState<Date | undefined>()
171
+ <ShowcaseExample title="Single Date" description="DatePicker cơ bản chọn một ngày." code={`const [date, setDate] = React.useState<Date | undefined>()
197
172
 
198
173
  <DatePicker className="w-64"
199
174
  label="Date"
200
175
  value={date}
201
176
  onValueChange={setDate}
202
- />`}
203
- >
204
- <DatePicker
205
- className="w-64"
206
- size={globalSize}
207
- label="Date"
208
- value={singleDate}
209
- onValueChange={setSingleDate}
210
- />
211
- </ExampleSection>
177
+ />`} preview={
178
+ <>
179
+ <DatePicker
180
+ className="w-64"
181
+ size={globalSize}
182
+ label="Date"
183
+ value={singleDate}
184
+ onValueChange={setSingleDate}
185
+ />
186
+ </>
187
+ } />
212
188
 
213
- {/* ── Date Range ── */}
214
- <ExampleSection
215
- label="Date Range"
216
- description="DatePicker chọn khoảng thời gian (range mode)."
217
- codeString={`const [range, setRange] = React.useState<DateRange | undefined>()
189
+ <ShowcaseExample title="Date Range" description="DatePicker chọn khoảng thời gian (range mode)." code={`const [range, setRange] = React.useState<DateRange | undefined>()
218
190
 
219
191
  <DatePicker className="w-64"
220
192
  mode="range"
221
193
  label="Date Range"
222
194
  rangeValue={range}
223
195
  onRangeChange={setRange}
224
- />`}
225
- >
226
- <DatePicker
227
- className="w-64"
228
- mode="range"
229
- size={globalSize}
230
- label="Date Range"
231
- rangeValue={rangeDate}
232
- onRangeChange={setRangeDate}
233
- />
234
- </ExampleSection>
196
+ />`} preview={
197
+ <>
198
+ <DatePicker
199
+ className="w-64"
200
+ mode="range"
201
+ size={globalSize}
202
+ label="Date Range"
203
+ rangeValue={rangeDate}
204
+ onRangeChange={setRangeDate}
205
+ />
206
+ </>
207
+ } />
235
208
  </ExampleGrid>
236
209
 
237
- {/* ── Dropdown Modes ── */}
238
210
  <ExampleGrid>
239
- <ExampleSection
240
- label="Single Dropdown"
241
- description="Sổ danh sách để chọn tháng và năm nhanh chóng thay vì click qua lại liên tục."
242
- codeString={`<DatePicker
211
+ <ShowcaseExample title="Single Dropdown" description="Sổ danh sách để chọn tháng và năm nhanh chóng thay vì click qua lại liên tục." code={`<DatePicker
243
212
  className="w-64"
244
213
  label="Birthday"
245
214
  captionLayout="dropdown"
246
215
  startMonth={new Date(1900, 0)}
247
216
  endMonth={new Date()}
248
- />`}
249
- >
250
- <DatePicker
251
- className="w-64"
252
- size={globalSize}
253
- label="Birthday"
254
- captionLayout="dropdown"
255
- startMonth={new Date(1900, 0)}
256
- endMonth={new Date()}
257
- value={singleDate}
258
- onValueChange={setSingleDate}
259
- />
260
- </ExampleSection>
261
- <ExampleSection
262
- label="Range Dropdown"
263
- description="Sổ danh sách cho cả 2 tháng khi chọn khoảng thời gian (cần numberOfMonths={2})."
264
- codeString={`<DatePicker
217
+ />`} preview={
218
+ <>
219
+ <DatePicker
220
+ className="w-64"
221
+ size={globalSize}
222
+ label="Birthday"
223
+ captionLayout="dropdown"
224
+ startMonth={new Date(1900, 0)}
225
+ endMonth={new Date()}
226
+ value={singleDate}
227
+ onValueChange={setSingleDate}
228
+ />
229
+ </>
230
+ } />
231
+ <ShowcaseExample title="Range Dropdown" description="Sổ danh sách cho cả 2 tháng khi chọn khoảng thời gian (cần numberOfMonths={2})." code={`<DatePicker
265
232
  className="w-fit"
266
233
  mode="range"
267
234
  label="Date Range with Dropdowns"
@@ -269,94 +236,83 @@ function CalendarMacroShowcase({ globalSize }: { globalSize: Size }) {
269
236
  numberOfMonths={2}
270
237
  startMonth={new Date(2020, 0)}
271
238
  endMonth={new Date(2030, 11)}
272
- />`}
273
- >
274
- <DatePicker
275
- className="w-fit"
276
- mode="range"
277
- size={globalSize}
278
- label="Date Range with Dropdowns"
279
- captionLayout="dropdown"
280
- numberOfMonths={2}
281
- startMonth={new Date(2020, 0)}
282
- endMonth={new Date(2030, 11)}
283
- rangeValue={rangeDate}
284
- onRangeChange={setRangeDate}
285
- />
286
- </ExampleSection>
239
+ />`} preview={
240
+ <>
241
+ <DatePicker
242
+ className="w-fit"
243
+ mode="range"
244
+ size={globalSize}
245
+ label="Date Range with Dropdowns"
246
+ captionLayout="dropdown"
247
+ numberOfMonths={2}
248
+ startMonth={new Date(2020, 0)}
249
+ endMonth={new Date(2030, 11)}
250
+ rangeValue={rangeDate}
251
+ onRangeChange={setRangeDate}
252
+ />
253
+ </>
254
+ } />
287
255
  </ExampleGrid>
288
256
 
289
- {/* ── With Description ── */}
290
- <ExampleSection
291
- label="With Label & Description"
292
- description="Hiển thị label và mô tả bên dưới trigger."
293
- codeString={`<DatePicker
257
+ <ShowcaseExample title="With Label & Description" description="Hiển thị label và mô tả bên dưới trigger." code={`<DatePicker
294
258
  className="w-64"
295
259
  label="Start Date"
296
260
  description="Chọn ngày bắt đầu dự án."
297
- placeholder="Pick a date"
298
- />`}
299
- >
300
- <DatePicker
301
- className="w-64"
302
- size={globalSize}
303
- label="Start Date"
304
- description="Chọn ngày bắt đầu dự án."
305
- placeholder="Pick a date"
306
- value={descDate}
307
- onValueChange={setDescDate}
308
- />
309
- </ExampleSection>
261
+ placeholder="Chọn ngày"
262
+ />`} preview={
263
+ <>
264
+ <DatePicker
265
+ className="w-64"
266
+ size={globalSize}
267
+ label="Start Date"
268
+ description="Chọn ngày bắt đầu dự án."
269
+ placeholder="Chọn ngày"
270
+ value={descDate}
271
+ onValueChange={setDescDate}
272
+ />
273
+ </>
274
+ } />
310
275
 
311
- {/* ── Error / Validation ── */}
312
- <ExampleSection
313
- label="Error State"
314
- description="Trigger hiển thị viền đỏ khi có errorMessage."
315
- codeString={`<DatePicker
276
+ <ShowcaseExample title="Error State" description="Trigger hiển thị viền đỏ khi có errorMessage." code={`<DatePicker
316
277
  className="w-64"
317
278
  label="Due Date"
318
279
  errorMessage="Due date is required."
319
- />`}
320
- >
321
- <DatePicker
322
- className="w-64"
323
- size={globalSize}
324
- label="Due Date"
325
- errorMessage="Due date is required."
326
- value={errDate}
327
- onValueChange={setErrDate}
328
- />
329
- </ExampleSection>
280
+ />`} preview={
281
+ <>
282
+ <DatePicker
283
+ className="w-64"
284
+ size={globalSize}
285
+ label="Due Date"
286
+ errorMessage="Due date is required."
287
+ value={errDate}
288
+ onValueChange={setErrDate}
289
+ />
290
+ </>
291
+ } />
330
292
 
331
- {/* ── Disabled ── */}
332
- <ExampleSection
333
- label="Disabled"
334
- description="Trigger bị vô hiệu hoá, người dùng không thể mở calendar."
335
- codeString={`<DatePicker className="w-64" label="Date" disabled />`}
336
- >
337
- <DatePicker
338
- className="w-64"
339
- size={globalSize}
340
- label="Date"
341
- disabled
342
- value={disDate}
343
- onValueChange={setDisDate}
344
- />
345
- </ExampleSection>
293
+ <ShowcaseExample title="Disabled" description="Trigger bị vô hiệu hoá, người dùng không thể mở calendar." code={`<DatePicker className="w-64" label="Date" disabled />`} preview={
294
+ <>
295
+ <DatePicker
296
+ className="w-64"
297
+ size={globalSize}
298
+ label="Date"
299
+ disabled
300
+ value={disDate}
301
+ onValueChange={setDisDate}
302
+ />
303
+ </>
304
+ } />
346
305
  </div>
347
306
  );
348
307
  }
349
308
 
350
- // ──────────────────────────────────────────────────────────
351
- // SECTION 4: Entry point
352
- // ──────────────────────────────────────────────────────────
353
309
  export default function CalendarShowcase() {
354
310
  const { size: globalSize } = useDevContext();
355
311
  return (
356
312
  <Showcase
357
313
  title="Calendar"
358
314
  description="Thành phần chọn ngày, khoảng thời gian hoặc nhiều ngày."
359
- generalConcept={
315
+ guideline={
360
316
  <ShowcaseDocs>
361
317
  <DocsP>
362
318
  Dùng để hiển thị lịch và cho phép người dùng chọn một ngày, nhiều
@@ -365,14 +321,8 @@ export default function CalendarShowcase() {
365
321
  </DocsP>
366
322
  </ShowcaseDocs>
367
323
  }
368
- tabs={[
369
- {
370
- label: "Micro (Primitive)",
371
- content: <CalendarMicroShowcase globalSize={globalSize} /> },
372
- {
373
- label: "Macro (DatePicker)",
374
- content: <CalendarMacroShowcase globalSize={globalSize} /> },
375
- ]}
324
+ micro={{ content: <CalendarMicroShowcase globalSize={globalSize} /> }}
325
+ macro={{ content: <CalendarMacroShowcase globalSize={globalSize} /> }}
376
326
  />
377
327
  );
378
328
  }