@soul-refiner/design-system 0.1.39 → 0.2.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/dist/components/navigation/index.d.ts +2 -0
- package/dist/components/navigation/index.js +1 -0
- package/dist/components/navigation/inner/index.d.ts +2 -0
- package/dist/components/navigation/inner/index.js +1 -0
- package/dist/components/navigation/inner/inner.d.ts +76 -0
- package/dist/components/navigation/inner/inner.js +150 -0
- package/package.json +1 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { Breadcrumb } from './breadcrumb';
|
|
2
2
|
export type { BreadcrumbProps, BreadcrumbItemProps } from './breadcrumb';
|
|
3
|
+
export { InnerNav } from './inner';
|
|
4
|
+
export type { InnerNavBackButtonProps, InnerNavDropdownProps, InnerNavItemProps, InnerNavDrawerProps, } from './inner';
|
|
3
5
|
export { Tabs } from './tabs';
|
|
4
6
|
export type { TabProps } from './tabs';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { InnerNav } from './inner';
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/*************************************************************************************************************************
|
|
3
|
+
* Inner Navigation
|
|
4
|
+
*/
|
|
5
|
+
declare const InnerNav: {
|
|
6
|
+
({ children }: React.PropsWithChildren): React.JSX.Element;
|
|
7
|
+
Item: {
|
|
8
|
+
({ active, href, icon, label, sx }: InnerNavItemProps): React.JSX.Element;
|
|
9
|
+
displayName: string;
|
|
10
|
+
};
|
|
11
|
+
Dropdown: {
|
|
12
|
+
({ children, href, icon, label, open, sx, }: InnerNavDropdownProps): React.JSX.Element;
|
|
13
|
+
displayName: string;
|
|
14
|
+
};
|
|
15
|
+
BackButton: {
|
|
16
|
+
({ href, label, sx }: InnerNavBackButtonProps): React.JSX.Element;
|
|
17
|
+
displayName: string;
|
|
18
|
+
};
|
|
19
|
+
Drawer: {
|
|
20
|
+
({ children, label }: InnerNavDrawerProps): React.JSX.Element;
|
|
21
|
+
displayName: string;
|
|
22
|
+
};
|
|
23
|
+
DrawerHeader: {
|
|
24
|
+
({ children }: {
|
|
25
|
+
children?: React.ReactNode;
|
|
26
|
+
}): React.JSX.Element;
|
|
27
|
+
displayName: string;
|
|
28
|
+
};
|
|
29
|
+
DrawerContent: {
|
|
30
|
+
({ children }: {
|
|
31
|
+
children?: React.ReactNode;
|
|
32
|
+
}): React.JSX.Element;
|
|
33
|
+
displayName: string;
|
|
34
|
+
};
|
|
35
|
+
DrawerFooter: {
|
|
36
|
+
({ children }: {
|
|
37
|
+
children?: React.ReactNode;
|
|
38
|
+
}): React.JSX.Element;
|
|
39
|
+
displayName: string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
/*************************************************************************************************************************
|
|
43
|
+
* Item
|
|
44
|
+
*/
|
|
45
|
+
export interface InnerNavItemProps {
|
|
46
|
+
active: boolean;
|
|
47
|
+
href?: string;
|
|
48
|
+
icon?: React.ReactElement;
|
|
49
|
+
label: React.ReactNode;
|
|
50
|
+
sx?: string;
|
|
51
|
+
}
|
|
52
|
+
/*************************************************************************************************************************
|
|
53
|
+
* Dropdown
|
|
54
|
+
*/
|
|
55
|
+
export interface InnerNavDropdownProps extends React.PropsWithChildren {
|
|
56
|
+
href: string;
|
|
57
|
+
icon?: React.ReactElement;
|
|
58
|
+
label: React.ReactNode;
|
|
59
|
+
open: boolean;
|
|
60
|
+
sx?: string;
|
|
61
|
+
}
|
|
62
|
+
/*************************************************************************************************************************
|
|
63
|
+
* Back Button
|
|
64
|
+
*/
|
|
65
|
+
export interface InnerNavBackButtonProps {
|
|
66
|
+
href: string;
|
|
67
|
+
label: React.ReactNode;
|
|
68
|
+
sx?: string;
|
|
69
|
+
}
|
|
70
|
+
/*************************************************************************************************************************
|
|
71
|
+
* Create Button
|
|
72
|
+
*/
|
|
73
|
+
export interface InnerNavDrawerProps extends React.PropsWithChildren {
|
|
74
|
+
label: React.ReactNode;
|
|
75
|
+
}
|
|
76
|
+
export { InnerNav };
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
import { Button, Drawer } from '../../';
|
|
4
|
+
import { ChevronDown, ChevronLeft, ChevronUp, Plus } from '../../../icons';
|
|
5
|
+
const INNER_NAV_CHILD_TYPES = [
|
|
6
|
+
'Item',
|
|
7
|
+
'Dropdown',
|
|
8
|
+
'BackButton',
|
|
9
|
+
'Drawer',
|
|
10
|
+
'Misc',
|
|
11
|
+
];
|
|
12
|
+
/*************************************************************************************************************************
|
|
13
|
+
* Inner Navigation
|
|
14
|
+
*/
|
|
15
|
+
const InnerNav = ({ children }) => {
|
|
16
|
+
const elementsByType = {
|
|
17
|
+
Item: [],
|
|
18
|
+
Dropdown: [],
|
|
19
|
+
BackButton: [],
|
|
20
|
+
Drawer: [],
|
|
21
|
+
Misc: [],
|
|
22
|
+
};
|
|
23
|
+
const _children = React.Children.toArray(children);
|
|
24
|
+
for (const child of _children) {
|
|
25
|
+
const isValidChild = React.isValidElement(child);
|
|
26
|
+
const isInnerNavChild = isValidChild &&
|
|
27
|
+
INNER_NAV_CHILD_TYPES.includes(child?.type?.displayName.replace('InnerNav.', ''));
|
|
28
|
+
if (isValidChild && isInnerNavChild) {
|
|
29
|
+
const type = child?.type?.displayName.replace('InnerNav.', '');
|
|
30
|
+
elementsByType[type].push(child);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
elementsByType['Misc'].push(child);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return (React.createElement(NavWrapper, { "aria-label": "side-navigation" },
|
|
37
|
+
React.createElement("div", null, elementsByType['BackButton']),
|
|
38
|
+
React.createElement("div", null, elementsByType['Drawer']),
|
|
39
|
+
React.createElement("div", null, elementsByType['Item']),
|
|
40
|
+
React.createElement("div", null, elementsByType['Dropdown']),
|
|
41
|
+
React.createElement("div", null, elementsByType['Misc'])));
|
|
42
|
+
};
|
|
43
|
+
const NavWrapper = styled.nav `
|
|
44
|
+
height: 100%;
|
|
45
|
+
width: 365px;
|
|
46
|
+
padding: 24px 12px 24px 16px;
|
|
47
|
+
box-sizing: border-box;
|
|
48
|
+
background-color: var(--color-blue-10);
|
|
49
|
+
border-right: 1px solid var(--color-grey-9);
|
|
50
|
+
`;
|
|
51
|
+
const InnerNavItem = ({ active, href, icon, label, sx }) => {
|
|
52
|
+
const isAnchor = !!href;
|
|
53
|
+
return (React.createElement(Item, { "$active": active, "$sx": sx, as: isAnchor ? 'a' : 'button' },
|
|
54
|
+
icon,
|
|
55
|
+
label));
|
|
56
|
+
};
|
|
57
|
+
const Item = styled.button `
|
|
58
|
+
padding: 14px 16px;
|
|
59
|
+
display: flex;
|
|
60
|
+
gap: 16px;
|
|
61
|
+
align-items: center;
|
|
62
|
+
border-radius: 8px;
|
|
63
|
+
font-family: Inter;
|
|
64
|
+
font-weight: 500;
|
|
65
|
+
font-size: 16px;
|
|
66
|
+
line-height: 24px;
|
|
67
|
+
color: var(--color-blue-2);
|
|
68
|
+
cursor: pointer;
|
|
69
|
+
svg {
|
|
70
|
+
fill: var(--color-blue-2);
|
|
71
|
+
}
|
|
72
|
+
${({ $active }) => $active
|
|
73
|
+
? `
|
|
74
|
+
background-color: var(--color-primary-blue-3);`
|
|
75
|
+
: `
|
|
76
|
+
&:hover {
|
|
77
|
+
background-color: var(--color-primary-blue-4);
|
|
78
|
+
}`}
|
|
79
|
+
|
|
80
|
+
${({ $sx }) => ($sx ? $sx : '')}
|
|
81
|
+
`;
|
|
82
|
+
InnerNav.Item = InnerNavItem;
|
|
83
|
+
InnerNavItem.displayName = 'InnerNav.Item';
|
|
84
|
+
const InnerNavDropdown = ({ children, href, icon, label, open, sx, }) => {
|
|
85
|
+
const isAnchor = !!href;
|
|
86
|
+
return (React.createElement(React.Fragment, null,
|
|
87
|
+
React.createElement(Item, { "$active": false, "$sx": sx, as: isAnchor ? 'a' : 'button' },
|
|
88
|
+
icon,
|
|
89
|
+
React.createElement(DropdownTriggerWrapper, null,
|
|
90
|
+
label,
|
|
91
|
+
open && React.createElement(ChevronUp, { size: 16 }),
|
|
92
|
+
!open && React.createElement(ChevronDown, { size: 16 }))),
|
|
93
|
+
open && React.createElement(DropdownContent, null, children)));
|
|
94
|
+
};
|
|
95
|
+
const DropdownContent = styled.div `
|
|
96
|
+
& > a,
|
|
97
|
+
& > button {
|
|
98
|
+
padding-left: 40px;
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
const DropdownTriggerWrapper = styled.div `
|
|
102
|
+
display: flex;
|
|
103
|
+
justify-content: space-between;
|
|
104
|
+
align-items: center;
|
|
105
|
+
flex: 1;
|
|
106
|
+
`;
|
|
107
|
+
InnerNav.Dropdown = InnerNavDropdown;
|
|
108
|
+
InnerNavDropdown.displayName = 'InnerNav.Dropdown';
|
|
109
|
+
const InnerNavBackButton = ({ href, label, sx }) => {
|
|
110
|
+
return (React.createElement(BackButton, { href: href, "$sx": sx },
|
|
111
|
+
React.createElement("div", null,
|
|
112
|
+
React.createElement(ChevronLeft, { size: 24 })),
|
|
113
|
+
label));
|
|
114
|
+
};
|
|
115
|
+
const BackButton = styled.a `
|
|
116
|
+
display: flex;
|
|
117
|
+
align-items: center;
|
|
118
|
+
gap: 8px;
|
|
119
|
+
font-family: Inter;
|
|
120
|
+
font-weight: 500;
|
|
121
|
+
font-size: 16px;
|
|
122
|
+
line-height: 24px;
|
|
123
|
+
color: var(--color-grey-3);
|
|
124
|
+
text-decoration: none;
|
|
125
|
+
border-radius: 8px;
|
|
126
|
+
|
|
127
|
+
&:hover {
|
|
128
|
+
background-color: var(--color-primary-blue-4);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
div {
|
|
132
|
+
padding: 12px;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
${({ $sx }) => ($sx ? $sx : '')}
|
|
136
|
+
`;
|
|
137
|
+
InnerNav.BackButton = InnerNavBackButton;
|
|
138
|
+
InnerNavBackButton.displayName = 'InnerNav.BackButton';
|
|
139
|
+
const InnerNavDrawer = ({ children, label }) => {
|
|
140
|
+
return (React.createElement(Drawer, null,
|
|
141
|
+
React.createElement(Drawer.Trigger, null,
|
|
142
|
+
React.createElement(Button, { icon: React.createElement(Plus, { color: "white" }), size: "small", sx: "width: 100%; margin-bottom: 24px;", type: "primary" }, label)),
|
|
143
|
+
children));
|
|
144
|
+
};
|
|
145
|
+
InnerNav.Drawer = InnerNavDrawer;
|
|
146
|
+
InnerNavDrawer.displayName = 'InnerNav.Drawer';
|
|
147
|
+
InnerNav.DrawerHeader = Drawer.Header;
|
|
148
|
+
InnerNav.DrawerContent = Drawer.Content;
|
|
149
|
+
InnerNav.DrawerFooter = Drawer.Footer;
|
|
150
|
+
export { InnerNav };
|