@saas-ui/react 2.11.2 → 3.0.0-alpha.0
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/CHANGELOG.md +7 -154
- package/dist/index.cjs +8461 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +26 -0
- package/dist/index.d.ts +25 -7
- package/dist/index.js +8415 -35
- package/dist/index.js.map +1 -1
- package/package.json +24 -21
- package/src/components/accordion.tsx +47 -0
- package/src/components/action-bar.tsx +40 -0
- package/src/components/alert.tsx +51 -0
- package/src/components/app-shell/app-shell.recipe.ts +52 -0
- package/src/components/app-shell/app-shell.stories.tsx +51 -0
- package/src/components/app-shell/app-shell.tsx +94 -0
- package/src/components/app-shell/index.ts +3 -0
- package/src/components/avatar.tsx +74 -0
- package/src/components/blockquote.tsx +31 -0
- package/src/components/breadcrumbs/breadcrumb.stories.tsx +17 -0
- package/src/components/breadcrumbs/breadcrumb.tsx +36 -0
- package/src/components/breadcrumbs/index.ts +1 -0
- package/src/components/breadcrumbs/namespace.ts +8 -0
- package/src/components/button/button.recipe.ts +182 -0
- package/src/components/button/button.stories.tsx +99 -0
- package/src/components/button/button.tsx +55 -0
- package/src/components/button/index.ts +2 -0
- package/src/components/checkbox/checkbox.tsx +26 -0
- package/src/components/checkbox/index.ts +2 -0
- package/src/components/checkbox-card.tsx +57 -0
- package/src/components/checkbox.tsx +25 -0
- package/src/components/clipboard.tsx +107 -0
- package/src/components/close-button/close-button.stories.tsx +12 -0
- package/src/components/close-button/close-button.tsx +18 -0
- package/src/components/close-button/index.ts +2 -0
- package/src/components/color-mode.tsx +65 -0
- package/src/components/command/command.recipe.ts +17 -0
- package/src/components/command/command.stories.tsx +47 -0
- package/src/components/command/command.tsx +50 -0
- package/src/components/command/index.ts +1 -0
- package/src/components/data-list.tsx +37 -0
- package/src/components/dialog/dialog.tsx +66 -0
- package/src/components/dialog/index.ts +1 -0
- package/src/components/dialog/namespace.ts +18 -0
- package/src/components/drawer/drawer.tsx +56 -0
- package/src/components/drawer/index.ts +3 -0
- package/src/components/drawer/namespace.ts +19 -0
- package/src/components/empty-state.tsx +34 -0
- package/src/components/field.tsx +33 -0
- package/src/components/file-button.tsx +166 -0
- package/src/components/grid-list/grid-list.recipe.ts +113 -0
- package/src/components/hover-card.tsx +35 -0
- package/src/components/icon-badge/icon-badge.recipe.ts +57 -0
- package/src/components/icon-badge/icon-badge.stories.tsx +38 -0
- package/src/components/icon-badge/icon-badge.tsx +59 -0
- package/src/components/icon-badge/index.ts +2 -0
- package/src/components/icons/create-icon.tsx +41 -0
- package/src/components/icons/icons.tsx +121 -0
- package/src/components/icons/index.ts +1 -0
- package/src/components/input-group/index.ts +1 -0
- package/src/components/input-group/input-group.tsx +46 -0
- package/src/components/link/index.ts +2 -0
- package/src/components/link/link.stories.tsx +17 -0
- package/src/components/link/link.test.tsx +33 -0
- package/src/components/link/link.tsx +27 -0
- package/src/components/link-button.tsx +12 -0
- package/src/components/loading-overlay/index.ts +1 -0
- package/src/components/loading-overlay/loading-overlay.recipe.ts +61 -0
- package/src/components/loading-overlay/loading-overlay.stories.tsx +68 -0
- package/src/components/loading-overlay/loading-overlay.tsx +54 -0
- package/src/components/loading-overlay/namespace.ts +7 -0
- package/src/components/menu.tsx +108 -0
- package/src/components/native-select.tsx +57 -0
- package/src/components/navbar/index.ts +1 -0
- package/src/components/navbar/namespace.ts +9 -0
- package/src/components/navbar/navbar.recipe.ts +109 -0
- package/src/components/navbar/navbar.stories.tsx +435 -0
- package/src/components/navbar/navbar.test.tsx +49 -0
- package/src/components/navbar/navbar.tsx +39 -0
- package/src/components/number-input/index.ts +2 -0
- package/src/components/number-input/number-input.tsx +41 -0
- package/src/components/pagination.tsx +207 -0
- package/src/components/password-input/index.ts +2 -0
- package/src/components/password-input/password-input.tsx +98 -0
- package/src/components/persona/index.ts +2 -0
- package/src/components/persona/namespace.ts +18 -0
- package/src/components/persona/persona-primitive.tsx +220 -0
- package/src/components/persona/persona.recipe.ts +94 -0
- package/src/components/persona/persona.stories.tsx +101 -0
- package/src/components/persona/persona.tsx +143 -0
- package/src/components/pin-input/index.ts +2 -0
- package/src/components/pin-input/pin-input.tsx +36 -0
- package/src/components/popover.tsx +58 -0
- package/src/components/progress-circle.tsx +37 -0
- package/src/components/progress.tsx +40 -0
- package/src/components/prose.tsx +264 -0
- package/src/components/provider.tsx +12 -0
- package/src/components/radio/index.ts +2 -0
- package/src/components/radio/radio.tsx +27 -0
- package/src/components/radio-card.tsx +57 -0
- package/src/components/radio.tsx +24 -0
- package/src/components/rating.tsx +27 -0
- package/src/components/search-input/index.ts +2 -0
- package/src/components/search-input/search-input.stories.tsx +63 -0
- package/src/components/search-input/search-input.tsx +134 -0
- package/src/components/segmented-control.tsx +47 -0
- package/src/components/select/index.ts +1 -0
- package/src/components/select/namespace.ts +18 -0
- package/src/components/select/select.tsx +135 -0
- package/src/components/sidebar/index.ts +7 -0
- package/src/components/sidebar/namespace.ts +27 -0
- package/src/components/sidebar/sidebar-item.recipe.ts +65 -0
- package/src/components/sidebar/sidebar.recipe.ts +237 -0
- package/src/components/sidebar/sidebar.stories.tsx +903 -0
- package/src/components/sidebar/sidebar.tsx +204 -0
- package/src/components/skeleton.tsx +44 -0
- package/src/components/slider.tsx +53 -0
- package/src/components/spinner/index.ts +2 -0
- package/src/components/spinner/spinner.stories.tsx +19 -0
- package/src/components/spinner/spinner.tsx +21 -0
- package/src/components/stat.tsx +75 -0
- package/src/components/status.tsx +29 -0
- package/src/components/stepper-input.tsx +49 -0
- package/src/components/steps/index.ts +1 -0
- package/src/components/steps/namespace.ts +16 -0
- package/src/components/steps/steps.tsx +82 -0
- package/src/components/switch/index.ts +3 -0
- package/src/components/switch/switch.tsx +39 -0
- package/src/components/tag.tsx +39 -0
- package/src/components/timeline.tsx +17 -0
- package/src/components/toaster.tsx +43 -0
- package/src/components/toggle-tip.tsx +62 -0
- package/src/components/tooltip.tsx +46 -0
- package/src/index.ts +6 -7
- package/src/preset.ts +9 -0
- package/src/provider/index.ts +4 -0
- package/src/provider/sui-provider.tsx +34 -0
- package/src/provider/use-link.test.tsx +60 -0
- package/src/provider/use-link.tsx +13 -0
- package/src/theme/animation-styles.ts +53 -0
- package/src/theme/breakpoints.ts +11 -0
- package/src/theme/conditions.ts +26 -0
- package/src/theme/fluid-font-sizes.ts +65 -0
- package/src/theme/global-css.ts +94 -0
- package/src/theme/index.ts +72 -0
- package/src/theme/layer-styles.ts +116 -0
- package/src/theme/recipes/chakra/accordion.ts +145 -0
- package/src/theme/recipes/chakra/action-bar.ts +62 -0
- package/src/theme/recipes/chakra/alert.ts +157 -0
- package/src/theme/recipes/chakra/avatar.ts +141 -0
- package/src/theme/recipes/chakra/badge.ts +67 -0
- package/src/theme/recipes/chakra/blockquote.ts +83 -0
- package/src/theme/recipes/chakra/breadcrumb.ts +94 -0
- package/src/theme/recipes/chakra/card.ts +99 -0
- package/src/theme/recipes/chakra/checkbox-card.ts +212 -0
- package/src/theme/recipes/chakra/checkbox.ts +70 -0
- package/src/theme/recipes/chakra/checkmark.ts +83 -0
- package/src/theme/recipes/chakra/code.ts +17 -0
- package/src/theme/recipes/chakra/collapsible.ts +20 -0
- package/src/theme/recipes/chakra/container.ts +26 -0
- package/src/theme/recipes/chakra/data-list.ts +80 -0
- package/src/theme/recipes/chakra/dialog.ts +225 -0
- package/src/theme/recipes/chakra/drawer.ts +201 -0
- package/src/theme/recipes/chakra/editable.ts +88 -0
- package/src/theme/recipes/chakra/empty-state.ts +88 -0
- package/src/theme/recipes/chakra/field.ts +68 -0
- package/src/theme/recipes/chakra/fieldset.ts +62 -0
- package/src/theme/recipes/chakra/file-upload.ts +96 -0
- package/src/theme/recipes/chakra/heading.ts +27 -0
- package/src/theme/recipes/chakra/hover-card.ts +68 -0
- package/src/theme/recipes/chakra/icon.ts +30 -0
- package/src/theme/recipes/chakra/input-addon.ts +40 -0
- package/src/theme/recipes/chakra/input.ts +96 -0
- package/src/theme/recipes/chakra/kbd.ts +60 -0
- package/src/theme/recipes/chakra/link.ts +37 -0
- package/src/theme/recipes/chakra/list.ts +67 -0
- package/src/theme/recipes/chakra/mark.ts +27 -0
- package/src/theme/recipes/chakra/menu.ts +124 -0
- package/src/theme/recipes/chakra/native-select.ts +140 -0
- package/src/theme/recipes/chakra/number-input.ts +115 -0
- package/src/theme/recipes/chakra/pin-input.ts +27 -0
- package/src/theme/recipes/chakra/popover.ts +86 -0
- package/src/theme/recipes/chakra/progress-circle.ts +94 -0
- package/src/theme/recipes/chakra/progress.ts +127 -0
- package/src/theme/recipes/chakra/radio-card.ts +220 -0
- package/src/theme/recipes/chakra/radio-group.ts +72 -0
- package/src/theme/recipes/chakra/radiomark.ts +107 -0
- package/src/theme/recipes/chakra/rating-group.ts +94 -0
- package/src/theme/recipes/chakra/segment-group.ts +117 -0
- package/src/theme/recipes/chakra/select.ts +282 -0
- package/src/theme/recipes/chakra/separator.ts +51 -0
- package/src/theme/recipes/chakra/skeleton.ts +53 -0
- package/src/theme/recipes/chakra/skip-nav-link.ts +34 -0
- package/src/theme/recipes/chakra/slider.ts +178 -0
- package/src/theme/recipes/chakra/spinner.ts +32 -0
- package/src/theme/recipes/chakra/stat.ts +79 -0
- package/src/theme/recipes/chakra/status.ts +48 -0
- package/src/theme/recipes/chakra/steps.ts +218 -0
- package/src/theme/recipes/chakra/switch.ts +167 -0
- package/src/theme/recipes/chakra/table.ts +172 -0
- package/src/theme/recipes/chakra/tabs.ts +280 -0
- package/src/theme/recipes/chakra/tag.ts +131 -0
- package/src/theme/recipes/chakra/textarea.ts +88 -0
- package/src/theme/recipes/chakra/timeline.ts +138 -0
- package/src/theme/recipes/chakra/toast.ts +96 -0
- package/src/theme/recipes/chakra/tooltip.ts +40 -0
- package/src/theme/recipes.ts +46 -0
- package/src/theme/semantic-tokens/colors.ts +403 -0
- package/src/theme/semantic-tokens/radii.ts +7 -0
- package/src/theme/semantic-tokens/shadows.ts +52 -0
- package/src/theme/slot-recipes.ts +104 -0
- package/src/theme/text-styles.ts +39 -0
- package/src/theme/tokens/animations.ts +8 -0
- package/src/theme/tokens/aspect-ratios.ts +10 -0
- package/src/theme/tokens/blurs.ts +12 -0
- package/src/theme/tokens/borders.ts +9 -0
- package/src/theme/tokens/colors.ts +177 -0
- package/src/theme/tokens/cursor.ts +12 -0
- package/src/theme/tokens/durations.ts +11 -0
- package/src/theme/tokens/easings.ts +10 -0
- package/src/theme/tokens/font-sizes.ts +20 -0
- package/src/theme/tokens/font-weights.ts +13 -0
- package/src/theme/tokens/fonts.ts +15 -0
- package/src/theme/tokens/keyframes.ts +173 -0
- package/src/theme/tokens/letter-spacing.ts +9 -0
- package/src/theme/tokens/line-heights.ts +19 -0
- package/src/theme/tokens/radius.ts +18 -0
- package/src/theme/tokens/sizes.ts +71 -0
- package/src/theme/tokens/spacing.ts +38 -0
- package/src/theme/tokens/z-indices.ts +34 -0
- package/src/theme/utils.ts +46 -0
- package/dist/index.d.mts +0 -8
- package/dist/index.mjs +0 -11
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1,903 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
Badge,
|
|
5
|
+
Box,
|
|
6
|
+
Breadcrumb,
|
|
7
|
+
Collapsible,
|
|
8
|
+
Flex,
|
|
9
|
+
HStack,
|
|
10
|
+
Icon,
|
|
11
|
+
IconButton,
|
|
12
|
+
Menu,
|
|
13
|
+
Portal,
|
|
14
|
+
Skeleton as SkeletonPrimitive,
|
|
15
|
+
type SkeletonProps,
|
|
16
|
+
Spacer,
|
|
17
|
+
Stack,
|
|
18
|
+
Text,
|
|
19
|
+
} from '@chakra-ui/react'
|
|
20
|
+
import { SaasUIIcon } from '@saas-ui/assets'
|
|
21
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
22
|
+
import { atom, useAtom } from 'jotai'
|
|
23
|
+
import {
|
|
24
|
+
RiAddLine,
|
|
25
|
+
RiArrowRightSFill,
|
|
26
|
+
RiCloseLine,
|
|
27
|
+
RiFolderFill,
|
|
28
|
+
RiInbox2Fill,
|
|
29
|
+
RiOrganizationChart,
|
|
30
|
+
RiSearchLine,
|
|
31
|
+
RiSideBarLine,
|
|
32
|
+
RiSidebarFoldLine,
|
|
33
|
+
} from 'react-icons/ri'
|
|
34
|
+
|
|
35
|
+
import { AppShell } from '../app-shell/index.ts'
|
|
36
|
+
import { PersonaAvatar } from '../persona/persona.tsx'
|
|
37
|
+
import { Sidebar, useSidebar } from './index.ts'
|
|
38
|
+
import { SidebarNavItemEndElement } from './sidebar.tsx'
|
|
39
|
+
|
|
40
|
+
export interface SkeletonTextProps extends SkeletonProps {
|
|
41
|
+
noOfLines?: number
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(
|
|
45
|
+
function Skeleton(props, ref) {
|
|
46
|
+
return (
|
|
47
|
+
<SkeletonPrimitive ref={ref} variant="none" bg="bg.subtle" {...props} />
|
|
48
|
+
)
|
|
49
|
+
},
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
const SkeletonText = React.forwardRef<HTMLDivElement, SkeletonTextProps>(
|
|
53
|
+
function SkeletonText(props, ref) {
|
|
54
|
+
const { noOfLines = 3, gap, ...rest } = props
|
|
55
|
+
return (
|
|
56
|
+
<Stack gap={gap} width="full" ref={ref}>
|
|
57
|
+
{Array.from({ length: noOfLines }).map((_, index) => (
|
|
58
|
+
<SkeletonPrimitive
|
|
59
|
+
height="4"
|
|
60
|
+
key={index}
|
|
61
|
+
_last={{ maxW: '80%' }}
|
|
62
|
+
variant="none"
|
|
63
|
+
bg="bg.subtle"
|
|
64
|
+
{...rest}
|
|
65
|
+
/>
|
|
66
|
+
))}
|
|
67
|
+
</Stack>
|
|
68
|
+
)
|
|
69
|
+
},
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
const modeAtom = atom<'flyout' | 'collapsible'>('collapsible')
|
|
73
|
+
|
|
74
|
+
function SidebarLayout(props: { children: React.ReactElement }) {
|
|
75
|
+
const [mode, setMode] = useAtom(modeAtom)
|
|
76
|
+
|
|
77
|
+
return (
|
|
78
|
+
<Sidebar.Provider mode={mode}>
|
|
79
|
+
<AppShell sidebar={props.children}>
|
|
80
|
+
<Stack height="full" flex="1" boxShadow="sm">
|
|
81
|
+
<HStack
|
|
82
|
+
px="4"
|
|
83
|
+
minH="12"
|
|
84
|
+
alignItems="center"
|
|
85
|
+
borderBottomWidth="1px"
|
|
86
|
+
gap="2"
|
|
87
|
+
>
|
|
88
|
+
<Sidebar.Trigger asChild>
|
|
89
|
+
<IconButton
|
|
90
|
+
variant="ghost"
|
|
91
|
+
aria-label="Toggle sidebar"
|
|
92
|
+
_open={{
|
|
93
|
+
display: 'none',
|
|
94
|
+
}}
|
|
95
|
+
onClick={() =>
|
|
96
|
+
setMode(mode === 'flyout' ? 'collapsible' : mode)
|
|
97
|
+
}
|
|
98
|
+
>
|
|
99
|
+
<RiSideBarLine />
|
|
100
|
+
</IconButton>
|
|
101
|
+
</Sidebar.Trigger>
|
|
102
|
+
|
|
103
|
+
<Breadcrumb.Root>
|
|
104
|
+
<Breadcrumb.List>
|
|
105
|
+
<Breadcrumb.Item>
|
|
106
|
+
<Breadcrumb.Link>Inbox</Breadcrumb.Link>
|
|
107
|
+
</Breadcrumb.Item>
|
|
108
|
+
<Breadcrumb.Separator />
|
|
109
|
+
<Breadcrumb.Item>
|
|
110
|
+
<Breadcrumb.CurrentLink>Saas UI</Breadcrumb.CurrentLink>
|
|
111
|
+
</Breadcrumb.Item>
|
|
112
|
+
</Breadcrumb.List>
|
|
113
|
+
</Breadcrumb.Root>
|
|
114
|
+
</HStack>
|
|
115
|
+
|
|
116
|
+
<Box flex="1" overflow="auto" px="4" py="4">
|
|
117
|
+
<HStack gap="4">
|
|
118
|
+
<Box flex="1">
|
|
119
|
+
<Skeleton height="100px" />
|
|
120
|
+
<SkeletonText noOfLines={6} />
|
|
121
|
+
</Box>
|
|
122
|
+
|
|
123
|
+
<Box flex="1">
|
|
124
|
+
<Skeleton height="100px" />
|
|
125
|
+
<SkeletonText noOfLines={6} />
|
|
126
|
+
</Box>
|
|
127
|
+
</HStack>
|
|
128
|
+
</Box>
|
|
129
|
+
</Stack>
|
|
130
|
+
</AppShell>
|
|
131
|
+
</Sidebar.Provider>
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export default {
|
|
136
|
+
title: 'Components/Sidebar',
|
|
137
|
+
parameters: { layout: 'fullscreen' },
|
|
138
|
+
component: Sidebar.Root,
|
|
139
|
+
decorators: [
|
|
140
|
+
(Story) => (
|
|
141
|
+
<SidebarLayout>
|
|
142
|
+
<Story />
|
|
143
|
+
</SidebarLayout>
|
|
144
|
+
),
|
|
145
|
+
],
|
|
146
|
+
} as Meta
|
|
147
|
+
|
|
148
|
+
function WorkspaceMenu() {
|
|
149
|
+
return (
|
|
150
|
+
<Sidebar.NavItem>
|
|
151
|
+
<Menu.Root>
|
|
152
|
+
<Menu.Trigger asChild>
|
|
153
|
+
<Sidebar.NavButton>
|
|
154
|
+
<Flex
|
|
155
|
+
boxSize="5"
|
|
156
|
+
p="5px"
|
|
157
|
+
rounded="full"
|
|
158
|
+
bg="bg.inverted"
|
|
159
|
+
alignItems="center"
|
|
160
|
+
justifyContent="center"
|
|
161
|
+
>
|
|
162
|
+
<SaasUIIcon color="white" />
|
|
163
|
+
</Flex>
|
|
164
|
+
Saas.js
|
|
165
|
+
</Sidebar.NavButton>
|
|
166
|
+
</Menu.Trigger>
|
|
167
|
+
<Menu.Positioner>
|
|
168
|
+
<Menu.Content>
|
|
169
|
+
<Menu.Item value="account">Account</Menu.Item>
|
|
170
|
+
<Menu.Item value="settings">Workspace settings</Menu.Item>
|
|
171
|
+
<Menu.Separator />
|
|
172
|
+
<Menu.Root>
|
|
173
|
+
<Menu.TriggerItem>Switch workspace</Menu.TriggerItem>
|
|
174
|
+
|
|
175
|
+
<Portal>
|
|
176
|
+
<Menu.Positioner>
|
|
177
|
+
<Menu.Content>
|
|
178
|
+
<Menu.Item value="saasjs">Saas.js</Menu.Item>
|
|
179
|
+
<Menu.Item value="acme">ACME</Menu.Item>
|
|
180
|
+
<Menu.Separator />
|
|
181
|
+
<Menu.Item value="create">Create new workspace</Menu.Item>
|
|
182
|
+
</Menu.Content>
|
|
183
|
+
</Menu.Positioner>
|
|
184
|
+
</Portal>
|
|
185
|
+
</Menu.Root>
|
|
186
|
+
<Menu.Item value="signout">Sign out</Menu.Item>
|
|
187
|
+
</Menu.Content>
|
|
188
|
+
</Menu.Positioner>
|
|
189
|
+
</Menu.Root>
|
|
190
|
+
</Sidebar.NavItem>
|
|
191
|
+
)
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
type Story = StoryObj<typeof Sidebar.Root>
|
|
195
|
+
|
|
196
|
+
export const Default: Story = {
|
|
197
|
+
render: (props) => {
|
|
198
|
+
const [mode, setMode] = useAtom(modeAtom)
|
|
199
|
+
|
|
200
|
+
return (
|
|
201
|
+
<>
|
|
202
|
+
<Sidebar.FlyoutTrigger />
|
|
203
|
+
<Sidebar.Root {...props}>
|
|
204
|
+
<Sidebar.Header direction="row">
|
|
205
|
+
<WorkspaceMenu />
|
|
206
|
+
<Spacer />
|
|
207
|
+
<IconButton variant="ghost" rounded="full">
|
|
208
|
+
<RiSearchLine />
|
|
209
|
+
</IconButton>
|
|
210
|
+
{mode === 'collapsible' && (
|
|
211
|
+
<Sidebar.Trigger asChild>
|
|
212
|
+
<IconButton
|
|
213
|
+
variant="ghost"
|
|
214
|
+
aria-label="Toggle sidebar"
|
|
215
|
+
rounded="full"
|
|
216
|
+
>
|
|
217
|
+
<RiSidebarFoldLine />
|
|
218
|
+
</IconButton>
|
|
219
|
+
</Sidebar.Trigger>
|
|
220
|
+
)}
|
|
221
|
+
</Sidebar.Header>
|
|
222
|
+
<Sidebar.Body flex="1" overflowY="auto">
|
|
223
|
+
<Sidebar.Group>
|
|
224
|
+
<Sidebar.GroupContent>
|
|
225
|
+
<Sidebar.NavItem>
|
|
226
|
+
<Sidebar.NavButton active>
|
|
227
|
+
<RiInbox2Fill />
|
|
228
|
+
Inbox
|
|
229
|
+
<Spacer />
|
|
230
|
+
<Badge bg="none" px="2">
|
|
231
|
+
12
|
|
232
|
+
</Badge>
|
|
233
|
+
</Sidebar.NavButton>
|
|
234
|
+
</Sidebar.NavItem>
|
|
235
|
+
<Sidebar.NavItem>
|
|
236
|
+
<Sidebar.NavButton>
|
|
237
|
+
<RiFolderFill />
|
|
238
|
+
Projects
|
|
239
|
+
</Sidebar.NavButton>
|
|
240
|
+
</Sidebar.NavItem>
|
|
241
|
+
<Sidebar.NavItem>
|
|
242
|
+
<Sidebar.NavButton>
|
|
243
|
+
<RiOrganizationChart />
|
|
244
|
+
Workflows
|
|
245
|
+
</Sidebar.NavButton>
|
|
246
|
+
</Sidebar.NavItem>
|
|
247
|
+
</Sidebar.GroupContent>
|
|
248
|
+
</Sidebar.Group>
|
|
249
|
+
|
|
250
|
+
<Collapsible.Root asChild defaultOpen>
|
|
251
|
+
<Sidebar.Group>
|
|
252
|
+
<Sidebar.GroupHeader>
|
|
253
|
+
<Collapsible.Trigger asChild>
|
|
254
|
+
<Sidebar.GroupTitle>
|
|
255
|
+
Favourites{' '}
|
|
256
|
+
<Icon
|
|
257
|
+
ms="1"
|
|
258
|
+
transition="transform"
|
|
259
|
+
_groupOpen={{ transform: 'rotate(90deg)' }}
|
|
260
|
+
>
|
|
261
|
+
<RiArrowRightSFill />
|
|
262
|
+
</Icon>
|
|
263
|
+
</Sidebar.GroupTitle>
|
|
264
|
+
</Collapsible.Trigger>
|
|
265
|
+
|
|
266
|
+
<Sidebar.GroupEndElement>
|
|
267
|
+
<IconButton
|
|
268
|
+
variant="ghost"
|
|
269
|
+
aria-label="Add to favourites"
|
|
270
|
+
size="xs"
|
|
271
|
+
opacity="0"
|
|
272
|
+
_groupHover={{ opacity: 0.6, _hover: { opacity: 1 } }}
|
|
273
|
+
>
|
|
274
|
+
<RiAddLine />
|
|
275
|
+
</IconButton>
|
|
276
|
+
</Sidebar.GroupEndElement>
|
|
277
|
+
</Sidebar.GroupHeader>
|
|
278
|
+
<Collapsible.Content>
|
|
279
|
+
<Sidebar.GroupContent>
|
|
280
|
+
<Sidebar.NavItem>
|
|
281
|
+
<Sidebar.NavButton>
|
|
282
|
+
<Text>🌟</Text>
|
|
283
|
+
Chakra v3
|
|
284
|
+
<Spacer />
|
|
285
|
+
<IconButton
|
|
286
|
+
variant="ghost"
|
|
287
|
+
aria-label="Remove from favourites"
|
|
288
|
+
title="Remove from favourites"
|
|
289
|
+
size="xs"
|
|
290
|
+
opacity="0"
|
|
291
|
+
_parentHover={{
|
|
292
|
+
opacity: 0.6,
|
|
293
|
+
_hover: { opacity: 1 },
|
|
294
|
+
}}
|
|
295
|
+
>
|
|
296
|
+
<RiCloseLine />
|
|
297
|
+
</IconButton>
|
|
298
|
+
</Sidebar.NavButton>
|
|
299
|
+
</Sidebar.NavItem>
|
|
300
|
+
<Sidebar.NavItem>
|
|
301
|
+
<Sidebar.NavButton>
|
|
302
|
+
<Text>🎨</Text>
|
|
303
|
+
Design systems
|
|
304
|
+
<Spacer />
|
|
305
|
+
<IconButton
|
|
306
|
+
variant="ghost"
|
|
307
|
+
aria-label="Remove from favourites"
|
|
308
|
+
title="Remove from favourites"
|
|
309
|
+
size="xs"
|
|
310
|
+
opacity="0"
|
|
311
|
+
_parentHover={{
|
|
312
|
+
opacity: 0.6,
|
|
313
|
+
_hover: { opacity: 1 },
|
|
314
|
+
}}
|
|
315
|
+
>
|
|
316
|
+
<RiCloseLine />
|
|
317
|
+
</IconButton>
|
|
318
|
+
</Sidebar.NavButton>
|
|
319
|
+
</Sidebar.NavItem>
|
|
320
|
+
</Sidebar.GroupContent>
|
|
321
|
+
</Collapsible.Content>
|
|
322
|
+
</Sidebar.Group>
|
|
323
|
+
</Collapsible.Root>
|
|
324
|
+
</Sidebar.Body>
|
|
325
|
+
<Sidebar.Footer></Sidebar.Footer>
|
|
326
|
+
|
|
327
|
+
<Sidebar.Track
|
|
328
|
+
onClick={() =>
|
|
329
|
+
setMode(mode === 'flyout' ? 'collapsible' : 'flyout')
|
|
330
|
+
}
|
|
331
|
+
/>
|
|
332
|
+
</Sidebar.Root>
|
|
333
|
+
<Sidebar.Backdrop />
|
|
334
|
+
</>
|
|
335
|
+
)
|
|
336
|
+
},
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// export const WithLinks = Template.bind({})
|
|
340
|
+
// WithLinks.args = {
|
|
341
|
+
// children: (
|
|
342
|
+
// <>
|
|
343
|
+
// <SidebarSection flex="1" overflowY="auto">
|
|
344
|
+
// <NavItem isActive>Home</NavItem>
|
|
345
|
+
// <NavItem>Users</NavItem>
|
|
346
|
+
// <NavItem>Settings</NavItem>
|
|
347
|
+
// </SidebarSection>
|
|
348
|
+
// </>
|
|
349
|
+
// ),
|
|
350
|
+
// }
|
|
351
|
+
|
|
352
|
+
// export const WithFeatherIcons = Template.bind({})
|
|
353
|
+
// WithFeatherIcons.args = {
|
|
354
|
+
// children: (
|
|
355
|
+
// <>
|
|
356
|
+
// <SidebarSection flex="1" overflowY="auto">
|
|
357
|
+
// <NavItem icon={<FiHome />} isActive>
|
|
358
|
+
// Home
|
|
359
|
+
// </NavItem>
|
|
360
|
+
// <NavItem icon={<FiUsers />}>Users</NavItem>
|
|
361
|
+
// <NavItem icon={<FiSettings />}>Settings</NavItem>
|
|
362
|
+
// </SidebarSection>
|
|
363
|
+
// </>
|
|
364
|
+
// ),
|
|
365
|
+
// }
|
|
366
|
+
|
|
367
|
+
// export const WithFaIcons = Template.bind({})
|
|
368
|
+
// WithFaIcons.args = {
|
|
369
|
+
// children: (
|
|
370
|
+
// <>
|
|
371
|
+
// <SidebarSection flex="1" overflowY="auto">
|
|
372
|
+
// <NavItem icon={<FaHome />} isActive>
|
|
373
|
+
// Home
|
|
374
|
+
// </NavItem>
|
|
375
|
+
// <NavItem icon={<FaUsers />}>Users</NavItem>
|
|
376
|
+
// <NavItem icon={<FaCog />}>Settings</NavItem>
|
|
377
|
+
// </SidebarSection>
|
|
378
|
+
// </>
|
|
379
|
+
// ),
|
|
380
|
+
// }
|
|
381
|
+
|
|
382
|
+
// export const WithHorizontalNav = Template.bind({})
|
|
383
|
+
// WithHorizontalNav.args = {
|
|
384
|
+
// children: (
|
|
385
|
+
// <>
|
|
386
|
+
// <SidebarSection ps="6" pe="4" direction="row">
|
|
387
|
+
// <Logo width="24px" />
|
|
388
|
+
// <Spacer />
|
|
389
|
+
// <Menu>
|
|
390
|
+
// <MenuButton as={IconButton} variant="ghost">
|
|
391
|
+
// <PersonaAvatar presence="online" size="xs" />
|
|
392
|
+
// </MenuButton>
|
|
393
|
+
// <MenuList>
|
|
394
|
+
// <MenuItem>Sign out</MenuItem>
|
|
395
|
+
// </MenuList>
|
|
396
|
+
// </Menu>
|
|
397
|
+
// </SidebarSection>
|
|
398
|
+
// <SidebarSection flex="1" overflowY="auto">
|
|
399
|
+
// <NavItem icon={<FiHome />} isActive>
|
|
400
|
+
// Home
|
|
401
|
+
// </NavItem>
|
|
402
|
+
// <NavItem icon={<FiUsers />}>Users</NavItem>
|
|
403
|
+
// <NavItem icon={<FiSettings />}>Settings</NavItem>
|
|
404
|
+
// </SidebarSection>
|
|
405
|
+
// </>
|
|
406
|
+
// ),
|
|
407
|
+
// }
|
|
408
|
+
|
|
409
|
+
// export const WithCollapsibleGroup = Template.bind({})
|
|
410
|
+
// WithCollapsibleGroup.args = {
|
|
411
|
+
// children: (
|
|
412
|
+
// <>
|
|
413
|
+
// <SidebarSection px="4" direction="row">
|
|
414
|
+
// <Logo width="24px" />
|
|
415
|
+
// <Spacer />
|
|
416
|
+
// <Menu>
|
|
417
|
+
// <MenuButton as={IconButton} variant="ghost">
|
|
418
|
+
// <PersonaAvatar presence="online" size="xs" />
|
|
419
|
+
// </MenuButton>
|
|
420
|
+
// <MenuList>
|
|
421
|
+
// <MenuItem>Sign out</MenuItem>
|
|
422
|
+
// </MenuList>
|
|
423
|
+
// </Menu>
|
|
424
|
+
// </SidebarSection>
|
|
425
|
+
// <SidebarSection flex="1" overflowY="auto">
|
|
426
|
+
// <NavGroup>
|
|
427
|
+
// <NavItem icon={<FiHome />} isActive>
|
|
428
|
+
// Home
|
|
429
|
+
// </NavItem>
|
|
430
|
+
// <NavItem icon={<FiUsers />}>Users</NavItem>
|
|
431
|
+
// <NavItem icon={<FiSettings />}>Settings</NavItem>
|
|
432
|
+
// </NavGroup>
|
|
433
|
+
|
|
434
|
+
// <NavGroup title="Tags" isCollapsible>
|
|
435
|
+
// <NavItem icon={<FiHash />}>Design system</NavItem>
|
|
436
|
+
// <NavItem icon={<FiHash />}>Framework</NavItem>
|
|
437
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
438
|
+
// Chakra UI
|
|
439
|
+
// </NavItem>
|
|
440
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
441
|
+
// React
|
|
442
|
+
// </NavItem>
|
|
443
|
+
// </NavGroup>
|
|
444
|
+
// </SidebarSection>
|
|
445
|
+
// </>
|
|
446
|
+
// ),
|
|
447
|
+
// }
|
|
448
|
+
|
|
449
|
+
// const NavItemBadge = (props: BadgeProps) => (
|
|
450
|
+
// <Badge bg="none" fontWeight="normal" rounded="md" ms="auto" {...props} />
|
|
451
|
+
// )
|
|
452
|
+
|
|
453
|
+
// export const WithBadge = Template.bind({})
|
|
454
|
+
// WithBadge.args = {
|
|
455
|
+
// children: (
|
|
456
|
+
// <>
|
|
457
|
+
// <SidebarSection px="4" direction="row">
|
|
458
|
+
// <Logo width="24px" />
|
|
459
|
+
// <Spacer />
|
|
460
|
+
// <Menu>
|
|
461
|
+
// <MenuButton as={IconButton} variant="ghost">
|
|
462
|
+
// <PersonaAvatar presence="online" size="xs" />
|
|
463
|
+
// </MenuButton>
|
|
464
|
+
// <MenuList>
|
|
465
|
+
// <MenuItem>Sign out</MenuItem>
|
|
466
|
+
// </MenuList>
|
|
467
|
+
// </Menu>
|
|
468
|
+
// </SidebarSection>
|
|
469
|
+
// <SidebarSection flex="1" overflowY="auto">
|
|
470
|
+
// <NavGroup>
|
|
471
|
+
// <NavItem icon={<FiHome />} isActive>
|
|
472
|
+
// Home
|
|
473
|
+
// </NavItem>
|
|
474
|
+
// <NavItem icon={<FiUsers />}>Users</NavItem>
|
|
475
|
+
// <NavItem icon={<FiSettings />}>Settings</NavItem>
|
|
476
|
+
// </NavGroup>
|
|
477
|
+
|
|
478
|
+
// <NavGroup title="Tags" isCollapsible>
|
|
479
|
+
// <NavItem icon={<FiHash />}>
|
|
480
|
+
// <Text>Design System</Text>
|
|
481
|
+
// <NavItemBadge>1</NavItemBadge>
|
|
482
|
+
// </NavItem>
|
|
483
|
+
// <NavItem icon={<FiHash />}>Framework</NavItem>
|
|
484
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
485
|
+
// <Text>Chakra UI</Text>
|
|
486
|
+
// <NavItemBadge>32</NavItemBadge>
|
|
487
|
+
// </NavItem>
|
|
488
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
489
|
+
// <Text>React</Text>
|
|
490
|
+
// <NavItemBadge>100</NavItemBadge>
|
|
491
|
+
// </NavItem>
|
|
492
|
+
// </NavGroup>
|
|
493
|
+
// </SidebarSection>
|
|
494
|
+
// </>
|
|
495
|
+
// ),
|
|
496
|
+
// }
|
|
497
|
+
|
|
498
|
+
// export const WithSubtleLinks = Template.bind({})
|
|
499
|
+
// WithSubtleLinks.args = {
|
|
500
|
+
// children: (
|
|
501
|
+
// <>
|
|
502
|
+
// <SidebarSection px="4" direction="row">
|
|
503
|
+
// <Logo width="24px" />
|
|
504
|
+
// <Spacer />
|
|
505
|
+
// <Menu>
|
|
506
|
+
// <MenuButton as={IconButton} variant="ghost">
|
|
507
|
+
// <PersonaAvatar presence="online" size="xs" />
|
|
508
|
+
// </MenuButton>
|
|
509
|
+
// <MenuList>
|
|
510
|
+
// <MenuItem>Sign out</MenuItem>
|
|
511
|
+
// </MenuList>
|
|
512
|
+
// </Menu>
|
|
513
|
+
// </SidebarSection>
|
|
514
|
+
// <SidebarSection flex="1" overflowY="auto">
|
|
515
|
+
// <NavGroup>
|
|
516
|
+
// <NavItem variant="subtle" icon={<FiHome />} isActive>
|
|
517
|
+
// Home
|
|
518
|
+
// </NavItem>
|
|
519
|
+
// <NavItem variant="subtle" icon={<FiUsers />}>
|
|
520
|
+
// Users
|
|
521
|
+
// </NavItem>
|
|
522
|
+
// <NavItem variant="subtle" icon={<FiSettings />}>
|
|
523
|
+
// Settings
|
|
524
|
+
// </NavItem>
|
|
525
|
+
// </NavGroup>
|
|
526
|
+
|
|
527
|
+
// <NavGroup title="Tags" isCollapsible>
|
|
528
|
+
// <NavItem icon={<FiHash />}>Design system</NavItem>
|
|
529
|
+
// <NavItem icon={<FiHash />}>Framework</NavItem>
|
|
530
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
531
|
+
// Chakra UI
|
|
532
|
+
// </NavItem>
|
|
533
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
534
|
+
// React
|
|
535
|
+
// </NavItem>
|
|
536
|
+
// </NavGroup>
|
|
537
|
+
// </SidebarSection>
|
|
538
|
+
// </>
|
|
539
|
+
// ),
|
|
540
|
+
// }
|
|
541
|
+
|
|
542
|
+
// export const WithSolidLinks = Template.bind({})
|
|
543
|
+
// WithSolidLinks.args = {
|
|
544
|
+
// children: (
|
|
545
|
+
// <>
|
|
546
|
+
// <SidebarSection px="4" direction="row">
|
|
547
|
+
// <Logo width="24px" />
|
|
548
|
+
// <Spacer />
|
|
549
|
+
// <Menu>
|
|
550
|
+
// <MenuButton as={IconButton} variant="ghost">
|
|
551
|
+
// <PersonaAvatar presence="online" size="xs" />
|
|
552
|
+
// </MenuButton>
|
|
553
|
+
// <MenuList>
|
|
554
|
+
// <MenuItem>Sign out</MenuItem>
|
|
555
|
+
// </MenuList>
|
|
556
|
+
// </Menu>
|
|
557
|
+
// </SidebarSection>
|
|
558
|
+
// <SidebarSection flex="1" overflowY="auto">
|
|
559
|
+
// <NavGroup>
|
|
560
|
+
// <NavItem icon={<FiHome />} isActive>
|
|
561
|
+
// Home
|
|
562
|
+
// </NavItem>
|
|
563
|
+
// <NavItem icon={<FiUsers />}>Users</NavItem>
|
|
564
|
+
// <NavItem icon={<FiSettings />}>Settings</NavItem>
|
|
565
|
+
// </NavGroup>
|
|
566
|
+
|
|
567
|
+
// <NavGroup title="Tags" isCollapsible>
|
|
568
|
+
// <NavItem icon={<FiHash />}>Design system</NavItem>
|
|
569
|
+
// <NavItem icon={<FiHash />}>Framework</NavItem>
|
|
570
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
571
|
+
// Chakra UI
|
|
572
|
+
// </NavItem>
|
|
573
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
574
|
+
// React
|
|
575
|
+
// </NavItem>
|
|
576
|
+
// </NavGroup>
|
|
577
|
+
// </SidebarSection>
|
|
578
|
+
// </>
|
|
579
|
+
// ),
|
|
580
|
+
// }
|
|
581
|
+
|
|
582
|
+
// export const VariantCompact = Template.bind({})
|
|
583
|
+
// VariantCompact.args = {
|
|
584
|
+
// variant: 'compact',
|
|
585
|
+
// children: (
|
|
586
|
+
// <>
|
|
587
|
+
// <SidebarSection alignItems="center">
|
|
588
|
+
// <Logo width="24px" color="primary.500" />
|
|
589
|
+
// </SidebarSection>
|
|
590
|
+
// <SidebarSection>
|
|
591
|
+
// <Nav>
|
|
592
|
+
// <NavItem icon={<FiHome size="1.2em" />} isActive>
|
|
593
|
+
// Home
|
|
594
|
+
// </NavItem>
|
|
595
|
+
// <NavItem icon={<FiUsers size="1.2em" />}>Users</NavItem>
|
|
596
|
+
// <NavItem icon={<FiSettings size="1.2em" />}>Settings</NavItem>
|
|
597
|
+
// </Nav>
|
|
598
|
+
// </SidebarSection>
|
|
599
|
+
// </>
|
|
600
|
+
// ),
|
|
601
|
+
// }
|
|
602
|
+
|
|
603
|
+
// export const VariantCompactColor = Template.bind({})
|
|
604
|
+
// VariantCompactColor.args = {
|
|
605
|
+
// variant: 'compact',
|
|
606
|
+
// colorScheme: 'purple',
|
|
607
|
+
// children: (
|
|
608
|
+
// <>
|
|
609
|
+
// <SidebarSection alignItems="center" px="2">
|
|
610
|
+
// <Logo width="24px" color="white" />
|
|
611
|
+
// </SidebarSection>
|
|
612
|
+
// <SidebarSection px="3">
|
|
613
|
+
// <Nav>
|
|
614
|
+
// <NavItem icon={<FiHome size="1.2em" color="white" />} isActive>
|
|
615
|
+
// Home
|
|
616
|
+
// </NavItem>
|
|
617
|
+
// <NavItem icon={<FiUsers size="1.2em" color="white" />}>Users</NavItem>
|
|
618
|
+
// <NavItem icon={<FiSettings size="1.2em" color="white" />}>
|
|
619
|
+
// Settings
|
|
620
|
+
// </NavItem>
|
|
621
|
+
// </Nav>
|
|
622
|
+
// </SidebarSection>
|
|
623
|
+
// </>
|
|
624
|
+
// ),
|
|
625
|
+
// }
|
|
626
|
+
|
|
627
|
+
// export const VariantCompactResponsive = Template.bind({})
|
|
628
|
+
// VariantCompactResponsive.args = {
|
|
629
|
+
// variant: { base: 'compact' },
|
|
630
|
+
// toggleBreakpoint: false,
|
|
631
|
+
// colorScheme: 'purple',
|
|
632
|
+
// children: (
|
|
633
|
+
// <>
|
|
634
|
+
// <SidebarSection alignItems="center">
|
|
635
|
+
// <Logo width="24px" color="white" />
|
|
636
|
+
// </SidebarSection>
|
|
637
|
+
// <SidebarSection>
|
|
638
|
+
// <NavGroup>
|
|
639
|
+
// <NavItem
|
|
640
|
+
// icon={<FiHome size="1.2em" color="whiteAlpha.800" />}
|
|
641
|
+
// color="white"
|
|
642
|
+
// size="sm"
|
|
643
|
+
// isActive
|
|
644
|
+
// >
|
|
645
|
+
// Home
|
|
646
|
+
// </NavItem>
|
|
647
|
+
// <NavItem
|
|
648
|
+
// icon={<FiUsers size="1.2em" color="whiteAlpha.800" />}
|
|
649
|
+
// color="white"
|
|
650
|
+
// size="sm"
|
|
651
|
+
// >
|
|
652
|
+
// Users
|
|
653
|
+
// </NavItem>
|
|
654
|
+
// <NavItem
|
|
655
|
+
// icon={<FiSettings size="1.2em" color="whiteAlpha.800" />}
|
|
656
|
+
// color="white"
|
|
657
|
+
// size="sm"
|
|
658
|
+
// >
|
|
659
|
+
// Settings
|
|
660
|
+
// </NavItem>
|
|
661
|
+
// </NavGroup>
|
|
662
|
+
// </SidebarSection>
|
|
663
|
+
// </>
|
|
664
|
+
// ),
|
|
665
|
+
// }
|
|
666
|
+
|
|
667
|
+
// export const VariantCompactNavGroup = Template.bind({})
|
|
668
|
+
// VariantCompactNavGroup.args = {
|
|
669
|
+
// variant: 'compact',
|
|
670
|
+
// colorScheme: 'purple',
|
|
671
|
+
// children: (
|
|
672
|
+
// <>
|
|
673
|
+
// <SidebarSection alignItems="center">
|
|
674
|
+
// <Logo width="24px" color="white" />
|
|
675
|
+
// </SidebarSection>
|
|
676
|
+
// <SidebarSection>
|
|
677
|
+
// <NavGroup title="Users">
|
|
678
|
+
// <NavItem
|
|
679
|
+
// icon={<FiHome size="1.2em" color="whiteAlpha.800" />}
|
|
680
|
+
// color="white"
|
|
681
|
+
// size="sm"
|
|
682
|
+
// isActive
|
|
683
|
+
// >
|
|
684
|
+
// Home
|
|
685
|
+
// </NavItem>
|
|
686
|
+
// <NavItem
|
|
687
|
+
// icon={<FiUsers size="1.2em" color="whiteAlpha.800" />}
|
|
688
|
+
// color="white"
|
|
689
|
+
// size="sm"
|
|
690
|
+
// >
|
|
691
|
+
// Users
|
|
692
|
+
// </NavItem>
|
|
693
|
+
// <NavItem
|
|
694
|
+
// icon={<FiSettings size="1.2em" color="whiteAlpha.800" />}
|
|
695
|
+
// color="white"
|
|
696
|
+
// size="sm"
|
|
697
|
+
// >
|
|
698
|
+
// Settings
|
|
699
|
+
// </NavItem>
|
|
700
|
+
// </NavGroup>
|
|
701
|
+
// </SidebarSection>
|
|
702
|
+
// </>
|
|
703
|
+
// ),
|
|
704
|
+
// }
|
|
705
|
+
|
|
706
|
+
// export const DoubleSidebar = () => {
|
|
707
|
+
// const disclosure = useDisclosure({
|
|
708
|
+
// defaultIsOpen: true,
|
|
709
|
+
// })
|
|
710
|
+
|
|
711
|
+
// return (
|
|
712
|
+
// <AppShell
|
|
713
|
+
// sidebar={
|
|
714
|
+
// <Flex alignItems="stretch" overflow="hidden" height="full">
|
|
715
|
+
// <DarkMode>
|
|
716
|
+
// <Sidebar
|
|
717
|
+
// variant="compact"
|
|
718
|
+
// colorScheme="purple"
|
|
719
|
+
// border="0"
|
|
720
|
+
// zIndex="3"
|
|
721
|
+
// position="relative"
|
|
722
|
+
// >
|
|
723
|
+
// <SidebarSection alignItems="center">
|
|
724
|
+
// <Logo width="24px" color="white" mb="1" />
|
|
725
|
+
// </SidebarSection>
|
|
726
|
+
|
|
727
|
+
// <SidebarSection flex="1">
|
|
728
|
+
// <NavGroup>
|
|
729
|
+
// <NavItem
|
|
730
|
+
// icon={<FiUsers size="1.2em" />}
|
|
731
|
+
// isActive
|
|
732
|
+
// onClick={(e) => {
|
|
733
|
+
// e.preventDefault()
|
|
734
|
+
// disclosure.onToggle()
|
|
735
|
+
// }}
|
|
736
|
+
// >
|
|
737
|
+
// Users
|
|
738
|
+
// </NavItem>
|
|
739
|
+
// <NavItem
|
|
740
|
+
// icon={<FiSettings size="1.2em" />}
|
|
741
|
+
// onClick={(e) => {
|
|
742
|
+
// e.preventDefault()
|
|
743
|
+
// disclosure.onClose()
|
|
744
|
+
// }}
|
|
745
|
+
// >
|
|
746
|
+
// Settings
|
|
747
|
+
// </NavItem>
|
|
748
|
+
// </NavGroup>
|
|
749
|
+
|
|
750
|
+
// <Spacer />
|
|
751
|
+
|
|
752
|
+
// <Menu>
|
|
753
|
+
// <MenuButton as={Button} variant="ghost" px="0">
|
|
754
|
+
// <PersonaAvatar presence="online" size="xs" />
|
|
755
|
+
// </MenuButton>
|
|
756
|
+
// <MenuList>
|
|
757
|
+
// <MenuItem>Sign out</MenuItem>
|
|
758
|
+
// </MenuList>
|
|
759
|
+
// </Menu>
|
|
760
|
+
// </SidebarSection>
|
|
761
|
+
// </Sidebar>
|
|
762
|
+
// </DarkMode>
|
|
763
|
+
// <Flex position="relative">
|
|
764
|
+
// <Sidebar
|
|
765
|
+
// isOpen={disclosure.isOpen}
|
|
766
|
+
// onClose={disclosure.onClose}
|
|
767
|
+
// onOpen={disclosure.onOpen}
|
|
768
|
+
// toggleBreakpoint={false}
|
|
769
|
+
// zIndex={2}
|
|
770
|
+
// height="100%"
|
|
771
|
+
// >
|
|
772
|
+
// <SidebarSection px="5" direction="row">
|
|
773
|
+
// <Heading size="sm" py="2">
|
|
774
|
+
// Users
|
|
775
|
+
// </Heading>
|
|
776
|
+
// <Spacer />
|
|
777
|
+
// </SidebarSection>
|
|
778
|
+
|
|
779
|
+
// <SidebarSection flex="1" overflowY="auto">
|
|
780
|
+
// <NavGroup>
|
|
781
|
+
// <NavItem icon={<FiHome />} isActive>
|
|
782
|
+
// All users
|
|
783
|
+
// </NavItem>
|
|
784
|
+
// <NavItem icon={<FiStar />}>Favourite users</NavItem>
|
|
785
|
+
// </NavGroup>
|
|
786
|
+
// <NavGroup title="Tags" isCollapsible>
|
|
787
|
+
// <NavItem icon={<FiHash />}>Design system</NavItem>
|
|
788
|
+
// <NavItem icon={<FiHash />}>Framework</NavItem>
|
|
789
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
790
|
+
// Chakra UI
|
|
791
|
+
// </NavItem>
|
|
792
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
793
|
+
// React
|
|
794
|
+
// </NavItem>
|
|
795
|
+
// </NavGroup>
|
|
796
|
+
// </SidebarSection>
|
|
797
|
+
// <SidebarOverlay zIndex="1" />
|
|
798
|
+
// </Sidebar>
|
|
799
|
+
// </Flex>
|
|
800
|
+
// </Flex>
|
|
801
|
+
// }
|
|
802
|
+
// >
|
|
803
|
+
// <Box />
|
|
804
|
+
// </AppShell>
|
|
805
|
+
// )
|
|
806
|
+
// }
|
|
807
|
+
|
|
808
|
+
// export function CustomToggle() {
|
|
809
|
+
// const { isOpen, onOpen, onClose, onToggle } = useDisclosure({
|
|
810
|
+
// defaultIsOpen: true,
|
|
811
|
+
// })
|
|
812
|
+
|
|
813
|
+
// return (
|
|
814
|
+
// <>
|
|
815
|
+
// <Sidebar
|
|
816
|
+
// isOpen={isOpen}
|
|
817
|
+
// onOpen={onOpen}
|
|
818
|
+
// onClose={onClose}
|
|
819
|
+
// toggleBreakpoint={false}
|
|
820
|
+
// spacing="2"
|
|
821
|
+
// height="100vh"
|
|
822
|
+
// >
|
|
823
|
+
// <SidebarSection direction="row">
|
|
824
|
+
// <Box h="8">
|
|
825
|
+
// <IconButton
|
|
826
|
+
// onClick={onToggle}
|
|
827
|
+
// position="fixed"
|
|
828
|
+
// left="3"
|
|
829
|
+
// zIndex="modal"
|
|
830
|
+
// aria-label={isOpen ? 'Close' : 'Open'}
|
|
831
|
+
// icon={isOpen ? <FiSquare /> : <FiSidebar />}
|
|
832
|
+
// />
|
|
833
|
+
// </Box>
|
|
834
|
+
// </SidebarSection>
|
|
835
|
+
|
|
836
|
+
// <SidebarSection flex="1" overflowY="auto">
|
|
837
|
+
// <NavGroup>
|
|
838
|
+
// <NavItem icon={<FiHome />} isActive>
|
|
839
|
+
// All users
|
|
840
|
+
// </NavItem>
|
|
841
|
+
// <NavItem icon={<FiStar />}>Favourite users</NavItem>
|
|
842
|
+
// </NavGroup>
|
|
843
|
+
// <NavGroup title="Tags" isCollapsible>
|
|
844
|
+
// <NavItem icon={<FiHash />}>Design system</NavItem>
|
|
845
|
+
// <NavItem icon={<FiHash />}>Framework</NavItem>
|
|
846
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
847
|
+
// Chakra UI
|
|
848
|
+
// </NavItem>
|
|
849
|
+
// <NavItem inset={5} icon={<FiHash />}>
|
|
850
|
+
// React
|
|
851
|
+
// </NavItem>
|
|
852
|
+
// </NavGroup>
|
|
853
|
+
// </SidebarSection>
|
|
854
|
+
// <SidebarOverlay zIndex="1" />
|
|
855
|
+
// </Sidebar>
|
|
856
|
+
// </>
|
|
857
|
+
// )
|
|
858
|
+
// }
|
|
859
|
+
|
|
860
|
+
// export function ToggleVariant() {
|
|
861
|
+
// const { isOpen, onToggle } = useDisclosure({
|
|
862
|
+
// defaultIsOpen: true,
|
|
863
|
+
// })
|
|
864
|
+
|
|
865
|
+
// return (
|
|
866
|
+
// <AppShell
|
|
867
|
+
// sidebar={
|
|
868
|
+
// <Sidebar
|
|
869
|
+
// toggleBreakpoint={false}
|
|
870
|
+
// variant={isOpen ? 'default' : 'compact'}
|
|
871
|
+
// transition="width"
|
|
872
|
+
// transitionDuration="normal"
|
|
873
|
+
// width={isOpen ? '280px' : '14'}
|
|
874
|
+
// minWidth="auto"
|
|
875
|
+
// >
|
|
876
|
+
// <SidebarSection direction={isOpen ? 'row' : 'column'} height="32px">
|
|
877
|
+
// <Logo width="24px" mb="1" display={isOpen ? 'block' : 'none'} />
|
|
878
|
+
// <Spacer />
|
|
879
|
+
// <IconButton
|
|
880
|
+
// onClick={onToggle}
|
|
881
|
+
// variant="ghost"
|
|
882
|
+
// size="sm"
|
|
883
|
+
// icon={isOpen ? <FiChevronsLeft /> : <FiChevronsRight />}
|
|
884
|
+
// aria-label="Toggle Sidebar"
|
|
885
|
+
// />
|
|
886
|
+
// </SidebarSection>
|
|
887
|
+
|
|
888
|
+
// <SidebarSection flex="1" overflowY="auto" overflowX="hidden">
|
|
889
|
+
// <NavGroup>
|
|
890
|
+
// <NavItem icon={<FiHome size="1.1em" />} isActive>
|
|
891
|
+
// All users
|
|
892
|
+
// </NavItem>
|
|
893
|
+
// <NavItem icon={<FiStar size="1.1em" />}>Favourite users</NavItem>
|
|
894
|
+
// </NavGroup>
|
|
895
|
+
// </SidebarSection>
|
|
896
|
+
// <SidebarOverlay zIndex="1" />
|
|
897
|
+
// </Sidebar>
|
|
898
|
+
// }
|
|
899
|
+
// >
|
|
900
|
+
// <Box />
|
|
901
|
+
// </AppShell>
|
|
902
|
+
// )
|
|
903
|
+
// }
|