@licklist/design 0.78.5-dev.57 → 0.78.5-dev.59

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 (83) hide show
  1. package/dist/Maintenance/MaintenancePage.js +1 -0
  2. package/dist/index.js +3 -1
  3. package/dist/v2/components/ActionMenu/ActionMenu.d.ts.map +1 -1
  4. package/dist/v2/components/ActionMenu/ActionMenu.js +60 -8
  5. package/dist/v2/components/ActionMenu/ActionMenu.scss.js +1 -1
  6. package/dist/v2/components/Alert/Alert.d.ts.map +1 -1
  7. package/dist/v2/components/Alert/Alert.js +48 -1
  8. package/dist/v2/components/Alert/Alert.scss.js +1 -1
  9. package/dist/v2/components/Badge/Badge.d.ts.map +1 -1
  10. package/dist/v2/components/Badge/Badge.js +1 -1
  11. package/dist/v2/components/Badge/Badge.scss.js +1 -1
  12. package/dist/v2/components/Button/Button.d.ts +1 -1
  13. package/dist/v2/components/Button/Button.d.ts.map +1 -1
  14. package/dist/v2/components/Button/Button.js +1 -0
  15. package/dist/v2/components/Button/GhostButton.scss.js +1 -1
  16. package/dist/v2/components/Button/index.d.ts +2 -0
  17. package/dist/v2/components/Button/index.d.ts.map +1 -1
  18. package/dist/v2/components/FormField/FormField.d.ts.map +1 -1
  19. package/dist/v2/components/Modal/DeleteModal.d.ts.map +1 -1
  20. package/dist/v2/components/Modal/DeleteModal.js +4 -0
  21. package/dist/v2/components/NPSScore/NPSScore.d.ts +3 -1
  22. package/dist/v2/components/NPSScore/NPSScore.d.ts.map +1 -1
  23. package/dist/v2/components/NPSScore/NPSScore.js +4 -7
  24. package/dist/v2/components/NPSScore/NPSScore.scss.js +1 -1
  25. package/dist/v2/components/NewInput/NewInput.d.ts.map +1 -1
  26. package/dist/v2/components/NewInput/NewInput.js +8 -0
  27. package/dist/v2/components/NewPageHeader/NewPageHeader.d.ts +2 -1
  28. package/dist/v2/components/NewPageHeader/NewPageHeader.d.ts.map +1 -1
  29. package/dist/v2/components/NewPageHeader/NewPageHeader.js +3 -2
  30. package/dist/v2/components/NewPageHeader/NewPageHeader.scss.js +1 -1
  31. package/dist/v2/components/NewTable/NewTable.d.ts.map +1 -1
  32. package/dist/v2/components/NewTable/NewTable.js +1 -0
  33. package/dist/v2/components/NewTable/NewTable.scss.js +1 -1
  34. package/dist/v2/components/Pagination/Pagination.js +1 -4
  35. package/dist/v2/components/Pagination/Pagination.scss.js +1 -1
  36. package/dist/v2/components/QuickFilter/QuickFilter.d.ts.map +1 -1
  37. package/dist/v2/components/QuickFilter/QuickFilter.js +5 -2
  38. package/dist/v2/components/QuickFilter/QuickFilter.scss.js +1 -1
  39. package/dist/v2/components/SectionHeader/SectionHeader.d.ts.map +1 -1
  40. package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts +9 -0
  41. package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts.map +1 -0
  42. package/dist/v2/components/TableSortIcon/TableSortIcon.js +14 -0
  43. package/dist/v2/components/TableSortIcon/index.d.ts +2 -0
  44. package/dist/v2/components/TableSortIcon/index.d.ts.map +1 -0
  45. package/dist/v2/components/WYSIWYGEditor/Icons.js +2 -2
  46. package/dist/v2/components/index.d.ts +5 -3
  47. package/dist/v2/components/index.d.ts.map +1 -1
  48. package/dist/v2/icons/index.d.ts +10 -0
  49. package/dist/v2/icons/index.d.ts.map +1 -1
  50. package/dist/v2/icons/index.js +61 -1
  51. package/dist/v2/pages/Settings/components/SidebarCustomisation.js +2 -3
  52. package/dist/v2/pages/Settings/components/SidebarNavItem.js +2 -2
  53. package/package.json +1 -1
  54. package/src/v2/components/ActionMenu/ActionMenu.scss +22 -5
  55. package/src/v2/components/ActionMenu/ActionMenu.tsx +53 -5
  56. package/src/v2/components/Alert/Alert.scss +8 -19
  57. package/src/v2/components/Alert/Alert.tsx +24 -1
  58. package/src/v2/components/Badge/Badge.scss +13 -0
  59. package/src/v2/components/Badge/Badge.tsx +10 -8
  60. package/src/v2/components/Button/Button.tsx +13 -2
  61. package/src/v2/components/Button/GhostButton.scss +11 -1
  62. package/src/v2/components/Button/index.ts +2 -0
  63. package/src/v2/components/Customer/CustomersList.scss +72 -115
  64. package/src/v2/components/FormField/FormField.tsx +19 -21
  65. package/src/v2/components/Modal/DeleteModal.tsx +4 -2
  66. package/src/v2/components/NPSScore/NPSScore.scss +4 -0
  67. package/src/v2/components/NPSScore/NPSScore.tsx +6 -7
  68. package/src/v2/components/NewInput/NewInput.tsx +13 -1
  69. package/src/v2/components/NewPageHeader/NewPageHeader.scss +8 -5
  70. package/src/v2/components/NewPageHeader/NewPageHeader.tsx +21 -21
  71. package/src/v2/components/NewTable/NewTable.scss +17 -1
  72. package/src/v2/components/NewTable/NewTable.tsx +1 -0
  73. package/src/v2/components/Pagination/Pagination.scss +18 -18
  74. package/src/v2/components/Pagination/Pagination.tsx +1 -1
  75. package/src/v2/components/QuickFilter/QuickFilter.scss +17 -34
  76. package/src/v2/components/QuickFilter/QuickFilter.tsx +7 -5
  77. package/src/v2/components/SectionHeader/SectionHeader.tsx +5 -7
  78. package/src/v2/components/TableSortIcon/TableSortIcon.tsx +20 -0
  79. package/src/v2/components/TableSortIcon/index.ts +1 -0
  80. package/src/v2/components/WYSIWYGEditor/Icons.tsx +2 -2
  81. package/src/v2/components/index.ts +8 -3
  82. package/src/v2/icons/index.tsx +14 -0
  83. package/src/v2/pages/Settings/components/SidebarCustomisation.tsx +1 -1
