@licklist/design 0.78.21 → 0.78.26

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 (186) hide show
  1. package/dist/assets/Trend-Down.svg +3 -0
  2. package/dist/assets/Trend-Up.svg +3 -0
  3. package/dist/auth/Authorizer.d.ts.map +1 -1
  4. package/dist/auth/Authorizer.js +47 -12
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +5 -0
  8. package/dist/v2/components/EntityHeader/EntityHeader.d.ts +13 -0
  9. package/dist/v2/components/EntityHeader/EntityHeader.d.ts.map +1 -0
  10. package/dist/v2/components/EntityHeader/EntityHeader.js +85 -0
  11. package/dist/v2/components/EntityHeader/EntityHeader.scss.js +6 -0
  12. package/dist/v2/components/EntityHeader/index.d.ts +2 -0
  13. package/dist/v2/components/EntityHeader/index.d.ts.map +1 -0
  14. package/dist/v2/components/NPSScore/NPSScore.d.ts +18 -0
  15. package/dist/v2/components/NPSScore/NPSScore.d.ts.map +1 -0
  16. package/dist/v2/components/NPSScore/index.d.ts +3 -0
  17. package/dist/v2/components/NPSScore/index.d.ts.map +1 -0
  18. package/dist/v2/components/Select/Select.d.ts +10 -0
  19. package/dist/v2/components/Select/Select.d.ts.map +1 -0
  20. package/dist/v2/components/Select/index.d.ts +3 -0
  21. package/dist/v2/components/Select/index.d.ts.map +1 -0
  22. package/dist/v2/components/Tooltip/Tooltip.d.ts +21 -0
  23. package/dist/v2/components/Tooltip/Tooltip.d.ts.map +1 -0
  24. package/dist/v2/components/Tooltip/Tooltip.js +103 -0
  25. package/dist/v2/components/Tooltip/Tooltip.scss.js +6 -0
  26. package/dist/v2/components/Tooltip/index.d.ts +2 -0
  27. package/dist/v2/components/Tooltip/index.d.ts.map +1 -0
  28. package/dist/v2/components/UserAvatar/UserAvatar.d.ts +12 -0
  29. package/dist/v2/components/UserAvatar/UserAvatar.d.ts.map +1 -0
  30. package/dist/v2/components/UserAvatar/UserAvatar.js +77 -0
  31. package/dist/v2/components/UserAvatar/UserAvatar.scss.js +6 -0
  32. package/dist/v2/components/UserAvatar/index.d.ts +2 -0
  33. package/dist/v2/components/UserAvatar/index.d.ts.map +1 -0
  34. package/dist/v2/components/UserPanel/UserPanel.d.ts +17 -0
  35. package/dist/v2/components/UserPanel/UserPanel.d.ts.map +1 -0
  36. package/dist/v2/components/UserPanel/UserPanel.js +144 -0
  37. package/dist/v2/components/UserPanel/UserPanel.scss.js +6 -0
  38. package/dist/v2/components/UserPanel/index.d.ts +3 -0
  39. package/dist/v2/components/UserPanel/index.d.ts.map +1 -0
  40. package/dist/v2/dashboard-analytics/blog-posts/Blog.d.ts +15 -0
  41. package/dist/v2/dashboard-analytics/blog-posts/Blog.d.ts.map +1 -0
  42. package/dist/v2/dashboard-analytics/blog-posts/index.d.ts +3 -0
  43. package/dist/v2/dashboard-analytics/blog-posts/index.d.ts.map +1 -0
  44. package/dist/v2/dashboard-analytics/chart/Chart.d.ts +21 -0
  45. package/dist/v2/dashboard-analytics/chart/Chart.d.ts.map +1 -0
  46. package/dist/v2/dashboard-analytics/chart/index.d.ts +3 -0
  47. package/dist/v2/dashboard-analytics/chart/index.d.ts.map +1 -0
  48. package/dist/v2/dashboard-analytics/dashboard/Dashboard.d.ts +57 -0
  49. package/dist/v2/dashboard-analytics/dashboard/Dashboard.d.ts.map +1 -0
  50. package/dist/v2/dashboard-analytics/dashboard/index.d.ts +3 -0
  51. package/dist/v2/dashboard-analytics/dashboard/index.d.ts.map +1 -0
  52. package/dist/v2/dashboard-analytics/index.d.ts +13 -0
  53. package/dist/v2/dashboard-analytics/index.d.ts.map +1 -0
  54. package/dist/v2/dashboard-analytics/metric-card/MetricCard.d.ts +17 -0
  55. package/dist/v2/dashboard-analytics/metric-card/MetricCard.d.ts.map +1 -0
  56. package/dist/v2/dashboard-analytics/metric-card/index.d.ts +3 -0
  57. package/dist/v2/dashboard-analytics/metric-card/index.d.ts.map +1 -0
  58. package/dist/v2/dashboard-analytics/venue-card/VenueCard.d.ts +12 -0
  59. package/dist/v2/dashboard-analytics/venue-card/VenueCard.d.ts.map +1 -0
  60. package/dist/v2/dashboard-analytics/venue-card/index.d.ts +3 -0
  61. package/dist/v2/dashboard-analytics/venue-card/index.d.ts.map +1 -0
  62. package/dist/v2/dashboard-analytics/venue-closed-card/VenueClosedCard.d.ts +25 -0
  63. package/dist/v2/dashboard-analytics/venue-closed-card/VenueClosedCard.d.ts.map +1 -0
  64. package/dist/v2/dashboard-analytics/venue-closed-card/index.d.ts +3 -0
  65. package/dist/v2/dashboard-analytics/venue-closed-card/index.d.ts.map +1 -0
  66. package/dist/v2/index.d.ts +11 -5
  67. package/dist/v2/index.d.ts.map +1 -1
  68. package/dist/v2/navigation/DashboardLayout/AdminSidebar.d.ts +10 -0
  69. package/dist/v2/navigation/DashboardLayout/AdminSidebar.d.ts.map +1 -0
  70. package/dist/v2/navigation/DashboardLayout/AdminSidebar.js +296 -0
  71. package/dist/v2/navigation/DashboardLayout/AdminSidebar.scss.js +6 -0
  72. package/dist/v2/navigation/DashboardLayout/DashboardFooter.d.ts +7 -0
  73. package/dist/v2/navigation/DashboardLayout/DashboardFooter.d.ts.map +1 -0
  74. package/dist/v2/navigation/DashboardLayout/DashboardFooter.js +34 -0
  75. package/dist/v2/navigation/DashboardLayout/DashboardFooter.scss.js +6 -0
  76. package/dist/v2/navigation/DashboardLayout/DashboardLayout.d.ts +42 -0
  77. package/dist/v2/navigation/DashboardLayout/DashboardLayout.d.ts.map +1 -0
  78. package/dist/v2/navigation/DashboardLayout/DashboardLayout.js +176 -0
  79. package/dist/v2/navigation/DashboardLayout/DashboardLayout.scss.js +6 -0
  80. package/dist/v2/navigation/DashboardLayout/ProviderSidebar.d.ts +35 -0
  81. package/dist/v2/navigation/DashboardLayout/ProviderSidebar.d.ts.map +1 -0
  82. package/dist/v2/navigation/DashboardLayout/ProviderSidebar.js +366 -0
  83. package/dist/v2/navigation/DashboardLayout/ProviderSidebar.scss.js +6 -0
  84. package/dist/v2/navigation/DashboardLayout/TopNavigation.d.ts +26 -0
  85. package/dist/v2/navigation/DashboardLayout/TopNavigation.d.ts.map +1 -0
  86. package/dist/v2/navigation/DashboardLayout/TopNavigation.js +360 -0
  87. package/dist/v2/navigation/DashboardLayout/TopNavigation.scss.js +6 -0
  88. package/dist/v2/navigation/DashboardLayout/assets/AdminLogo.png.js +3 -0
  89. package/dist/v2/navigation/DashboardLayout/assets/BookedLogo_Mark.png.js +3 -0
  90. package/dist/v2/navigation/DashboardLayout/index.d.ts +7 -0
  91. package/dist/v2/navigation/DashboardLayout/index.d.ts.map +1 -0
  92. package/package.json +5 -3
  93. package/src/assets/Trend-Down.svg +3 -0
  94. package/src/assets/Trend-Up.svg +3 -0
  95. package/src/auth/Authorizer.tsx +49 -20
  96. package/src/index.ts +2 -1
  97. package/src/v2/components/EntityHeader/EntityHeader.scss +133 -0
  98. package/src/v2/components/EntityHeader/EntityHeader.stories.tsx +103 -0
  99. package/src/v2/components/EntityHeader/EntityHeader.tsx +76 -0
  100. package/src/v2/components/EntityHeader/index.ts +1 -0
  101. package/src/v2/components/NPSScore/NPSScore.scss +330 -0
  102. package/src/v2/components/NPSScore/NPSScore.stories.tsx +29 -0
  103. package/src/v2/components/NPSScore/NPSScore.tsx +209 -0
  104. package/src/v2/components/NPSScore/index.ts +2 -0
  105. package/src/v2/components/Select/Select.scss +188 -0
  106. package/src/v2/components/Select/Select.stories.tsx +164 -0
  107. package/src/v2/components/Select/Select.tsx +56 -0
  108. package/src/v2/components/Select/index.ts +2 -0
  109. package/src/v2/components/Tooltip/Tooltip.scss +92 -0
  110. package/src/v2/components/Tooltip/Tooltip.stories.tsx +164 -0
  111. package/src/v2/components/Tooltip/Tooltip.tsx +64 -0
  112. package/src/v2/components/Tooltip/index.ts +8 -0
  113. package/src/v2/components/UserAvatar/UserAvatar.scss +62 -0
  114. package/src/v2/components/UserAvatar/UserAvatar.stories.tsx +94 -0
  115. package/src/v2/components/UserAvatar/UserAvatar.tsx +96 -0
  116. package/src/v2/components/UserAvatar/index.ts +1 -0
  117. package/src/v2/components/UserPanel/UserPanel.scss +195 -0
  118. package/src/v2/components/UserPanel/UserPanel.stories.tsx +66 -0
  119. package/src/v2/components/UserPanel/UserPanel.tsx +126 -0
  120. package/src/v2/components/UserPanel/index.ts +2 -0
  121. package/src/v2/dashboard-analytics/blog-posts/Blog.scss +92 -0
  122. package/src/v2/dashboard-analytics/blog-posts/Blog.stories.tsx +57 -0
  123. package/src/v2/dashboard-analytics/blog-posts/Blog.tsx +91 -0
  124. package/src/v2/dashboard-analytics/blog-posts/index.ts +2 -0
  125. package/src/v2/dashboard-analytics/chart/Chart.scss +424 -0
  126. package/src/v2/dashboard-analytics/chart/Chart.stories.tsx +157 -0
  127. package/src/v2/dashboard-analytics/chart/Chart.tsx +623 -0
  128. package/src/v2/dashboard-analytics/chart/index.ts +2 -0
  129. package/src/v2/dashboard-analytics/dashboard/Dashboard.scss +254 -0
  130. package/src/v2/dashboard-analytics/dashboard/Dashboard.stories.tsx +298 -0
  131. package/src/v2/dashboard-analytics/dashboard/Dashboard.tsx +248 -0
  132. package/src/v2/dashboard-analytics/dashboard/index.ts +2 -0
  133. package/src/v2/dashboard-analytics/index.ts +12 -0
  134. package/src/v2/dashboard-analytics/metric-card/MetricCard.scss +125 -0
  135. package/src/v2/dashboard-analytics/metric-card/MetricCard.stories.tsx +106 -0
  136. package/src/v2/dashboard-analytics/metric-card/MetricCard.tsx +72 -0
  137. package/src/v2/dashboard-analytics/metric-card/index.ts +2 -0
  138. package/src/v2/dashboard-analytics/venue-card/VenueCard.scss +112 -0
  139. package/src/v2/dashboard-analytics/venue-card/VenueCard.stories.tsx +40 -0
  140. package/src/v2/dashboard-analytics/venue-card/VenueCard.tsx +62 -0
  141. package/src/v2/dashboard-analytics/venue-card/index.ts +2 -0
  142. package/src/v2/dashboard-analytics/venue-closed-card/VenueClosedCard.scss +129 -0
  143. package/src/v2/dashboard-analytics/venue-closed-card/VenueClosedCard.stories.tsx +31 -0
  144. package/src/v2/dashboard-analytics/venue-closed-card/VenueClosedCard.tsx +61 -0
  145. package/src/v2/dashboard-analytics/venue-closed-card/index.ts +2 -0
  146. package/src/v2/design-system/colors/ColorSystem.scss +439 -0
  147. package/src/v2/design-system/colors/ColorSystem.stories.tsx +730 -0
  148. package/src/v2/design-system/typography/Typography.scss +295 -0
  149. package/src/v2/design-system/typography/Typography.stories.tsx +109 -0
  150. package/src/v2/index.ts +43 -7
  151. package/src/v2/navigation/DashboardLayout/AdminSidebar.scss +207 -0
  152. package/src/v2/navigation/DashboardLayout/AdminSidebar.tsx +171 -0
  153. package/src/v2/navigation/DashboardLayout/DashboardFooter.scss +30 -0
  154. package/src/v2/navigation/DashboardLayout/DashboardFooter.tsx +25 -0
  155. package/src/v2/navigation/DashboardLayout/DashboardLayout.scss +91 -0
  156. package/src/v2/navigation/DashboardLayout/DashboardLayout.stories.tsx +370 -0
  157. package/src/v2/navigation/DashboardLayout/DashboardLayout.tsx +233 -0
  158. package/src/v2/navigation/DashboardLayout/ProviderSidebar.scss +271 -0
  159. package/src/v2/navigation/DashboardLayout/ProviderSidebar.tsx +266 -0
  160. package/src/v2/navigation/DashboardLayout/Sidebar.stories.tsx +220 -0
  161. package/src/v2/navigation/DashboardLayout/TopNavigation.scss +206 -0
  162. package/src/v2/navigation/DashboardLayout/TopNavigation.tsx +279 -0
  163. package/src/v2/navigation/DashboardLayout/assets/AdminLogo.png +0 -0
  164. package/src/v2/navigation/DashboardLayout/assets/BookedLogo_Mark.png +0 -0
  165. package/src/v2/navigation/DashboardLayout/index.ts +20 -0
  166. package/src/v2/styles/index.scss +0 -1
  167. package/src/v2/styles/tokens/_colors.scss +531 -98
  168. package/dist/v2/components/Colors/Colors.d.ts +0 -21
  169. package/dist/v2/components/Colors/Colors.d.ts.map +0 -1
  170. package/dist/v2/components/Colors/index.d.ts +0 -3
  171. package/dist/v2/components/Colors/index.d.ts.map +0 -1
  172. package/dist/v2/components/Typography/Typography.d.ts +0 -11
  173. package/dist/v2/components/Typography/Typography.d.ts.map +0 -1
  174. package/dist/v2/components/Typography/index.d.ts +0 -3
  175. package/dist/v2/components/Typography/index.d.ts.map +0 -1
  176. package/src/v2/components/Colors/Colors.scss +0 -64
  177. package/src/v2/components/Colors/Colors.stories.tsx +0 -143
  178. package/src/v2/components/Colors/Colors.tsx +0 -51
  179. package/src/v2/components/Colors/ColorsAliases.stories.tsx +0 -285
  180. package/src/v2/components/Colors/Sizes.stories.tsx +0 -141
  181. package/src/v2/components/Colors/index.ts +0 -2
  182. package/src/v2/components/Typography/Typography.scss +0 -72
  183. package/src/v2/components/Typography/Typography.stories.tsx +0 -266
  184. package/src/v2/components/Typography/Typography.tsx +0 -56
  185. package/src/v2/components/Typography/index.ts +0 -2
  186. package/src/v2/styles/tokens/_aliases.scss +0 -199
