@astryxdesign/cli 0.1.2-canary.deb5aa0 → 0.1.2-canary.df46db7
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/docs/layout.doc.dense.mjs +90 -0
- package/docs/layout.doc.mjs +160 -0
- package/docs/principles.doc.dense.mjs +2 -2
- package/docs/principles.doc.mjs +4 -0
- package/docs/principles.doc.zh.mjs +2 -2
- package/package.json +7 -7
- package/src/api/blog.mjs +192 -0
- package/src/api/blog.test.mjs +144 -0
- package/src/api/index.mjs +1 -0
- package/src/commands/agent-docs.mjs +3 -0
- package/src/commands/blog.mjs +60 -0
- package/src/commands/build-theme.mjs +117 -0
- package/src/commands/build-theme.watch.test.mjs +157 -0
- package/src/index.mjs +1 -0
- package/src/lib/error-codes.mjs +8 -0
- package/src/lib/site.mjs +20 -0
- package/templates/blocks/components/AvatarStatusDot/AvatarStatusDotVariants.doc.mjs +14 -0
- package/templates/blocks/components/AvatarStatusDot/AvatarStatusDotVariants.tsx +28 -0
- package/templates/blocks/components/Blockquote/BlockquoteTestimonials.doc.mjs +14 -0
- package/templates/blocks/components/Blockquote/BlockquoteTestimonials.tsx +34 -0
- package/templates/blocks/components/Blockquote/BlockquoteWithCite.doc.mjs +14 -0
- package/templates/blocks/components/Blockquote/BlockquoteWithCite.tsx +21 -0
- package/templates/blocks/components/BreadcrumbItem/BreadcrumbItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/BreadcrumbItem/BreadcrumbItemBasic.tsx +15 -0
- package/templates/blocks/components/ButtonGroup/ButtonGroupBasic.doc.mjs +14 -0
- package/templates/blocks/components/ButtonGroup/ButtonGroupBasic.tsx +16 -0
- package/templates/blocks/components/ChatDictationButton/ChatDictationButtonBasic.doc.mjs +19 -0
- package/templates/blocks/components/ChatDictationButton/ChatDictationButtonBasic.tsx +34 -0
- package/templates/blocks/components/CheckboxListItem/CheckboxListItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/CheckboxListItem/CheckboxListItemBasic.tsx +30 -0
- package/templates/blocks/components/CollapsibleGroup/CollapsibleGroupAccordion.doc.mjs +14 -0
- package/templates/blocks/components/CollapsibleGroup/CollapsibleGroupAccordion.tsx +31 -0
- package/templates/blocks/components/CommandPaletteEmpty/CommandPaletteEmptyBasic.doc.mjs +14 -0
- package/templates/blocks/components/CommandPaletteEmpty/CommandPaletteEmptyBasic.tsx +26 -0
- package/templates/blocks/components/CommandPaletteFooter/CommandPaletteFooterBasic.doc.mjs +14 -0
- package/templates/blocks/components/CommandPaletteFooter/CommandPaletteFooterBasic.tsx +32 -0
- package/templates/blocks/components/CommandPaletteGroup/CommandPaletteGroupBasic.doc.mjs +18 -0
- package/templates/blocks/components/CommandPaletteGroup/CommandPaletteGroupBasic.tsx +32 -0
- package/templates/blocks/components/CommandPaletteItem/CommandPaletteItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/CommandPaletteItem/CommandPaletteItemBasic.tsx +27 -0
- package/templates/blocks/components/ContextMenu/ContextMenuBasic.doc.mjs +14 -0
- package/templates/blocks/components/ContextMenu/ContextMenuBasic.tsx +32 -0
- package/templates/blocks/components/DialogHeader/DialogHeaderBasic.doc.mjs +14 -0
- package/templates/blocks/components/DialogHeader/DialogHeaderBasic.tsx +30 -0
- package/templates/blocks/components/DropdownMenu/DropdownMenuShowcase.tsx +0 -5
- package/templates/blocks/components/DropdownMenuItem/DropdownMenuItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/DropdownMenuItem/DropdownMenuItemBasic.tsx +27 -0
- package/templates/blocks/components/DropdownMenuItem/DropdownMenuItemShowcase.tsx +1 -4
- package/templates/blocks/components/FieldLabel/FieldLabelBasic.doc.mjs +14 -0
- package/templates/blocks/components/FieldLabel/FieldLabelBasic.tsx +20 -0
- package/templates/blocks/components/FieldStatus/FieldStatusBasic.doc.mjs +14 -0
- package/templates/blocks/components/FieldStatus/FieldStatusBasic.tsx +23 -0
- package/templates/blocks/components/FileInput/FileInputBasic.doc.mjs +14 -0
- package/templates/blocks/components/FileInput/FileInputBasic.tsx +22 -0
- package/templates/blocks/components/GridSpan/GridSpanColumns.doc.mjs +14 -0
- package/templates/blocks/components/GridSpan/GridSpanColumns.tsx +38 -0
- package/templates/blocks/components/HStack/HStackBasic.doc.mjs +14 -0
- package/templates/blocks/components/HStack/HStackBasic.tsx +16 -0
- package/templates/blocks/components/InputGroup/InputGroupBasic.doc.mjs +14 -0
- package/templates/blocks/components/InputGroup/InputGroupBasic.tsx +27 -0
- package/templates/blocks/components/LayoutContent/LayoutContentBasic.doc.mjs +23 -0
- package/templates/blocks/components/LayoutContent/LayoutContentBasic.tsx +40 -0
- package/templates/blocks/components/LayoutFooter/LayoutFooterActions.doc.mjs +22 -0
- package/templates/blocks/components/LayoutFooter/LayoutFooterActions.tsx +41 -0
- package/templates/blocks/components/LayoutHeader/LayoutHeaderWithActions.doc.mjs +23 -0
- package/templates/blocks/components/LayoutHeader/LayoutHeaderWithActions.tsx +40 -0
- package/templates/blocks/components/LayoutPanel/LayoutPanelNavigation.doc.mjs +22 -0
- package/templates/blocks/components/LayoutPanel/LayoutPanelNavigation.tsx +37 -0
- package/templates/blocks/components/Lightbox/LightboxGallery.doc.mjs +14 -0
- package/templates/blocks/components/Lightbox/LightboxGallery.tsx +53 -0
- package/templates/blocks/components/Lightbox/LightboxShowcase.tsx +4 -3
- package/templates/blocks/components/Lightbox/LightboxVideo.doc.mjs +14 -0
- package/templates/blocks/components/Lightbox/LightboxVideo.tsx +27 -0
- package/templates/blocks/components/Lightbox/LightboxZoom.doc.mjs +14 -0
- package/templates/blocks/components/Lightbox/LightboxZoom.tsx +33 -0
- package/templates/blocks/components/MetadataListItem/MetadataListItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/MetadataListItem/MetadataListItemBasic.tsx +19 -0
- package/templates/blocks/components/MobileNavToggle/MobileNavToggleBasic.doc.mjs +23 -0
- package/templates/blocks/components/MobileNavToggle/MobileNavToggleBasic.tsx +42 -0
- package/templates/blocks/components/MoreMenu/MoreMenuShowcase.tsx +0 -5
- package/templates/blocks/components/NavIcon/NavIconBasic.doc.mjs +14 -0
- package/templates/blocks/components/NavIcon/NavIconBasic.tsx +16 -0
- package/templates/blocks/components/RadioListItem/RadioListItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/RadioListItem/RadioListItemBasic.tsx +30 -0
- package/templates/blocks/components/Resizable/ResizableSidebar.doc.mjs +25 -0
- package/templates/blocks/components/Resizable/ResizableSidebar.tsx +67 -0
- package/templates/blocks/components/SegmentedControlItem/SegmentedControlItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/SegmentedControlItem/SegmentedControlItemBasic.tsx +21 -0
- package/templates/blocks/components/SelectorOption/SelectorOptionBasic.doc.mjs +14 -0
- package/templates/blocks/components/SelectorOption/SelectorOptionBasic.tsx +39 -0
- package/templates/blocks/components/SideNavCollapseButton/SideNavCollapseButtonBasic.doc.mjs +14 -0
- package/templates/blocks/components/SideNavCollapseButton/SideNavCollapseButtonBasic.tsx +55 -0
- package/templates/blocks/components/SideNavHeading/SideNavHeadingBasic.doc.mjs +14 -0
- package/templates/blocks/components/SideNavHeading/SideNavHeadingBasic.tsx +38 -0
- package/templates/blocks/components/SideNavItem/SideNavItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/SideNavItem/SideNavItemBasic.tsx +49 -0
- package/templates/blocks/components/SideNavSection/SideNavSectionBasic.doc.mjs +14 -0
- package/templates/blocks/components/SideNavSection/SideNavSectionBasic.tsx +71 -0
- package/templates/blocks/components/StackItem/StackItemFill.doc.mjs +14 -0
- package/templates/blocks/components/StackItem/StackItemFill.tsx +28 -0
- package/templates/blocks/components/TabMenu/TabMenuBasic.doc.mjs +14 -0
- package/templates/blocks/components/TabMenu/TabMenuBasic.tsx +23 -0
- package/templates/blocks/components/ToggleButtonGroup/ToggleButtonGroupVertical.doc.mjs +14 -0
- package/templates/blocks/components/ToggleButtonGroup/ToggleButtonGroupVertical.tsx +47 -0
- package/templates/blocks/components/TopNavHeading/TopNavHeadingBasic.doc.mjs +14 -0
- package/templates/blocks/components/TopNavHeading/TopNavHeadingBasic.tsx +22 -0
- package/templates/blocks/components/TopNavItem/TopNavItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/TopNavItem/TopNavItemBasic.tsx +21 -0
- package/templates/blocks/components/TopNavMegaMenu/TopNavMegaMenuBasic.doc.mjs +20 -0
- package/templates/blocks/components/TopNavMegaMenu/TopNavMegaMenuBasic.tsx +46 -0
- package/templates/blocks/components/TopNavMegaMenuFeaturedCard/TopNavMegaMenuFeaturedCardBasic.doc.mjs +14 -0
- package/templates/blocks/components/TopNavMegaMenuFeaturedCard/TopNavMegaMenuFeaturedCardBasic.tsx +16 -0
- package/templates/blocks/components/TopNavMegaMenuItem/TopNavMegaMenuItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/TopNavMegaMenuItem/TopNavMegaMenuItemBasic.tsx +26 -0
- package/templates/blocks/components/TopNavMenu/TopNavMenuBasic.doc.mjs +14 -0
- package/templates/blocks/components/TopNavMenu/TopNavMenuBasic.tsx +43 -0
- package/templates/blocks/components/TypeaheadItem/TypeaheadItemBasic.doc.mjs +14 -0
- package/templates/blocks/components/TypeaheadItem/TypeaheadItemBasic.tsx +43 -0
- package/templates/blocks/components/VStack/VStackBasic.doc.mjs +14 -0
- package/templates/blocks/components/VStack/VStackBasic.tsx +20 -0
- package/templates/pages/kanban-board/page.tsx +729 -0
- package/templates/pages/kanban-board/template.doc.mjs +12 -0
- package/templates/blocks/components/TreeListBranches/TreeListBranchesShowcase.doc.mjs +0 -14
- package/templates/blocks/components/TreeListBranches/TreeListBranchesShowcase.tsx +0 -64
- package/templates/blocks/components/TreeListItem/TreeListItemShowcase.doc.mjs +0 -14
- package/templates/blocks/components/TreeListItem/TreeListItemShowcase.tsx +0 -60
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'RadioListItem',
|
|
7
|
+
name: 'RadioListItem — Basic',
|
|
8
|
+
displayName: 'RadioListItem — Basic',
|
|
9
|
+
description:
|
|
10
|
+
'Radio items with labels and descriptions inside a controlled RadioList. Use for single-choice option groups like shipping methods.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 16 / 9,
|
|
13
|
+
componentsUsed: ['RadioList', 'RadioListItem'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {useState} from 'react';
|
|
6
|
+
import {RadioList, RadioListItem} from '@astryxdesign/core/RadioList';
|
|
7
|
+
|
|
8
|
+
export default function RadioListItemBasic() {
|
|
9
|
+
const [value, setValue] = useState('standard');
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<RadioList label="Shipping method" value={value} onChange={setValue}>
|
|
13
|
+
<RadioListItem
|
|
14
|
+
label="Standard"
|
|
15
|
+
value="standard"
|
|
16
|
+
description="5–7 business days"
|
|
17
|
+
/>
|
|
18
|
+
<RadioListItem
|
|
19
|
+
label="Express"
|
|
20
|
+
value="express"
|
|
21
|
+
description="2–3 business days"
|
|
22
|
+
/>
|
|
23
|
+
<RadioListItem
|
|
24
|
+
label="Overnight"
|
|
25
|
+
value="overnight"
|
|
26
|
+
description="Next business day"
|
|
27
|
+
/>
|
|
28
|
+
</RadioList>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'ResizeHandle',
|
|
7
|
+
alsoExampleFor: ['useResizable'],
|
|
8
|
+
name: 'Resizable — Collapsible with snap points',
|
|
9
|
+
displayName: 'Resizable — Collapsible with snap points',
|
|
10
|
+
description:
|
|
11
|
+
'A collapsible sidebar with snap points, driven by useResizable. Dragging snaps to preset widths, dragging past the minimum collapses the panel, and the expand method restores it programmatically.',
|
|
12
|
+
isReady: true,
|
|
13
|
+
aspectRatio: 16 / 9,
|
|
14
|
+
componentsUsed: [
|
|
15
|
+
'Resizable',
|
|
16
|
+
'ResizeHandle',
|
|
17
|
+
'Layout',
|
|
18
|
+
'LayoutPanel',
|
|
19
|
+
'LayoutContent',
|
|
20
|
+
'Card',
|
|
21
|
+
'VStack',
|
|
22
|
+
'Button',
|
|
23
|
+
'Text',
|
|
24
|
+
],
|
|
25
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {useResizable, ResizeHandle} from '@astryxdesign/core/Resizable';
|
|
6
|
+
import {
|
|
7
|
+
Card,
|
|
8
|
+
Layout,
|
|
9
|
+
LayoutContent,
|
|
10
|
+
LayoutPanel,
|
|
11
|
+
VStack,
|
|
12
|
+
} from '@astryxdesign/core/Layout';
|
|
13
|
+
import {Button} from '@astryxdesign/core/Button';
|
|
14
|
+
import {Text} from '@astryxdesign/core/Text';
|
|
15
|
+
|
|
16
|
+
export default function ResizableSidebar() {
|
|
17
|
+
const sidebar = useResizable({
|
|
18
|
+
defaultSize: 240,
|
|
19
|
+
minSizePx: 160,
|
|
20
|
+
maxSizePx: 360,
|
|
21
|
+
collapsible: true,
|
|
22
|
+
snaps: [200, 280],
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<Card variant="muted" height={240} width={500}>
|
|
27
|
+
<Layout
|
|
28
|
+
height="fill"
|
|
29
|
+
start={
|
|
30
|
+
<>
|
|
31
|
+
<LayoutPanel width={sidebar.size} hasDivider={false}>
|
|
32
|
+
<Text color="secondary">
|
|
33
|
+
{sidebar.isCollapsed
|
|
34
|
+
? ''
|
|
35
|
+
: `${Math.round(sidebar.size)}px wide`}
|
|
36
|
+
</Text>
|
|
37
|
+
</LayoutPanel>
|
|
38
|
+
<ResizeHandle
|
|
39
|
+
direction="horizontal"
|
|
40
|
+
hasDivider
|
|
41
|
+
resizable={sidebar.props}
|
|
42
|
+
label="Resize sidebar"
|
|
43
|
+
/>
|
|
44
|
+
</>
|
|
45
|
+
}
|
|
46
|
+
content={
|
|
47
|
+
<LayoutContent>
|
|
48
|
+
<VStack gap={2}>
|
|
49
|
+
<Text color="secondary">
|
|
50
|
+
Drag the handle — it snaps at 200px and 280px. Drag all the way
|
|
51
|
+
left to collapse the sidebar.
|
|
52
|
+
</Text>
|
|
53
|
+
{sidebar.isCollapsed && (
|
|
54
|
+
<Button
|
|
55
|
+
label="Expand sidebar"
|
|
56
|
+
variant="secondary"
|
|
57
|
+
size="sm"
|
|
58
|
+
onClick={() => sidebar.expand()}
|
|
59
|
+
/>
|
|
60
|
+
)}
|
|
61
|
+
</VStack>
|
|
62
|
+
</LayoutContent>
|
|
63
|
+
}
|
|
64
|
+
/>
|
|
65
|
+
</Card>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'SegmentedControlItem',
|
|
7
|
+
name: 'SegmentedControlItem — Basic',
|
|
8
|
+
displayName: 'SegmentedControlItem — Basic',
|
|
9
|
+
description:
|
|
10
|
+
'Label-only options inside a SegmentedControl. Each item declares a value; the parent control holds the selected value and change handler.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 16 / 9,
|
|
13
|
+
componentsUsed: ['SegmentedControl', 'SegmentedControlItem'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {useState} from 'react';
|
|
6
|
+
import {
|
|
7
|
+
SegmentedControl,
|
|
8
|
+
SegmentedControlItem,
|
|
9
|
+
} from '@astryxdesign/core/SegmentedControl';
|
|
10
|
+
|
|
11
|
+
export default function SegmentedControlItemBasic() {
|
|
12
|
+
const [view, setView] = useState('board');
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<SegmentedControl value={view} onChange={setView} label="View mode">
|
|
16
|
+
<SegmentedControlItem value="board" label="Board" />
|
|
17
|
+
<SegmentedControlItem value="list" label="List" />
|
|
18
|
+
<SegmentedControlItem value="timeline" label="Timeline" />
|
|
19
|
+
</SegmentedControl>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'SelectorOption',
|
|
7
|
+
name: 'SelectorOption — Basic',
|
|
8
|
+
displayName: 'SelectorOption — Basic',
|
|
9
|
+
description:
|
|
10
|
+
'A selector whose options are rendered with SelectorOption, adding a secondary description below each label. Use inside renderOption for consistent custom option styling.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 16 / 9,
|
|
13
|
+
componentsUsed: ['Selector', 'SelectorOption'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {useState} from 'react';
|
|
6
|
+
import {Selector, SelectorOption} from '@astryxdesign/core/Selector';
|
|
7
|
+
|
|
8
|
+
const descriptions: Record<string, string> = {
|
|
9
|
+
admin: 'Full access to all resources',
|
|
10
|
+
editor: 'Can edit and publish content',
|
|
11
|
+
viewer: 'Read-only access',
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const roles = [
|
|
15
|
+
{value: 'admin', label: 'Admin'},
|
|
16
|
+
{value: 'editor', label: 'Editor'},
|
|
17
|
+
{value: 'viewer', label: 'Viewer'},
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
export default function SelectorOptionBasic() {
|
|
21
|
+
const [value, setValue] = useState<string | undefined>('editor');
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<Selector
|
|
25
|
+
style={{width: 300}}
|
|
26
|
+
label="Role"
|
|
27
|
+
options={roles}
|
|
28
|
+
value={value}
|
|
29
|
+
onChange={setValue}
|
|
30
|
+
placeholder="Assign a role..."
|
|
31
|
+
renderOption={option => (
|
|
32
|
+
<SelectorOption
|
|
33
|
+
label={option.label}
|
|
34
|
+
description={descriptions[option.value]}
|
|
35
|
+
/>
|
|
36
|
+
)}
|
|
37
|
+
/>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'SideNavCollapseButton',
|
|
7
|
+
name: 'SideNavCollapseButton — Basic',
|
|
8
|
+
displayName: 'SideNavCollapseButton — Basic',
|
|
9
|
+
description:
|
|
10
|
+
'Place a collapse button in the SideNav footer to let users toggle the rail between expanded and collapsed states. Disable the built-in button via collapsible={{hasButton: false}} when positioning it yourself.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 16 / 9,
|
|
13
|
+
componentsUsed: ['SideNav', 'SideNavCollapseButton', 'SideNavItem'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import type {ComponentProps} from 'react';
|
|
6
|
+
import {
|
|
7
|
+
SideNav,
|
|
8
|
+
SideNavCollapseButton,
|
|
9
|
+
SideNavItem,
|
|
10
|
+
} from '@astryxdesign/core/SideNav';
|
|
11
|
+
|
|
12
|
+
function HomeIcon(props: ComponentProps<'svg'>) {
|
|
13
|
+
return (
|
|
14
|
+
<svg
|
|
15
|
+
fill="none"
|
|
16
|
+
viewBox="0 0 24 24"
|
|
17
|
+
strokeWidth={1.5}
|
|
18
|
+
stroke="currentColor"
|
|
19
|
+
{...props}>
|
|
20
|
+
<path
|
|
21
|
+
strokeLinecap="round"
|
|
22
|
+
strokeLinejoin="round"
|
|
23
|
+
d="m2.25 12 8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25"
|
|
24
|
+
/>
|
|
25
|
+
</svg>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function FolderIcon(props: ComponentProps<'svg'>) {
|
|
30
|
+
return (
|
|
31
|
+
<svg
|
|
32
|
+
fill="none"
|
|
33
|
+
viewBox="0 0 24 24"
|
|
34
|
+
strokeWidth={1.5}
|
|
35
|
+
stroke="currentColor"
|
|
36
|
+
{...props}>
|
|
37
|
+
<path
|
|
38
|
+
strokeLinecap="round"
|
|
39
|
+
strokeLinejoin="round"
|
|
40
|
+
d="M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z"
|
|
41
|
+
/>
|
|
42
|
+
</svg>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export default function SideNavCollapseButtonBasic() {
|
|
47
|
+
return (
|
|
48
|
+
<SideNav
|
|
49
|
+
collapsible={{hasButton: false}}
|
|
50
|
+
footerIcons={<SideNavCollapseButton />}>
|
|
51
|
+
<SideNavItem label="Home" icon={HomeIcon} isSelected href="#" />
|
|
52
|
+
<SideNavItem label="Projects" icon={FolderIcon} href="#" />
|
|
53
|
+
</SideNav>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'SideNavHeading',
|
|
7
|
+
name: 'SideNavHeading — Basic',
|
|
8
|
+
displayName: 'SideNavHeading — Basic',
|
|
9
|
+
description:
|
|
10
|
+
'A SideNav header with an app icon and a linked title. Pass it to the SideNav header prop to identify the product or workspace at the top of the navigation rail.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 16 / 9,
|
|
13
|
+
componentsUsed: ['SideNav', 'SideNavHeading'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {SideNav, SideNavHeading} from '@astryxdesign/core/SideNav';
|
|
6
|
+
|
|
7
|
+
function AppIcon() {
|
|
8
|
+
return (
|
|
9
|
+
<svg
|
|
10
|
+
width="20"
|
|
11
|
+
height="20"
|
|
12
|
+
viewBox="0 0 24 24"
|
|
13
|
+
fill="none"
|
|
14
|
+
stroke="currentColor"
|
|
15
|
+
strokeWidth="1.5">
|
|
16
|
+
<path
|
|
17
|
+
strokeLinecap="round"
|
|
18
|
+
strokeLinejoin="round"
|
|
19
|
+
d="M3.75 6A2.25 2.25 0 0 1 6 3.75h2.25A2.25 2.25 0 0 1 10.5 6v2.25a2.25 2.25 0 0 1-2.25 2.25H6a2.25 2.25 0 0 1-2.25-2.25V6ZM3.75 15.75A2.25 2.25 0 0 1 6 13.5h2.25a2.25 2.25 0 0 1 2.25 2.25V18a2.25 2.25 0 0 1-2.25 2.25H6A2.25 2.25 0 0 1 3.75 18v-2.25ZM13.5 6a2.25 2.25 0 0 1 2.25-2.25H18A2.25 2.25 0 0 1 20.25 6v2.25A2.25 2.25 0 0 1 18 10.5h-2.25a2.25 2.25 0 0 1-2.25-2.25V6ZM13.5 15.75a2.25 2.25 0 0 1 2.25-2.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-2.25a2.25 2.25 0 0 1-2.25-2.25v-2.25Z"
|
|
20
|
+
/>
|
|
21
|
+
</svg>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default function SideNavHeadingBasic() {
|
|
26
|
+
return (
|
|
27
|
+
<SideNav
|
|
28
|
+
header={
|
|
29
|
+
<SideNavHeading
|
|
30
|
+
heading="Analytics"
|
|
31
|
+
icon={<AppIcon />}
|
|
32
|
+
headingHref="/"
|
|
33
|
+
/>
|
|
34
|
+
}>
|
|
35
|
+
{null}
|
|
36
|
+
</SideNav>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'SideNavItem',
|
|
7
|
+
name: 'SideNavItem — Basic',
|
|
8
|
+
displayName: 'SideNavItem — Basic',
|
|
9
|
+
description:
|
|
10
|
+
'Navigation links inside a SideNav, each with a label, an icon, and an href. Mark the item for the current page with isSelected.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 16 / 9,
|
|
13
|
+
componentsUsed: ['SideNav', 'SideNavItem'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import type {ComponentProps} from 'react';
|
|
6
|
+
import {SideNav, SideNavItem} from '@astryxdesign/core/SideNav';
|
|
7
|
+
|
|
8
|
+
function InboxIcon(props: ComponentProps<'svg'>) {
|
|
9
|
+
return (
|
|
10
|
+
<svg
|
|
11
|
+
fill="none"
|
|
12
|
+
viewBox="0 0 24 24"
|
|
13
|
+
strokeWidth={1.5}
|
|
14
|
+
stroke="currentColor"
|
|
15
|
+
{...props}>
|
|
16
|
+
<path
|
|
17
|
+
strokeLinecap="round"
|
|
18
|
+
strokeLinejoin="round"
|
|
19
|
+
d="M2.25 13.5h3.86a2.25 2.25 0 0 1 2.012 1.244l.256.512a2.25 2.25 0 0 0 2.013 1.244h3.218a2.25 2.25 0 0 0 2.013-1.244l.256-.512a2.25 2.25 0 0 1 2.013-1.244h3.859m-19.5.338V18a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18v-4.162c0-.224-.034-.447-.1-.661L19.24 5.338a2.25 2.25 0 0 0-2.15-1.588H6.911a2.25 2.25 0 0 0-2.15 1.588L2.35 13.177a2.25 2.25 0 0 0-.1.661Z"
|
|
20
|
+
/>
|
|
21
|
+
</svg>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function DocumentIcon(props: ComponentProps<'svg'>) {
|
|
26
|
+
return (
|
|
27
|
+
<svg
|
|
28
|
+
fill="none"
|
|
29
|
+
viewBox="0 0 24 24"
|
|
30
|
+
strokeWidth={1.5}
|
|
31
|
+
stroke="currentColor"
|
|
32
|
+
{...props}>
|
|
33
|
+
<path
|
|
34
|
+
strokeLinecap="round"
|
|
35
|
+
strokeLinejoin="round"
|
|
36
|
+
d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"
|
|
37
|
+
/>
|
|
38
|
+
</svg>
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default function SideNavItemBasic() {
|
|
43
|
+
return (
|
|
44
|
+
<SideNav>
|
|
45
|
+
<SideNavItem label="Inbox" icon={InboxIcon} isSelected href="#" />
|
|
46
|
+
<SideNavItem label="Documents" icon={DocumentIcon} href="#" />
|
|
47
|
+
</SideNav>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'SideNavSection',
|
|
7
|
+
name: 'SideNavSection — Basic',
|
|
8
|
+
displayName: 'SideNavSection — Basic',
|
|
9
|
+
description:
|
|
10
|
+
'Group related SideNavItems under titled sections. Use sections to organize longer navigation lists into scannable clusters like Overview and Account.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 16 / 9,
|
|
13
|
+
componentsUsed: ['SideNav', 'SideNavSection', 'SideNavItem'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import type {ComponentProps} from 'react';
|
|
6
|
+
import {SideNav, SideNavItem, SideNavSection} from '@astryxdesign/core/SideNav';
|
|
7
|
+
|
|
8
|
+
function HomeIcon(props: ComponentProps<'svg'>) {
|
|
9
|
+
return (
|
|
10
|
+
<svg
|
|
11
|
+
fill="none"
|
|
12
|
+
viewBox="0 0 24 24"
|
|
13
|
+
strokeWidth={1.5}
|
|
14
|
+
stroke="currentColor"
|
|
15
|
+
{...props}>
|
|
16
|
+
<path
|
|
17
|
+
strokeLinecap="round"
|
|
18
|
+
strokeLinejoin="round"
|
|
19
|
+
d="m2.25 12 8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25"
|
|
20
|
+
/>
|
|
21
|
+
</svg>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function ChartIcon(props: ComponentProps<'svg'>) {
|
|
26
|
+
return (
|
|
27
|
+
<svg
|
|
28
|
+
fill="none"
|
|
29
|
+
viewBox="0 0 24 24"
|
|
30
|
+
strokeWidth={1.5}
|
|
31
|
+
stroke="currentColor"
|
|
32
|
+
{...props}>
|
|
33
|
+
<path
|
|
34
|
+
strokeLinecap="round"
|
|
35
|
+
strokeLinejoin="round"
|
|
36
|
+
d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z"
|
|
37
|
+
/>
|
|
38
|
+
</svg>
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function UserIcon(props: ComponentProps<'svg'>) {
|
|
43
|
+
return (
|
|
44
|
+
<svg
|
|
45
|
+
fill="none"
|
|
46
|
+
viewBox="0 0 24 24"
|
|
47
|
+
strokeWidth={1.5}
|
|
48
|
+
stroke="currentColor"
|
|
49
|
+
{...props}>
|
|
50
|
+
<path
|
|
51
|
+
strokeLinecap="round"
|
|
52
|
+
strokeLinejoin="round"
|
|
53
|
+
d="M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z"
|
|
54
|
+
/>
|
|
55
|
+
</svg>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export default function SideNavSectionBasic() {
|
|
60
|
+
return (
|
|
61
|
+
<SideNav>
|
|
62
|
+
<SideNavSection title="Overview">
|
|
63
|
+
<SideNavItem label="Dashboard" icon={HomeIcon} isSelected href="#" />
|
|
64
|
+
<SideNavItem label="Analytics" icon={ChartIcon} href="#" />
|
|
65
|
+
</SideNavSection>
|
|
66
|
+
<SideNavSection title="Account">
|
|
67
|
+
<SideNavItem label="Profile" icon={UserIcon} href="#" />
|
|
68
|
+
</SideNavSection>
|
|
69
|
+
</SideNav>
|
|
70
|
+
);
|
|
71
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'StackItem',
|
|
7
|
+
name: 'StackItem — Fill',
|
|
8
|
+
displayName: 'StackItem — Fill',
|
|
9
|
+
description:
|
|
10
|
+
'A static-width item next to one that fills the remaining space. Wrap stack children in StackItem when an item needs explicit sizing control.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 16 / 9,
|
|
13
|
+
componentsUsed: ['StackItem', 'HStack', 'Card', 'Text'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {HStack, StackItem} from '@astryxdesign/core/Layout';
|
|
6
|
+
import {Card} from '@astryxdesign/core/Card';
|
|
7
|
+
import {Text} from '@astryxdesign/core/Text';
|
|
8
|
+
|
|
9
|
+
export default function StackItemFill() {
|
|
10
|
+
return (
|
|
11
|
+
<HStack gap={3} vAlign="center" width="100%" style={{maxWidth: 400}}>
|
|
12
|
+
<StackItem size="static">
|
|
13
|
+
<Card padding={3}>
|
|
14
|
+
<Text type="supporting" color="secondary">
|
|
15
|
+
Static
|
|
16
|
+
</Text>
|
|
17
|
+
</Card>
|
|
18
|
+
</StackItem>
|
|
19
|
+
<StackItem size="fill">
|
|
20
|
+
<Card padding={3}>
|
|
21
|
+
<Text type="supporting" color="secondary">
|
|
22
|
+
Fills remaining space
|
|
23
|
+
</Text>
|
|
24
|
+
</Card>
|
|
25
|
+
</StackItem>
|
|
26
|
+
</HStack>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'TabMenu',
|
|
7
|
+
name: 'TabMenu — Basic',
|
|
8
|
+
displayName: 'TabMenu — Basic',
|
|
9
|
+
description:
|
|
10
|
+
'An overflow menu at the end of a TabList that collects secondary tabs behind a dropdown. Use it when there are more tabs than fit comfortably inline.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 16 / 9,
|
|
13
|
+
componentsUsed: ['TabList', 'Tab', 'TabMenu'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {useState} from 'react';
|
|
6
|
+
import {TabList, Tab, TabMenu} from '@astryxdesign/core/TabList';
|
|
7
|
+
|
|
8
|
+
export default function TabMenuBasic() {
|
|
9
|
+
const [value, setValue] = useState('overview');
|
|
10
|
+
return (
|
|
11
|
+
<TabList value={value} onChange={setValue}>
|
|
12
|
+
<Tab value="overview" label="Overview" />
|
|
13
|
+
<Tab value="activity" label="Activity" />
|
|
14
|
+
<TabMenu
|
|
15
|
+
label="More"
|
|
16
|
+
options={[
|
|
17
|
+
{value: 'settings', label: 'Settings'},
|
|
18
|
+
{value: 'billing', label: 'Billing'},
|
|
19
|
+
]}
|
|
20
|
+
/>
|
|
21
|
+
</TabList>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('../../../../../core/src/docs-types').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'ToggleButtonGroup',
|
|
7
|
+
name: 'ToggleButtonGroup — Vertical',
|
|
8
|
+
displayName: 'ToggleButtonGroup — Vertical',
|
|
9
|
+
description:
|
|
10
|
+
'A vertically stacked ToggleButtonGroup using the vertical orientation, shown with both single-select and multi-select behavior — ideal for sidebar-style option lists and vertical toolbars.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 3 / 4,
|
|
13
|
+
componentsUsed: ['ToggleButton', 'ToggleButtonGroup', 'Layout', 'Text'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {useState} from 'react';
|
|
6
|
+
import {ToggleButton, ToggleButtonGroup} from '@astryxdesign/core/ToggleButton';
|
|
7
|
+
import {VStack} from '@astryxdesign/core/Layout';
|
|
8
|
+
import {Text} from '@astryxdesign/core/Text';
|
|
9
|
+
|
|
10
|
+
export default function ToggleButtonGroupVertical() {
|
|
11
|
+
const [view, setView] = useState<string | null>('grid');
|
|
12
|
+
const [filters, setFilters] = useState<string[]>(['active']);
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<VStack gap={4}>
|
|
16
|
+
<VStack gap={1}>
|
|
17
|
+
<Text type="label" color="secondary">
|
|
18
|
+
Single select
|
|
19
|
+
</Text>
|
|
20
|
+
<ToggleButtonGroup
|
|
21
|
+
orientation="vertical"
|
|
22
|
+
value={view}
|
|
23
|
+
onChange={setView}
|
|
24
|
+
label="View mode">
|
|
25
|
+
<ToggleButton value="list" label="List" />
|
|
26
|
+
<ToggleButton value="grid" label="Grid" />
|
|
27
|
+
<ToggleButton value="board" label="Board" />
|
|
28
|
+
</ToggleButtonGroup>
|
|
29
|
+
</VStack>
|
|
30
|
+
<VStack gap={1}>
|
|
31
|
+
<Text type="label" color="secondary">
|
|
32
|
+
Multi select
|
|
33
|
+
</Text>
|
|
34
|
+
<ToggleButtonGroup
|
|
35
|
+
orientation="vertical"
|
|
36
|
+
type="multiple"
|
|
37
|
+
value={filters}
|
|
38
|
+
onChange={setFilters}
|
|
39
|
+
label="Status filters">
|
|
40
|
+
<ToggleButton value="active" label="Active" />
|
|
41
|
+
<ToggleButton value="pending" label="Pending" />
|
|
42
|
+
<ToggleButton value="closed" label="Closed" />
|
|
43
|
+
</ToggleButtonGroup>
|
|
44
|
+
</VStack>
|
|
45
|
+
</VStack>
|
|
46
|
+
);
|
|
47
|
+
}
|