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.
- package/bin/cli.js +9 -6
- package/dist/components/macro/accordion-preset.d.ts.map +1 -1
- package/dist/components/macro/alert-dialog-preset.d.ts.map +1 -1
- package/dist/components/macro/alert-preset.d.ts.map +1 -1
- package/dist/components/macro/avatar-preset.d.ts.map +1 -1
- package/dist/components/macro/breadcrumb-preset.d.ts.map +1 -1
- package/dist/components/macro/card-preset.d.ts.map +1 -1
- package/dist/components/macro/carousel-preset.d.ts.map +1 -1
- package/dist/components/macro/checkbox-preset.d.ts.map +1 -1
- package/dist/components/macro/combobox-preset.d.ts.map +1 -1
- package/dist/components/macro/command-preset.d.ts +1 -1
- package/dist/components/macro/command-preset.d.ts.map +1 -1
- package/dist/components/macro/date-picker.d.ts.map +1 -1
- package/dist/components/macro/dialog-preset.d.ts.map +1 -1
- package/dist/components/macro/empty-preset.d.ts.map +1 -1
- package/dist/components/macro/field-preset.d.ts.map +1 -1
- package/dist/components/macro/input-otp-preset.d.ts +6 -0
- package/dist/components/macro/input-otp-preset.d.ts.map +1 -1
- package/dist/components/macro/input-preset.d.ts +1 -1
- package/dist/components/macro/input-preset.d.ts.map +1 -1
- package/dist/components/macro/pagination-preset.d.ts.map +1 -1
- package/dist/components/macro/progress-preset.d.ts.map +1 -1
- package/dist/components/macro/radio-group-preset.d.ts.map +1 -1
- package/dist/components/macro/select-preset.d.ts.map +1 -1
- package/dist/components/macro/slider-preset.d.ts.map +1 -1
- package/dist/components/macro/switch-preset.d.ts.map +1 -1
- package/dist/components/macro/tabs-preset.d.ts +1 -1
- package/dist/components/macro/tabs-preset.d.ts.map +1 -1
- package/dist/components/macro/textarea-preset.d.ts +1 -1
- package/dist/components/macro/textarea-preset.d.ts.map +1 -1
- package/dist/components/micro/accordion.d.ts +7 -0
- package/dist/components/micro/accordion.d.ts.map +1 -1
- package/dist/components/micro/alert-dialog.d.ts.map +1 -1
- package/dist/components/micro/alert.d.ts +7 -0
- package/dist/components/micro/alert.d.ts.map +1 -1
- package/dist/components/micro/aspect-ratio.d.ts +7 -0
- package/dist/components/micro/aspect-ratio.d.ts.map +1 -1
- package/dist/components/micro/avatar.d.ts.map +1 -1
- package/dist/components/micro/badge.d.ts +8 -1
- package/dist/components/micro/badge.d.ts.map +1 -1
- package/dist/components/micro/breadcrumb.d.ts +7 -0
- package/dist/components/micro/breadcrumb.d.ts.map +1 -1
- package/dist/components/micro/button.d.ts +8 -1
- package/dist/components/micro/button.d.ts.map +1 -1
- package/dist/components/micro/calendar.d.ts +2 -2
- package/dist/components/micro/calendar.d.ts.map +1 -1
- package/dist/components/micro/carousel.d.ts.map +1 -1
- package/dist/components/micro/chart.d.ts.map +1 -1
- package/dist/components/micro/checkbox.d.ts.map +1 -1
- package/dist/components/micro/collapsible.d.ts.map +1 -1
- package/dist/components/micro/combobox.d.ts.map +1 -1
- package/dist/components/micro/command.d.ts.map +1 -1
- package/dist/components/micro/context-menu.d.ts.map +1 -1
- package/dist/components/micro/dialog.d.ts.map +1 -1
- package/dist/components/micro/drawer.d.ts.map +1 -1
- package/dist/components/micro/dropdown-menu.d.ts.map +1 -1
- package/dist/components/micro/empty.d.ts +7 -0
- package/dist/components/micro/empty.d.ts.map +1 -1
- package/dist/components/micro/field.d.ts.map +1 -1
- package/dist/components/micro/hover-card.d.ts +1 -1
- package/dist/components/micro/hover-card.d.ts.map +1 -1
- package/dist/components/micro/input-group.d.ts.map +1 -1
- package/dist/components/micro/input-otp.d.ts.map +1 -1
- package/dist/components/micro/input.d.ts +7 -0
- package/dist/components/micro/input.d.ts.map +1 -1
- package/dist/components/micro/item.d.ts.map +1 -1
- package/dist/components/micro/label.d.ts.map +1 -1
- package/dist/components/micro/menubar.d.ts.map +1 -1
- package/dist/components/micro/navigation-menu.d.ts +8 -1
- package/dist/components/micro/navigation-menu.d.ts.map +1 -1
- package/dist/components/micro/pagination.d.ts.map +1 -1
- package/dist/components/micro/popover.d.ts.map +1 -1
- package/dist/components/micro/progress.d.ts.map +1 -1
- package/dist/components/micro/radio-group.d.ts.map +1 -1
- package/dist/components/micro/select.d.ts +1 -1
- package/dist/components/micro/select.d.ts.map +1 -1
- package/dist/components/micro/sheet.d.ts.map +1 -1
- package/dist/components/micro/sidebar.d.ts.map +1 -1
- package/dist/components/micro/skeleton.d.ts +7 -0
- package/dist/components/micro/skeleton.d.ts.map +1 -1
- package/dist/components/micro/slider.d.ts +7 -0
- package/dist/components/micro/slider.d.ts.map +1 -1
- package/dist/components/micro/sonner.d.ts.map +1 -1
- package/dist/components/micro/spinner.d.ts.map +1 -1
- package/dist/components/micro/switch.d.ts.map +1 -1
- package/dist/components/micro/table.d.ts.map +1 -1
- package/dist/components/micro/tabs.d.ts +1 -1
- package/dist/components/micro/tabs.d.ts.map +1 -1
- package/dist/components/micro/textarea.d.ts +7 -0
- package/dist/components/micro/textarea.d.ts.map +1 -1
- package/dist/components/micro/toggle-group.d.ts.map +1 -1
- package/dist/components/micro/toggle.d.ts.map +1 -1
- package/dist/components/micro/tooltip.d.ts +1 -1
- package/dist/components/micro/tooltip.d.ts.map +1 -1
- package/dist/dev/App.d.ts.map +1 -1
- package/dist/dev/components/code-highlighter.d.ts.map +1 -1
- package/dist/dev/components/dev-context.d.ts.map +1 -1
- package/dist/dev/components/showcase.d.ts +1 -1
- package/dist/dev/components/showcase.d.ts.map +1 -1
- package/dist/dev/data.d.ts.map +1 -1
- package/dist/dev/main.d.ts.map +1 -1
- package/dist/dev/sections/buttons.d.ts.map +1 -1
- package/dist/dev/sections/feedback.d.ts.map +1 -1
- package/dist/dev/sections/overview.d.ts.map +1 -1
- package/dist/dev/showcase/accordion.d.ts.map +1 -1
- package/dist/dev/showcase/alert-dialog.d.ts.map +1 -1
- package/dist/dev/showcase/alert.d.ts.map +1 -1
- package/dist/dev/showcase/aspect-ratio.d.ts.map +1 -1
- package/dist/dev/showcase/avatar.d.ts.map +1 -1
- package/dist/dev/showcase/breadcrumb.d.ts.map +1 -1
- package/dist/dev/showcase/button.d.ts.map +1 -1
- package/dist/dev/showcase/calendar.d.ts.map +1 -1
- package/dist/dev/showcase/card.d.ts.map +1 -1
- package/dist/dev/showcase/carousel.d.ts.map +1 -1
- package/dist/dev/showcase/chart.d.ts.map +1 -1
- package/dist/dev/showcase/checkbox.d.ts.map +1 -1
- package/dist/dev/showcase/collapsible.d.ts.map +1 -1
- package/dist/dev/showcase/combobox.d.ts.map +1 -1
- package/dist/dev/showcase/command.d.ts.map +1 -1
- package/dist/dev/showcase/context-menu.d.ts.map +1 -1
- package/dist/dev/showcase/dialog.d.ts.map +1 -1
- package/dist/dev/showcase/drawer.d.ts.map +1 -1
- package/dist/dev/showcase/dropdown-menu.d.ts.map +1 -1
- package/dist/dev/showcase/empty.d.ts.map +1 -1
- package/dist/dev/showcase/hover-card.d.ts.map +1 -1
- package/dist/dev/showcase/input-group.d.ts.map +1 -1
- package/dist/dev/showcase/input-otp.d.ts.map +1 -1
- package/dist/dev/showcase/input.d.ts.map +1 -1
- package/dist/dev/showcase/item.d.ts.map +1 -1
- package/dist/dev/showcase/kbd.d.ts.map +1 -1
- package/dist/dev/showcase/label.d.ts.map +1 -1
- package/dist/dev/showcase/menubar.d.ts.map +1 -1
- package/dist/dev/showcase/navigation-menu.d.ts.map +1 -1
- package/dist/dev/showcase/overview.d.ts.map +1 -1
- package/dist/dev/showcase/pagination.d.ts.map +1 -1
- package/dist/dev/showcase/popover.d.ts.map +1 -1
- package/dist/dev/showcase/progress.d.ts.map +1 -1
- package/dist/dev/showcase/radio-group.d.ts.map +1 -1
- package/dist/dev/showcase/resizable.d.ts.map +1 -1
- package/dist/dev/showcase/scroll-area.d.ts.map +1 -1
- package/dist/dev/showcase/select.d.ts.map +1 -1
- package/dist/dev/showcase/separator.d.ts.map +1 -1
- package/dist/dev/showcase/sheet.d.ts.map +1 -1
- package/dist/dev/showcase/sidebar.d.ts.map +1 -1
- package/dist/dev/showcase/skeleton.d.ts.map +1 -1
- package/dist/dev/showcase/slider.d.ts.map +1 -1
- package/dist/dev/showcase/sonner.d.ts.map +1 -1
- package/dist/dev/showcase/spinner.d.ts.map +1 -1
- package/dist/dev/showcase/switch.d.ts.map +1 -1
- package/dist/dev/showcase/table.d.ts.map +1 -1
- package/dist/dev/showcase/tabs.d.ts.map +1 -1
- package/dist/dev/showcase/textarea.d.ts.map +1 -1
- package/dist/dev/showcase/theme-provider.d.ts.map +1 -1
- package/dist/dev/showcase/toast.d.ts.map +1 -1
- package/dist/dev/showcase/toggle-group.d.ts.map +1 -1
- package/dist/dev/showcase/toggle.d.ts.map +1 -1
- package/dist/dev/showcase/tooltip.d.ts.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/package.json +3 -1
- package/scripts/format-codestrings.ts +87 -0
- package/scripts/organize-imports.ts +21 -0
- package/scripts/regex-format.cjs +67 -0
- package/scripts/tmp.tsx +25 -0
- package/src/components/macro/accordion-preset.test.tsx +1 -0
- package/src/components/macro/accordion-preset.tsx +2 -1
- package/src/components/macro/alert-dialog-preset.tsx +44 -43
- package/src/components/macro/alert-preset.tsx +7 -3
- package/src/components/macro/avatar-preset.tsx +2 -1
- package/src/components/macro/breadcrumb-preset.tsx +2 -1
- package/src/components/macro/card-preset.tsx +2 -1
- package/src/components/macro/carousel-preset.tsx +5 -2
- package/src/components/macro/checkbox-preset.test.tsx +1 -0
- package/src/components/macro/checkbox-preset.tsx +6 -2
- package/src/components/macro/combobox-preset.tsx +6 -3
- package/src/components/macro/command-preset.tsx +7 -3
- package/src/components/macro/date-picker.tsx +77 -59
- package/src/components/macro/dialog-preset.tsx +42 -38
- package/src/components/macro/empty-preset.tsx +2 -1
- package/src/components/macro/field-preset.test.tsx +1 -0
- package/src/components/macro/field-preset.tsx +2 -1
- package/src/components/macro/input-otp-preset.tsx +6 -2
- package/src/components/macro/input-preset.test.tsx +1 -0
- package/src/components/macro/input-preset.tsx +4 -2
- package/src/components/macro/pagination-preset.tsx +3 -1
- package/src/components/macro/progress-preset.test.tsx +1 -0
- package/src/components/macro/progress-preset.tsx +2 -1
- package/src/components/macro/radio-group-preset.tsx +4 -1
- package/src/components/macro/select-preset.tsx +35 -30
- package/src/components/macro/slider-preset.test.tsx +1 -0
- package/src/components/macro/slider-preset.tsx +4 -1
- package/src/components/macro/switch-preset.test.tsx +1 -0
- package/src/components/macro/switch-preset.tsx +4 -1
- package/src/components/macro/tabs-preset.test.tsx +1 -0
- package/src/components/macro/tabs-preset.tsx +4 -2
- package/src/components/macro/textarea-preset.test.tsx +1 -0
- package/src/components/macro/textarea-preset.tsx +4 -1
- package/src/components/micro/accordion.tsx +3 -2
- package/src/components/micro/alert-dialog.tsx +2 -1
- package/src/components/micro/alert.tsx +3 -2
- package/src/components/micro/aspect-ratio.tsx +2 -1
- package/src/components/micro/avatar.tsx +2 -1
- package/src/components/micro/badge.tsx +3 -3
- package/src/components/micro/breadcrumb.tsx +3 -2
- package/src/components/micro/button.test.tsx +1 -0
- package/src/components/micro/button.tsx +3 -3
- package/src/components/micro/calendar.tsx +10 -9
- package/src/components/micro/carousel.tsx +3 -2
- package/src/components/micro/chart.tsx +1 -0
- package/src/components/micro/checkbox.tsx +2 -2
- package/src/components/micro/collapsible.tsx +4 -2
- package/src/components/micro/combobox.tsx +47 -29
- package/src/components/micro/command.tsx +23 -16
- package/src/components/micro/context-menu.tsx +3 -2
- package/src/components/micro/dialog.tsx +2 -1
- package/src/components/micro/drawer.tsx +2 -1
- package/src/components/micro/dropdown-menu.tsx +3 -2
- package/src/components/micro/empty.tsx +2 -1
- package/src/components/micro/field.tsx +4 -3
- package/src/components/micro/hover-card.tsx +20 -19
- package/src/components/micro/input-group.tsx +5 -4
- package/src/components/micro/input-otp.tsx +3 -2
- package/src/components/micro/input.tsx +3 -2
- package/src/components/micro/item.tsx +1 -0
- package/src/components/micro/label.tsx +2 -1
- package/src/components/micro/menubar.tsx +2 -1
- package/src/components/micro/navigation-menu.tsx +18 -17
- package/src/components/micro/pagination.tsx +2 -1
- package/src/components/micro/popover.tsx +2 -1
- package/src/components/micro/progress.tsx +2 -1
- package/src/components/micro/radio-group.tsx +3 -3
- package/src/components/micro/select.tsx +5 -4
- package/src/components/micro/sheet.tsx +2 -1
- package/src/components/micro/sidebar.tsx +4 -1
- package/src/components/micro/skeleton.tsx +2 -1
- package/src/components/micro/slider.tsx +4 -1
- package/src/components/micro/sonner.tsx +2 -1
- package/src/components/micro/spinner.tsx +1 -2
- package/src/components/micro/switch.tsx +2 -2
- package/src/components/micro/table.tsx +2 -1
- package/src/components/micro/tabs.tsx +4 -3
- package/src/components/micro/textarea.tsx +2 -1
- package/src/components/micro/toggle-group.tsx +1 -0
- package/src/components/micro/toggle.tsx +1 -3
- package/src/components/micro/tooltip.tsx +9 -3
- package/src/dev/App.tsx +66 -41
- package/src/dev/components/code-highlighter.tsx +2 -1
- package/src/dev/components/dev-context.tsx +1 -0
- package/src/dev/components/showcase.tsx +13 -14
- package/src/dev/data.ts +206 -52
- package/src/dev/main.tsx +4 -4
- package/src/dev/sections/buttons.tsx +14 -12
- package/src/dev/sections/feedback.tsx +7 -2
- package/src/dev/sections/forms.tsx +11 -11
- package/src/dev/sections/overview.tsx +2 -1
- package/src/dev/showcase/accordion.tsx +399 -314
- package/src/dev/showcase/alert-dialog.tsx +387 -384
- package/src/dev/showcase/alert.tsx +271 -258
- package/src/dev/showcase/aspect-ratio.tsx +102 -105
- package/src/dev/showcase/avatar.tsx +216 -145
- package/src/dev/showcase/badge.tsx +78 -50
- package/src/dev/showcase/breadcrumb.tsx +88 -85
- package/src/dev/showcase/button.tsx +72 -96
- package/src/dev/showcase/calendar.tsx +41 -39
- package/src/dev/showcase/card.tsx +170 -148
- package/src/dev/showcase/carousel.tsx +239 -77
- package/src/dev/showcase/chart.tsx +5 -4
- package/src/dev/showcase/checkbox.tsx +206 -140
- package/src/dev/showcase/collapsible.tsx +108 -84
- package/src/dev/showcase/combobox.tsx +272 -199
- package/src/dev/showcase/command.tsx +31 -28
- package/src/dev/showcase/context-menu.tsx +94 -77
- package/src/dev/showcase/dialog.tsx +445 -424
- package/src/dev/showcase/drawer.tsx +142 -135
- package/src/dev/showcase/dropdown-menu.tsx +165 -161
- package/src/dev/showcase/empty.tsx +173 -158
- package/src/dev/showcase/hover-card.tsx +92 -52
- package/src/dev/showcase/input-group.tsx +193 -160
- package/src/dev/showcase/input-otp.tsx +109 -99
- package/src/dev/showcase/input.tsx +78 -42
- package/src/dev/showcase/item.tsx +101 -98
- package/src/dev/showcase/kbd.tsx +78 -62
- package/src/dev/showcase/label.tsx +16 -23
- package/src/dev/showcase/menubar.tsx +274 -251
- package/src/dev/showcase/navigation-menu.tsx +175 -170
- package/src/dev/showcase/overview.tsx +164 -148
- package/src/dev/showcase/pagination.tsx +101 -69
- package/src/dev/showcase/popover.tsx +113 -86
- package/src/dev/showcase/progress.tsx +99 -69
- package/src/dev/showcase/radio-group.tsx +217 -134
- package/src/dev/showcase/resizable.tsx +65 -55
- package/src/dev/showcase/scroll-area.tsx +32 -22
- package/src/dev/showcase/select.tsx +192 -136
- package/src/dev/showcase/separator.tsx +28 -24
- package/src/dev/showcase/sheet.tsx +182 -134
- package/src/dev/showcase/sidebar.tsx +9 -5
- package/src/dev/showcase/skeleton.tsx +54 -59
- package/src/dev/showcase/slider.tsx +158 -129
- package/src/dev/showcase/sonner.tsx +3 -5
- package/src/dev/showcase/spinner.tsx +22 -18
- package/src/dev/showcase/switch.tsx +207 -110
- package/src/dev/showcase/table.tsx +44 -32
- package/src/dev/showcase/tabs.tsx +272 -267
- package/src/dev/showcase/textarea.tsx +162 -116
- package/src/dev/showcase/theme-provider.tsx +596 -534
- package/src/dev/showcase/toast.tsx +37 -38
- package/src/dev/showcase/toggle-group.tsx +87 -39
- package/src/dev/showcase/toggle.tsx +36 -27
- package/src/dev/showcase/tooltip.tsx +154 -119
- package/src/lib/utils.test.ts +1 -0
- package/src/lib/utils.ts +1 -1
- package/src/styles/gladvn.css +1 -1
|
@@ -1,19 +1,7 @@
|
|
|
1
|
-
import { useDevContext } from "../../dev/components/dev-context";
|
|
2
1
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
3
|
-
import { useState } from "react";
|
|
4
2
|
import { Controller, useForm } from "react-hook-form";
|
|
5
3
|
import * as z from "zod";
|
|
6
4
|
|
|
7
|
-
import {
|
|
8
|
-
DocsCode,
|
|
9
|
-
DocsP,
|
|
10
|
-
ExampleGrid,
|
|
11
|
-
ExampleSection,
|
|
12
|
-
Showcase,
|
|
13
|
-
ShowcaseDocs,
|
|
14
|
-
} from "../../dev/components/showcase";
|
|
15
|
-
import { type Size } from "../../lib/types";
|
|
16
|
-
|
|
17
5
|
import { ComboboxPreset } from "../../components/macro/combobox-preset";
|
|
18
6
|
import { Button } from "../../components/micro/button";
|
|
19
7
|
import {
|
|
@@ -47,6 +35,16 @@ import {
|
|
|
47
35
|
InputGroupAddon,
|
|
48
36
|
InputGroupInput,
|
|
49
37
|
} from "../../components/micro/input-group";
|
|
38
|
+
import { useDevContext } from "../../dev/components/dev-context";
|
|
39
|
+
import {
|
|
40
|
+
DocsCode,
|
|
41
|
+
DocsP,
|
|
42
|
+
ExampleGrid,
|
|
43
|
+
ExampleSection,
|
|
44
|
+
Showcase,
|
|
45
|
+
ShowcaseDocs,
|
|
46
|
+
} from "../../dev/components/showcase";
|
|
47
|
+
import { type Size } from "../../lib/types";
|
|
50
48
|
|
|
51
49
|
const frontendFrameworks = ["react", "vue", "svelte"];
|
|
52
50
|
const backendFrameworks = ["express", "nest"];
|
|
@@ -148,7 +146,8 @@ function ComboboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
148
146
|
<ExampleSection
|
|
149
147
|
label="Tiêu chuẩn"
|
|
150
148
|
description="Tương tự Select nhưng có thể gõ để tìm kiếm."
|
|
151
|
-
codeString={`<ComboboxPreset
|
|
149
|
+
codeString={`<ComboboxPreset
|
|
150
|
+
className="w-full"
|
|
152
151
|
label="Framework"
|
|
153
152
|
description="Hỗ trợ hàng ngàn bản ghi mà không lag."
|
|
154
153
|
placeholder="Chọn framework..."
|
|
@@ -160,8 +159,7 @@ function ComboboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
160
159
|
{ value: "angular", label: "Angular" },
|
|
161
160
|
{ value: "svelte", label: "Svelte" },
|
|
162
161
|
]}
|
|
163
|
-
|
|
164
|
-
`}
|
|
162
|
+
/>`}
|
|
165
163
|
>
|
|
166
164
|
<ComboboxPreset
|
|
167
165
|
className="w-full"
|
|
@@ -184,14 +182,15 @@ function ComboboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
184
182
|
label="Trạng thái Lỗi (Error)"
|
|
185
183
|
description="Báo lỗi khi bỏ trống form."
|
|
186
184
|
codeString={`<div className="w-full flex flex-col gap-6">
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
185
|
+
<ComboboxPreset
|
|
186
|
+
label="Khu vực (Lỗi)"
|
|
187
|
+
placeholder="Chọn khu vực..."
|
|
188
|
+
options={[
|
|
189
|
+
{ value: "ap", label: "Châu Á Thái Bình Dương" },
|
|
190
|
+
]}
|
|
191
|
+
errorMessage="Khu vực là bắt buộc."
|
|
192
|
+
/>
|
|
193
|
+
</div>`}
|
|
195
194
|
>
|
|
196
195
|
<div className="w-full flex flex-col gap-6">
|
|
197
196
|
<ComboboxPreset
|
|
@@ -209,7 +208,8 @@ function ComboboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
209
208
|
<ExampleSection
|
|
210
209
|
label="Khóa / Bất hoạt (Disabled)"
|
|
211
210
|
description="Người dùng không thể click hay gõ vào ô."
|
|
212
|
-
codeString={`<ComboboxPreset
|
|
211
|
+
codeString={`<ComboboxPreset
|
|
212
|
+
className="w-full"
|
|
213
213
|
label="Đội nhóm (Team)"
|
|
214
214
|
description="Bạn không có quyền thay đổi đội trong dự án này."
|
|
215
215
|
placeholder="Chọn đội..."
|
|
@@ -219,8 +219,7 @@ function ComboboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
219
219
|
]}
|
|
220
220
|
value="engineering"
|
|
221
221
|
disabled
|
|
222
|
-
|
|
223
|
-
`}
|
|
222
|
+
/>`}
|
|
224
223
|
>
|
|
225
224
|
<ComboboxPreset
|
|
226
225
|
className="w-full"
|
|
@@ -240,18 +239,18 @@ function ComboboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
240
239
|
<ExampleSection
|
|
241
240
|
label="Cuộn danh sách dài (Long List)"
|
|
242
241
|
description="Trải nghiệm mượt mà với danh sách ảo hoá."
|
|
243
|
-
codeString={`<ComboboxPreset
|
|
244
|
-
|
|
242
|
+
codeString={`<ComboboxPreset
|
|
243
|
+
className="w-full"
|
|
244
|
+
|
|
245
245
|
label="Múi giờ (Timezone)"
|
|
246
246
|
placeholder="Chọn múi giờ..."
|
|
247
247
|
searchPlaceholder="Tìm kiếm múi giờ..."
|
|
248
248
|
emptyText="Không tìm thấy múi giờ."
|
|
249
249
|
options={Array.from({ length: 50 }).map((_, i) => ({
|
|
250
250
|
value: \`utc\${i - 12}\`,
|
|
251
|
-
label: \`UTC \${i - 12 > 0 ?
|
|
251
|
+
label: \`UTC \${i - 12 > 0 ? "+" : ""}\${i - 12}:00\`,
|
|
252
252
|
}))}
|
|
253
|
-
|
|
254
|
-
`}
|
|
253
|
+
/>`}
|
|
255
254
|
>
|
|
256
255
|
<ComboboxPreset
|
|
257
256
|
className="w-full"
|
|
@@ -292,42 +291,51 @@ function ComboboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
292
291
|
label="Cơ bản & Phân nhóm"
|
|
293
292
|
description="Sử dụng InputGroup, ComboboxAnchor, ComboboxGroup."
|
|
294
293
|
codeString={`<Field className="w-full">
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
</
|
|
330
|
-
|
|
294
|
+
<FieldLabel>Tìm kiếm Framework</FieldLabel>
|
|
295
|
+
<FieldContent>
|
|
296
|
+
<Combobox items={allFrameworks}>
|
|
297
|
+
<ComboboxAnchor className="w-full">
|
|
298
|
+
<InputGroup className="w-full">
|
|
299
|
+
<ComboboxInput
|
|
300
|
+
placeholder="Tìm framework..."
|
|
301
|
+
render={<InputGroupInput />}
|
|
302
|
+
/>
|
|
303
|
+
<InputGroupAddon align="end">
|
|
304
|
+
<ComboboxTrigger className="flex h-full cursor-default items-center justify-center px-2.5 outline-none group-has-data-[slot=combobox-clear]/input-group:hidden disabled:cursor-not-allowed disabled:opacity-50" />
|
|
305
|
+
<ComboboxClear />
|
|
306
|
+
</InputGroupAddon>
|
|
307
|
+
</InputGroup>
|
|
308
|
+
</ComboboxAnchor>
|
|
309
|
+
<ComboboxPortal>
|
|
310
|
+
<ComboboxContent>
|
|
311
|
+
<ComboboxEmpty>Không tìm thấy.</ComboboxEmpty>
|
|
312
|
+
<ComboboxList>
|
|
313
|
+
<ComboboxGroup>
|
|
314
|
+
<ComboboxLabel>Frontend</ComboboxLabel>
|
|
315
|
+
<ComboboxItem value="react">
|
|
316
|
+
React
|
|
317
|
+
</ComboboxItem>
|
|
318
|
+
<ComboboxItem value="vue">Vue</ComboboxItem>
|
|
319
|
+
<ComboboxItem value="svelte">
|
|
320
|
+
Svelte
|
|
321
|
+
</ComboboxItem>
|
|
322
|
+
</ComboboxGroup>
|
|
323
|
+
<ComboboxSeparator />
|
|
324
|
+
<ComboboxGroup>
|
|
325
|
+
<ComboboxLabel>Backend</ComboboxLabel>
|
|
326
|
+
<ComboboxItem value="express">
|
|
327
|
+
Express
|
|
328
|
+
</ComboboxItem>
|
|
329
|
+
<ComboboxItem value="nest">
|
|
330
|
+
NestJS
|
|
331
|
+
</ComboboxItem>
|
|
332
|
+
</ComboboxGroup>
|
|
333
|
+
</ComboboxList>
|
|
334
|
+
</ComboboxContent>
|
|
335
|
+
</ComboboxPortal>
|
|
336
|
+
</Combobox>
|
|
337
|
+
</FieldContent>
|
|
338
|
+
</Field>`}
|
|
331
339
|
>
|
|
332
340
|
<Field size={globalSize} className="w-full">
|
|
333
341
|
<FieldLabel>Tìm kiếm Framework</FieldLabel>
|
|
@@ -374,34 +382,43 @@ function ComboboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
374
382
|
label="Chọn nhiều (Multi-select Chips)"
|
|
375
383
|
description="Sử dụng ComboboxChips và ComboboxChip thay cho Input."
|
|
376
384
|
codeString={`<Field className="w-full">
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
Tính năng (Feature)
|
|
384
|
-
</ComboboxChip>
|
|
385
|
-
<ComboboxChipsInput placeholder="Thêm thẻ..." />
|
|
386
|
-
</ComboboxChips>
|
|
387
|
-
<ComboboxPortal><ComboboxContent>
|
|
388
|
-
<ComboboxEmpty>Không tìm thấy thẻ.</ComboboxEmpty>
|
|
389
|
-
<ComboboxList>
|
|
390
|
-
<ComboboxItem value="bug">Lỗi (Bug)</ComboboxItem>
|
|
391
|
-
<ComboboxItem value="feature">
|
|
385
|
+
<FieldLabel>Gán thẻ (Tags)</FieldLabel>
|
|
386
|
+
<FieldContent>
|
|
387
|
+
<Combobox items={tagItems} multiple>
|
|
388
|
+
<ComboboxChips>
|
|
389
|
+
<ComboboxChip value="bug">Lỗi (Bug)</ComboboxChip>
|
|
390
|
+
<ComboboxChip value="feature">
|
|
392
391
|
Tính năng (Feature)
|
|
393
|
-
</
|
|
394
|
-
<
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
392
|
+
</ComboboxChip>
|
|
393
|
+
<ComboboxChipsInput placeholder="Thêm thẻ..." />
|
|
394
|
+
</ComboboxChips>
|
|
395
|
+
<ComboboxPortal>
|
|
396
|
+
<ComboboxContent>
|
|
397
|
+
<ComboboxEmpty>
|
|
398
|
+
Không tìm thấy thẻ.
|
|
399
|
+
</ComboboxEmpty>
|
|
400
|
+
<ComboboxList>
|
|
401
|
+
<ComboboxItem value="bug">
|
|
402
|
+
Lỗi (Bug)
|
|
403
|
+
</ComboboxItem>
|
|
404
|
+
<ComboboxItem value="feature">
|
|
405
|
+
Tính năng (Feature)
|
|
406
|
+
</ComboboxItem>
|
|
407
|
+
<ComboboxItem value="enhancement">
|
|
408
|
+
Cải thiện
|
|
409
|
+
</ComboboxItem>
|
|
410
|
+
<ComboboxItem value="docs">
|
|
411
|
+
Tài liệu
|
|
412
|
+
</ComboboxItem>
|
|
413
|
+
</ComboboxList>
|
|
414
|
+
</ComboboxContent>
|
|
415
|
+
</ComboboxPortal>
|
|
416
|
+
</Combobox>
|
|
417
|
+
</FieldContent>
|
|
418
|
+
<FieldDescription>
|
|
419
|
+
Bạn có thể chọn nhiều thẻ cùng lúc.
|
|
420
|
+
</FieldDescription>
|
|
421
|
+
</Field>`}
|
|
405
422
|
>
|
|
406
423
|
<Field size={globalSize} className="w-full">
|
|
407
424
|
<FieldLabel>Gán thẻ (Tags)</FieldLabel>
|
|
@@ -442,30 +459,36 @@ function ComboboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
442
459
|
label="Disabled thủ công"
|
|
443
460
|
description="Truyền disabled vào InputGroupInput và ComboboxTrigger."
|
|
444
461
|
codeString={`<Field className="w-full">
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
462
|
+
<FieldLabel>Tìm kiếm (Disabled)</FieldLabel>
|
|
463
|
+
<FieldContent>
|
|
464
|
+
<Combobox items={["react"]}>
|
|
465
|
+
<ComboboxAnchor className="w-full">
|
|
466
|
+
<InputGroup className="w-full">
|
|
467
|
+
<ComboboxInput
|
|
468
|
+
placeholder="Tìm kiếm..."
|
|
469
|
+
disabled
|
|
470
|
+
render={<InputGroupInput disabled />}
|
|
471
|
+
/>
|
|
472
|
+
<InputGroupAddon align="end">
|
|
473
|
+
<ComboboxTrigger
|
|
474
|
+
className="flex h-full cursor-default items-center justify-center px-2.5 outline-none group-has-data-[slot=combobox-clear]/input-group:hidden disabled:cursor-not-allowed disabled:opacity-50"
|
|
475
|
+
disabled
|
|
476
|
+
/>
|
|
477
|
+
</InputGroupAddon>
|
|
478
|
+
</InputGroup>
|
|
479
|
+
</ComboboxAnchor>
|
|
480
|
+
<ComboboxPortal>
|
|
481
|
+
<ComboboxContent>
|
|
482
|
+
<ComboboxList>
|
|
483
|
+
<ComboboxItem value="react">
|
|
484
|
+
React
|
|
485
|
+
</ComboboxItem>
|
|
486
|
+
</ComboboxList>
|
|
487
|
+
</ComboboxContent>
|
|
488
|
+
</ComboboxPortal>
|
|
489
|
+
</Combobox>
|
|
490
|
+
</FieldContent>
|
|
491
|
+
</Field>`}
|
|
469
492
|
>
|
|
470
493
|
<Field size={globalSize} className="w-full">
|
|
471
494
|
<FieldLabel>Tìm kiếm (Disabled)</FieldLabel>
|
|
@@ -503,34 +526,41 @@ function ComboboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
503
526
|
label="Trạng thái Lỗi (Invalid)"
|
|
504
527
|
description="Gắn aria-invalid vào ô nhập liệu."
|
|
505
528
|
codeString={`<Field data-invalid={true} className="w-full">
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
529
|
+
<FieldLabel>Mã giảm giá</FieldLabel>
|
|
530
|
+
<FieldContent>
|
|
531
|
+
<Combobox items={["sale20", "sale50"]}>
|
|
532
|
+
<ComboboxAnchor className="w-full">
|
|
533
|
+
<InputGroup className="w-full">
|
|
534
|
+
<ComboboxInput
|
|
535
|
+
placeholder="Nhập mã..."
|
|
536
|
+
aria-invalid={true}
|
|
537
|
+
render={<InputGroupInput />}
|
|
538
|
+
/>
|
|
539
|
+
<InputGroupAddon align="end">
|
|
540
|
+
<ComboboxTrigger className="flex h-full cursor-default items-center justify-center px-2.5 outline-none group-has-data-[slot=combobox-clear]/input-group:hidden disabled:cursor-not-allowed disabled:opacity-50" />
|
|
541
|
+
<ComboboxClear />
|
|
542
|
+
</InputGroupAddon>
|
|
543
|
+
</InputGroup>
|
|
544
|
+
</ComboboxAnchor>
|
|
545
|
+
<ComboboxPortal>
|
|
546
|
+
<ComboboxContent>
|
|
547
|
+
<ComboboxEmpty>
|
|
548
|
+
Không tìm thấy mã.
|
|
549
|
+
</ComboboxEmpty>
|
|
550
|
+
<ComboboxList>
|
|
551
|
+
<ComboboxItem value="sale20">
|
|
552
|
+
Giảm 20%
|
|
553
|
+
</ComboboxItem>
|
|
554
|
+
<ComboboxItem value="sale50">
|
|
555
|
+
Giảm 50%
|
|
556
|
+
</ComboboxItem>
|
|
557
|
+
</ComboboxList>
|
|
558
|
+
</ComboboxContent>
|
|
559
|
+
</ComboboxPortal>
|
|
560
|
+
</Combobox>
|
|
561
|
+
</FieldContent>
|
|
562
|
+
<FieldError>Mã này đã hết hạn.</FieldError>
|
|
563
|
+
</Field>`}
|
|
534
564
|
>
|
|
535
565
|
<Field size={globalSize} data-invalid={true} className="w-full">
|
|
536
566
|
<FieldLabel>Mã giảm giá</FieldLabel>
|
|
@@ -571,31 +601,36 @@ function ComboboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
571
601
|
label="Giao diện Nút (With Trigger)"
|
|
572
602
|
description="Combobox dùng nút bấm (giống Select) thay vì ô nhập chữ (Input)."
|
|
573
603
|
codeString={`<Field className="w-full">
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
</
|
|
598
|
-
|
|
604
|
+
<FieldLabel>Chọn Engine</FieldLabel>
|
|
605
|
+
<FieldContent>
|
|
606
|
+
<Combobox items={engineItems}>
|
|
607
|
+
<ComboboxTrigger className="w-full justify-between flex items-center border border-border rounded-md p-2 hover:bg-accent focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring">
|
|
608
|
+
<ComboboxValue placeholder="Chọn một engine" />
|
|
609
|
+
</ComboboxTrigger>
|
|
610
|
+
<ComboboxPortal>
|
|
611
|
+
<ComboboxContent>
|
|
612
|
+
<div className="p-1">
|
|
613
|
+
<InputGroup className="w-full">
|
|
614
|
+
<ComboboxInput
|
|
615
|
+
placeholder="Tìm engine..."
|
|
616
|
+
render={<InputGroupInput />}
|
|
617
|
+
/>
|
|
618
|
+
</InputGroup>
|
|
619
|
+
</div>
|
|
620
|
+
<ComboboxEmpty>Không tìm thấy.</ComboboxEmpty>
|
|
621
|
+
<ComboboxList>
|
|
622
|
+
<ComboboxItem value="v8">
|
|
623
|
+
V8 (Chrome)
|
|
624
|
+
</ComboboxItem>
|
|
625
|
+
<ComboboxItem value="spidermonkey">
|
|
626
|
+
SpiderMonkey (Firefox)
|
|
627
|
+
</ComboboxItem>
|
|
628
|
+
</ComboboxList>
|
|
629
|
+
</ComboboxContent>
|
|
630
|
+
</ComboboxPortal>
|
|
631
|
+
</Combobox>
|
|
632
|
+
</FieldContent>
|
|
633
|
+
</Field>`}
|
|
599
634
|
>
|
|
600
635
|
<Field size={globalSize} className="w-full">
|
|
601
636
|
<FieldLabel>Chọn Engine</FieldLabel>
|
|
@@ -635,39 +670,77 @@ function ComboboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
635
670
|
description="So sánh nhanh khi nào dùng Micro và Macro."
|
|
636
671
|
fullWidth
|
|
637
672
|
codeString={`<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
673
|
+
{/* Story 1: Macro wins */}
|
|
674
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
675
|
+
<div className="flex items-start gap-3">
|
|
676
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
|
|
677
|
+
<svg
|
|
678
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
679
|
+
className="size-4"
|
|
680
|
+
viewBox="0 0 24 24"
|
|
681
|
+
fill="none"
|
|
682
|
+
stroke="currentColor"
|
|
683
|
+
strokeWidth="2"
|
|
684
|
+
strokeLinecap="round"
|
|
685
|
+
strokeLinejoin="round"
|
|
686
|
+
aria-hidden="true"
|
|
687
|
+
>
|
|
688
|
+
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
|
|
689
|
+
</svg>
|
|
690
|
+
</span>
|
|
691
|
+
<div>
|
|
692
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
693
|
+
Story 1 · Dùng Macro
|
|
694
|
+
</p>
|
|
695
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
696
|
+
Single Select tự động hoàn thành
|
|
697
|
+
</h3>
|
|
698
|
+
</div>
|
|
647
699
|
</div>
|
|
700
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
701
|
+
Bạn cần một form chọn Thành phố. Số lượng thành phố
|
|
702
|
+
quá lớn nên không dùng Select được, phải dùng
|
|
703
|
+
Combobox để gõ tìm.{" "}
|
|
704
|
+
<DocsCode>ComboboxPreset</DocsCode> sinh ra để giải
|
|
705
|
+
quyết đúng bài toán chọn 1 giá trị từ tập lớn này.
|
|
706
|
+
</p>
|
|
648
707
|
</div>
|
|
649
|
-
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
650
|
-
Bạn cần một form chọn Thành phố. Số lượng thành phố quá lớn nên không dùng Select được, phải dùng Combobox để gõ tìm. <DocsCode>ComboboxPreset</DocsCode> sinh ra để giải quyết đúng bài toán chọn 1 giá trị từ tập lớn này.
|
|
651
|
-
</p>
|
|
652
|
-
</div>
|
|
653
708
|
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
709
|
+
{/* Story 2: Micro wins */}
|
|
710
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
711
|
+
<div className="flex items-start gap-3">
|
|
712
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
|
|
713
|
+
<svg
|
|
714
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
715
|
+
className="size-4"
|
|
716
|
+
viewBox="0 0 24 24"
|
|
717
|
+
fill="none"
|
|
718
|
+
stroke="currentColor"
|
|
719
|
+
strokeWidth="2"
|
|
720
|
+
strokeLinecap="round"
|
|
721
|
+
strokeLinejoin="round"
|
|
722
|
+
aria-hidden="true"
|
|
723
|
+
>
|
|
724
|
+
<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" />
|
|
725
|
+
</svg>
|
|
726
|
+
</span>
|
|
727
|
+
<div>
|
|
728
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
729
|
+
Story 2 · Dùng Micro
|
|
730
|
+
</p>
|
|
731
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
732
|
+
Gán thẻ (Multi-select)
|
|
733
|
+
</h3>
|
|
734
|
+
</div>
|
|
663
735
|
</div>
|
|
736
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
737
|
+
Bạn làm form tạo bài viết mới và cần gán nhiều Thẻ
|
|
738
|
+
(Tags) cho bài viết. Macro không hỗ trợ
|
|
739
|
+
Multi-select. Bạn buộc phải dùng Micro kết hợp với
|
|
740
|
+
cụm <DocsCode>{\`<ComboboxChips />\`}</DocsCode>.
|
|
741
|
+
</p>
|
|
664
742
|
</div>
|
|
665
|
-
|
|
666
|
-
Bạn làm form tạo bài viết mới và cần gán nhiều Thẻ (Tags) cho bài viết. Macro không hỗ trợ Multi-select. Bạn buộc phải dùng Micro kết hợp với cụm <DocsCode>{\`<ComboboxChips />\`}</DocsCode>.
|
|
667
|
-
</p>
|
|
668
|
-
</div>
|
|
669
|
-
</div>
|
|
670
|
-
`}
|
|
743
|
+
</div>`}
|
|
671
744
|
>
|
|
672
745
|
<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
673
746
|
{/* Story 1: Macro wins */}
|