@@ -0,0 +1,188 @@
1
+ @import '../../design-system/typography/Typography.scss';
2
+
3
+ .select-container {
4
+ position: relative;
5
+ display: inline-block;
6
+ width: auto;
7
+ max-width: 152px;
8
+
9
+ @media (min-width: 768px) {
10
+ max-width: 448px;
11
+ }
12
+ }
13
+
14
+ .select {
15
+ @include typography('heading.h5');
16
+ display: block;
17
+ width: auto;
18
+ height: 40px;
19
+ padding: 8px var(--padding-reg, 16px);
20
+ padding-right: 40px;
21
+ flex-shrink: 0;
22
+ color: var(--label-primary);
23
+ line-height: 16px;
24
+ appearance: none;
25
+ cursor: pointer;
26
+ background-color: var(--surface-secondary);
27
+ border: 2px solid var(--border-primary);
28
+ border-radius: var(--radius-md, 4px);
29
+ transition: all 0.2s ease-in-out;
30
+ &:hover:not(:disabled) {
31
+ border-color: var(--disabled-regular);
32
+ }
33
+
34
+ &:focus {
35
+ outline: none;
36
+ border-color: var(--highlight-dark);
37
+ box-shadow: 0 0 0 3px var(--surface-highlight-soft);
38
+ }
39
+
40
+ // Variants
41
+ &--default {
42
+ background-color: var(--surface-secondary);
43
+ }
44
+
45
+ &--hover {
46
+ background-color: var(--surface-secondary);
47
+ border-color: var(--border-secondary);
48
+ }
49
+
50
+ &--focus {
51
+ background-color: var(--surface-secondary);
52
+ border-color: var(--border-selected);
53
+ }
54
+
55
+ &--secondary {
56
+ background-color: var(--surface-secondary);
57
+ border-color: var(--border-primary);
58
+
59
+ &:hover:not(:disabled) {
60
+ background-color: var(--surface-primary-hover);
61
+ border-color: var(--tone-regular);
62
+ }
63
+
64
+ &:focus {
65
+ border-color: var(--disabled-regular);
66
+ background-color: var(--surface-primary);
67
+ }
68
+ }
69
+
70
+ &--error {
71
+ background-color: var(--surface-status-error);
72
+ border-color: var(--border-status-error);
73
+
74
+ &:hover:not(:disabled) {
75
+ background-color: var(--errors-lighter);
76
+ border-color: var(--errors-light);
77
+ }
78
+
79
+ &:focus {
80
+ border-color: var(--errors-dark);
81
+ background-color: var(--surface-status-error);
82
+ }
83
+ }
84
+
85
+ &--info {
86
+ background-color: var(--surface-status-info);
87
+ border-color: var(--border-status-info);
88
+ color: var(--information-darker);
89
+
90
+ &:hover:not(:disabled) {
91
+ background-color: var(--information-lighter);
92
+ border-color: var(--information-light);
93
+ }
94
+
95
+ &:focus {
96
+ border-color: var(--information-dark);
97
+ background-color: var(--information-lightest);
98
+ }
99
+ }
100
+
101
+ &--disabled {
102
+ background-color: var(--surface-status-disabled);
103
+ border-color: var(--border-status-disabled);
104
+ cursor: not-allowed;
105
+ opacity: 0.6;
106
+
107
+ &:hover {
108
+ background-color: var(--surface-status-disabled);
109
+ border-color: var(--border-status-disabled);
110
+ }
111
+ }
112
+
113
+ // Sizes
114
+ &--sm {
115
+ padding: 4px 32px 4px 8px;
116
+ font-size: 12px;
117
+ }
118
+
119
+ &--md {
120
+ padding: 8px 36px 8px 12px;
121
+ font-size: 14px;
122
+ }
123
+
124
+ &--lg {
125
+ padding: 12px 40px 12px 16px;
126
+ font-size: 16px;
127
+ }
128
+
129
+ &::-ms-expand {
130
+ display: none;
131
+ }
132
+ }
133
+
134
+ .select-arrow {
135
+ position: absolute;
136
+ right: 16px;
137
+ top: 50%;
138
+ transform: translateY(-50%);
139
+ pointer-events: none;
140
+ width: 11px;
141
+ height: 6px;
142
+ stroke: var(--label-secondary);
143
+ transition: all 0.2s ease-in-out;
144
+
145
+ .select:focus + & {
146
+ transform: translateY(-50%) rotate(180deg);
147
+ }
148
+ }
149
+
150
+ .select {
151
+ &:focus {
152
+ outline: none;
153
+ border-color: var(--highlight-dark);
154
+ box-shadow: 0 0 0 3px var(--surface-highlight-soft);
155
+ transform: translateY(-1px);
156
+ }
157
+
158
+ &:active {
159
+ transform: translateY(0px);
160
+ box-shadow: 0 0 0 2px var(--surface-highlight-soft);
161
+ }
162
+
163
+ &.select--transitioning {
164
+ opacity: 0.8;
165
+ transform: scale(0.98);
166
+ border-color: var(--cyan-700);
167
+
168
+ &:focus {
169
+ transform: scale(0.98) translateY(-1px);
170
+ }
171
+ }
172
+ }
173
+
174
+ @keyframes filterPulse {
175
+ 0% {
176
+ box-shadow: 0 0 0 0 rgba(31, 154, 181, 0.4);
177
+ }
178
+ 50% {
179
+ box-shadow: 0 0 0 4px rgba(31, 154, 181, 0.1);
180
+ }
181
+ 100% {
182
+ box-shadow: 0 0 0 0 rgba(31, 154, 181, 0);
183
+ }
184
+ }
185
+
186
+ .select--filter-active {
187
+ animation: filterPulse 0.6s ease-out;
188
+ }
@@ -0,0 +1,164 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { Select } from './Select'
3
+
4
+ const meta = {
5
+ title: 'v2/Components/Select',
6
+ component: Select,
7
+ parameters: {
8
+ layout: 'centered',
9
+ },
10
+
11
+ argTypes: {
12
+ variant: {
13
+ control: 'select',
14
+ options: ['primary', 'primary-soft', 'primary-outline', 'secondary', 'destructive-soft', 'destructive-strong', 'info', 'disabled'],
15
+ },
16
+ size: {
17
+ control: 'select',
18
+ options: ['sm', 'md', 'lg'],
19
+ },
20
+ disabled: {
21
+ control: 'boolean',
22
+ },
23
+ },
24
+ } satisfies Meta<typeof Select>
25
+
26
+ export default meta
27
+ type Story = StoryObj<typeof meta>
28
+
29
+ export const Default: Story = {
30
+ args: {
31
+ variant: 'default',
32
+ size: 'md',
33
+ disabled: false,
34
+ },
35
+ render: (args) => (
36
+ <Select {...args}>
37
+ <option value="">Select</option>
38
+ <option value="option1">Option 1</option>
39
+ <option value="option2">Option 2</option>
40
+ <option value="option3">Option 3</option>
41
+ </Select>
42
+ ),
43
+ }
44
+
45
+ export const Hover: Story = {
46
+ args: {
47
+ variant: 'hover',
48
+ size: 'md',
49
+ disabled: false,
50
+ },
51
+ render: (args) => (
52
+ <Select {...args}>
53
+ <option value="">Select</option>
54
+ <option value="option1">Option 1</option>
55
+ <option value="option2">Option 2</option>
56
+ <option value="option3">Option 3</option>
57
+ </Select>
58
+ ),
59
+ }
60
+
61
+ export const Focus: Story = {
62
+ args: {
63
+ variant: 'focus',
64
+ size: 'md',
65
+ disabled: false,
66
+ },
67
+ render: (args) => (
68
+ <Select {...args}>
69
+ <option value="">Select</option>
70
+ <option value="option1">Option 1</option>
71
+ <option value="option2">Option 2</option>
72
+ <option value="option3">Option 3</option>
73
+ </Select>
74
+ ),
75
+ }
76
+
77
+ export const Error: Story = {
78
+ args: {
79
+ variant: 'error',
80
+ size: 'md',
81
+ disabled: false,
82
+ },
83
+ render: (args) => (
84
+ <Select {...args}>
85
+ <option value="">Select</option>
86
+ <option value="option1">Option 1</option>
87
+ <option value="option2">Option 2</option>
88
+ <option value="option3">Option 3</option>
89
+ </Select>
90
+ ),
91
+ }
92
+
93
+
94
+ export const Disabled: Story = {
95
+ args: {
96
+ variant: 'disabled',
97
+ size: 'md',
98
+ disabled: true,
99
+ },
100
+ render: (args) => (
101
+ <Select {...args}>
102
+ <option value="">Select</option>
103
+ <option value="option1">Option 1</option>
104
+ <option value="option2">Option 2</option>
105
+ <option value="option3">Option 3</option>
106
+ </Select>
107
+ ),
108
+ }
109
+
110
+ export const AllVariants: Story = {
111
+ render: () => (
112
+ <div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: '32px', maxWidth: '900px' }}>
113
+ <div>
114
+ <h3 style={{ fontSize: '14px', fontWeight: '600', marginBottom: '8px' }}>Default</h3>
115
+ <Select variant="default" size="md">
116
+ <option value="">Select</option>
117
+ <option value="option1">Option 1</option>
118
+ <option value="option2">Option 2</option>
119
+ <option value="option3">Option 3</option>
120
+ </Select>
121
+ </div>
122
+
123
+ <div>
124
+ <h3 style={{ fontSize: '14px', fontWeight: '600', marginBottom: '8px' }}>Hover</h3>
125
+ <Select variant="hover" size="md">
126
+ <option value="">Select</option>
127
+ <option value="option1">Option 1</option>
128
+ <option value="option2">Option 2</option>
129
+ <option value="option3">Option 3</option>
130
+ </Select>
131
+ </div>
132
+
133
+ <div>
134
+ <h3 style={{ fontSize: '14px', fontWeight: '600', marginBottom: '8px' }}>Focus</h3>
135
+ <Select variant="focus" size="md">
136
+ <option value="">Select</option>
137
+ <option value="option1">Option 1</option>
138
+ <option value="option2">Option 2</option>
139
+ <option value="option3">Option 3</option>
140
+ </Select>
141
+ </div>
142
+
143
+ <div>
144
+ <h3 style={{ fontSize: '14px', fontWeight: '600', marginBottom: '8px' }}>Error</h3>
145
+ <Select variant="error" size="md">
146
+ <option value="">Select</option>
147
+ <option value="option1">Option 1</option>
148
+ <option value="option2">Option 2</option>
149
+ <option value="option3">Option 3</option>
150
+ </Select>
151
+ </div>
152
+
153
+ <div>
154
+ <h3 style={{ fontSize: '14px', fontWeight: '600', marginBottom: '8px' }}>Disabled</h3>
155
+ <Select variant="disabled" size="md">
156
+ <option value="">Select</option>
157
+ <option value="option1">Option 1</option>
158
+ <option value="option2">Option 2</option>
159
+ <option value="option3">Option 3</option>
160
+ </Select>
161
+ </div>
162
+ </div>
163
+ ),
164
+ }
@@ -0,0 +1,56 @@
1
+ import React, { HTMLAttributes } from 'react'
2
+ import './Select.scss'
3
+
4
+ export interface SelectProps extends HTMLAttributes<HTMLSelectElement> {
5
+ variant?: 'default' | 'hover'| 'focus' | 'error' | 'disabled'
6
+ size?: 'sm' | 'md' | 'lg'
7
+ disabled?: boolean
8
+ }
9
+
10
+ export function Select({
11
+ variant = 'default',
12
+ size = 'md',
13
+ disabled = false,
14
+ className = '',
15
+ children,
16
+ ...props
17
+ }: SelectProps) {
18
+ const classes = [
19
+ 'select',
20
+ `select--${variant}`,
21
+ `select--${size}`,
22
+ disabled ? 'select--disabled' : '',
23
+ className
24
+ ].filter(Boolean).join(' ')
25
+
26
+ return (
27
+ <div className="select-container">
28
+ <select
29
+ className={classes}
30
+ disabled={disabled}
31
+ {...props}
32
+ >
33
+ {children}
34
+ </select>
35
+ <svg
36
+ className="select-arrow"
37
+ xmlns="http://www.w3.org/2000/svg"
38
+ width="11"
39
+ height="6"
40
+ viewBox="0 0 11 6"
41
+ fill="none"
42
+ aria-hidden="true"
43
+ >
44
+ <path
45
+ d="M1 1L5.5 5L10 1"
46
+ stroke="#626A90"
47
+ strokeWidth="2"
48
+ strokeLinecap="round"
49
+ strokeLinejoin="round"
50
+ />
51
+ </svg>
52
+ </div>
53
+ )
54
+ }
55
+
56
+ export default Select
@@ -0,0 +1,2 @@
1
+ export { Select } from './Select'
2
+ export type { SelectProps } from './Select'
@@ -0,0 +1,92 @@
1
+ .tooltip-content {
2
+ z-index: 50;
3
+ overflow: hidden;
4
+ border-radius: 6px;
5
+ border: 1px solid var(--borders-main-border-primary, #E8E9EF);
6
+ background: var(--surfaces-main-surface-primary, #FFFFFF);
7
+ padding: 6px 12px;
8
+ font-family: var(--font-family-sans);
9
+ font-size: 14px;
10
+ font-weight: 400;
11
+ line-height: 20px;
12
+ color: var(--labels-main-label-primary, #121E52);
13
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
14
+ white-space: nowrap;
15
+
16
+ animation-duration: 0.2s;
17
+ animation-timing-function: ease-out;
18
+
19
+ &[data-state='delayed-open'][data-side='top'] {
20
+ animation-name: tooltip-slide-down;
21
+ }
22
+
23
+ &[data-state='delayed-open'][data-side='bottom'] {
24
+ animation-name: tooltip-slide-up;
25
+ }
26
+
27
+ &[data-state='delayed-open'][data-side='left'] {
28
+ animation-name: tooltip-slide-right;
29
+ }
30
+
31
+ &[data-state='delayed-open'][data-side='right'] {
32
+ animation-name: tooltip-slide-left;
33
+ }
34
+
35
+ &[data-state='closed'] {
36
+ animation-name: tooltip-fade-out;
37
+ animation-duration: 0.1s;
38
+ }
39
+ }
40
+
41
+ @keyframes tooltip-fade-out {
42
+ from {
43
+ opacity: 1;
44
+ }
45
+ to {
46
+ opacity: 0;
47
+ }
48
+ }
49
+
50
+ @keyframes tooltip-slide-up {
51
+ from {
52
+ opacity: 0;
53
+ transform: translateY(-4px);
54
+ }
55
+ to {
56
+ opacity: 1;
57
+ transform: translateY(0);
58
+ }
59
+ }
60
+
61
+ @keyframes tooltip-slide-down {
62
+ from {
63
+ opacity: 0;
64
+ transform: translateY(4px);
65
+ }
66
+ to {
67
+ opacity: 1;
68
+ transform: translateY(0);
69
+ }
70
+ }
71
+
72
+ @keyframes tooltip-slide-left {
73
+ from {
74
+ opacity: 0;
75
+ transform: translateX(-4px);
76
+ }
77
+ to {
78
+ opacity: 1;
79
+ transform: translateX(0);
80
+ }
81
+ }
82
+
83
+ @keyframes tooltip-slide-right {
84
+ from {
85
+ opacity: 0;
86
+ transform: translateX(4px);
87
+ }
88
+ to {
89
+ opacity: 1;
90
+ transform: translateX(0);
91
+ }
92
+ }
@@ -0,0 +1,164 @@
1
+ import { Meta, StoryObj } from '@storybook/react'
2
+ import { Tooltip } from './Tooltip'
3
+
4
+ export default {
5
+ title: 'v2/Components/Tooltip',
6
+ component: Tooltip,
7
+ argTypes: {
8
+ content: { control: 'text' },
9
+ side: { control: 'select', options: ['top', 'bottom', 'left', 'right'] },
10
+ sideOffset: { control: 'number' },
11
+ delayDuration: { control: 'number' },
12
+ disabled: { control: 'boolean' },
13
+ },
14
+ parameters: {
15
+ layout: 'centered',
16
+ },
17
+ } as Meta<typeof Tooltip>
18
+
19
+ type Story = StoryObj<typeof Tooltip>
20
+
21
+ export const Default: Story = {
22
+ args: {
23
+ content: 'Hey Godwin Adebimpe',
24
+ side: 'bottom',
25
+ sideOffset: 8,
26
+ delayDuration: 200,
27
+ },
28
+ render: (args) => (
29
+ <Tooltip {...args}>
30
+ <button style={{
31
+ padding: '8px 16px',
32
+ borderRadius: '8px',
33
+ border: '1px solid #E8E9EF',
34
+ background: '#FFFFFF',
35
+ cursor: 'pointer',
36
+ fontFamily: 'Geist, sans-serif',
37
+ }}>
38
+ Hover me
39
+ </button>
40
+ </Tooltip>
41
+ ),
42
+ }
43
+
44
+ export const Top: Story = {
45
+ args: {
46
+ content: 'Tooltip on top',
47
+ side: 'top',
48
+ sideOffset: 8,
49
+ },
50
+ render: (args) => (
51
+ <div style={{ marginTop: '100px' }}>
52
+ <Tooltip {...args}>
53
+ <button style={{
54
+ padding: '8px 16px',
55
+ borderRadius: '8px',
56
+ border: '1px solid #E8E9EF',
57
+ background: '#FFFFFF',
58
+ cursor: 'pointer',
59
+ fontFamily: 'Geist, sans-serif',
60
+ }}>
61
+ Hover me
62
+ </button>
63
+ </Tooltip>
64
+ </div>
65
+ ),
66
+ }
67
+
68
+ export const Left: Story = {
69
+ args: {
70
+ content: 'Tooltip on left',
71
+ side: 'left',
72
+ sideOffset: 8,
73
+ },
74
+ render: (args) => (
75
+ <div style={{ marginLeft: '150px' }}>
76
+ <Tooltip {...args}>
77
+ <button style={{
78
+ padding: '8px 16px',
79
+ borderRadius: '8px',
80
+ border: '1px solid #E8E9EF',
81
+ background: '#FFFFFF',
82
+ cursor: 'pointer',
83
+ fontFamily: 'Geist, sans-serif',
84
+ }}>
85
+ Hover me
86
+ </button>
87
+ </Tooltip>
88
+ </div>
89
+ ),
90
+ }
91
+
92
+ export const Right: Story = {
93
+ args: {
94
+ content: 'Tooltip on right',
95
+ side: 'right',
96
+ sideOffset: 8,
97
+ },
98
+ render: (args) => (
99
+ <Tooltip {...args}>
100
+ <button style={{
101
+ padding: '8px 16px',
102
+ borderRadius: '8px',
103
+ border: '1px solid #E8E9EF',
104
+ background: '#FFFFFF',
105
+ cursor: 'pointer',
106
+ fontFamily: 'Geist, sans-serif',
107
+ }}>
108
+ Hover me
109
+ </button>
110
+ </Tooltip>
111
+ ),
112
+ }
113
+
114
+ export const WithAvatar: Story = {
115
+ args: {
116
+ content: 'Hey Godwin Adebimpe',
117
+ side: 'bottom',
118
+ sideOffset: 8,
119
+ },
120
+ render: (args) => (
121
+ <Tooltip {...args}>
122
+ <button style={{
123
+ width: '32px',
124
+ height: '32px',
125
+ borderRadius: '50%',
126
+ background: 'rgba(98, 106, 144, 0.2)',
127
+ border: '2px solid #626A90',
128
+ display: 'flex',
129
+ alignItems: 'center',
130
+ justifyContent: 'center',
131
+ cursor: 'pointer',
132
+ fontFamily: 'Geist, sans-serif',
133
+ fontSize: '10px',
134
+ fontWeight: 800,
135
+ color: '#626A90',
136
+ }}>
137
+ GA
138
+ </button>
139
+ </Tooltip>
140
+ ),
141
+ }
142
+
143
+ export const Disabled: Story = {
144
+ args: {
145
+ content: 'This tooltip is disabled',
146
+ side: 'bottom',
147
+ sideOffset: 8,
148
+ disabled: true,
149
+ },
150
+ render: (args) => (
151
+ <Tooltip {...args}>
152
+ <button style={{
153
+ padding: '8px 16px',
154
+ borderRadius: '8px',
155
+ border: '1px solid #E8E9EF',
156
+ background: '#FFFFFF',
157
+ cursor: 'pointer',
158
+ fontFamily: 'Geist, sans-serif',
159
+ }}>
160
+ Hover me (disabled tooltip)
161
+ </button>
162
+ </Tooltip>
163
+ ),
164
+ }