@@ -16,10 +16,6 @@
16
16
  background: var(--surfaces-status-background-success, #eef9ea);
17
17
  border-color: var(--borders-status-border-success, #c9ecbd);
18
18
 
19
- .alert__icon {
20
- background-image: url("./assets/success-icon.svg");
21
- }
22
-
23
19
  .alert__dismiss svg path {
24
20
  stroke: var(--fills-status-fill-success, #2d6b18);
25
21
  }
@@ -29,10 +25,6 @@
29
25
  background: var(--surfaces-status-background-error, #fceceb);
30
26
  border-color: var(--borders-status-border-error, #f5c4c2);
31
27
 
32
- .alert__icon {
33
- background-image: url("./assets/error-icon.svg");
34
- }
35
-
36
28
  .alert__dismiss svg path {
37
29
  stroke: var(--fills-status-fill-error, #cc3c35);
38
30
  }
@@ -42,10 +34,6 @@
42
34
  background: var(--surfaces-status-background-alert, #fcf6e7);
43
35
  border-color: var(--borders-status-border-alert, #f6e3b4);
44
36
 
45
- .alert__icon {
46
- background-image: url("./assets/alert-icon.svg");
47
- }
48
-
49
37
  .alert__dismiss svg path {
50
38
  stroke: var(--fills-status-fill-alert, #fd7e14);
51
39
  }
@@ -55,10 +43,6 @@
55
43
  background: var(--surfaces-status-background-info, #e7f4fc);
56
44
  border-color: var(--borders-status-border-info, #b4dbf6);
57
45
 
58
- .alert__icon {
59
- background-image: url("./assets/info-icon.svg");
60
- }
61
-
62
46
  .alert__dismiss svg path {
63
47
  stroke: var(--fills-status-fill-info, #0e8ce2);
64
48
  }
@@ -78,10 +62,15 @@
78
62
  flex-shrink: 0;
79
63
  width: 32px;
80
64
  height: 32px;
81
- background-size: contain;
82
- background-position: center;
83
- background-repeat: no-repeat;
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: center;
84
68
  position: relative;
69
+
70
+ svg {
71
+ width: 18px;
72
+ height: 18px;
73
+ }
85
74
  }
86
75
 
87
76
  &__details {
@@ -3,6 +3,29 @@ import './Alert.scss';
3
3
 
4
4
  export type AlertVariant = 'success' | 'error' | 'alert' | 'info';
5
5
 
6
+ const variantIcons: Record<AlertVariant, React.ReactNode> = {
7
+ success: (
8
+ <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
9
+ <path d="M9 0C13.9706 0 18 4.02944 18 9C18 13.9706 13.9706 18 9 18C4.02944 18 0 13.9706 0 9C0 4.02944 4.02944 0 9 0ZM7.44629 10.6055L5.72168 8.80762L4.27832 10.1924L7.35254 13.3945L14.6729 6.74023L13.3271 5.25977L7.44629 10.6055Z" fill="var(--fills-status-fill-success, #2D6B18)"/>
10
+ </svg>
11
+ ),
12
+ error: (
13
+ <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
14
+ <path d="M9 0C13.9706 0 18 4.02944 18 9C18 13.9706 13.9706 18 9 18C4.02944 18 0 13.9706 0 9C0 4.02944 4.02944 0 9 0ZM9 12.5C8.44772 12.5 8 12.9477 8 13.5C8 14.0523 8.44772 14.5 9 14.5C9.55228 14.5 10 14.0523 10 13.5C10 12.9477 9.55228 12.5 9 12.5ZM9 3.5C8.44772 3.5 8 3.94772 8 4.5V10.5C8 11.0523 8.44772 11.5 9 11.5C9.55228 11.5 10 11.0523 10 10.5V4.5C10 3.94772 9.55228 3.5 9 3.5Z" fill="var(--fills-status-fill-error, #CC3C35)"/>
15
+ </svg>
16
+ ),
17
+ alert: (
18
+ <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
19
+ <path d="M9 0C13.9706 0 18 4.02944 18 9C18 13.9706 13.9706 18 9 18C4.02944 18 0 13.9706 0 9C0 4.02944 4.02944 0 9 0ZM9 12.5C8.44772 12.5 8 12.9477 8 13.5C8 14.0523 8.44772 14.5 9 14.5C9.55228 14.5 10 14.0523 10 13.5C10 12.9477 9.55228 12.5 9 12.5ZM9 3.5C8.44772 3.5 8 3.94772 8 4.5V10.5C8 11.0523 8.44772 11.5 9 11.5C9.55228 11.5 10 11.0523 10 10.5V4.5C10 3.94772 9.55228 3.5 9 3.5Z" fill="var(--fills-status-fill-alert, #FD7E14)"/>
20
+ </svg>
21
+ ),
22
+ info: (
23
+ <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
24
+ <path d="M9 0C13.9706 0 18 4.02944 18 9C18 13.9706 13.9706 18 9 18C4.02944 18 0 13.9706 0 9C0 4.02944 4.02944 0 9 0ZM9 7.5C8.44772 7.5 8 7.94772 8 8.5V13.5C8 14.0523 8.44772 14.5 9 14.5C9.55228 14.5 10 14.0523 10 13.5V8.5C10 7.94772 9.55228 7.5 9 7.5ZM9 3.5C8.44772 3.5 8 3.94772 8 4.5C8 5.05228 8.44772 5.5 9 5.5C9.55228 5.5 10 5.05228 10 4.5C10 3.94772 9.55228 3.5 9 3.5Z" fill="var(--fills-status-fill-info, #0E8CE2)"/>
25
+ </svg>
26
+ ),
27
+ };
28
+
6
29
  export interface AlertProps {
7
30
  variant: AlertVariant;
8
31
  title: string;
@@ -30,7 +53,7 @@ export const Alert: React.FC<AlertProps> = ({
30
53
  <div className={`alert alert--${variant} ${className || ''}`}>
31
54
  <div className="alert__content">
32
55
  <div className="alert__icon">
33
- {/* Icon SVG will be handled by background images in SCSS */}
56
+ {variantIcons[variant]}
34
57
  </div>
35
58
  <div className="alert__details">
36
59
  <div className="alert__information">
@@ -4,6 +4,11 @@
4
4
  justify-content: center;
5
5
  padding: 2px 12px;
6
6
  border-radius: 100px;
7
+
8
+ &--with-icon {
9
+ padding-left: 8px;
10
+ }
11
+ font-family: var(--font-family-mono, 'Geist Mono', monospace);
7
12
  font-size: var(--text-small-size, 13px);
8
13
  font-weight: 500;
9
14
  line-height: 1.2;
@@ -57,6 +62,10 @@
57
62
  .new-badge {
58
63
  padding: 1px 10px;
59
64
  font-size: 12px;
65
+
66
+ &--with-icon {
67
+ padding-left: 6px;
68
+ }
60
69
  }
61
70
  }
62
71
 
@@ -64,6 +73,10 @@
64
73
  .new-badge {
65
74
  padding: 1px 8px;
66
75
  font-size: 11px;
76
+
77
+ &--with-icon {
78
+ padding-left: 4px;
79
+ }
67
80
  }
68
81
  }
69
82
 
@@ -13,11 +13,13 @@ export const Badge: React.FC<BadgeProps> = ({
13
13
  variant = 'neutral',
14
14
  className = '',
15
15
  icon,
16
- }) => {
17
- return (
18
- <span className={`new-badge new-badge--${variant} ${className}`}>
19
- {icon && <span className="new-badge__icon">{icon}</span>}
20
- {children}
21
- </span>
22
- )
23
- }
16
+ }) => (
17
+ <span
18
+ className={`new-badge new-badge--${variant} ${
19
+ icon ? 'new-badge--with-icon' : ''
20
+ } ${className}`}
21
+ >
22
+ {icon && <span className="new-badge__icon">{icon}</span>}
23
+ {children}
24
+ </span>
25
+ )
@@ -2,14 +2,24 @@ import { ButtonHTMLAttributes } from 'react'
2
2
  import './Button.scss'
3
3
 
4
4
  export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
5
- variant?: 'primary' | 'primary-soft' | 'secondary-soft' | 'tertiary-soft' | 'primary-outline' | 'secondary' | 'destructive-soft' | 'destructive-strong' | 'info' | 'disabled'
5
+ variant?:
6
+ | 'primary'
7
+ | 'primary-soft'
8
+ | 'secondary-soft'
9
+ | 'tertiary-soft'
10
+ | 'primary-outline'
11
+ | 'secondary'
12
+ | 'destructive-soft'
13
+ | 'destructive-strong'
14
+ | 'info'
15
+ | 'disabled'
6
16
  size?: 'sm' | 'md' | 'lg'
7
17
  isLoading?: boolean
8
18
  }
9
19
 
10
20
  export function Button({
11
21
  variant = 'primary',
12
- size = 'md',
22
+ size: _size = 'md',
13
23
  disabled = false,
14
24
  isLoading = false,
15
25
  className = '',
@@ -29,6 +39,7 @@ export function Button({
29
39
 
30
40
  return (
31
41
  <button
42
+ type="button"
32
43
  className={classes}
33
44
  disabled={disabled || isLoading}
34
45
  {...props}
@@ -13,7 +13,7 @@
13
13
  cursor: pointer;
14
14
  transition: background-color 0.2s ease;
15
15
 
16
- &:hover:not(:disabled) {
16
+ &:not(.active):hover:not(:disabled) {
17
17
  background-color: var(--surfaces-main-background-tertiary, #E8E9EF);
18
18
  }
19
19
 
@@ -27,6 +27,16 @@
27
27
  outline-offset: 2px;
28
28
  }
29
29
 
30
+ &.active {
31
+ background-color: var(--fill-primary, #6200EE);
32
+ border-color: var(--border-selected, #121E52);
33
+ color: var(--neutral-white, #FFFFFF);
34
+
35
+ .ghost-button__text {
36
+ color: var(--neutral-white, #FFFFFF);
37
+ }
38
+ }
39
+
30
40
  &--sm {
31
41
  height: 28px;
32
42
  padding: 0 8px 0 8px;
@@ -1,3 +1,5 @@
1
1
  export { Button, ButtonText } from './Button'
2
2
  export type { ButtonProps, ButtonTextProps } from './Button'
3
+ export { GhostButton } from './GhostButton'
4
+ export type { GhostButtonProps } from './GhostButton'
3
5
 
@@ -1,15 +1,12 @@
1
1
  .waivers-page {
2
- padding: 24px;
2
+ padding: 0;
3
3
  background-color: #FFFFFF;
4
4
  min-height: 100vh;
5
5
  font-family: var(--font-family-sans, 'Geist', sans-serif);
6
6
 
7
7
 
8
8
  &__header {
9
- display: flex;
10
- justify-content: space-between;
11
- align-items: center;
12
- margin: 20px 0 20px;
9
+ display: none !important;
13
10
  }
14
11
 
15
12
  &__tabs-container {
@@ -17,7 +14,10 @@
17
14
  justify-content: space-between;
18
15
  align-items: center;
19
16
  border-bottom: 1px solid #E8E9EF;
20
- width: 100%;
17
+ margin-bottom: 32px;
18
+ margin-left: 32px;
19
+ margin-right: 32px;
20
+ padding: 0;
21
21
  }
22
22
 
23
23
  &__title-row {
@@ -44,6 +44,7 @@
44
44
  text-decoration: none;
45
45
  visibility: visible !important;
46
46
  opacity: 1 !important;
47
+ padding-right: 0;
47
48
 
48
49
  &:hover {
49
50
  text-decoration: none;
@@ -59,6 +60,7 @@
59
60
  &__tabs {
60
61
  display: flex;
61
62
  gap: 24px;
63
+ padding: 0;
62
64
  }
63
65
 
64
66
  &__tab {
@@ -95,6 +97,7 @@
95
97
  display: flex;
96
98
  flex-direction: column;
97
99
  gap: 32px;
100
+ padding: 0 32px 32px;
98
101
  }
99
102
 
100
103
  .filter-section {
@@ -134,47 +137,10 @@
134
137
 
135
138
  .action-buttons {
136
139
  display: flex;
137
- gap: 16px;
140
+ gap: 12px;
138
141
  align-items: center;
139
142
  }
140
143
 
141
- .action-btn {
142
- padding: 0 16px;
143
- border: 1px solid var(--border-primary, #E8E9EF);
144
- background: #FFFFFF;
145
- transition: all 0.2s ease;
146
- height: 44px;
147
- border-radius: 8px;
148
-
149
- &--secondary-soft {
150
- background: var(--surface-action-soft, #EFE6FD);
151
- border: none;
152
- }
153
-
154
- &--tertiary-soft {
155
- background: #FFFFFF;
156
- border: 1px solid var(--border-primary, #E8E9EF);
157
- }
158
-
159
- &:hover {
160
- background-color: var(--surface-tertiary, #F0F0F5);
161
- border-color: var(--border-primary, #E8E9EF);
162
- }
163
-
164
- .new-button__text {
165
- font-family: var(--font-family-sans, 'Geist', sans-serif);
166
- font-size: 14px;
167
- font-weight: 500;
168
- color: #121E52;
169
- }
170
-
171
- svg {
172
- width: 32px;
173
- height: 32px;
174
- flex-shrink: 0;
175
- }
176
- }
177
-
178
144
  &__row {
179
145
  display: flex;
180
146
  gap: 24px;
@@ -191,12 +157,12 @@
191
157
  }
192
158
 
193
159
  // Cells styling (usually specific to the table in this page)
194
- .customer-cell {
160
+ .entity-cell {
195
161
  &__name {
196
162
  font-weight: 600;
197
163
  color: #121E52;
198
164
  }
199
- &__email {
165
+ &__sub {
200
166
  font-size: 13px;
201
167
  color: #9399B3;
202
168
  }
@@ -207,10 +173,10 @@
207
173
  }
208
174
 
209
175
  &:hover {
210
- .customer-cell__id {
176
+ .entity-cell__id {
211
177
  display: block;
212
178
  }
213
- .customer-cell__email {
179
+ .entity-cell__sub {
214
180
  display: none;
215
181
  }
216
182
  }
@@ -325,7 +291,7 @@
325
291
  .table-section {
326
292
  background-color: #FFFFFF;
327
293
  border-radius: 8px;
328
- overflow: hidden;
294
+ overflow: visible;
329
295
  position: relative;
330
296
 
331
297
  &--loading {
@@ -408,7 +374,7 @@
408
374
  // Mobile styles
409
375
  @media (max-width: 768px) {
410
376
  .waivers-page {
411
- padding: 16px;
377
+ padding: 0;
412
378
 
413
379
  &__header {
414
380
  margin: 12px 0 16px;
@@ -418,6 +384,9 @@
418
384
  flex-direction: column;
419
385
  gap: 16px;
420
386
  align-items: flex-start;
387
+ margin-left: 16px;
388
+ margin-right: 16px;
389
+ padding: 0;
421
390
  }
422
391
 
423
392
  &__tabs {
@@ -425,6 +394,7 @@
425
394
  gap: 16px;
426
395
  overflow-x: auto;
427
396
  -webkit-overflow-scrolling: touch;
397
+ padding: 0;
428
398
 
429
399
  &::-webkit-scrollbar {
430
400
  display: none;
@@ -446,6 +416,8 @@
446
416
  padding: 12px;
447
417
  background-color: #F8F8FA;
448
418
  border-radius: 8px;
419
+ margin: 0 0 16px 0;
420
+ width: 100%;
449
421
 
450
422
  svg {
451
423
  width: 24px;
@@ -466,6 +438,7 @@
466
438
 
467
439
  &__content {
468
440
  gap: 20px;
441
+ padding: 0 16px 16px;
469
442
  }
470
443
 
471
444
  .filter-section {
@@ -498,75 +471,26 @@
498
471
 
499
472
  .quick-filters-wrapper {
500
473
  width: 100%;
501
-
502
- .quick-filter {
503
- flex-direction: row;
504
- align-items: center;
505
- gap: 8px;
506
-
507
- &__label {
508
- font-size: 11px;
509
- }
510
-
511
- &__options {
512
- display: flex;
513
- flex-wrap: wrap;
514
- gap: 6px;
515
- }
516
-
517
- &__option {
518
- padding: 2px 8px;
519
- font-size: 11px;
520
- }
521
- }
522
474
  }
523
475
 
524
476
  .action-buttons {
525
477
  display: flex;
526
- justify-content: space-between;
478
+ flex-wrap: wrap;
527
479
  gap: 8px;
528
480
  width: 100%;
529
- flex-wrap: wrap;
530
- }
531
-
532
- .action-btn {
533
- flex: 1 0 calc(50% - 4px);
534
- min-width: 0;
535
- justify-content: center;
536
- border: 1px solid #E8E9EF;
537
- background: #FFFFFF;
538
- height: 44px;
539
- padding: 0 4px;
540
- border-radius: 8px;
541
- gap: 4px;
542
481
 
543
- &--secondary-soft {
544
- background: var(--surface-action-soft, #EFE6FD);
545
- border: none;
546
- }
547
-
548
- &--tertiary-soft {
549
- background: #FFFFFF;
550
- border: 1px solid #E8E9EF;
551
- }
552
-
553
- &:hover {
554
- background-color: var(--surface-tertiary, #F0F0F5);
555
- }
482
+ .ghost-button {
483
+ flex: 1 0 calc(50% - 4px);
484
+ justify-content: center;
556
485
 
557
- .new-button__text {
558
- font-family: var(--font-family-sans, 'Geist', sans-serif);
559
- font-size: 11px;
560
- font-weight: 600;
561
- white-space: nowrap;
562
- overflow: hidden;
563
- text-overflow: ellipsis;
564
- }
486
+ &:nth-child(2) {
487
+ order: -1;
488
+ flex: 1 0 100%;
489
+ }
565
490
 
566
- svg {
567
- width: 32px;
568
- height: 32px;
569
- flex-shrink: 0;
491
+ &__text {
492
+ font-size: 11px;
493
+ }
570
494
  }
571
495
  }
572
496
  }
@@ -615,7 +539,7 @@
615
539
  &__row {
616
540
  display: grid;
617
541
  grid-template-areas:
618
- "customer age"
542
+ "customer bookings"
619
543
  "divider divider"
620
544
  "next last"
621
545
  "actions actions";
@@ -660,8 +584,7 @@
660
584
  }
661
585
 
662
586
  &.age-col {
663
- grid-area: age;
664
- text-align: right;
587
+ display: none;
665
588
  }
666
589
 
667
590
  &.next-booking-col {
@@ -673,7 +596,8 @@
673
596
  }
674
597
 
675
598
  &.no-of-bookings-col {
676
- display: none;
599
+ grid-area: bookings;
600
+ text-align: right;
677
601
  }
678
602
 
679
603
  &.waiver-col {
@@ -707,6 +631,29 @@
707
631
  }
708
632
  }
709
633
 
634
+ .bookings-cell {
635
+ text-align: right;
636
+ min-width: 0;
637
+ overflow: hidden;
638
+ &__label {
639
+ font-size: 13px;
640
+ color: #626A90;
641
+ font-weight: 500;
642
+ margin-bottom: 2px;
643
+ white-space: nowrap;
644
+ overflow: hidden;
645
+ text-overflow: ellipsis;
646
+ }
647
+ &__value {
648
+ font-size: 14px;
649
+ color: #121E52;
650
+ font-weight: 600;
651
+ white-space: nowrap;
652
+ overflow: hidden;
653
+ text-overflow: ellipsis;
654
+ }
655
+ }
656
+
710
657
  .booking-cell {
711
658
  min-width: 0;
712
659
  overflow: hidden;
@@ -812,7 +759,7 @@
812
759
  // Extra small mobile devices
813
760
  @media (max-width: 480px) {
814
761
  .waivers-page {
815
- padding: 12px;
762
+ padding: 0;
816
763
 
817
764
  &__header {
818
765
  margin: 8px 0 12px;
@@ -820,6 +767,7 @@
820
767
 
821
768
  &__tabs {
822
769
  gap: 12px;
770
+ padding: 0;
823
771
  }
824
772
 
825
773
  &__tab {
@@ -853,6 +801,15 @@
853
801
  font-size: 13px;
854
802
  }
855
803
  }
804
+
805
+ &__content {
806
+ padding: 0 12px 12px;
807
+ }
808
+
809
+ &__tabs-container {
810
+ margin-left: 12px;
811
+ margin-right: 12px;
812
+ }
856
813
  }
857
814
  }
858
815
 
@@ -9,27 +9,25 @@ export interface FormFieldProps extends InputHTMLAttributes<HTMLInputElement> {
9
9
  }
10
10
 
11
11
  export const FormField = forwardRef<HTMLInputElement, FormFieldProps>(
12
- ({ label, error, helpText, required, className = '', ...props }, ref) => {
13
- return (
14
- <div className={`form-field ${className}`}>
15
- {label && (
16
- <label className="form-field__label">
17
- {label}
18
- {required && <span className="form-field__required">*</span>}
19
- </label>
20
- )}
21
- <input
22
- ref={ref}
23
- className={`form-field__input ${error ? 'form-field__input--error' : ''}`}
24
- {...props}
25
- />
26
- {helpText && !error && (
27
- <span className="form-field__help-text">{helpText}</span>
28
- )}
29
- {error && <span className="form-field__error-text">{error}</span>}
30
- </div>
31
- )
32
- }
12
+ ({ label, error, helpText, required, className = '', ...props }, ref) => (
13
+ <div className={`form-field ${className}`}>
14
+ {label && (
15
+ <label className="form-field__label">
16
+ {label}
17
+ {required && <span className="form-field__required">*</span>}
18
+ </label>
19
+ )}
20
+ <input
21
+ ref={ref}
22
+ className={`form-field__input ${error ? 'form-field__input--error' : ''}`}
23
+ {...props}
24
+ />
25
+ {helpText && !error && (
26
+ <span className="form-field__help-text">{helpText}</span>
27
+ )}
28
+ {error && <span className="form-field__error-text">{error}</span>}
29
+ </div>
30
+ )
33
31
  )
34
32
 
35
33
  FormField.displayName = 'FormField'
@@ -48,8 +48,8 @@ export const DeleteModal: React.FC<DeleteModalProps> = ({
48
48
  if (!isOpen) return null
49
49
 
50
50
  return (
51
- <div className="delete-modal-overlay" onClick={handleClose}>
52
- <div className="delete-modal" onClick={(e) => e.stopPropagation()}>
51
+ <div className="delete-modal-overlay" role="presentation" onClick={handleClose}>
52
+ <div className="delete-modal" role="presentation" onClick={(e) => e.stopPropagation()}>
53
53
  <div className="delete-modal__content">
54
54
  <h2 className="delete-modal__title">{title}</h2>
55
55
 
@@ -78,6 +78,7 @@ export const DeleteModal: React.FC<DeleteModalProps> = ({
78
78
 
79
79
  <div className="delete-modal__actions">
80
80
  <button
81
+ type="button"
81
82
  className="delete-modal__button delete-modal__button--delete"
82
83
  onClick={handleConfirm}
83
84
  disabled={isConfirmDisabled}
@@ -85,6 +86,7 @@ export const DeleteModal: React.FC<DeleteModalProps> = ({
85
86
  {isDeleting ? 'Deleting...' : 'Delete'}
86
87
  </button>
87
88
  <button
89
+ type="button"
88
90
  className="delete-modal__button delete-modal__button--cancel"
89
91
  onClick={handleClose}
90
92
  disabled={isDeleting}
@@ -4,6 +4,10 @@
4
4
  padding: 0 1rem;
5
5
  box-sizing: border-box;
6
6
 
7
+ @media (max-width: 576px) {
8
+ padding: 0 16px;
9
+ }
10
+
7
11
  &__container {
8
12
  background: var(--surface-secondary);
9
13
  border-radius: 16px;