@altinn/altinn-components 0.0.1
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/.github/workflows/ci-cd-main.yml +44 -0
- package/.github/workflows/ci-cd-pull-request.yml +39 -0
- package/.node-version +1 -0
- package/.storybook/main.ts +22 -0
- package/.storybook/preview.ts +15 -0
- package/CHANGELOG.md +13 -0
- package/README.md +2 -0
- package/biome.jsonc +65 -0
- package/lib/components/Avatar/Avatar.tsx +91 -0
- package/lib/components/Avatar/AvatarGroup.stories.ts +67 -0
- package/lib/components/Avatar/AvatarGroup.tsx +42 -0
- package/lib/components/Avatar/avatar.module.css +59 -0
- package/lib/components/Avatar/avatar.stories.tsx +44 -0
- package/lib/components/Avatar/avatarGroup.module.css +78 -0
- package/lib/components/Avatar/color.ts +71 -0
- package/lib/components/Avatar/index.ts +2 -0
- package/lib/components/Badge/Badge.tsx +19 -0
- package/lib/components/Badge/badge.module.css +36 -0
- package/lib/components/Badge/index.tsx +1 -0
- package/lib/components/Button/Button.stories.ts +44 -0
- package/lib/components/Button/Button.tsx +39 -0
- package/lib/components/Button/ButtonBase.tsx +53 -0
- package/lib/components/Button/ComboButton.stories.ts +45 -0
- package/lib/components/Button/ComboButton.tsx +44 -0
- package/lib/components/Button/button.module.css +82 -0
- package/lib/components/Button/buttonBase.module.css +77 -0
- package/lib/components/Button/comboButton.module.css +83 -0
- package/lib/components/Button/index.ts +3 -0
- package/lib/components/Header/DigdirLogomark.tsx +23 -0
- package/lib/components/Header/GlobalMenu.stories.tsx +202 -0
- package/lib/components/Header/GlobalMenu.tsx +131 -0
- package/lib/components/Header/Header.stories.ts +85 -0
- package/lib/components/Header/Header.tsx +64 -0
- package/lib/components/Header/HeaderBase.tsx +10 -0
- package/lib/components/Header/HeaderButton.stories.ts +54 -0
- package/lib/components/Header/HeaderButton.tsx +55 -0
- package/lib/components/Header/HeaderLogo.stories.ts +17 -0
- package/lib/components/Header/HeaderLogo.tsx +22 -0
- package/lib/components/Header/HeaderSearch.stories.ts +20 -0
- package/lib/components/Header/HeaderSearch.tsx +44 -0
- package/lib/components/Header/globalMenu.module.css +28 -0
- package/lib/components/Header/header.module.css +39 -0
- package/lib/components/Header/headerButton.module.css +35 -0
- package/lib/components/Header/headerLogo.module.css +24 -0
- package/lib/components/Header/headerSearch.module.css +30 -0
- package/lib/components/Header/index.tsx +5 -0
- package/lib/components/Icon/CheckboxIcon.stories.ts +25 -0
- package/lib/components/Icon/CheckboxIcon.tsx +29 -0
- package/lib/components/Icon/Icon.stories.ts +24 -0
- package/lib/components/Icon/Icon.tsx +23 -0
- package/lib/components/Icon/RadioIcon.stories.ts +25 -0
- package/lib/components/Icon/RadioIcon.tsx +29 -0
- package/lib/components/Icon/SvgIcon.tsx +18 -0
- package/lib/components/Icon/__AkselIcon.tsx +37 -0
- package/lib/components/Icon/checkboxIcon.module.css +21 -0
- package/lib/components/Icon/icon.module.css +4 -0
- package/lib/components/Icon/iconsMap.tsx +2078 -0
- package/lib/components/Icon/index.ts +5 -0
- package/lib/components/Icon/radioIcon.module.css +21 -0
- package/lib/components/Layout/Layout.stories.ts +127 -0
- package/lib/components/Layout/Layout.tsx +40 -0
- package/lib/components/Layout/LayoutBase.stories.ts +17 -0
- package/lib/components/Layout/LayoutBase.tsx +30 -0
- package/lib/components/Layout/LayoutBody.stories.ts +17 -0
- package/lib/components/Layout/LayoutBody.tsx +16 -0
- package/lib/components/Layout/LayoutContent.stories.ts +17 -0
- package/lib/components/Layout/LayoutContent.tsx +15 -0
- package/lib/components/Layout/LayoutSidebar.stories.ts +17 -0
- package/lib/components/Layout/LayoutSidebar.tsx +16 -0
- package/lib/components/Layout/index.tsx +4 -0
- package/lib/components/Layout/layout.module.css +63 -0
- package/lib/components/Menu/Menu.stories.ts +495 -0
- package/lib/components/Menu/Menu.tsx +123 -0
- package/lib/components/Menu/MenuBase.tsx +17 -0
- package/lib/components/Menu/MenuGroup.tsx +18 -0
- package/lib/components/Menu/MenuHeader.tsx +13 -0
- package/lib/components/Menu/MenuItem.stories.ts +127 -0
- package/lib/components/Menu/MenuItem.tsx +58 -0
- package/lib/components/Menu/MenuItemBase.tsx +62 -0
- package/lib/components/Menu/MenuItemLabel.tsx +30 -0
- package/lib/components/Menu/MenuItemMedia.tsx +42 -0
- package/lib/components/Menu/MenuOption.stories.ts +50 -0
- package/lib/components/Menu/MenuOption.tsx +45 -0
- package/lib/components/Menu/MenuSearch.stories.ts +18 -0
- package/lib/components/Menu/MenuSearch.tsx +25 -0
- package/lib/components/Menu/index.ts +10 -0
- package/lib/components/Menu/menu.module.css +26 -0
- package/lib/components/Menu/menuHeader.module.css +12 -0
- package/lib/components/Menu/menuItem.module.css +136 -0
- package/lib/components/Menu/menuOption.module.css +29 -0
- package/lib/components/Menu/menuSearch.module.css +29 -0
- package/lib/components/Menu/useClickOutside.ts +21 -0
- package/lib/components/Menu/useEscapeKey.ts +16 -0
- package/lib/components/Toolbar/Toolbar.stories.tsx +188 -0
- package/lib/components/Toolbar/Toolbar.tsx +138 -0
- package/lib/components/Toolbar/ToolbarAdd.stories.ts +25 -0
- package/lib/components/Toolbar/ToolbarAdd.tsx +25 -0
- package/lib/components/Toolbar/ToolbarBase.tsx +27 -0
- package/lib/components/Toolbar/ToolbarButton.stories.ts +32 -0
- package/lib/components/Toolbar/ToolbarButton.tsx +65 -0
- package/lib/components/Toolbar/ToolbarFilter.stories.ts +66 -0
- package/lib/components/Toolbar/ToolbarFilter.tsx +70 -0
- package/lib/components/Toolbar/ToolbarMenu.stories.ts +37 -0
- package/lib/components/Toolbar/ToolbarMenu.tsx +28 -0
- package/lib/components/Toolbar/ToolbarOptions.stories.ts +108 -0
- package/lib/components/Toolbar/ToolbarOptions.tsx +61 -0
- package/lib/components/Toolbar/ToolbarSearch.stories.ts +19 -0
- package/lib/components/Toolbar/ToolbarSearch.tsx +24 -0
- package/lib/components/Toolbar/index.js +3 -0
- package/lib/components/Toolbar/toolbar.module.css +43 -0
- package/lib/components/Toolbar/toolbarButton.module.css +3 -0
- package/lib/components/Toolbar/toolbarSearch.module.css +28 -0
- package/lib/components/index.ts +1 -0
- package/lib/css/colors.css +113 -0
- package/lib/css/global.css +12 -0
- package/lib/css/theme-company.css +15 -0
- package/lib/css/theme-global.css +15 -0
- package/lib/css/theme-neutral.css +15 -0
- package/lib/css/theme-person.css +15 -0
- package/lib/css/theme.css +24 -0
- package/lib/index.ts +1 -0
- package/package.json +52 -0
- package/tsconfig.json +23 -0
- package/tsconfig.node.json +11 -0
- package/typings.d.ts +1 -0
- package/vite.config.ts +20 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.radio {
|
|
2
|
+
font-size: 1rem;
|
|
3
|
+
border: 2px solid;
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
color: var(--theme-base-default);
|
|
8
|
+
border-radius: 50%;
|
|
9
|
+
height: 1em;
|
|
10
|
+
width: 1em;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.radio[data-checked="true"] {
|
|
14
|
+
border-color: var(--theme-base-default);
|
|
15
|
+
background-color: var(--theme-base-default);
|
|
16
|
+
color: var(--theme-background-subtle);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.radio > svg {
|
|
20
|
+
stroke: currentColor;
|
|
21
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import type { MenuProps } from '../Menu';
|
|
3
|
+
import { Layout } from './Layout';
|
|
4
|
+
|
|
5
|
+
const menu: MenuProps = {
|
|
6
|
+
groups: {},
|
|
7
|
+
items: [
|
|
8
|
+
{
|
|
9
|
+
id: '1',
|
|
10
|
+
group: 1,
|
|
11
|
+
size: 'lg',
|
|
12
|
+
icon: 'inbox',
|
|
13
|
+
title: 'Innboks',
|
|
14
|
+
badge: '4',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: '2',
|
|
18
|
+
group: 2,
|
|
19
|
+
icon: 'doc-pencil',
|
|
20
|
+
title: 'Utkast',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: '3',
|
|
24
|
+
group: 2,
|
|
25
|
+
icon: 'file-checkmark',
|
|
26
|
+
selected: true,
|
|
27
|
+
title: 'Sendt',
|
|
28
|
+
badge: '2',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: '4',
|
|
32
|
+
group: 3,
|
|
33
|
+
icon: 'bookmark',
|
|
34
|
+
title: 'Lagrede søk',
|
|
35
|
+
badge: '11',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: '5',
|
|
39
|
+
group: 4,
|
|
40
|
+
icon: 'archive',
|
|
41
|
+
title: 'Arkivert',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: '6',
|
|
45
|
+
group: 4,
|
|
46
|
+
disabled: true,
|
|
47
|
+
icon: 'trash',
|
|
48
|
+
title: 'Papirkurv',
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const meta = {
|
|
54
|
+
title: 'Layout/Layout',
|
|
55
|
+
component: Layout,
|
|
56
|
+
tags: ['autodocs'],
|
|
57
|
+
parameters: {
|
|
58
|
+
layout: 'fullscreen',
|
|
59
|
+
},
|
|
60
|
+
args: {
|
|
61
|
+
header: {
|
|
62
|
+
menu: {
|
|
63
|
+
search: {
|
|
64
|
+
name: 'search',
|
|
65
|
+
placeholder: 'Søk i Altinn',
|
|
66
|
+
},
|
|
67
|
+
accounts: [
|
|
68
|
+
{
|
|
69
|
+
type: 'person',
|
|
70
|
+
name: 'Aurora Mikalsen',
|
|
71
|
+
selected: true,
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
sidebar: {
|
|
77
|
+
menu,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
} satisfies Meta<typeof Layout>;
|
|
81
|
+
|
|
82
|
+
export default meta;
|
|
83
|
+
type Story = StoryObj<typeof meta>;
|
|
84
|
+
|
|
85
|
+
export const Default: Story = {
|
|
86
|
+
args: {},
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export const GlobalCompany: Story = {
|
|
90
|
+
args: {
|
|
91
|
+
sidebar: {
|
|
92
|
+
menu: {
|
|
93
|
+
...menu,
|
|
94
|
+
defaultItemColor: 'company',
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export const GlobalPerson: Story = {
|
|
101
|
+
args: {
|
|
102
|
+
sidebar: {
|
|
103
|
+
menu: {
|
|
104
|
+
...menu,
|
|
105
|
+
defaultItemColor: 'person',
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export const Neutral: Story = {
|
|
112
|
+
args: {
|
|
113
|
+
theme: 'neutral',
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export const Company: Story = {
|
|
118
|
+
args: {
|
|
119
|
+
theme: 'company',
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export const Person: Story = {
|
|
124
|
+
args: {
|
|
125
|
+
theme: 'person',
|
|
126
|
+
},
|
|
127
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { LayoutBase, LayoutBody, LayoutContent, LayoutSidebar, type LayoutTheme } from '.';
|
|
3
|
+
import { Header, type HeaderProps } from '../Header';
|
|
4
|
+
import { Menu, type MenuProps } from '../Menu';
|
|
5
|
+
|
|
6
|
+
interface SidebarProps {
|
|
7
|
+
theme?: LayoutTheme;
|
|
8
|
+
menu?: MenuProps;
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface ContentProps {
|
|
13
|
+
theme: LayoutTheme;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface LayoutProps {
|
|
17
|
+
theme: LayoutTheme;
|
|
18
|
+
header: HeaderProps;
|
|
19
|
+
sidebar: SidebarProps;
|
|
20
|
+
content: ContentProps;
|
|
21
|
+
children: ReactNode;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const Layout = ({ theme = 'global', header, sidebar, content, children }: LayoutProps) => {
|
|
25
|
+
const { menu, ...sidebarProps } = sidebar;
|
|
26
|
+
return (
|
|
27
|
+
<LayoutBase theme={theme}>
|
|
28
|
+
{header && <Header search={header?.search} {...header} />}
|
|
29
|
+
<LayoutBody>
|
|
30
|
+
{sidebar && (
|
|
31
|
+
<LayoutSidebar theme={sidebar?.theme} {...sidebarProps}>
|
|
32
|
+
{menu && <Menu {...menu} />}
|
|
33
|
+
{sidebar?.children}
|
|
34
|
+
</LayoutSidebar>
|
|
35
|
+
)}
|
|
36
|
+
<LayoutContent theme={content?.theme}>{children}</LayoutContent>
|
|
37
|
+
</LayoutBody>
|
|
38
|
+
</LayoutBase>
|
|
39
|
+
);
|
|
40
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { LayoutBase } from './LayoutBase';
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Layout/LayoutBase',
|
|
6
|
+
component: LayoutBase,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
parameters: {},
|
|
9
|
+
args: {},
|
|
10
|
+
} satisfies Meta<typeof LayoutBase>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Default: Story = {
|
|
16
|
+
args: {},
|
|
17
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import styles from './layout.module.css';
|
|
3
|
+
|
|
4
|
+
export type LayoutTheme = 'global' | 'neutral' | 'company' | 'person';
|
|
5
|
+
|
|
6
|
+
export interface LayoutBaseProps {
|
|
7
|
+
theme?: LayoutTheme;
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Base layout container where you can set the application theme colors.
|
|
13
|
+
*
|
|
14
|
+
* Anatomy of a layout:
|
|
15
|
+
*
|
|
16
|
+
* - LayoutBase
|
|
17
|
+
* - Header
|
|
18
|
+
* - LayoutBody
|
|
19
|
+
* - LayoutSidebar
|
|
20
|
+
* - LayoutContent
|
|
21
|
+
* - Footer
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
export const LayoutBase = ({ theme, children }: LayoutBaseProps) => {
|
|
25
|
+
return (
|
|
26
|
+
<div className={styles.base} data-theme={theme}>
|
|
27
|
+
{children}
|
|
28
|
+
</div>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { LayoutBody } from './LayoutBody';
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Layout/LayoutBody',
|
|
6
|
+
component: LayoutBody,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
parameters: {},
|
|
9
|
+
args: {},
|
|
10
|
+
} satisfies Meta<typeof LayoutBody>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Default: Story = {
|
|
16
|
+
args: {},
|
|
17
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LayoutBaseProps } from './LayoutBase';
|
|
2
|
+
import styles from './layout.module.css';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Body layout container. Should be a child of LayoutBase.
|
|
6
|
+
* Defines a max-width for the application body.
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const LayoutBody = ({ theme, children }: LayoutBaseProps) => {
|
|
11
|
+
return (
|
|
12
|
+
<div className={styles.body} data-theme={theme}>
|
|
13
|
+
{children}
|
|
14
|
+
</div>
|
|
15
|
+
);
|
|
16
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { LayoutContent } from './LayoutContent';
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Layout/LayoutContent',
|
|
6
|
+
component: LayoutContent,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
parameters: {},
|
|
9
|
+
args: {},
|
|
10
|
+
} satisfies Meta<typeof LayoutContent>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Default: Story = {
|
|
16
|
+
args: {},
|
|
17
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LayoutBaseProps } from './LayoutBase';
|
|
2
|
+
import styles from './layout.module.css';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Content layout container. Should be a child of LayoutBody.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export const LayoutContent = ({ theme, children }: LayoutBaseProps) => {
|
|
10
|
+
return (
|
|
11
|
+
<main className={styles.content} data-theme={theme}>
|
|
12
|
+
{children}
|
|
13
|
+
</main>
|
|
14
|
+
);
|
|
15
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { LayoutSidebar } from './LayoutSidebar';
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Layout/LayoutSidebar',
|
|
6
|
+
component: LayoutSidebar,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
parameters: {},
|
|
9
|
+
args: {},
|
|
10
|
+
} satisfies Meta<typeof LayoutSidebar>;
|
|
11
|
+
|
|
12
|
+
export default meta;
|
|
13
|
+
type Story = StoryObj<typeof meta>;
|
|
14
|
+
|
|
15
|
+
export const Default: Story = {
|
|
16
|
+
args: {},
|
|
17
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LayoutBaseProps } from './LayoutBase';
|
|
2
|
+
import styles from './layout.module.css';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Sidebar layout container. Should be a child of LayoutBody.
|
|
6
|
+
*
|
|
7
|
+
* Will be hidden on small screens.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const LayoutSidebar = ({ theme, children }: LayoutBaseProps) => {
|
|
11
|
+
return (
|
|
12
|
+
<aside className={styles.sidebar} data-theme={theme} aria-expanded="true">
|
|
13
|
+
{children}
|
|
14
|
+
</aside>
|
|
15
|
+
);
|
|
16
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
.base {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
min-height: 100vh;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/* theme */
|
|
8
|
+
|
|
9
|
+
.base[data-theme="global"] {
|
|
10
|
+
background-color: var(--neutral-background-default);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.base[data-theme="neutral"] {
|
|
14
|
+
background-color: var(--neutral-background-subtle);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.base[data-theme="person"] {
|
|
18
|
+
background-color: var(--person-background-subtle);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.base[data-theme="company"] {
|
|
22
|
+
background-color: var(--company-background-subtle);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* body (sidebar + content ) */
|
|
26
|
+
|
|
27
|
+
.body {
|
|
28
|
+
flex-grow: 1;
|
|
29
|
+
width: 100%;
|
|
30
|
+
max-width: 1280px;
|
|
31
|
+
margin: 0 auto;
|
|
32
|
+
display: flex;
|
|
33
|
+
column-gap: 2em;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@media (min-width: 1024px) {
|
|
37
|
+
.body {
|
|
38
|
+
padding: 0 1rem;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.content {
|
|
43
|
+
flex-grow: 1;
|
|
44
|
+
position: relative;
|
|
45
|
+
display: flex;
|
|
46
|
+
flex-direction: column;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.sidebar {
|
|
50
|
+
display: none;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@media (min-width: 1024px) {
|
|
54
|
+
.sidebar {
|
|
55
|
+
display: none;
|
|
56
|
+
width: 224px;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.sidebar[aria-expanded="true"] {
|
|
60
|
+
display: flex;
|
|
61
|
+
flex-direction: column;
|
|
62
|
+
}
|
|
63
|
+
}
|