@licklist/design 0.78.5-dev.43 → 0.78.5-dev.46
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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/v2/components/Alert/Alert.scss.js +1 -1
- package/dist/v2/components/Button/Button.scss.js +1 -1
- package/dist/v2/components/Checkbox/Checkbox.scss.js +1 -1
- package/dist/v2/components/FormField/FormField.scss.js +1 -1
- package/dist/v2/components/NewPageHeader/NewPageHeader.scss.js +1 -1
- package/dist/v2/components/Select/Select.scss.js +1 -1
- package/dist/v2/components/WYSIWYGEditor/Icons.d.ts +0 -3
- package/dist/v2/components/WYSIWYGEditor/Icons.d.ts.map +1 -1
- package/dist/v2/components/WYSIWYGEditor/Icons.js +2 -41
- package/dist/v2/components/WYSIWYGEditor/WYSIWYGEditor.d.ts.map +1 -1
- package/dist/v2/components/WYSIWYGEditor/WYSIWYGEditor.js +39 -42
- package/dist/v2/components/WYSIWYGEditor/WYSIWYGEditor.scss.js +1 -1
- package/dist/v2/{navigation/icons → icons}/index.d.ts +6 -0
- package/dist/v2/icons/index.d.ts.map +1 -0
- package/dist/v2/icons/index.js +115 -0
- package/dist/v2/index.d.ts +3 -1
- package/dist/v2/index.d.ts.map +1 -1
- package/dist/v2/navigation/DashboardLayout/TopNavigation.scss.js +1 -1
- package/dist/v2/pages/Settings/SettingsPage.d.ts +13 -0
- package/dist/v2/pages/Settings/SettingsPage.d.ts.map +1 -0
- package/dist/v2/pages/Settings/SettingsPage.js +88 -0
- package/dist/v2/pages/Settings/SettingsPage.scss.js +6 -0
- package/dist/v2/pages/Settings/SettingsTabs.d.ts +14 -0
- package/dist/v2/pages/Settings/SettingsTabs.d.ts.map +1 -0
- package/dist/v2/pages/Settings/SettingsTabs.js +29 -0
- package/dist/v2/pages/Settings/SettingsTabs.scss.js +6 -0
- package/dist/v2/pages/Settings/components/SidebarCustomisation.d.ts +20 -0
- package/dist/v2/pages/Settings/components/SidebarCustomisation.d.ts.map +1 -0
- package/dist/v2/pages/Settings/components/SidebarCustomisation.js +276 -0
- package/dist/v2/pages/Settings/components/SidebarCustomisation.scss.js +6 -0
- package/dist/v2/pages/Settings/components/SidebarNavItem.d.ts +19 -0
- package/dist/v2/pages/Settings/components/SidebarNavItem.d.ts.map +1 -0
- package/dist/v2/pages/Settings/components/SidebarNavItem.js +41 -0
- package/dist/v2/pages/Settings/components/SidebarNavItem.scss.js +6 -0
- package/dist/v2/pages/Settings/components/index.d.ts +5 -0
- package/dist/v2/pages/Settings/components/index.d.ts.map +1 -0
- package/dist/v2/pages/Settings/index.d.ts +7 -0
- package/dist/v2/pages/Settings/index.d.ts.map +1 -0
- package/dist/v2/styles/components/Button.scss +3 -3
- package/dist/v2/styles/form/NewInput.scss +33 -21
- package/dist/v2/styles/form/NewInput.scss.js +1 -1
- package/dist/v2/styles/tokens/_colors.scss +1 -1
- package/package.json +3 -3
- package/src/index.ts +1 -0
- package/src/v2/components/Checkbox/Checkbox.scss +28 -13
- package/src/v2/components/FormField/FormField.scss +9 -9
- package/src/v2/components/NewPageHeader/NewPageHeader.scss +12 -0
- package/src/v2/components/Select/Select.scss +5 -5
- package/src/v2/components/WYSIWYGEditor/Icons.tsx +1 -18
- package/src/v2/components/WYSIWYGEditor/WYSIWYGEditor.scss +50 -32
- package/src/v2/components/WYSIWYGEditor/WYSIWYGEditor.tsx +48 -35
- package/src/v2/icons/index.tsx +105 -0
- package/src/v2/index.ts +10 -2
- package/src/v2/navigation/DashboardLayout/TopNavigation.scss +1 -0
- package/src/v2/pages/Settings/SettingsContentPlaceholder.scss +24 -0
- package/src/v2/pages/Settings/SettingsPage.scss +52 -0
- package/src/v2/pages/Settings/SettingsPage.tsx +46 -0
- package/src/v2/pages/Settings/SettingsTabs.scss +44 -0
- package/src/v2/pages/Settings/SettingsTabs.tsx +36 -0
- package/src/v2/pages/Settings/components/SidebarCustomisation.scss +150 -0
- package/src/v2/pages/Settings/components/SidebarCustomisation.stories.tsx +48 -0
- package/src/v2/pages/Settings/components/SidebarCustomisation.tsx +166 -0
- package/src/v2/pages/Settings/components/SidebarNavItem.scss +76 -0
- package/src/v2/pages/Settings/components/SidebarNavItem.stories.tsx +50 -0
- package/src/v2/pages/Settings/components/SidebarNavItem.tsx +52 -0
- package/src/v2/pages/Settings/components/index.ts +5 -0
- package/src/v2/pages/Settings/index.ts +8 -0
- package/src/v2/styles/components/Button.scss +3 -3
- package/src/v2/styles/form/NewInput.scss +33 -21
- package/src/v2/styles/tokens/_colors.scss +1 -1
- package/dist/v2/navigation/icons/index.d.ts.map +0 -1
- package/src/v2/navigation/icons/index.tsx +0 -72
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React, { useState } from 'react'
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
3
|
+
import { SidebarCustomisation, defaultSidebarItems, SidebarItem } from './SidebarCustomisation'
|
|
4
|
+
|
|
5
|
+
const meta: Meta<typeof SidebarCustomisation> = {
|
|
6
|
+
title: 'V2/Pages/Settings/SidebarCustomisation',
|
|
7
|
+
component: SidebarCustomisation,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'padded',
|
|
10
|
+
},
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default meta
|
|
14
|
+
type Story = StoryObj<typeof SidebarCustomisation>
|
|
15
|
+
|
|
16
|
+
const InteractiveSidebarCustomisation = () => {
|
|
17
|
+
const [items, setItems] = useState<SidebarItem[]>(defaultSidebarItems)
|
|
18
|
+
|
|
19
|
+
const handleSave = (updatedItems: SidebarItem[]) => {
|
|
20
|
+
console.log('Saved items:', updatedItems)
|
|
21
|
+
alert('Settings saved!')
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const handleReset = () => {
|
|
25
|
+
setItems(defaultSidebarItems)
|
|
26
|
+
console.log('Reset to defaults')
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const handleCancel = () => {
|
|
30
|
+
console.log('Cancelled')
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<div style={{ maxWidth: '900px' }}>
|
|
35
|
+
<SidebarCustomisation
|
|
36
|
+
items={items}
|
|
37
|
+
onItemsChange={setItems}
|
|
38
|
+
onSave={handleSave}
|
|
39
|
+
onReset={handleReset}
|
|
40
|
+
onCancel={handleCancel}
|
|
41
|
+
/>
|
|
42
|
+
</div>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export const Default: Story = {
|
|
47
|
+
render: () => <InteractiveSidebarCustomisation />,
|
|
48
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react'
|
|
2
|
+
import { SidebarNavItem } from './SidebarNavItem'
|
|
3
|
+
import './SidebarCustomisation.scss'
|
|
4
|
+
import {
|
|
5
|
+
CalendarIcon,
|
|
6
|
+
BookingsIcon,
|
|
7
|
+
BookingTypesIcon,
|
|
8
|
+
LoyaltyIcon,
|
|
9
|
+
CustomersIcon,
|
|
10
|
+
MarketingIcon,
|
|
11
|
+
WaiversIcon,
|
|
12
|
+
SettingsIcon,
|
|
13
|
+
EditIcon,
|
|
14
|
+
} from '../../../icons'
|
|
15
|
+
|
|
16
|
+
export interface SidebarItem {
|
|
17
|
+
id: string
|
|
18
|
+
label: string
|
|
19
|
+
icon: React.ReactNode
|
|
20
|
+
visible: boolean
|
|
21
|
+
locked?: boolean
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface SidebarCustomisationProps {
|
|
25
|
+
items: SidebarItem[]
|
|
26
|
+
onItemsChange?: (items: SidebarItem[]) => void
|
|
27
|
+
onSave?: (items: SidebarItem[]) => void
|
|
28
|
+
onReset?: () => void
|
|
29
|
+
onCancel?: () => void
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Default sidebar items - IDs must match useProviderNavigation.tsx
|
|
33
|
+
export const defaultSidebarItems: SidebarItem[] = [
|
|
34
|
+
{ id: 'events', label: 'Dates & Events', icon: <CalendarIcon />, visible: true },
|
|
35
|
+
{ id: 'sales', label: 'Bookings & Enquiries', icon: <BookingsIcon />, visible: true },
|
|
36
|
+
{ id: 'product-sets', label: 'Booking Types', icon: <BookingTypesIcon />, visible: true },
|
|
37
|
+
{ id: 'loyalty', label: 'Loyalty', icon: <LoyaltyIcon />, visible: true },
|
|
38
|
+
{ id: 'customers', label: 'Customers', icon: <CustomersIcon />, visible: true },
|
|
39
|
+
{ id: 'emails', label: 'Email & SMS', icon: <MarketingIcon />, visible: true },
|
|
40
|
+
{ id: 'waivers', label: 'Waivers', icon: <WaiversIcon />, visible: true },
|
|
41
|
+
{ id: 'settings', label: 'Settings', icon: <SettingsIcon />, visible: true, locked: true },
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
export const SidebarCustomisation: React.FC<SidebarCustomisationProps> = ({
|
|
45
|
+
items: initialItems,
|
|
46
|
+
onItemsChange,
|
|
47
|
+
onSave,
|
|
48
|
+
onReset,
|
|
49
|
+
onCancel,
|
|
50
|
+
}) => {
|
|
51
|
+
const [items, setItems] = useState<SidebarItem[]>(initialItems)
|
|
52
|
+
const [isEditing, setIsEditing] = useState(false)
|
|
53
|
+
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
setItems(initialItems)
|
|
56
|
+
}, [initialItems])
|
|
57
|
+
|
|
58
|
+
const handleLabelChange = (id: string, newLabel: string) => {
|
|
59
|
+
const updatedItems = items.map((item) =>
|
|
60
|
+
item.id === id ? { ...item, label: newLabel } : item
|
|
61
|
+
)
|
|
62
|
+
setItems(updatedItems)
|
|
63
|
+
onItemsChange?.(updatedItems)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const handleSave = () => {
|
|
67
|
+
onSave?.(items)
|
|
68
|
+
setIsEditing(false)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const handleReset = () => {
|
|
72
|
+
setItems(defaultSidebarItems)
|
|
73
|
+
onReset?.()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const handleCancel = () => {
|
|
77
|
+
setItems(initialItems)
|
|
78
|
+
onCancel?.()
|
|
79
|
+
setIsEditing(false)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const handleEdit = () => {
|
|
83
|
+
setIsEditing(true)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<div className="sidebar-customisation">
|
|
88
|
+
<div className="sidebar-customisation__header">
|
|
89
|
+
<h3 className="sidebar-customisation__title">Sidebar Customisation</h3>
|
|
90
|
+
{isEditing ? (
|
|
91
|
+
<button
|
|
92
|
+
type="button"
|
|
93
|
+
className="sidebar-customisation__cancel-btn"
|
|
94
|
+
onClick={handleCancel}
|
|
95
|
+
>
|
|
96
|
+
Cancel
|
|
97
|
+
</button>
|
|
98
|
+
) : (
|
|
99
|
+
<button
|
|
100
|
+
type="button"
|
|
101
|
+
className="sidebar-customisation__edit-btn"
|
|
102
|
+
onClick={handleEdit}
|
|
103
|
+
>
|
|
104
|
+
<EditIcon />
|
|
105
|
+
<span>Edit Side Bar</span>
|
|
106
|
+
</button>
|
|
107
|
+
)}
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
{isEditing ? (
|
|
111
|
+
<>
|
|
112
|
+
<div className="sidebar-customisation__grid">
|
|
113
|
+
{items.map((item) => {
|
|
114
|
+
const defaultItem = defaultSidebarItems.find(d => d.id === item.id)
|
|
115
|
+
return (
|
|
116
|
+
<SidebarNavItem
|
|
117
|
+
key={item.id}
|
|
118
|
+
id={item.id}
|
|
119
|
+
label={item.label}
|
|
120
|
+
defaultLabel={defaultItem?.label || item.label}
|
|
121
|
+
icon={item.icon}
|
|
122
|
+
onLabelChange={handleLabelChange}
|
|
123
|
+
/>
|
|
124
|
+
)
|
|
125
|
+
})}
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<div className="sidebar-customisation__actions">
|
|
129
|
+
<button
|
|
130
|
+
type="button"
|
|
131
|
+
className="sidebar-customisation__save-btn"
|
|
132
|
+
onClick={handleSave}
|
|
133
|
+
>
|
|
134
|
+
Save Changes
|
|
135
|
+
</button>
|
|
136
|
+
<button
|
|
137
|
+
type="button"
|
|
138
|
+
className="sidebar-customisation__reset-btn"
|
|
139
|
+
onClick={handleReset}
|
|
140
|
+
>
|
|
141
|
+
Reset to defaults
|
|
142
|
+
</button>
|
|
143
|
+
</div>
|
|
144
|
+
</>
|
|
145
|
+
) : (
|
|
146
|
+
<div className="sidebar-customisation__view-grid">
|
|
147
|
+
{items.map((item) => (
|
|
148
|
+
<div
|
|
149
|
+
key={item.id}
|
|
150
|
+
className={`sidebar-customisation__view-item ${!item.visible ? 'sidebar-customisation__view-item--hidden' : ''}`}
|
|
151
|
+
>
|
|
152
|
+
<span className="sidebar-customisation__view-icon">
|
|
153
|
+
{item.icon}
|
|
154
|
+
</span>
|
|
155
|
+
<span className="sidebar-customisation__view-label">
|
|
156
|
+
{item.label}
|
|
157
|
+
</span>
|
|
158
|
+
</div>
|
|
159
|
+
))}
|
|
160
|
+
</div>
|
|
161
|
+
)}
|
|
162
|
+
</div>
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export default SidebarCustomisation
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
@import '../../../styles/tokens/typography';
|
|
2
|
+
@import '../../../styles/tokens/colors';
|
|
3
|
+
|
|
4
|
+
.sidebar-nav-item {
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
gap: 8px;
|
|
8
|
+
font-family: var(--font-family-sans);
|
|
9
|
+
|
|
10
|
+
&__header {
|
|
11
|
+
display: flex;
|
|
12
|
+
align-items: center;
|
|
13
|
+
justify-content: space-between;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&__info {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
gap: 8px;
|
|
20
|
+
|
|
21
|
+
&--disabled {
|
|
22
|
+
.sidebar-nav-item__icon {
|
|
23
|
+
color: var(--fill-disabled);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.sidebar-nav-item__name {
|
|
27
|
+
color: var(--label-status-disabled);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&__icon {
|
|
33
|
+
width: 24px;
|
|
34
|
+
height: 24px;
|
|
35
|
+
display: flex;
|
|
36
|
+
align-items: center;
|
|
37
|
+
justify-content: center;
|
|
38
|
+
color: var(--fill-primary);
|
|
39
|
+
|
|
40
|
+
svg {
|
|
41
|
+
width: 24px;
|
|
42
|
+
height: 24px;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&__name {
|
|
47
|
+
@include typography('text.small.emphasis');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
&__input {
|
|
51
|
+
@include typography('text.small');
|
|
52
|
+
height: 40px;
|
|
53
|
+
width: 100%;
|
|
54
|
+
padding: 8px 12px;
|
|
55
|
+
border: 1px solid var(--border-primary);
|
|
56
|
+
border-radius: 6px;
|
|
57
|
+
background-color: var(--surface-secondary);
|
|
58
|
+
color: var(--label-primary);
|
|
59
|
+
outline: none;
|
|
60
|
+
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
|
61
|
+
|
|
62
|
+
&::placeholder {
|
|
63
|
+
color: var(--label-secondary);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&:focus {
|
|
67
|
+
outline: none;
|
|
68
|
+
box-shadow: 0 0 0 2px var(--surface-primary), 0 0 0 4px var(--actions-regular);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
&--disabled {
|
|
72
|
+
opacity: 0.5;
|
|
73
|
+
cursor: not-allowed;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React, { useState } from 'react'
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
3
|
+
import { SidebarNavItem } from './SidebarNavItem'
|
|
4
|
+
|
|
5
|
+
const HomeIcon = () => (
|
|
6
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
7
|
+
<path d="M17.7273 20.1182H6.27273C5.82086 20.1182 5.45455 19.7423 5.45455 19.2785V11.7207H3L11.4496 3.83661C11.7617 3.54543 12.2383 3.54543 12.5504 3.83661L21 11.7207H18.5455V19.2785C18.5455 19.7423 18.1792 20.1182 17.7273 20.1182ZM7.09091 18.4387H16.9091V10.1734L12 5.59288L7.09091 10.1734V18.4387Z" fill="currentColor" />
|
|
8
|
+
</svg>
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
const meta: Meta<typeof SidebarNavItem> = {
|
|
12
|
+
title: 'V2/Pages/Settings/SidebarNavItem',
|
|
13
|
+
component: SidebarNavItem,
|
|
14
|
+
parameters: {
|
|
15
|
+
layout: 'padded',
|
|
16
|
+
},
|
|
17
|
+
argTypes: {
|
|
18
|
+
label: {
|
|
19
|
+
control: 'text',
|
|
20
|
+
description: 'Display label for the item',
|
|
21
|
+
},
|
|
22
|
+
disabled: {
|
|
23
|
+
control: 'boolean',
|
|
24
|
+
description: 'Whether the input is disabled',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default meta
|
|
30
|
+
type Story = StoryObj<typeof SidebarNavItem>
|
|
31
|
+
|
|
32
|
+
const InteractiveSidebarNavItem = () => {
|
|
33
|
+
const [label, setLabel] = useState('Home')
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<div style={{ maxWidth: '300px' }}>
|
|
37
|
+
<SidebarNavItem
|
|
38
|
+
id="home"
|
|
39
|
+
label={label}
|
|
40
|
+
defaultLabel="Home"
|
|
41
|
+
icon={<HomeIcon />}
|
|
42
|
+
onLabelChange={(id, newLabel) => setLabel(newLabel)}
|
|
43
|
+
/>
|
|
44
|
+
</div>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const Default: Story = {
|
|
49
|
+
render: () => <InteractiveSidebarNavItem />,
|
|
50
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import './SidebarNavItem.scss'
|
|
3
|
+
|
|
4
|
+
export interface SidebarNavItemProps {
|
|
5
|
+
/** Unique identifier for the item */
|
|
6
|
+
id: string
|
|
7
|
+
/** Display label for the item (editable value) */
|
|
8
|
+
label: string
|
|
9
|
+
/** Default/original label name shown in header */
|
|
10
|
+
defaultLabel: string
|
|
11
|
+
/** Icon to display */
|
|
12
|
+
icon: React.ReactNode
|
|
13
|
+
/** Whether the input is disabled */
|
|
14
|
+
disabled?: boolean
|
|
15
|
+
/** Callback when the label changes */
|
|
16
|
+
onLabelChange?: (id: string, label: string) => void
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const SidebarNavItem: React.FC<SidebarNavItemProps> = ({
|
|
20
|
+
id,
|
|
21
|
+
label,
|
|
22
|
+
defaultLabel,
|
|
23
|
+
icon,
|
|
24
|
+
disabled = false,
|
|
25
|
+
onLabelChange,
|
|
26
|
+
}) => {
|
|
27
|
+
return (
|
|
28
|
+
<div className="sidebar-nav-item">
|
|
29
|
+
<div className="sidebar-nav-item__header">
|
|
30
|
+
<div className={`sidebar-nav-item__info ${disabled ? 'sidebar-nav-item__info--disabled' : ''}`}>
|
|
31
|
+
<div className="sidebar-nav-item__icon">
|
|
32
|
+
{icon}
|
|
33
|
+
</div>
|
|
34
|
+
<span className="sidebar-nav-item__name">
|
|
35
|
+
{defaultLabel}
|
|
36
|
+
</span>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
<input
|
|
40
|
+
type="text"
|
|
41
|
+
id={id}
|
|
42
|
+
className={`sidebar-nav-item__input ${disabled ? 'sidebar-nav-item__input--disabled' : ''}`}
|
|
43
|
+
value={label}
|
|
44
|
+
onChange={(e) => onLabelChange?.(id, e.target.value)}
|
|
45
|
+
disabled={disabled}
|
|
46
|
+
placeholder={label}
|
|
47
|
+
/>
|
|
48
|
+
</div>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export default SidebarNavItem
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { SidebarCustomisation, defaultSidebarItems } from './SidebarCustomisation'
|
|
2
|
+
export type { SidebarCustomisationProps, SidebarItem } from './SidebarCustomisation'
|
|
3
|
+
|
|
4
|
+
export { SidebarNavItem } from './SidebarNavItem'
|
|
5
|
+
export type { SidebarNavItemProps } from './SidebarNavItem'
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { SettingsPage } from './SettingsPage'
|
|
2
|
+
export type { SettingsPageProps } from './SettingsPage'
|
|
3
|
+
|
|
4
|
+
export { SettingsTabs } from './SettingsTabs'
|
|
5
|
+
export type { SettingsTabsProps, SettingsTab } from './SettingsTabs'
|
|
6
|
+
|
|
7
|
+
export { SidebarCustomisation, defaultSidebarItems, SidebarNavItem } from './components'
|
|
8
|
+
export type { SidebarCustomisationProps, SidebarItem, SidebarNavItemProps } from './components'
|
|
@@ -20,16 +20,16 @@
|
|
|
20
20
|
|
|
21
21
|
// Primary Button - Solid purple
|
|
22
22
|
&--primary {
|
|
23
|
-
background: #
|
|
23
|
+
background: #6200EE;
|
|
24
24
|
color: #ffffff;
|
|
25
25
|
|
|
26
26
|
&:hover {
|
|
27
|
-
background: #
|
|
27
|
+
background: #360083;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
&:active,
|
|
31
31
|
&:focus {
|
|
32
|
-
background: #
|
|
32
|
+
background: #360083;
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -9,19 +9,19 @@
|
|
|
9
9
|
width: 100%;
|
|
10
10
|
|
|
11
11
|
&__label {
|
|
12
|
-
font-family: var(--font-family-sans, 'Geist', sans-serif)
|
|
13
|
-
font-size:
|
|
12
|
+
font-family: var(--font-family-sans, 'Geist', sans-serif);
|
|
13
|
+
font-size: 15px;
|
|
14
14
|
font-style: normal;
|
|
15
|
-
font-weight:
|
|
16
|
-
line-height:
|
|
15
|
+
font-weight: 600;
|
|
16
|
+
line-height: 20px;
|
|
17
17
|
color: var(--label-primary, #121E52);
|
|
18
18
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
&__label-optional {
|
|
22
|
-
font-family: var(--font-family-sans, 'Geist', sans-serif)
|
|
22
|
+
font-family: var(--font-family-sans, 'Geist', sans-serif);
|
|
23
23
|
font-size: var(--text-xs-size, 11px);
|
|
24
|
-
font-weight:
|
|
24
|
+
font-weight: 400;
|
|
25
25
|
line-height: var(--text-xs-line, 14px);
|
|
26
26
|
color: var(--labels-main-label-secondary, #626a90);
|
|
27
27
|
text-align: right;
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
&__input {
|
|
39
|
-
font-family: var(--font-family-sans, 'Geist', sans-serif)
|
|
40
|
-
font-size: var(--text-
|
|
41
|
-
line-height: var(--text-
|
|
39
|
+
font-family: var(--font-family-sans, 'Geist', sans-serif);
|
|
40
|
+
font-size: var(--text-regular-size, 15px);
|
|
41
|
+
line-height: var(--text-regular-line, 20px);
|
|
42
42
|
flex: 1 0 0;
|
|
43
43
|
background-color: var(--surfaces-main-background-secondary);
|
|
44
44
|
border: 2px solid var(--border-primary);
|
|
@@ -49,6 +49,10 @@
|
|
|
49
49
|
width: 100%;
|
|
50
50
|
transition: all 0.2s ease;
|
|
51
51
|
|
|
52
|
+
@media (max-width: 768px) {
|
|
53
|
+
font-size: 16px;
|
|
54
|
+
}
|
|
55
|
+
|
|
52
56
|
&:focus {
|
|
53
57
|
outline: none;
|
|
54
58
|
border-color: var(--border-selected, #6200EE);
|
|
@@ -61,9 +65,9 @@
|
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
&__textarea {
|
|
64
|
-
font-family: var(--font-family-sans, 'Geist', sans-serif)
|
|
65
|
-
font-size: var(--text-
|
|
66
|
-
line-height: var(--text-
|
|
68
|
+
font-family: var(--font-family-sans, 'Geist', sans-serif);
|
|
69
|
+
font-size: var(--text-regular-size, 15px);
|
|
70
|
+
line-height: var(--text-regular-line, 20px);
|
|
67
71
|
color: var(--labels-main-label-primary, #121e52);
|
|
68
72
|
background-color: var(--surfaces-main-background-secondary, #f8f8fa);
|
|
69
73
|
border: 1px solid var(--borders-main-border-primary, #e8e9ef);
|
|
@@ -74,6 +78,10 @@
|
|
|
74
78
|
resize: vertical;
|
|
75
79
|
transition: all 0.2s ease;
|
|
76
80
|
|
|
81
|
+
@media (max-width: 768px) {
|
|
82
|
+
font-size: 16px;
|
|
83
|
+
}
|
|
84
|
+
|
|
77
85
|
&:focus {
|
|
78
86
|
outline: none;
|
|
79
87
|
border-color: var(--border-selected, #6200EE);
|
|
@@ -98,10 +106,14 @@
|
|
|
98
106
|
flex: 1;
|
|
99
107
|
border: none;
|
|
100
108
|
background: transparent;
|
|
101
|
-
font-family: var(--font-family-sans, 'Geist', sans-serif)
|
|
102
|
-
font-size: var(--text-
|
|
103
|
-
line-height: var(--text-
|
|
104
|
-
color: var(--
|
|
109
|
+
font-family: var(--font-family-sans, 'Geist', sans-serif);
|
|
110
|
+
font-size: var(--text-regular-size, 15px);
|
|
111
|
+
line-height: var(--text-regular-line, 20px);
|
|
112
|
+
color: var(--label-primary);
|
|
113
|
+
|
|
114
|
+
@media (max-width: 768px) {
|
|
115
|
+
font-size: 16px;
|
|
116
|
+
}
|
|
105
117
|
|
|
106
118
|
&:focus {
|
|
107
119
|
outline: none;
|
|
@@ -130,7 +142,7 @@
|
|
|
130
142
|
border: 2px solid var(--borders-main-border-primary, #e8e9ef);
|
|
131
143
|
border-radius: var(--radius-md, 4px);
|
|
132
144
|
text-align: center;
|
|
133
|
-
font-family: var(--font-family-sans, 'Geist', sans-serif)
|
|
145
|
+
font-family: var(--font-family-sans, 'Geist', sans-serif);
|
|
134
146
|
font-size: var(--text-lg-size, 18px);
|
|
135
147
|
font-weight: var(--heading-h3-weight, 600);
|
|
136
148
|
color: var(--labels-main-label-primary, #121e52);
|
|
@@ -144,17 +156,17 @@
|
|
|
144
156
|
}
|
|
145
157
|
|
|
146
158
|
&__helper-text {
|
|
147
|
-
font-family: var(--font-family-sans, 'Geist', sans-serif)
|
|
148
|
-
font-size:
|
|
159
|
+
font-family: var(--font-family-sans, 'Geist', sans-serif);
|
|
160
|
+
font-size: var(--text-regular-size, 15px);
|
|
149
161
|
font-style: normal;
|
|
150
162
|
font-weight: 400;
|
|
151
|
-
line-height:
|
|
163
|
+
line-height: var(--text-regular-line, 20px);
|
|
152
164
|
margin-top: 2px;
|
|
153
165
|
color: var(--label-secondary, #626A90);
|
|
154
166
|
}
|
|
155
167
|
|
|
156
168
|
&__error-text {
|
|
157
|
-
font-family: var(--font-family-sans, 'Geist', sans-serif)
|
|
169
|
+
font-family: var(--font-family-sans, 'Geist', sans-serif);
|
|
158
170
|
font-size: 11px;
|
|
159
171
|
font-style: normal;
|
|
160
172
|
font-weight: 400;
|
|
@@ -387,7 +387,7 @@
|
|
|
387
387
|
/* Borders */
|
|
388
388
|
--border-primary: var(--tone-light);
|
|
389
389
|
--border-secondary: var(--tone-regular);
|
|
390
|
-
--border-selected: var(--
|
|
390
|
+
--border-selected: var(--neutral-600);
|
|
391
391
|
--border-action: var(--actions-regular);
|
|
392
392
|
--border-status-error: var(--errors-lighter);
|
|
393
393
|
--border-status-success: var(--success-lighter);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/v2/navigation/icons/index.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,+CAOzB,CAAA;AAED,eAAO,MAAM,WAAW,+CAIvB,CAAA;AAED,eAAO,MAAM,SAAS,+CAKrB,CAAA;AAED,eAAO,MAAM,aAAa,+CAIzB,CAAA;AAED,eAAO,MAAM,SAAS,+CAIrB,CAAA;AAED,eAAO,MAAM,WAAW,+CAIvB,CAAA;AAED,eAAO,MAAM,aAAa,+CAIzB,CAAA;AAED,eAAO,MAAM,WAAW,+CAIvB,CAAA;AAED,eAAO,MAAM,aAAa,+CAIzB,CAAA;AAED,eAAO,MAAM,YAAY,+CAIxB,CAAA;AAED,eAAO,MAAM,YAAY,+CAIxB,CAAA"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
|
|
3
|
-
export const DashboardIcon = () => (
|
|
4
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
5
|
-
<path
|
|
6
|
-
fill="var(--fills-main-fill-primary, #14215A)"
|
|
7
|
-
d="M17.727 20.118H6.273a.83.83 0 0 1-.818-.84v-7.557H3l8.45-7.884a.803.803 0 0 1 1.1 0L21 11.72h-2.454v7.557a.83.83 0 0 1-.819.84Zm-10.636-1.68h9.818v-8.265L12 5.593l-4.91 4.58v8.266Z"
|
|
8
|
-
/>
|
|
9
|
-
</svg>
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
export const CompanyIcon = () => (
|
|
13
|
-
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
14
|
-
<path d="M19.5 18.75H4.5V17.25H5.25V6C5.25 5.58579 5.58579 5.25 6 5.25H16.5C16.9142 5.25 17.25 5.58579 17.25 6V9.75H18.75V17.25H19.5V18.75ZM15.75 17.25H17.25V11.25H12.75V17.25H14.25V12.75H15.75V17.25ZM15.75 9.75V6.75H6.75V17.25H11.25V9.75H15.75ZM8.25 11.25H9.75V12.75H8.25V11.25ZM8.25 14.25H9.75V15.75H8.25V14.25ZM8.25 8.25H9.75V9.75H8.25V8.25Z" fill="var(--fills-main-fill-primary, #14215A)" />
|
|
15
|
-
</svg>
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
export const VenueIcon = () => (
|
|
19
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none">
|
|
20
|
-
<path fill="#000" fillOpacity=".1" d="m6 7.5 6.75-2.625V18H6V7.5Z" />
|
|
21
|
-
<path fill="var(--fills-main-fill-primary, #14215A)" d="M5.25 17.25V7.275a.75.75 0 0 1 .494-.704l7.253-2.638a.375.375 0 0 1 .503.353V8l4.737 1.58a.75.75 0 0 1 .513.71v6.96h1.5v1.5H3.75v-1.5h1.5Zm1.5 0H12V5.892L6.75 7.8v9.45Zm10.5 0v-6.419l-3.75-1.25v7.67h3.75Z" />
|
|
22
|
-
</svg>
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
export const MarketingIcon = () => (
|
|
26
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none">
|
|
27
|
-
<path fill="var(--fills-main-fill-primary, #14215A)" d="M10.72 16.363s5.264-.634 8.02.957l.725-.194a.75.75 0 0 0 .53-.919l-1.177-4.392a1.5 1.5 0 0 0-.752-2.807L16.89 4.616a.75.75 0 0 0-.918-.53l-.725.194c-1.59 2.755-6.468 4.839-6.468 4.839l-2.898.776a1.5 1.5 0 0 0-1.06 1.837l1.164 4.347a1.5 1.5 0 0 0 1.838 1.06l.724-.194 1.695 3.428 1.449-.388-.97-3.622Zm-.17-6.43a25.444 25.444 0 0 0 1.647-.92c1.12-.683 2.514-1.66 3.549-2.868l2.494 9.31c-1.5-.529-3.196-.678-4.507-.71-.713-.017-1.364 0-1.887.026L10.55 9.934Zm-4.281 1.41 2.897-.775 1.165 4.346-2.898.777-1.164-4.347Z" />
|
|
28
|
-
</svg>
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
export const AdminIcon = () => (
|
|
32
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none">
|
|
33
|
-
<path fill="var(--fills-main-fill-primary, #14215A)" d="M12 13.5V15a4.5 4.5 0 0 0-4.5 4.5H6a6 6 0 0 1 6-6Zm0-.75a4.499 4.499 0 0 1-4.5-4.5c0-2.486 2.014-4.5 4.5-4.5s4.5 2.014 4.5 4.5-2.014 4.5-4.5 4.5Zm0-1.5a3 3 0 1 0 0-6 3 3 0 1 0 0 6Zm4.5 7.875-2.204 1.159.42-2.455-1.782-1.738 2.464-.358L16.5 13.5l1.102 2.233 2.465.358-1.784 1.738.421 2.455-2.204-1.159Z" />
|
|
34
|
-
</svg>
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
export const ProfileIcon = () => (
|
|
38
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none">
|
|
39
|
-
<path fill="var(--fills-main-fill-primary, #14215A)" d="M6 19.5a6 6 0 0 1 12 0h-1.5a4.5 4.5 0 1 0-9 0H6Zm6-6.75a4.499 4.499 0 0 1-4.5-4.5c0-2.486 2.014-4.5 4.5-4.5s4.5 2.014 4.5 4.5-2.014 4.5-4.5 4.5Zm0-1.5a3 3 0 1 0 0-6 3 3 0 1 0 0 6Z" />
|
|
40
|
-
</svg>
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
export const CustomersIcon = () => (
|
|
44
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none">
|
|
45
|
-
<path fill="var(--fills-main-fill-primary, #14215A)" d="M4.5 19.5a6 6 0 0 1 12 0H15a4.5 4.5 0 1 0-9 0H4.5Zm6-6.75A4.499 4.499 0 0 1 6 8.25c0-2.486 2.014-4.5 4.5-4.5S15 5.764 15 8.25s-2.014 4.5-4.5 4.5Zm0-1.5a3 3 0 1 0 0-6 3 3 0 1 0 0 6Zm6.213 2.777A6.001 6.001 0 0 1 20.25 19.5h-1.5c0-1.827-1.089-3.4-2.653-4.105l.616-1.368Zm-.516-8.467A4.125 4.125 0 0 1 15 13.483v-1.51a2.625 2.625 0 0 0 .78-4.956l.417-1.457Z" />
|
|
46
|
-
</svg>
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
export const ReportsIcon = () => (
|
|
50
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none">
|
|
51
|
-
<path fill="var(--fills-main-fill-primary, #14215A)" d="M11.25 8.25h1.5v7.5h-1.5v-7.5Zm3 3h1.5v4.5h-1.5v-4.5Zm-6 1.5h1.5v3h-1.5v-3Zm6-6.75h-7.5v12h10.5V9h-3V6Zm-9-.756c0-.411.336-.744.749-.744H15l3.75 3.75v10.494a.75.75 0 0 1-.745.756H5.995a.75.75 0 0 1-.745-.744V5.244Z" />
|
|
52
|
-
</svg>
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
export const AnalyticsIcon = () => (
|
|
56
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none">
|
|
57
|
-
<path fill="var(--fills-main-fill-primary, #14215A)" d="M6.75 5.25v12h12v1.5H5.25V5.25h1.5Zm11.47 2.47 1.06 1.06L15 13.06l-2.25-2.249-3.22 3.22-1.06-1.061 4.28-4.28L15 10.938l3.22-3.22Z" />
|
|
58
|
-
</svg>
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
export const PaymentsIcon = () => (
|
|
62
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none">
|
|
63
|
-
<path fill="var(--fills-main-fill-primary, #14215A)" d="M12.004 19.502a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Zm0-1.5a6 6 0 1 0 0-12 6 6 0 0 0 0 12Zm-2.25-5.25h-.75v-1.5h.75v-.75a2.625 2.625 0 0 1 5.06-.984l-1.49.373a1.124 1.124 0 0 0-2.07.61v.75h2.25v1.5h-2.25v1.5h3.75v1.5h-6v-1.5h.75v-1.5Z" />
|
|
64
|
-
</svg>
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
export const SettingsIcon = () => (
|
|
68
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none">
|
|
69
|
-
<path fill="var(--fills-main-fill-primary, #14215A)" d="M4.5 11.729c0-.648.082-1.278.237-1.878A2.25 2.25 0 0 0 6.743 6.38 7.492 7.492 0 0 1 9.995 4.5a2.25 2.25 0 0 0 4.01 0c1.244.344 2.357 1 3.252 1.88a2.25 2.25 0 0 0 2.006 3.471c.155.6.237 1.23.237 1.878a7.51 7.51 0 0 1-.237 1.878 2.25 2.25 0 0 0-2.006 3.471 7.492 7.492 0 0 1-3.252 1.88 2.25 2.25 0 0 0-4.01 0 7.492 7.492 0 0 1-3.252-1.88 2.25 2.25 0 0 0-2.006-3.471 7.514 7.514 0 0 1-.237-1.878Zm3.603 2.25c.472.818.608 1.76.423 2.643.306.217.632.406.973.563A3.745 3.745 0 0 1 12 16.229c.946 0 1.829.353 2.501.956a5.99 5.99 0 0 0 .973-.563 3.744 3.744 0 0 1 .423-2.643 3.744 3.744 0 0 1 2.077-1.688 6.099 6.099 0 0 0 0-1.124 3.744 3.744 0 0 1-2.077-1.688 3.744 3.744 0 0 1-.423-2.643 5.997 5.997 0 0 0-.973-.563A3.745 3.745 0 0 1 12 7.23a3.745 3.745 0 0 1-2.501-.956 5.993 5.993 0 0 0-.973.563c.185.883.05 1.824-.423 2.643a3.745 3.745 0 0 1-2.077 1.688 6.097 6.097 0 0 0 0 1.124c.857.282 1.604.87 2.077 1.688Zm3.897 0a2.25 2.25 0 1 1 0-4.5 2.25 2.25 0 0 1 0 4.5Zm0-1.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z" />
|
|
70
|
-
</svg>
|
|
71
|
-
)
|
|
72
|
-
|