@licklist/design 0.78.44 → 0.78.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.
Files changed (113) hide show
  1. package/dist/custom-fields/constants.d.ts +9 -8
  2. package/dist/custom-fields/constants.d.ts.map +1 -1
  3. package/dist/events/event-venue-map/utils/index.d.ts +1 -1
  4. package/dist/events/event-venue-map/utils/index.d.ts.map +1 -1
  5. package/dist/iframe/event/event-venue-map/IframeEventVenueMap.d.ts +3 -3
  6. package/dist/iframe/order-process/components/BookingSummary/utils/index.d.ts +1 -1
  7. package/dist/iframe/order-process/components/BookingSummary/utils/index.d.ts.map +1 -1
  8. package/dist/iframe/payment/order-items-table/hooks/useTableData.d.ts +5 -15
  9. package/dist/iframe/payment/order-items-table/hooks/useTableData.d.ts.map +1 -1
  10. package/dist/iframe/payment/order-items-table/utils/index.d.ts +4 -4
  11. package/dist/iframe/payment/order-items-table/utils/index.d.ts.map +1 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +4 -0
  15. package/dist/product-set/form/SelectCategoryModal.d.ts +5 -5
  16. package/dist/product-set/utils/index.d.ts +12 -12
  17. package/dist/sales/coupon/utils/index.d.ts +2 -2
  18. package/dist/v2/components/PeriodCard/PeriodCard.d.ts +66 -0
  19. package/dist/v2/components/PeriodCard/PeriodCard.d.ts.map +1 -0
  20. package/dist/v2/components/PeriodCard/PeriodCard.js +351 -0
  21. package/dist/v2/components/PeriodCard/PeriodCard.scss.js +6 -0
  22. package/dist/v2/components/PeriodCard/index.d.ts +3 -0
  23. package/dist/v2/components/PeriodCard/index.d.ts.map +1 -0
  24. package/dist/v2/components/ReorderRow/ReorderRow.d.ts +24 -0
  25. package/dist/v2/components/ReorderRow/ReorderRow.d.ts.map +1 -0
  26. package/dist/v2/components/ReorderRow/ReorderRow.js +109 -0
  27. package/dist/v2/components/ReorderRow/ReorderRow.scss.js +6 -0
  28. package/dist/v2/components/ReorderRow/index.d.ts +3 -0
  29. package/dist/v2/components/ReorderRow/index.d.ts.map +1 -0
  30. package/dist/v2/components/index.d.ts +4 -0
  31. package/dist/v2/components/index.d.ts.map +1 -1
  32. package/dist/v2/icons/index.d.ts +10 -0
  33. package/dist/v2/icons/index.d.ts.map +1 -1
  34. package/dist/v2/index.d.ts +8 -0
  35. package/dist/v2/index.d.ts.map +1 -1
  36. package/dist/v2/pages/DeleteEntity/DeleteEntityPage.d.ts +29 -0
  37. package/dist/v2/pages/DeleteEntity/DeleteEntityPage.d.ts.map +1 -0
  38. package/dist/v2/pages/DeleteEntity/DeleteEntityPage.js +294 -0
  39. package/dist/v2/pages/DeleteEntity/DeleteEntityPage.scss.js +6 -0
  40. package/dist/v2/pages/DeleteEntity/index.d.ts +3 -0
  41. package/dist/v2/pages/DeleteEntity/index.d.ts.map +1 -0
  42. package/dist/v2/pages/Settings/components/SidebarCustomisation.js +2 -0
  43. package/dist/v2/pages/Settings/components/SidebarNavItem.js +2 -0
  44. package/dist/v2/pages/SettingsSubPage/SettingsSubPage.d.ts +12 -0
  45. package/dist/v2/pages/SettingsSubPage/SettingsSubPage.d.ts.map +1 -0
  46. package/dist/v2/pages/SettingsSubPage/SettingsSubPage.js +47 -0
  47. package/dist/v2/pages/SettingsSubPage/SettingsSubPage.scss.js +6 -0
  48. package/dist/v2/pages/SettingsSubPage/index.d.ts +3 -0
  49. package/dist/v2/pages/SettingsSubPage/index.d.ts.map +1 -0
  50. package/dist/v2/pages/auth/AuthLayout/AuthLayout.d.ts +14 -0
  51. package/dist/v2/pages/auth/AuthLayout/AuthLayout.d.ts.map +1 -0
  52. package/dist/v2/pages/auth/AuthLayout/index.d.ts +3 -0
  53. package/dist/v2/pages/auth/AuthLayout/index.d.ts.map +1 -0
  54. package/dist/v2/pages/auth/CreatePassword/CreatePasswordPage.d.ts +10 -0
  55. package/dist/v2/pages/auth/CreatePassword/CreatePasswordPage.d.ts.map +1 -0
  56. package/dist/v2/pages/auth/CreatePassword/index.d.ts +3 -0
  57. package/dist/v2/pages/auth/CreatePassword/index.d.ts.map +1 -0
  58. package/dist/v2/pages/auth/Login/LoginPage.d.ts +11 -0
  59. package/dist/v2/pages/auth/Login/LoginPage.d.ts.map +1 -0
  60. package/dist/v2/pages/auth/Login/index.d.ts +3 -0
  61. package/dist/v2/pages/auth/Login/index.d.ts.map +1 -0
  62. package/dist/v2/pages/auth/ResetPassword/ResetPasswordPage.d.ts +12 -0
  63. package/dist/v2/pages/auth/ResetPassword/ResetPasswordPage.d.ts.map +1 -0
  64. package/dist/v2/pages/auth/ResetPassword/index.d.ts +3 -0
  65. package/dist/v2/pages/auth/ResetPassword/index.d.ts.map +1 -0
  66. package/dist/v2/pages/auth/VerifyEmail/VerifyEmailPage.d.ts +9 -0
  67. package/dist/v2/pages/auth/VerifyEmail/VerifyEmailPage.d.ts.map +1 -0
  68. package/dist/v2/pages/auth/VerifyEmail/index.d.ts +3 -0
  69. package/dist/v2/pages/auth/VerifyEmail/index.d.ts.map +1 -0
  70. package/dist/v2/pages/auth/index.d.ts +11 -0
  71. package/dist/v2/pages/auth/index.d.ts.map +1 -0
  72. package/package.json +3 -3
  73. package/rollup.config.js +1 -0
  74. package/src/auth/Authorizer.tsx +1 -1
  75. package/src/index.ts +2 -0
  76. package/src/v2/components/PeriodCard/PeriodCard.scss +157 -0
  77. package/src/v2/components/PeriodCard/PeriodCard.stories.tsx +245 -0
  78. package/src/v2/components/PeriodCard/PeriodCard.tsx +350 -0
  79. package/src/v2/components/PeriodCard/index.ts +8 -0
  80. package/src/v2/components/ReorderRow/ReorderRow.scss +68 -0
  81. package/src/v2/components/ReorderRow/ReorderRow.stories.tsx +124 -0
  82. package/src/v2/components/ReorderRow/ReorderRow.tsx +88 -0
  83. package/src/v2/components/ReorderRow/index.ts +2 -0
  84. package/src/v2/components/index.ts +6 -0
  85. package/src/v2/icons/Icons.stories.tsx +253 -0
  86. package/src/v2/icons/index.tsx +14 -0
  87. package/src/v2/index.ts +17 -0
  88. package/src/v2/pages/DeleteEntity/DeleteEntityPage.scss +96 -0
  89. package/src/v2/pages/DeleteEntity/DeleteEntityPage.stories.tsx +83 -0
  90. package/src/v2/pages/DeleteEntity/DeleteEntityPage.tsx +120 -0
  91. package/src/v2/pages/DeleteEntity/index.ts +2 -0
  92. package/src/v2/pages/SettingsSubPage/SettingsSubPage.tsx +49 -0
  93. package/src/v2/pages/SettingsSubPage/index.ts +2 -0
  94. package/src/v2/pages/auth/AuthLayout/AuthLayout.scss +140 -0
  95. package/src/v2/pages/auth/AuthLayout/AuthLayout.tsx +61 -0
  96. package/src/v2/pages/auth/AuthLayout/index.ts +2 -0
  97. package/src/v2/pages/auth/CreatePassword/CreatePasswordPage.scss +149 -0
  98. package/src/v2/pages/auth/CreatePassword/CreatePasswordPage.stories.tsx +45 -0
  99. package/src/v2/pages/auth/CreatePassword/CreatePasswordPage.tsx +179 -0
  100. package/src/v2/pages/auth/CreatePassword/index.ts +2 -0
  101. package/src/v2/pages/auth/Login/LoginPage.scss +49 -0
  102. package/src/v2/pages/auth/Login/LoginPage.stories.tsx +45 -0
  103. package/src/v2/pages/auth/Login/LoginPage.tsx +98 -0
  104. package/src/v2/pages/auth/Login/index.ts +2 -0
  105. package/src/v2/pages/auth/ResetPassword/ResetPasswordPage.scss +84 -0
  106. package/src/v2/pages/auth/ResetPassword/ResetPasswordPage.stories.tsx +53 -0
  107. package/src/v2/pages/auth/ResetPassword/ResetPasswordPage.tsx +109 -0
  108. package/src/v2/pages/auth/ResetPassword/index.ts +2 -0
  109. package/src/v2/pages/auth/VerifyEmail/VerifyEmailPage.scss +72 -0
  110. package/src/v2/pages/auth/VerifyEmail/VerifyEmailPage.stories.tsx +41 -0
  111. package/src/v2/pages/auth/VerifyEmail/VerifyEmailPage.tsx +110 -0
  112. package/src/v2/pages/auth/VerifyEmail/index.ts +2 -0
  113. package/src/v2/pages/auth/index.ts +14 -0
