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.
- package/README.md +1 -1
- package/package.json +1 -1
- package/scripts/strip-comments.ts +79 -0
- package/src/blocks/auth-form.tsx +34 -30
- package/src/blocks/auth-recovery.tsx +9 -13
- package/src/blocks/auth-split.tsx +46 -36
- package/src/blocks/settings.tsx +84 -117
- package/src/components/macro/alert-preset.tsx +3 -1
- package/src/components/macro/carousel-preset.tsx +0 -1
- package/src/components/macro/checkbox-preset.test.tsx +2 -2
- package/src/components/macro/checkbox-preset.tsx +1 -2
- package/src/components/macro/command-preset.tsx +1 -1
- package/src/components/macro/date-picker.tsx +5 -18
- package/src/components/macro/dialog-preset.tsx +5 -3
- package/src/components/macro/input-preset.tsx +0 -1
- package/src/components/macro/select-preset.tsx +1 -1
- package/src/components/macro/switch-preset.test.tsx +1 -1
- package/src/components/micro/accordion.test.tsx +6 -12
- package/src/components/micro/alert-dialog.tsx +0 -2
- package/src/components/micro/alert.test.tsx +5 -8
- package/src/components/micro/alert.tsx +0 -2
- package/src/components/micro/badge.test.tsx +5 -7
- package/src/components/micro/badge.tsx +1 -3
- package/src/components/micro/button.test.tsx +19 -26
- package/src/components/micro/button.tsx +3 -11
- package/src/components/micro/calendar.tsx +12 -13
- package/src/components/micro/card.test.tsx +3 -5
- package/src/components/micro/carousel.tsx +0 -1
- package/src/components/micro/chart.tsx +3 -2
- package/src/components/micro/checkbox.test.tsx +9 -18
- package/src/components/micro/combobox.tsx +1 -3
- package/src/components/micro/command.tsx +23 -11
- package/src/components/micro/context-menu.tsx +0 -2
- package/src/components/micro/dialog.test.tsx +6 -14
- package/src/components/micro/dialog.tsx +0 -2
- package/src/components/micro/drawer.tsx +0 -3
- package/src/components/micro/dropdown-menu.test.tsx +8 -14
- package/src/components/micro/dropdown-menu.tsx +0 -2
- package/src/components/micro/field.tsx +3 -3
- package/src/components/micro/hover-card.tsx +0 -2
- package/src/components/micro/input-group.tsx +9 -42
- package/src/components/micro/input.test.tsx +15 -24
- package/src/components/micro/navigation-menu.tsx +0 -2
- package/src/components/micro/popover.test.tsx +5 -9
- package/src/components/micro/progress.tsx +5 -1
- package/src/components/micro/select.test.tsx +5 -18
- package/src/components/micro/select.tsx +3 -5
- package/src/components/micro/separator.tsx +1 -1
- package/src/components/micro/sheet.test.tsx +6 -14
- package/src/components/micro/sheet.tsx +0 -2
- package/src/components/micro/sidebar.tsx +5 -6
- package/src/components/micro/sonner.tsx +0 -1
- package/src/components/micro/switch.test.tsx +9 -18
- package/src/components/micro/switch.tsx +1 -1
- package/src/components/micro/tabs.test.tsx +5 -11
- package/src/components/micro/theme-provider.tsx +0 -12
- package/src/components/micro/toggle-group.tsx +1 -12
- package/src/components/micro/tooltip.test.tsx +7 -12
- package/src/dev/App.tsx +6 -6
- package/src/dev/components/BlockViewer.tsx +15 -4
- package/src/dev/components/Container.tsx +20 -0
- package/src/dev/components/GladvnLogo.tsx +3 -9
- package/src/dev/components/code-highlighter.tsx +5 -3
- package/src/dev/components/showcase.tsx +116 -168
- package/src/dev/sections/buttons.tsx +4 -9
- package/src/dev/sections/display.tsx +68 -72
- package/src/dev/sections/feedback.tsx +304 -314
- package/src/dev/sections/forms.tsx +10 -14
- package/src/dev/sections/interactive.tsx +32 -32
- package/src/dev/sections/overview.tsx +2 -10
- package/src/dev/showcase/accordion.tsx +512 -554
- package/src/dev/showcase/alert-dialog.tsx +525 -565
- package/src/dev/showcase/alert.tsx +352 -402
- package/src/dev/showcase/aspect-ratio.tsx +167 -193
- package/src/dev/showcase/avatar.tsx +231 -269
- package/src/dev/showcase/badge.tsx +92 -140
- package/src/dev/showcase/breadcrumb.tsx +113 -135
- package/src/dev/showcase/button.tsx +140 -173
- package/src/dev/showcase/calendar.tsx +187 -237
- package/src/dev/showcase/card.tsx +229 -261
- package/src/dev/showcase/carousel.tsx +288 -315
- package/src/dev/showcase/chart.tsx +44 -50
- package/src/dev/showcase/checkbox.tsx +286 -330
- package/src/dev/showcase/collapsible.tsx +143 -160
- package/src/dev/showcase/combobox.tsx +327 -369
- package/src/dev/showcase/command.tsx +106 -120
- package/src/dev/showcase/context-menu.tsx +93 -107
- package/src/dev/showcase/dialog.tsx +585 -630
- package/src/dev/showcase/drawer.tsx +176 -196
- package/src/dev/showcase/dropdown-menu.tsx +183 -201
- package/src/dev/showcase/empty.tsx +232 -274
- package/src/dev/showcase/hover-card.tsx +153 -180
- package/src/dev/showcase/input-group.tsx +221 -253
- package/src/dev/showcase/input-otp.tsx +204 -250
- package/src/dev/showcase/input.tsx +246 -325
- package/src/dev/showcase/item.tsx +134 -152
- package/src/dev/showcase/kbd.tsx +149 -172
- package/src/dev/showcase/label.tsx +50 -68
- package/src/dev/showcase/menubar.tsx +194 -213
- package/src/dev/showcase/navigation-menu.tsx +119 -133
- package/src/dev/showcase/overview-components/ArchitectureSection.tsx +126 -0
- package/src/dev/showcase/overview-components/CodeBlock.tsx +50 -0
- package/src/dev/showcase/overview-components/ColorPaletteSection.tsx +44 -0
- package/src/dev/showcase/overview-components/DashboardPreview.tsx +159 -0
- package/src/dev/showcase/overview-components/FeatureGridSection.tsx +535 -0
- package/src/dev/showcase/overview-components/FooterCTA.tsx +137 -0
- package/src/dev/showcase/overview-components/HeroSection.tsx +65 -0
- package/src/dev/showcase/overview-components/PrinciplesSection.tsx +128 -0
- package/src/dev/showcase/overview.tsx +21 -1163
- package/src/dev/showcase/pagination.tsx +144 -190
- package/src/dev/showcase/popover.tsx +181 -196
- package/src/dev/showcase/progress.tsx +141 -189
- package/src/dev/showcase/radio-group.tsx +272 -332
- package/src/dev/showcase/resizable.tsx +119 -141
- package/src/dev/showcase/scroll-area.tsx +21 -36
- package/src/dev/showcase/select.tsx +262 -322
- package/src/dev/showcase/separator.tsx +75 -73
- package/src/dev/showcase/sheet.tsx +333 -361
- package/src/dev/showcase/sidebar.tsx +53 -59
- package/src/dev/showcase/skeleton.tsx +93 -112
- package/src/dev/showcase/slider.tsx +244 -296
- package/src/dev/showcase/sonner.tsx +251 -258
- package/src/dev/showcase/spinner.tsx +46 -67
- package/src/dev/showcase/switch.tsx +298 -362
- package/src/dev/showcase/table.tsx +76 -80
- package/src/dev/showcase/tabs.tsx +302 -355
- package/src/dev/showcase/textarea.tsx +240 -293
- package/src/dev/showcase/toast.tsx +48 -54
- package/src/dev/showcase/toggle-group.tsx +104 -129
- package/src/dev/showcase/toggle.tsx +82 -102
- package/src/dev/showcase/tooltip.tsx +173 -192
- package/src/dev/showcase/why.tsx +6 -12
- package/src/hooks/use-mobile.test.ts +3 -2
- package/src/lib/utils.test.ts +5 -4
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
DocsP,
|
|
13
13
|
ExampleGrid,
|
|
14
|
-
|
|
14
|
+
ShowcaseExample,
|
|
15
15
|
Showcase,
|
|
16
16
|
ShowcaseDocs
|
|
17
17
|
} from "../../dev/components/showcase";
|
|
@@ -20,12 +20,9 @@ function CollapsibleMicroShowcase() {
|
|
|
20
20
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
21
21
|
|
|
22
22
|
return (
|
|
23
|
-
<div className="space-y-10
|
|
23
|
+
<div className="space-y-10">
|
|
24
24
|
<ExampleGrid>
|
|
25
|
-
<
|
|
26
|
-
label="Default"
|
|
27
|
-
description="Nhấn để mở rộng hoặc thu gọn."
|
|
28
|
-
codeString={`<Collapsible className="w-full space-y-2">
|
|
25
|
+
<ShowcaseExample title="Default" description="Nhấn để mở rộng hoặc thu gọn." code={`<Collapsible className="w-full space-y-2">
|
|
29
26
|
<div className="flex items-center justify-between space-x-4 px-4">
|
|
30
27
|
<h4 className="text-sm font-semibold">
|
|
31
28
|
@peduarte starred 3 repositories
|
|
@@ -56,42 +53,40 @@ function CollapsibleMicroShowcase() {
|
|
|
56
53
|
</div>
|
|
57
54
|
</div>
|
|
58
55
|
</CollapsibleContent>
|
|
59
|
-
</Collapsible>`}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
56
|
+
</Collapsible>`} preview={
|
|
57
|
+
<>
|
|
58
|
+
<Collapsible className="w-full space-y-2">
|
|
59
|
+
<div className="flex items-center justify-between space-x-4 px-4">
|
|
60
|
+
<h4 className="text-sm font-semibold">
|
|
61
|
+
@peduarte starred 3 repositories
|
|
62
|
+
</h4>
|
|
63
|
+
<CollapsibleTrigger
|
|
64
|
+
render={
|
|
65
|
+
<Button variant="ghost" size="sm" className="w-9 p-0" />
|
|
66
|
+
}
|
|
67
|
+
>
|
|
68
|
+
<ChevronsUpDownIcon className="h-4 w-4" />
|
|
69
|
+
<span className="sr-only">Toggle</span>
|
|
70
|
+
</CollapsibleTrigger>
|
|
71
|
+
</div>
|
|
72
|
+
<div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
|
|
73
|
+
@radix-ui/primitives
|
|
74
|
+
</div>
|
|
75
|
+
<CollapsibleContent>
|
|
76
|
+
<div className="flex flex-col gap-2">
|
|
77
|
+
<div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
|
|
78
|
+
@radix-ui/colors
|
|
79
|
+
</div>
|
|
80
|
+
<div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
|
|
81
|
+
@stitches/react
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</CollapsibleContent>
|
|
85
|
+
</Collapsible>
|
|
86
|
+
</>
|
|
87
|
+
} />
|
|
90
88
|
|
|
91
|
-
<
|
|
92
|
-
label="Default Open"
|
|
93
|
-
description="Bắt đầu ở trạng thái mở rộng."
|
|
94
|
-
codeString={`<Collapsible defaultOpen className="w-full space-y-2">
|
|
89
|
+
<ShowcaseExample title="Mở mặc định" description="Bắt đầu ở trạng thái mở rộng." code={`<Collapsible defaultOpen className="w-full space-y-2">
|
|
95
90
|
<div className="flex items-center justify-between space-x-4 px-4">
|
|
96
91
|
<h4 className="text-sm font-semibold">
|
|
97
92
|
Recent activity
|
|
@@ -122,40 +117,38 @@ function CollapsibleMicroShowcase() {
|
|
|
122
117
|
</div>
|
|
123
118
|
</div>
|
|
124
119
|
</CollapsibleContent>
|
|
125
|
-
</Collapsible>`}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
120
|
+
</Collapsible>`} preview={
|
|
121
|
+
<>
|
|
122
|
+
<Collapsible defaultOpen className="w-full space-y-2">
|
|
123
|
+
<div className="flex items-center justify-between space-x-4 px-4">
|
|
124
|
+
<h4 className="text-sm font-semibold">Recent activity</h4>
|
|
125
|
+
<CollapsibleTrigger
|
|
126
|
+
render={
|
|
127
|
+
<Button variant="ghost" size="sm" className="w-9 p-0" />
|
|
128
|
+
}
|
|
129
|
+
>
|
|
130
|
+
<ChevronsUpDownIcon className="h-4 w-4" />
|
|
131
|
+
<span className="sr-only">Toggle</span>
|
|
132
|
+
</CollapsibleTrigger>
|
|
133
|
+
</div>
|
|
134
|
+
<div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
|
|
135
|
+
Pushed to main
|
|
136
|
+
</div>
|
|
137
|
+
<CollapsibleContent>
|
|
138
|
+
<div className="flex flex-col gap-2">
|
|
139
|
+
<div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
|
|
140
|
+
Merged PR #42
|
|
141
|
+
</div>
|
|
142
|
+
<div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
|
|
143
|
+
Opened issue #43
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
</CollapsibleContent>
|
|
147
|
+
</Collapsible>
|
|
148
|
+
</>
|
|
149
|
+
} />
|
|
154
150
|
|
|
155
|
-
<
|
|
156
|
-
label="Controlled Mode"
|
|
157
|
-
description="Trạng thái mở được kiểm soát bằng state."
|
|
158
|
-
codeString={`const [isOpen, setIsOpen] = React.useState(false) return (
|
|
151
|
+
<ShowcaseExample title="Controlled Mode" description="Trạng thái mở được kiểm soát bằng state." code={`const [isOpen, setIsOpen] = React.useState(false) return (
|
|
159
152
|
<Collapsible
|
|
160
153
|
open={isOpen}
|
|
161
154
|
onOpenChange={setIsOpen}
|
|
@@ -183,59 +176,55 @@ function CollapsibleMicroShowcase() {
|
|
|
183
176
|
</div>
|
|
184
177
|
</CollapsibleContent>
|
|
185
178
|
</Collapsible>
|
|
186
|
-
)`}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
</div>
|
|
179
|
+
)`} preview={
|
|
180
|
+
<>
|
|
181
|
+
<div className="w-full space-y-4">
|
|
182
|
+
<div className="flex items-center gap-4 rounded-md border border-border border-dashed p-4">
|
|
183
|
+
<Button size="sm" onClick={() => setIsOpen(!isOpen)}>
|
|
184
|
+
{isOpen
|
|
185
|
+
? "Đóng bảng bên dưới (External)"
|
|
186
|
+
: "Mở bảng bên dưới (External)"}
|
|
187
|
+
</Button>
|
|
188
|
+
<span className="text-sm text-muted-foreground">
|
|
189
|
+
State hiện tại:{" "}
|
|
190
|
+
<strong className="text-foreground">
|
|
191
|
+
{isOpen ? "Mở" : "Đóng"}
|
|
192
|
+
</strong>
|
|
193
|
+
</span>
|
|
194
|
+
</div>
|
|
203
195
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
196
|
+
<Collapsible
|
|
197
|
+
open={isOpen}
|
|
198
|
+
onOpenChange={setIsOpen}
|
|
199
|
+
className="w-full space-y-2 rounded-md border border-border p-4 bg-muted/20"
|
|
200
|
+
>
|
|
201
|
+
<div className="flex items-center justify-between">
|
|
202
|
+
<h4 className="text-sm font-semibold">
|
|
203
|
+
Bảng hiển thị nội dung
|
|
204
|
+
</h4>
|
|
205
|
+
<CollapsibleTrigger
|
|
206
|
+
render={
|
|
207
|
+
<Button variant="ghost" size="sm" className="w-9 p-0" />
|
|
208
|
+
}
|
|
209
|
+
>
|
|
210
|
+
<ChevronsUpDownIcon className="h-4 w-4" />
|
|
211
|
+
<span className="sr-only">Toggle</span>
|
|
212
|
+
</CollapsibleTrigger>
|
|
213
|
+
</div>
|
|
214
|
+
<CollapsibleContent>
|
|
215
|
+
<div className="flex flex-col gap-2 pt-2">
|
|
216
|
+
<div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm text-center">
|
|
217
|
+
Nội dung này được điều khiển bởi nút bên ngoài hoặc mũi tên
|
|
218
|
+
ở trên!
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
</CollapsibleContent>
|
|
222
|
+
</Collapsible>
|
|
223
|
+
</div>
|
|
224
|
+
</>
|
|
225
|
+
} />
|
|
234
226
|
|
|
235
|
-
<
|
|
236
|
-
label="Disabled"
|
|
237
|
-
description="Không thể tương tác (Vô hiệu hóa)."
|
|
238
|
-
codeString={`<Collapsible disabled className="w-full space-y-2">
|
|
227
|
+
<ShowcaseExample title="Disabled" description="Không thể tương tác (Vô hiệu hóa)." code={`<Collapsible disabled className="w-full space-y-2">
|
|
239
228
|
<div className="flex items-center justify-between space-x-4 px-4 opacity-50">
|
|
240
229
|
<h4 className="text-sm font-semibold">
|
|
241
230
|
Archived Repositories
|
|
@@ -263,46 +252,44 @@ function CollapsibleMicroShowcase() {
|
|
|
263
252
|
</div>
|
|
264
253
|
</div>
|
|
265
254
|
</CollapsibleContent>
|
|
266
|
-
</Collapsible>`}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
255
|
+
</Collapsible>`} preview={
|
|
256
|
+
<>
|
|
257
|
+
<Collapsible disabled className="w-full space-y-2">
|
|
258
|
+
<div className="flex items-center justify-between space-x-4 px-4 opacity-50">
|
|
259
|
+
<h4 className="text-sm font-semibold">Archived Repositories</h4>
|
|
260
|
+
<CollapsibleTrigger
|
|
261
|
+
render={
|
|
262
|
+
<Button variant="ghost" size="sm" className="w-9 p-0" />
|
|
263
|
+
}
|
|
264
|
+
>
|
|
265
|
+
<ChevronsUpDownIcon className="h-4 w-4" />
|
|
266
|
+
<span className="sr-only">Toggle</span>
|
|
267
|
+
</CollapsibleTrigger>
|
|
268
|
+
</div>
|
|
269
|
+
<div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm opacity-50">
|
|
270
|
+
@radix-ui/react-toolbar
|
|
271
|
+
</div>
|
|
272
|
+
<CollapsibleContent>
|
|
273
|
+
<div className="flex flex-col gap-2">
|
|
274
|
+
<div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm opacity-50">
|
|
275
|
+
@radix-ui/react-popover
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
</CollapsibleContent>
|
|
279
|
+
</Collapsible>
|
|
280
|
+
</>
|
|
281
|
+
} />
|
|
292
282
|
</ExampleGrid>
|
|
293
283
|
</div>
|
|
294
284
|
);
|
|
295
285
|
}
|
|
296
286
|
|
|
297
|
-
// ──────────────────────────────────────────────────────────
|
|
298
|
-
// SECTION 3: Entry point
|
|
299
|
-
// ──────────────────────────────────────────────────────────
|
|
300
287
|
export default function CollapsibleShowcase() {
|
|
301
288
|
return (
|
|
302
289
|
<Showcase
|
|
303
290
|
title="Collapsible"
|
|
304
291
|
description="Mở rộng/thu gọn một panel nội dung."
|
|
305
|
-
|
|
292
|
+
guideline={
|
|
306
293
|
<ShowcaseDocs>
|
|
307
294
|
<DocsP>
|
|
308
295
|
Dùng để ẩn/hiện các phần nội dung phụ, giúp tiết kiệm không gian màn
|
|
@@ -311,11 +298,7 @@ export default function CollapsibleShowcase() {
|
|
|
311
298
|
</DocsP>
|
|
312
299
|
</ShowcaseDocs>
|
|
313
300
|
}
|
|
314
|
-
|
|
315
|
-
{
|
|
316
|
-
label: "Micro (Primitive)",
|
|
317
|
-
content: <CollapsibleMicroShowcase /> },
|
|
318
|
-
]}
|
|
301
|
+
micro={{ content: <CollapsibleMicroShowcase /> }}
|
|
319
302
|
/>
|
|
320
303
|
);
|
|
321
304
|
}
|