@@ -0,0 +1,253 @@
1
+ import React from 'react'
2
+ import {
3
+ DashboardIcon,
4
+ CompanyIcon,
5
+ VenueIcon,
6
+ MarketingIcon,
7
+ AdminIcon,
8
+ ProfileIcon,
9
+ CustomersIcon,
10
+ ReportsIcon,
11
+ AnalyticsIcon,
12
+ PaymentsIcon,
13
+ SettingsIcon,
14
+ LoyaltyIcon,
15
+ WaiversIcon,
16
+ CalendarIcon,
17
+ BookingsIcon,
18
+ BookingTypesIcon,
19
+ EditIcon,
20
+ CalendarSmallIcon,
21
+ SearchIcon,
22
+ RefreshIcon,
23
+ SendIcon,
24
+ ExternalLinkIcon,
25
+ ExportIcon,
26
+ ClearIcon,
27
+ ChevronLeftIcon,
28
+ ChevronRightIcon,
29
+ ArrowRightIcon,
30
+ ArrowLeftIcon,
31
+ InfoIcon,
32
+ TableHeaderArrowUpIcon,
33
+ TableHeaderArrowDownIcon,
34
+ ArrowUpIcon,
35
+ ArrowDownIcon,
36
+ GripVerticalIcon,
37
+ PlusIcon,
38
+ CloseIcon,
39
+ EllipsisIcon,
40
+ CircleIcon,
41
+ SecurityIcon,
42
+ NewPasswordIcon,
43
+ PasswordRequirementIcon,
44
+ VerifyEmailIcon,
45
+ PasswordTypeIcon,
46
+ BookedLogo,
47
+ DeleteIcon,
48
+ UserAddIcon,
49
+ UserImportIcon,
50
+ SlidersIcon,
51
+ ProviderPlusIcon,
52
+ ClockIcon,
53
+ WarningTriangleIcon,
54
+ CheckCircleIcon,
55
+ XCircleIcon,
56
+ UserGroupIcon,
57
+ UploadIcon,
58
+ ArrowDownSmallIcon,
59
+ ToggleCheckIcon,
60
+ ToggleCrossIcon,
61
+ TrendUpIcon,
62
+ TrendDownIcon,
63
+ TrendSteadyIcon,
64
+ TrendUpSmallIcon,
65
+ TrendDownSmallIcon,
66
+ TrendSteadySmallIcon,
67
+ NPSHappyIcon,
68
+ NPSNeutralIcon,
69
+ NPSSadIcon,
70
+ NPSSadFaceIcon,
71
+ NPSNeutralFaceIcon,
72
+ NPSHappyFaceIcon,
73
+ AnalyticsEmptyIcon,
74
+ PaymentsEmptyIcon,
75
+ ReportsEmptyIcon,
76
+ SelectCheckIcon,
77
+ } from './index'
78
+
79
+ export default {
80
+ title: 'v2/Icons',
81
+ }
82
+
83
+ const iconCardStyle: React.CSSProperties = {
84
+ display: 'flex',
85
+ flexDirection: 'column',
86
+ alignItems: 'center',
87
+ justifyContent: 'center',
88
+ gap: 8,
89
+ padding: 16,
90
+ border: '1px solid #E8E9EF',
91
+ borderRadius: 8,
92
+ minWidth: 120,
93
+ minHeight: 100,
94
+ }
95
+
96
+ const labelStyle: React.CSSProperties = {
97
+ fontSize: 11,
98
+ color: '#6B7280',
99
+ fontFamily: 'monospace',
100
+ textAlign: 'center',
101
+ wordBreak: 'break-all',
102
+ }
103
+
104
+ const gridStyle: React.CSSProperties = {
105
+ display: 'grid',
106
+ gridTemplateColumns: 'repeat(auto-fill, minmax(140px, 1fr))',
107
+ gap: 12,
108
+ padding: 24,
109
+ }
110
+
111
+ const sectionStyle: React.CSSProperties = {
112
+ marginBottom: 32,
113
+ }
114
+
115
+ const sectionTitleStyle: React.CSSProperties = {
116
+ fontSize: 16,
117
+ fontWeight: 600,
118
+ marginBottom: 12,
119
+ paddingLeft: 24,
120
+ color: '#111827',
121
+ }
122
+
123
+ const IconCard = ({ name, children }: { name: string; children: React.ReactNode }) => (
124
+ <div style={iconCardStyle}>
125
+ <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
126
+ {children}
127
+ </div>
128
+ <span style={labelStyle}>{name}</span>
129
+ </div>
130
+ )
131
+
132
+ const Section = ({ title, children }: { title: string; children: React.ReactNode }) => (
133
+ <div style={sectionStyle}>
134
+ <h3 style={sectionTitleStyle}>{title}</h3>
135
+ <div style={gridStyle}>{children}</div>
136
+ </div>
137
+ )
138
+
139
+ export const AllIcons = () => (
140
+ <div>
141
+ <Section title="Navigation">
142
+ <IconCard name="DashboardIcon"><DashboardIcon /></IconCard>
143
+ <IconCard name="CompanyIcon"><CompanyIcon /></IconCard>
144
+ <IconCard name="VenueIcon"><VenueIcon /></IconCard>
145
+ <IconCard name="MarketingIcon"><MarketingIcon /></IconCard>
146
+ <IconCard name="AdminIcon"><AdminIcon /></IconCard>
147
+ <IconCard name="ProfileIcon"><ProfileIcon /></IconCard>
148
+ <IconCard name="CustomersIcon"><CustomersIcon /></IconCard>
149
+ <IconCard name="ReportsIcon"><ReportsIcon /></IconCard>
150
+ <IconCard name="AnalyticsIcon"><AnalyticsIcon /></IconCard>
151
+ <IconCard name="PaymentsIcon"><PaymentsIcon /></IconCard>
152
+ <IconCard name="SettingsIcon"><SettingsIcon /></IconCard>
153
+ <IconCard name="LoyaltyIcon"><LoyaltyIcon /></IconCard>
154
+ <IconCard name="WaiversIcon"><WaiversIcon /></IconCard>
155
+ <IconCard name="CalendarIcon"><CalendarIcon /></IconCard>
156
+ <IconCard name="BookingsIcon"><BookingsIcon /></IconCard>
157
+ <IconCard name="BookingTypesIcon"><BookingTypesIcon /></IconCard>
158
+ </Section>
159
+
160
+ <Section title="Actions">
161
+ <IconCard name="EditIcon"><EditIcon /></IconCard>
162
+ <IconCard name="SearchIcon"><SearchIcon /></IconCard>
163
+ <IconCard name="RefreshIcon"><RefreshIcon /></IconCard>
164
+ <IconCard name="SendIcon"><SendIcon /></IconCard>
165
+ <IconCard name="ExternalLinkIcon"><ExternalLinkIcon /></IconCard>
166
+ <IconCard name="ExportIcon"><ExportIcon /></IconCard>
167
+ <IconCard name="ClearIcon"><ClearIcon /></IconCard>
168
+ <IconCard name="DeleteIcon"><DeleteIcon /></IconCard>
169
+ <IconCard name="PlusIcon"><PlusIcon /></IconCard>
170
+ <IconCard name="CloseIcon"><CloseIcon /></IconCard>
171
+ <IconCard name="UploadIcon"><UploadIcon /></IconCard>
172
+ </Section>
173
+
174
+ <Section title="Arrows & Chevrons">
175
+ <IconCard name="ArrowLeftIcon"><ArrowLeftIcon /></IconCard>
176
+ <IconCard name="ArrowRightIcon"><ArrowRightIcon /></IconCard>
177
+ <IconCard name="ArrowUpIcon"><ArrowUpIcon /></IconCard>
178
+ <IconCard name="ArrowDownIcon"><ArrowDownIcon /></IconCard>
179
+ <IconCard name="ArrowDownSmallIcon"><ArrowDownSmallIcon /></IconCard>
180
+ <IconCard name="ChevronLeftIcon"><ChevronLeftIcon /></IconCard>
181
+ <IconCard name="ChevronRightIcon"><ChevronRightIcon /></IconCard>
182
+ <IconCard name="TableHeaderArrowUpIcon"><TableHeaderArrowUpIcon /></IconCard>
183
+ <IconCard name="TableHeaderArrowDownIcon"><TableHeaderArrowDownIcon /></IconCard>
184
+ </Section>
185
+
186
+ <Section title="Form & Input">
187
+ <IconCard name="CalendarSmallIcon"><CalendarSmallIcon /></IconCard>
188
+ <IconCard name="ClockIcon"><ClockIcon /></IconCard>
189
+ <IconCard name="InfoIcon"><InfoIcon /></IconCard>
190
+ <IconCard name="EllipsisIcon"><EllipsisIcon /></IconCard>
191
+ <IconCard name="CircleIcon"><CircleIcon /></IconCard>
192
+ <IconCard name="GripVerticalIcon"><GripVerticalIcon /></IconCard>
193
+ <IconCard name="SlidersIcon"><SlidersIcon /></IconCard>
194
+ <IconCard name="SelectCheckIcon"><SelectCheckIcon /></IconCard>
195
+ <IconCard name="ToggleCheckIcon"><ToggleCheckIcon /></IconCard>
196
+ <IconCard name="ToggleCrossIcon"><ToggleCrossIcon /></IconCard>
197
+ </Section>
198
+
199
+ <Section title="Users">
200
+ <IconCard name="UserAddIcon"><UserAddIcon /></IconCard>
201
+ <IconCard name="UserImportIcon"><UserImportIcon /></IconCard>
202
+ <IconCard name="UserGroupIcon"><UserGroupIcon /></IconCard>
203
+ <IconCard name="ProviderPlusIcon"><ProviderPlusIcon /></IconCard>
204
+ </Section>
205
+
206
+ <Section title="Status & Feedback">
207
+ <IconCard name="CheckCircleIcon"><CheckCircleIcon /></IconCard>
208
+ <IconCard name="XCircleIcon"><XCircleIcon /></IconCard>
209
+ <IconCard name="WarningTriangleIcon"><WarningTriangleIcon /></IconCard>
210
+ <IconCard name="SecurityIcon"><SecurityIcon /></IconCard>
211
+ </Section>
212
+
213
+ <Section title="Trends">
214
+ <IconCard name="TrendUpIcon"><TrendUpIcon /></IconCard>
215
+ <IconCard name="TrendDownIcon"><TrendDownIcon /></IconCard>
216
+ <IconCard name="TrendSteadyIcon"><TrendSteadyIcon /></IconCard>
217
+ <IconCard name="TrendUpSmallIcon"><TrendUpSmallIcon /></IconCard>
218
+ <IconCard name="TrendDownSmallIcon"><TrendDownSmallIcon /></IconCard>
219
+ <IconCard name="TrendSteadySmallIcon"><TrendSteadySmallIcon /></IconCard>
220
+ </Section>
221
+
222
+ <Section title="NPS">
223
+ <IconCard name="NPSHappyIcon"><NPSHappyIcon /></IconCard>
224
+ <IconCard name="NPSNeutralIcon"><NPSNeutralIcon /></IconCard>
225
+ <IconCard name="NPSSadIcon"><NPSSadIcon /></IconCard>
226
+ <IconCard name="NPSHappyFaceIcon"><NPSHappyFaceIcon /></IconCard>
227
+ <IconCard name="NPSNeutralFaceIcon"><NPSNeutralFaceIcon /></IconCard>
228
+ <IconCard name="NPSSadFaceIcon"><NPSSadFaceIcon /></IconCard>
229
+ </Section>
230
+
231
+ <Section title="Auth & Branding">
232
+ <IconCard name="NewPasswordIcon"><NewPasswordIcon /></IconCard>
233
+ <IconCard name="PasswordRequirementIcon"><PasswordRequirementIcon met={false} /></IconCard>
234
+ <IconCard name="PasswordRequirementIcon (met)"><PasswordRequirementIcon met /></IconCard>
235
+ <IconCard name="VerifyEmailIcon"><VerifyEmailIcon /></IconCard>
236
+ <IconCard name="PasswordTypeIcon"><PasswordTypeIcon /></IconCard>
237
+ <IconCard name="BookedLogo"><BookedLogo /></IconCard>
238
+ </Section>
239
+
240
+ <Section title="Empty States">
241
+ <IconCard name="AnalyticsEmptyIcon"><AnalyticsEmptyIcon /></IconCard>
242
+ <IconCard name="PaymentsEmptyIcon"><PaymentsEmptyIcon /></IconCard>
243
+ <IconCard name="ReportsEmptyIcon"><ReportsEmptyIcon /></IconCard>
244
+ </Section>
245
+
246
+ </div>
247
+ )
248
+
249
+ AllIcons.story = {
250
+ parameters: {
251
+ info: 'All v2 icons in the design system',
252
+ },
253
+ }
@@ -388,6 +388,20 @@ export const SettingsPageDashboardIcon = ({ size = 24, className = '' }: { size?
388
388
  </svg>
389
389
  )
390
390
 
391
+ // Logo icons (used by auth pages)
392
+ export const LogoDesktop1 = ({ width = 18, height = 18, className = '' }: { width?: number; height?: number; className?: string } = {}) => (
393
+ <svg width={width} height={height} viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg" className={className}>
394
+ <path d="M9 1L11.5 5.5L16.5 6L13 9L14 14L9 11.5L4 14L5 9L1.5 6L6.5 5.5L9 1Z" fill="var(--fills-main-fill-primary, #14215A)" stroke="var(--fills-main-fill-primary, #14215A)" strokeWidth="0.5" />
395
+ </svg>
396
+ )
397
+
398
+ export const LogoDesktop2 = ({ width = 112, height = 29, className = '' }: { width?: number; height?: number; className?: string } = {}) => (
399
+ <svg width={width} height={height} viewBox="0 0 112 29" fill="none" xmlns="http://www.w3.org/2000/svg" className={className}>
400
+ <rect x="0" y="0" width="112" height="29" rx="4" fill="var(--surfaces-main-background-primary, #ffffff)" stroke="var(--borders-main-border-primary, #E8E9EF)" strokeWidth="1" />
401
+ <text x="56" y="18" textAnchor="middle" fontFamily="Geist" fontSize="11" fontWeight="600" fill="var(--labels-main-label-primary, #121E52)">Booked it</text>
402
+ </svg>
403
+ )
404
+
391
405
  export const SettingsPageWaiversIcon = ({ size = 24, className = '', ...props }: React.SVGProps<SVGSVGElement> & { size?: number; className?: string } = {}) => (
392
406
  <svg width={size} height={size} viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg" className={className} {...props}>
393
407
  <path d="M29.3657 27.8354C31.4117 26.4405 34.0772 25.7503 37.729 26.1685L38.4731 26.2661L38.6235 26.2974C39.3599 26.4857 39.8491 27.2053 39.7339 27.9731C39.6184 28.741 38.9395 29.2849 38.1802 29.2485L38.0278 29.2339L37.395 29.1489C34.308 28.7933 32.394 29.4019 31.0562 30.314C29.5595 31.3345 28.5809 32.8586 27.5396 34.6099C26.5775 36.2279 25.4604 38.2594 23.6812 39.4409C21.8382 40.6643 19.5533 40.8605 16.5776 39.8687L15.9731 39.6548L15.8325 39.5933C15.1516 39.2557 14.8228 38.4502 15.0952 37.7231C15.3681 36.996 16.1461 36.6045 16.8813 36.7983L17.0278 36.8452L17.5229 37.021C19.9234 37.8245 21.1853 37.498 22.0229 36.9419C23.1024 36.2249 23.8614 34.9277 24.9614 33.0776C25.9824 31.3606 27.2536 29.2757 29.3657 27.8354ZM22.0132 6.82178C22.3878 6.08288 23.2909 5.78703 24.0298 6.16162L30.855 9.62256L30.9878 9.69775C31.6279 10.1082 31.8654 10.9454 31.5142 11.6382L21.6284 31.1382C21.5083 31.375 21.327 31.5762 21.104 31.7202L14.7261 35.8394C14.2781 36.1287 13.7106 36.1585 13.2349 35.9175C12.759 35.6762 12.4459 35.2001 12.4146 34.6675L11.9673 27.0884C11.9517 26.8234 12.0075 26.5586 12.1274 26.3218L22.0132 6.82178ZM14.9878 27.3149L15.2583 31.9224L19.1372 29.4185L28.1606 11.6196L24.0112 9.51611L14.9878 27.3149Z" fill="currentColor"/>
package/src/v2/index.ts CHANGED
@@ -53,6 +53,19 @@ export type { UserPanelProps } from './components/UserPanel'
53
53
  export { ZoneCard, ZoneContainer, ZoneHeader, ResourceRow, AddResourceButton } from './components/ZoneCard'
54
54
  export type { ZoneCardProps, ZoneResource, ZoneContainerProps, DragHandleProps, ZoneHeaderProps, ResourceRowProps, ResourceRowLabels, AddResourceButtonProps } from './components/ZoneCard'
55
55
 
56
+ // SettingsSubPage (generic settings sub-page layout)
57
+ export { SettingsSubPage } from './pages/SettingsSubPage'
58
+ export type { SettingsSubPageProps } from './pages/SettingsSubPage'
59
+
60
+ // ZonesResources Page (deprecated — use SettingsSubPage)
61
+ // PeriodCard Component
62
+ export { PeriodCard, PeriodCardSection, PeriodCardTimeRange } from './components/PeriodCard'
63
+ export type { PeriodCardProps, PeriodCardValue, PeriodCardLabels, PeriodCardSectionProps, PeriodCardTimeRangeProps } from './components/PeriodCard'
64
+
65
+ // ReorderRow Component
66
+ export { ReorderRow } from './components/ReorderRow'
67
+ export type { ReorderRowProps, DragHandleRenderProps } from './components/ReorderRow'
68
+
56
69
  // ZonesResources Page
57
70
  export { ZonesResourcesPage } from './pages/ZonesResources'
58
71
  export type { ZonesResourcesPageProps } from './pages/ZonesResources'
@@ -151,6 +164,10 @@ export type { AuthCredentials } from './types/navigation'
151
164
  export { SettingsPage, SettingsTabs, SidebarCustomisation, defaultSidebarItems, SidebarNavItem } from './pages/Settings'
152
165
  export type { SettingsPageProps, SettingsTabsProps, SettingsTab, SidebarCustomisationProps, SidebarItem, SidebarNavItemProps } from './pages/Settings'
153
166
 
167
+ // Auth Pages
168
+ export { AuthLayout, LoginPage, ResetPasswordPage, CreatePasswordPage } from './pages/auth'
169
+ export type { AuthLayoutProps, LoginPageProps, ResetPasswordPageProps, CreatePasswordPageProps } from './pages/auth'
170
+
154
171
  // ============================================================================
155
172
  // Design Tokens
156
173
  // ============================================================================
@@ -0,0 +1,96 @@
1
+ .delete-entity-page {
2
+ padding: 0;
3
+
4
+ &__content {
5
+ display: flex;
6
+ flex-direction: column;
7
+ align-items: center;
8
+ padding: 48px 32px;
9
+
10
+ @media (max-width: 768px) {
11
+ padding: 24px 16px;
12
+ }
13
+ }
14
+
15
+ &__inner {
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: 24px;
19
+ width: 100%;
20
+ max-width: 672px;
21
+ }
22
+
23
+ &__entity-name {
24
+ font-family: var(--font-family-sans, 'Geist', sans-serif);
25
+ font-size: 20px;
26
+ font-weight: 600;
27
+ line-height: 28px;
28
+ color: var(--label-primary, #121e52);
29
+ margin: 0;
30
+ }
31
+
32
+ &__warning-card {
33
+ display: flex;
34
+ flex-direction: column;
35
+ gap: 16px;
36
+ padding: 24px;
37
+ background: var(--surface-secondary, #f8f8fa);
38
+ border: 1px solid var(--border-primary, #e8e9ef);
39
+ border-radius: 8px;
40
+ }
41
+
42
+ &__warning-text {
43
+ font-family: var(--font-family-sans, 'Geist', sans-serif);
44
+ font-size: 14px;
45
+ font-weight: 600;
46
+ color: var(--label-status-error, #ef4444);
47
+ margin: 0;
48
+ }
49
+
50
+ &__warning-description {
51
+ font-family: var(--font-family-sans, 'Geist', sans-serif);
52
+ font-size: 14px;
53
+ color: var(--label-secondary, #626a90);
54
+ margin: 0;
55
+ }
56
+
57
+ &__consequences {
58
+ list-style: disc;
59
+ padding-left: 20px;
60
+ margin: 0;
61
+ display: flex;
62
+ flex-direction: column;
63
+ gap: 4px;
64
+
65
+ li {
66
+ font-family: var(--font-family-sans, 'Geist', sans-serif);
67
+ font-size: 14px;
68
+ color: var(--label-secondary, #626a90);
69
+ }
70
+ }
71
+
72
+ &__confirm-field {
73
+ display: flex;
74
+ flex-direction: column;
75
+ gap: var(--spacing-xs, 2px);
76
+ }
77
+
78
+ &__confirm-label {
79
+ font-family: var(--font-family-sans, 'Geist', sans-serif);
80
+ font-size: 14px;
81
+ font-weight: 500;
82
+ line-height: 20px;
83
+ color: var(--label-primary, #121e52);
84
+ margin: 0;
85
+
86
+ strong {
87
+ font-weight: 700;
88
+ }
89
+ }
90
+
91
+ &__confirm-error {
92
+ font-family: var(--font-family-sans, 'Geist', sans-serif);
93
+ font-size: 11px;
94
+ color: var(--label-status-error, #ef4444);
95
+ }
96
+ }
@@ -0,0 +1,83 @@
1
+ import React from 'react'
2
+ import type { Meta, StoryObj } from '@storybook/react'
3
+ import { DeleteEntityPage } from './DeleteEntityPage'
4
+
5
+ const meta: Meta<typeof DeleteEntityPage> = {
6
+ title: 'v2/Pages/DeleteEntity',
7
+ component: DeleteEntityPage,
8
+ parameters: { layout: 'fullscreen' },
9
+ }
10
+
11
+ export default meta
12
+ type Story = StoryObj<typeof DeleteEntityPage>
13
+
14
+ const baseArgs = {
15
+ confirmWord: 'DELETE',
16
+ warningTitle: 'This action cannot be undone',
17
+ confirmLabelPrefix: 'Type',
18
+ confirmLabelSuffix: 'to confirm deletion',
19
+ confirmErrorMessage: 'Please type DELETE to confirm.',
20
+ isDeleting: false,
21
+ onDelete: () => console.log('Delete confirmed'),
22
+ onCancel: () => console.log('Cancel'),
23
+ }
24
+
25
+ /**
26
+ * **Delete Zone** — confirmation page for deleting a zone.
27
+ *
28
+ * Lists the consequences of the action and requires the user to type
29
+ * the confirmation word before the destructive button is enabled.
30
+ */
31
+ export const DeleteZone: Story = {
32
+ name: 'Delete Zone',
33
+ args: {
34
+ ...baseArgs,
35
+ title: 'Delete Zone',
36
+ entityName: 'Main Hall',
37
+ deleteButtonLabel: 'Delete Zone',
38
+ warningDescription:
39
+ 'You are about to permanently delete the zone "Main Hall". This will:',
40
+ consequences: [
41
+ 'Remove the zone from your venue layout',
42
+ 'Delete all resources assigned to this zone',
43
+ 'Cancel any future bookings linked to this zone',
44
+ ],
45
+ },
46
+ }
47
+
48
+ /**
49
+ * **Delete Special Hours** — confirmation page for removing a special hours schedule.
50
+ */
51
+ export const DeleteSpecialHours: Story = {
52
+ name: 'Delete Special Hours',
53
+ args: {
54
+ ...baseArgs,
55
+ title: 'Delete Special Hours',
56
+ entityName: 'Christmas Closure',
57
+ deleteButtonLabel: 'Delete Schedule',
58
+ warningDescription:
59
+ 'You are about to permanently delete the special hours schedule "Christmas Closure". This will:',
60
+ consequences: [
61
+ 'Remove all date-specific overrides from this schedule',
62
+ 'Restore your default opening hours for the affected dates',
63
+ ],
64
+ },
65
+ }
66
+
67
+ /**
68
+ * **Deleting** — destructive button shown in its loading state while the
69
+ * delete request is in flight.
70
+ */
71
+ export const Deleting: Story = {
72
+ name: 'Deleting',
73
+ args: {
74
+ ...baseArgs,
75
+ title: 'Delete Zone',
76
+ entityName: 'Main Hall',
77
+ deleteButtonLabel: 'Delete Zone',
78
+ warningDescription:
79
+ 'You are about to permanently delete the zone "Main Hall". This will:',
80
+ consequences: ['Remove the zone from your venue layout'],
81
+ isDeleting: true,
82
+ },
83
+ }
@@ -0,0 +1,120 @@
1
+ import { useState } from 'react'
2
+ import { NewPageHeader } from '../../components/NewPageHeader'
3
+ import { Button } from '../../components/Button/Button'
4
+ import { NewInput } from '../../components/NewInput/NewInput'
5
+ import './DeleteEntityPage.scss'
6
+
7
+ export interface DeleteEntityPageProps {
8
+ /** Page title shown in the header (e.g. "Delete Zone") */
9
+ title: string
10
+ /** Name of the entity being deleted, displayed prominently */
11
+ entityName: string
12
+ /** Bullet list of consequences shown inside the warning card */
13
+ consequences: string[]
14
+ /** Label for the destructive action button */
15
+ deleteButtonLabel: string
16
+ /** Whether the delete request is in flight */
17
+ isDeleting: boolean
18
+ /** Word the user must type to confirm deletion (e.g. "DELETE") */
19
+ confirmWord: string
20
+ /** Heading inside the warning card (e.g. "This action cannot be undone") */
21
+ warningTitle: string
22
+ /** Description below the warning title */
23
+ warningDescription: string
24
+ /** Label above the confirmation input — `confirmWord` is rendered as <strong> */
25
+ confirmLabelPrefix: string
26
+ confirmLabelSuffix: string
27
+ /** Error message shown when the typed value does not match `confirmWord` */
28
+ confirmErrorMessage: string
29
+ onDelete: () => void | Promise<void>
30
+ onCancel: () => void
31
+ }
32
+
33
+ export function DeleteEntityPage({
34
+ title,
35
+ entityName,
36
+ consequences,
37
+ deleteButtonLabel,
38
+ isDeleting,
39
+ confirmWord,
40
+ warningTitle,
41
+ warningDescription,
42
+ confirmLabelPrefix,
43
+ confirmLabelSuffix,
44
+ confirmErrorMessage,
45
+ onDelete,
46
+ onCancel,
47
+ }: DeleteEntityPageProps) {
48
+ const [confirmationInput, setConfirmationInput] = useState('')
49
+ const [confirmationError, setConfirmationError] = useState(false)
50
+
51
+ const handleDelete = async () => {
52
+ if (confirmationInput.toLowerCase() !== confirmWord.toLowerCase()) {
53
+ setConfirmationError(true)
54
+ return
55
+ }
56
+
57
+ await onDelete()
58
+ }
59
+
60
+ return (
61
+ <div className="delete-entity-page">
62
+ <NewPageHeader title={title} onCancel={onCancel} />
63
+ <div className="delete-entity-page__content">
64
+ <div className="delete-entity-page__inner">
65
+ <h2 className="delete-entity-page__entity-name">{entityName}</h2>
66
+
67
+ <div className="delete-entity-page__warning-card">
68
+ <p className="delete-entity-page__warning-text">{warningTitle}</p>
69
+ <p className="delete-entity-page__warning-description">
70
+ {warningDescription}
71
+ </p>
72
+ <ul className="delete-entity-page__consequences">
73
+ {consequences.map((item, i) => (
74
+ <li key={i}>{item}</li>
75
+ ))}
76
+ </ul>
77
+
78
+ <div className="delete-entity-page__confirm-field">
79
+ <p className="delete-entity-page__confirm-label">
80
+ {confirmLabelPrefix} <strong>{confirmWord}</strong>{' '}
81
+ {confirmLabelSuffix}
82
+ </p>
83
+ {confirmationError && (
84
+ <span className="delete-entity-page__confirm-error">
85
+ {confirmErrorMessage}
86
+ </span>
87
+ )}
88
+ <NewInput
89
+ value={confirmationInput}
90
+ onChange={(e) => {
91
+ setConfirmationInput(
92
+ (e.target as HTMLInputElement).value,
93
+ )
94
+ setConfirmationError(false)
95
+ }}
96
+ error={confirmationError ? ' ' : undefined}
97
+ />
98
+ </div>
99
+ </div>
100
+
101
+ <div>
102
+ <Button
103
+ variant="destructive-strong"
104
+ onClick={handleDelete}
105
+ disabled={isDeleting}
106
+ isLoading={isDeleting}
107
+ style={{
108
+ background: 'var(--fills-main-fill-danger, #cc3c35)',
109
+ }}
110
+ >
111
+ {deleteButtonLabel}
112
+ </Button>
113
+ </div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ )
118
+ }
119
+
120
+ export default DeleteEntityPage
@@ -0,0 +1,2 @@
1
+ export { DeleteEntityPage } from './DeleteEntityPage'
2
+ export type { DeleteEntityPageProps } from './DeleteEntityPage'
@@ -0,0 +1,49 @@
1
+ import React from 'react'
2
+ import { GhostButton } from '../../components/Button'
3
+ import { NewPageHeader } from '../../components/NewPageHeader'
4
+ import { ArrowLeftIcon, PlusIcon } from '../../icons'
5
+ import './SettingsSubPage.scss'
6
+
7
+ export interface SettingsSubPageProps {
8
+ title?: string
9
+ backLabel?: string
10
+ onBack?: () => void
11
+ actionLabel?: string
12
+ onAction?: () => void
13
+ children?: React.ReactNode
14
+ }
15
+
16
+ export const SettingsSubPage: React.FC<SettingsSubPageProps> = ({
17
+ title = '',
18
+ backLabel = 'Back to Settings',
19
+ onBack,
20
+ actionLabel,
21
+ onAction,
22
+ children,
23
+ }) => {
24
+ return (
25
+ <div className="settings-sub-page">
26
+ {onBack && (
27
+ <div className="settings-sub-page__back">
28
+ <GhostButton onClick={onBack} icon={<ArrowLeftIcon />}>
29
+ {backLabel}
30
+ </GhostButton>
31
+ </div>
32
+ )}
33
+ <NewPageHeader
34
+ title={title}
35
+ showDivider
36
+ />
37
+ <div className="settings-sub-page__content">
38
+ {onAction && actionLabel && (
39
+ <div className="settings-sub-page__action">
40
+ <GhostButton onClick={onAction} icon={<PlusIcon width={16} height={16} />}>
41
+ {actionLabel}
42
+ </GhostButton>
43
+ </div>
44
+ )}
45
+ {children}
46
+ </div>
47
+ </div>
48
+ )
49
+ }
@@ -0,0 +1,2 @@
1
+ export { SettingsSubPage } from './SettingsSubPage'
2
+ export type { SettingsSubPageProps } from './SettingsSubPage'