allaw-ui 0.0.19 → 0.0.34

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 (202) hide show
  1. package/README.md +30 -10
  2. package/dist/app/globals.css +5 -0
  3. package/dist/app/layout.d.ts +0 -0
  4. package/dist/app/layout.js +0 -0
  5. package/dist/assets/NoPhoto.png +0 -0
  6. package/dist/assets/NoPhoto.svg +22 -0
  7. package/dist/assets/allaw-font.eot +0 -0
  8. package/dist/assets/allaw-font.svg +8 -2
  9. package/dist/assets/allaw-font.ttf +0 -0
  10. package/dist/assets/allaw-font.woff +0 -0
  11. package/dist/components/atoms/buttons/ActionCircleButton.css +143 -0
  12. package/dist/components/atoms/buttons/ActionCircleButton.d.ts +9 -0
  13. package/dist/components/atoms/buttons/ActionCircleButton.js +23 -0
  14. package/dist/components/atoms/buttons/AgendaSlot.css +116 -0
  15. package/dist/components/atoms/buttons/AgendaSlot.d.ts +10 -0
  16. package/dist/components/atoms/buttons/AgendaSlot.js +7 -0
  17. package/dist/components/atoms/buttons/FavoriteToggle.css +35 -0
  18. package/dist/components/atoms/buttons/FavoriteToggle.d.ts +8 -0
  19. package/dist/components/atoms/buttons/FavoriteToggle.js +11 -0
  20. package/dist/components/atoms/buttons/FilterButton.css +55 -0
  21. package/dist/components/atoms/buttons/FilterButton.d.ts +9 -0
  22. package/dist/components/atoms/buttons/FilterButton.js +9 -0
  23. package/dist/components/atoms/buttons/FilterButtonPrimary.d.ts +9 -0
  24. package/dist/components/atoms/buttons/FilterButtonPrimary.js +46 -0
  25. package/dist/components/atoms/buttons/GhostButton.css +63 -0
  26. package/dist/components/atoms/buttons/GhostButton.d.ts +14 -0
  27. package/dist/components/atoms/buttons/GhostButton.js +11 -0
  28. package/dist/components/atoms/buttons/IconButton.css +111 -0
  29. package/dist/components/atoms/buttons/IconButton.d.ts +10 -0
  30. package/dist/components/atoms/buttons/IconButton.js +14 -0
  31. package/dist/components/atoms/buttons/OAuthProviderButton.css +117 -0
  32. package/dist/components/atoms/buttons/OAuthProviderButton.d.ts +12 -0
  33. package/dist/components/atoms/buttons/OAuthProviderButton.js +143 -0
  34. package/dist/components/atoms/buttons/PendingDocuments.css +53 -0
  35. package/dist/components/atoms/buttons/PendingDocuments.d.ts +10 -0
  36. package/dist/components/atoms/buttons/PendingDocuments.js +13 -0
  37. package/dist/components/{buttons/ButtonPrimary.css → atoms/buttons/PrimaryButton.css} +12 -7
  38. package/dist/components/atoms/buttons/PrimaryButton.d.ts +16 -0
  39. package/dist/components/atoms/buttons/PrimaryButton.js +11 -0
  40. package/dist/components/atoms/buttons/SecondaryButton.css +124 -0
  41. package/dist/components/atoms/buttons/SecondaryButton.d.ts +14 -0
  42. package/dist/components/atoms/buttons/SecondaryButton.js +11 -0
  43. package/dist/components/atoms/buttons/TabNavigation.css +43 -0
  44. package/dist/components/atoms/buttons/TabNavigation.d.ts +13 -0
  45. package/dist/components/atoms/buttons/TabNavigation.js +10 -0
  46. package/dist/components/atoms/buttons/TertiaryButton.css +63 -0
  47. package/dist/components/atoms/buttons/TertiaryButton.d.ts +10 -0
  48. package/dist/components/atoms/buttons/TertiaryButton.js +10 -0
  49. package/dist/components/atoms/buttons/index.d.ts +22 -0
  50. package/dist/components/atoms/buttons/index.js +11 -0
  51. package/dist/components/atoms/checkboxes/Checkbox.css +50 -0
  52. package/dist/components/atoms/checkboxes/Checkbox.d.ts +11 -0
  53. package/dist/components/atoms/checkboxes/Checkbox.js +15 -0
  54. package/dist/components/atoms/checkboxes/index.d.ts +2 -0
  55. package/dist/components/atoms/checkboxes/index.js +1 -0
  56. package/dist/components/atoms/filter/Basefiler.css +80 -0
  57. package/dist/components/atoms/filter/Filter.d.ts +23 -0
  58. package/dist/components/atoms/filter/Filter.js +87 -0
  59. package/dist/components/atoms/filter/index.d.ts +2 -0
  60. package/dist/components/atoms/filter/index.js +1 -0
  61. package/dist/components/atoms/inputs/Input.css +184 -0
  62. package/dist/components/atoms/inputs/Input.d.ts +22 -0
  63. package/dist/components/atoms/inputs/Input.js +86 -0
  64. package/dist/components/atoms/inputs/SearchBar.css +54 -0
  65. package/dist/components/atoms/inputs/SearchBar.d.ts +12 -0
  66. package/dist/components/atoms/inputs/SearchBar.js +20 -0
  67. package/dist/components/atoms/inputs/index.d.ts +4 -0
  68. package/dist/components/atoms/inputs/index.js +2 -0
  69. package/dist/components/atoms/progressBars/ProgressBar.css +109 -0
  70. package/dist/components/atoms/progressBars/ProgressBar.d.ts +15 -0
  71. package/dist/components/atoms/progressBars/ProgressBar.js +17 -0
  72. package/dist/components/atoms/progressBars/index.d.ts +2 -0
  73. package/dist/components/atoms/progressBars/index.js +1 -0
  74. package/dist/components/atoms/radios/RadioButton.css +98 -0
  75. package/dist/components/atoms/radios/RadioButton.d.ts +11 -0
  76. package/dist/components/atoms/radios/RadioButton.js +10 -0
  77. package/dist/components/atoms/radios/index.d.ts +2 -0
  78. package/dist/components/atoms/radios/index.js +1 -0
  79. package/dist/components/atoms/selects/Select.css +103 -0
  80. package/dist/components/atoms/selects/Select.d.ts +24 -0
  81. package/dist/components/atoms/selects/Select.js +84 -0
  82. package/dist/components/atoms/selects/index.d.ts +2 -0
  83. package/dist/components/atoms/selects/index.js +1 -0
  84. package/dist/components/atoms/tags/AppointementStatusTag.css +113 -13
  85. package/dist/components/atoms/tags/AppointementStatusTag.d.ts +1 -1
  86. package/dist/components/atoms/tags/FolderStatusTag.css +26 -0
  87. package/dist/components/atoms/tags/FolderStatusTag.d.ts +7 -0
  88. package/dist/components/atoms/tags/FolderStatusTag.js +8 -0
  89. package/dist/components/atoms/tags/OtherStatusTag.css +72 -0
  90. package/dist/components/atoms/tags/OtherStatusTag.d.ts +10 -0
  91. package/dist/components/atoms/tags/OtherStatusTag.js +10 -0
  92. package/dist/components/atoms/tags/index.d.ts +6 -0
  93. package/dist/components/atoms/tags/index.js +3 -0
  94. package/dist/components/atoms/typography/Heading.css +77 -0
  95. package/dist/components/atoms/typography/Heading.d.ts +10 -0
  96. package/dist/components/atoms/typography/Heading.js +7 -0
  97. package/dist/components/atoms/typography/Paragraph.css +43 -0
  98. package/dist/components/atoms/typography/Paragraph.d.ts +11 -0
  99. package/dist/components/atoms/typography/Paragraph.js +24 -0
  100. package/dist/components/atoms/typography/SmallTitle.css +53 -0
  101. package/dist/components/atoms/typography/SmallTitle.d.ts +9 -0
  102. package/dist/components/atoms/typography/SmallTitle.js +7 -0
  103. package/dist/components/atoms/typography/Subtitle.css +40 -0
  104. package/dist/components/atoms/typography/Subtitle.d.ts +9 -0
  105. package/dist/components/atoms/typography/Subtitle.js +7 -0
  106. package/dist/components/atoms/typography/TinyInfo.css +56 -0
  107. package/dist/components/atoms/typography/TinyInfo.d.ts +12 -0
  108. package/dist/components/atoms/typography/TinyInfo.js +15 -0
  109. package/dist/components/atoms/typography/index.d.ts +10 -0
  110. package/dist/components/atoms/typography/index.js +5 -0
  111. package/dist/components/atoms/uiVariables/BorderRadius.d.ts +6 -0
  112. package/dist/components/atoms/uiVariables/BorderRadius.js +12 -0
  113. package/dist/components/atoms/uiVariables/BorderRadiusExample.css +31 -0
  114. package/dist/components/atoms/uiVariables/Shadows.d.ts +6 -0
  115. package/dist/components/atoms/uiVariables/Shadows.js +11 -0
  116. package/dist/components/atoms/uiVariables/ShadowsExample.css +27 -0
  117. package/dist/components/atoms/uiVariables/Strokes.d.ts +6 -0
  118. package/dist/components/atoms/uiVariables/Strokes.js +10 -0
  119. package/dist/components/atoms/uiVariables/StrokesExample.css +22 -0
  120. package/dist/components/atoms/uiVariables/index.d.ts +3 -0
  121. package/dist/components/atoms/uiVariables/index.js +3 -0
  122. package/dist/components/molecules/appointmentSlot/AppointmentSlot.css +366 -0
  123. package/dist/components/molecules/appointmentSlot/AppointmentSlot.d.ts +25 -0
  124. package/dist/components/molecules/appointmentSlot/AppointmentSlot.js +109 -0
  125. package/dist/components/molecules/appointmentSlot/index.d.ts +2 -0
  126. package/dist/components/molecules/appointmentSlot/index.js +1 -0
  127. package/dist/components/molecules/breadcrumb/Breadcrumb.css +32 -0
  128. package/dist/components/molecules/breadcrumb/Breadcrumb.d.ts +12 -0
  129. package/dist/components/molecules/breadcrumb/Breadcrumb.js +12 -0
  130. package/dist/components/molecules/breadcrumb/index.d.ts +2 -0
  131. package/dist/components/molecules/breadcrumb/index.js +1 -0
  132. package/dist/components/molecules/caseCard/CaseCard.css +119 -0
  133. package/dist/components/molecules/caseCard/CaseCard.d.ts +14 -0
  134. package/dist/components/molecules/caseCard/CaseCard.js +20 -0
  135. package/dist/components/molecules/caseCard/index.d.ts +2 -0
  136. package/dist/components/molecules/caseCard/index.js +1 -0
  137. package/dist/components/molecules/checkboxForm/CheckboxForm.css +60 -0
  138. package/dist/components/molecules/checkboxForm/CheckboxForm.d.ts +15 -0
  139. package/dist/components/molecules/checkboxForm/CheckboxForm.js +28 -0
  140. package/dist/components/molecules/checkboxForm/index.d.ts +2 -0
  141. package/dist/components/molecules/checkboxForm/index.js +1 -0
  142. package/dist/components/molecules/contactCard/ContactCard.css +386 -0
  143. package/dist/components/molecules/contactCard/ContactCard.d.ts +17 -0
  144. package/dist/components/molecules/contactCard/ContactCard.js +80 -0
  145. package/dist/components/molecules/contactCard/index.d.ts +2 -0
  146. package/dist/components/molecules/contactCard/index.js +1 -0
  147. package/dist/components/molecules/documentCard/DocumentCard.css +130 -0
  148. package/dist/components/molecules/documentCard/DocumentCard.d.ts +14 -0
  149. package/dist/components/molecules/documentCard/DocumentCard.js +59 -0
  150. package/dist/components/molecules/documentCard/index.d.ts +2 -0
  151. package/dist/components/molecules/documentCard/index.js +1 -0
  152. package/dist/components/molecules/employeeCard/EmployeeCard.css +187 -0
  153. package/dist/components/molecules/employeeCard/EmployeeCard.d.ts +15 -0
  154. package/dist/components/molecules/employeeCard/EmployeeCard.js +34 -0
  155. package/dist/components/molecules/employeeCard/index.d.ts +2 -0
  156. package/dist/components/molecules/employeeCard/index.js +1 -0
  157. package/dist/components/molecules/proCard/ProCard.css +117 -0
  158. package/dist/components/molecules/proCard/ProCard.d.ts +13 -0
  159. package/dist/components/molecules/proCard/ProCard.js +25 -0
  160. package/dist/components/molecules/proCard/index.d.ts +2 -0
  161. package/dist/components/molecules/proCard/index.js +1 -0
  162. package/dist/components/molecules/stepper/Stepper.css +80 -0
  163. package/dist/components/molecules/stepper/Stepper.d.ts +27 -0
  164. package/dist/components/molecules/stepper/Stepper.js +68 -0
  165. package/dist/components/molecules/stepper/index.d.ts +2 -0
  166. package/dist/components/molecules/stepper/index.js +1 -0
  167. package/dist/index.d.ts +40 -2
  168. package/dist/index.js +59 -2
  169. package/dist/stories/assets/accessibility.png +0 -0
  170. package/dist/stories/assets/addon-library.png +0 -0
  171. package/dist/stories/assets/assets.png +0 -0
  172. package/dist/stories/assets/context.png +0 -0
  173. package/dist/stories/assets/docs.png +0 -0
  174. package/dist/stories/assets/figma-plugin.png +0 -0
  175. package/dist/stories/assets/share.png +0 -0
  176. package/dist/stories/assets/styling.png +0 -0
  177. package/dist/stories/assets/testing.png +0 -0
  178. package/dist/stories/assets/theming.png +0 -0
  179. package/dist/styles/colors.css +2 -0
  180. package/dist/styles/global.css +25 -0
  181. package/dist/styles/icons.css +32 -0
  182. package/dist/styles/ui-variables/border-radius.css +6 -0
  183. package/dist/styles/ui-variables/shadows.css +5 -0
  184. package/dist/styles/ui-variables/stroke.css +4 -0
  185. package/dist/utils/regex.d.ts +5 -0
  186. package/dist/utils/regex.js +7 -0
  187. package/package.json +37 -16
  188. package/dist/buttons/ButtonPrimary.d.ts +0 -10
  189. package/dist/buttons/ButtonPrimary.js +0 -10
  190. package/dist/components/atoms/buttons/ButtonPrimary.css +0 -52
  191. package/dist/components/atoms/buttons/ButtonPrimary.d.ts +0 -11
  192. package/dist/components/atoms/buttons/ButtonPrimary.js +0 -11
  193. package/dist/components/buttons/ButtonPrimary.d.ts +0 -11
  194. package/dist/components/buttons/ButtonPrimary.js +0 -11
  195. package/dist/components/tags/AppointementStatusTag.css +0 -58
  196. package/dist/components/tags/AppointementStatusTag.d.ts +0 -8
  197. package/dist/components/tags/AppointementStatusTag.js +0 -41
  198. package/dist/stories/button.css +0 -30
  199. package/dist/stories/header.css +0 -32
  200. package/dist/stories/page.css +0 -69
  201. package/dist/tags/AppointementStatusTag.d.ts +0 -8
  202. package/dist/tags/AppointementStatusTag.js +0 -41
@@ -0,0 +1,366 @@
1
+ @import "../../../styles/colors.css";
2
+
3
+ /* Base styles */
4
+ .appointment-slot {
5
+ display: flex;
6
+ width: 329px;
7
+ padding: 16px;
8
+ flex-direction: column;
9
+ justify-content: center;
10
+ align-items: flex-start;
11
+ gap: 16px;
12
+ border-radius: 16px;
13
+ background: var(--Primary-Blanc, #fff);
14
+ box-shadow: 0px 1px 9px 0px rgba(15, 133, 168, 0.08);
15
+ cursor: pointer;
16
+ transition:
17
+ background-color 0.05s ease,
18
+ transform 0.2s ease;
19
+ user-select: none;
20
+ }
21
+
22
+ .appointment-slot:hover {
23
+ transform: scale(1.008);
24
+ }
25
+
26
+ .appointment-slot.active {
27
+ background: var(--active-grey, #e9eef5);
28
+ }
29
+
30
+ /* Status-specific styles */
31
+ .appointment-slot.confirmed,
32
+ .appointment-slot.available,
33
+ .appointment-slot.unavailable,
34
+ .appointment-slot.passed {
35
+ border: 1px solid var(--venom-grey, #e6edf5);
36
+ }
37
+
38
+ .appointment-slot.pending {
39
+ border: 1px solid rgba(225, 81, 81, 0.54);
40
+ }
41
+
42
+ /* Header styles */
43
+ .appointment-header {
44
+ display: flex;
45
+ justify-content: space-between;
46
+ align-items: center;
47
+ align-self: stretch;
48
+ width: 100%;
49
+ }
50
+
51
+ .appointment-time {
52
+ color: var(--Primary-Mid-black, var(--primary-black, #171e25));
53
+ text-align: center;
54
+ font-family: Inter, sans-serif;
55
+ font-size: 20px;
56
+ font-style: normal;
57
+ font-weight: 700;
58
+ line-height: normal;
59
+ letter-spacing: 0.2px;
60
+ }
61
+
62
+ .appointment-slot.available .appointment-time,
63
+ .appointment-slot.unavailable .appointment-time,
64
+ .appointment-slot.passed .appointment-time {
65
+ color: var(--Tags-Mid-grey, var(--light-grey, #728ea7));
66
+ }
67
+
68
+ /* Footer styles */
69
+ .appointment-footer {
70
+ display: flex;
71
+ padding-top: 10px;
72
+ justify-content: space-between;
73
+ align-items: flex-end;
74
+ align-self: stretch;
75
+ border-top: 1px solid var(--venom-grey, #e6edf5);
76
+ }
77
+
78
+ .footer-left {
79
+ display: flex;
80
+ flex-direction: column;
81
+ justify-content: center;
82
+ align-items: flex-start;
83
+ gap: 8px;
84
+ align-self: stretch;
85
+ }
86
+
87
+ .client-name {
88
+ color: var(--Tags-Mid-grey, var(--light-grey, #728ea7));
89
+ font-family: "Open Sans", sans-serif;
90
+ font-size: 12px;
91
+ font-style: normal;
92
+ font-weight: 500;
93
+ line-height: normal;
94
+ letter-spacing: 0.36px;
95
+ }
96
+
97
+ .appointment-content {
98
+ color: var(--Primary-Dark-grey, var(--dark-grey, #456073));
99
+ font-family: "Open Sans", sans-serif;
100
+ font-size: 16px;
101
+ font-style: normal;
102
+ font-weight: 500;
103
+ line-height: normal;
104
+ }
105
+
106
+ /* Tags styles */
107
+ .tags-container {
108
+ display: flex;
109
+ align-items: flex-start;
110
+ gap: 8px;
111
+ align-self: stretch;
112
+ }
113
+
114
+ /* Document actions styles */
115
+ .document-actions {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 8px;
119
+ }
120
+
121
+ .document-count,
122
+ .note-count {
123
+ color: var(--Primary-Mid-black, var(--primary-black, #171e25));
124
+ font-family: Inter, sans-serif;
125
+ font-size: 14px;
126
+ font-style: normal;
127
+ font-weight: 600;
128
+ line-height: normal;
129
+ }
130
+
131
+ /* Action button styles */
132
+ .action-button-container {
133
+ position: relative;
134
+ z-index: 1;
135
+ }
136
+
137
+ /* Pending status styles */
138
+ .appointment-slot.pending .action-button-container,
139
+ .appointment-slot.pending .document-actions,
140
+ .appointment-slot.pending button {
141
+ pointer-events: auto;
142
+ }
143
+
144
+ .appointment-slot.pending {
145
+ pointer-events: none;
146
+ }
147
+
148
+ .appointment-slot.pending
149
+ > *:not(.action-button-container):not(.document-actions):not(button) {
150
+ pointer-events: auto;
151
+ }
152
+
153
+ /* Available and unavailable status styles */
154
+ .appointment-slot.available,
155
+ .appointment-slot.unavailable {
156
+ justify-content: flex-start;
157
+ }
158
+
159
+ .appointment-slot.available .footer-left,
160
+ .appointment-slot.unavailable .footer-left {
161
+ display: none;
162
+ }
163
+
164
+ .appointment-slot.available .appointment-footer,
165
+ .appointment-slot.unavailable .appointment-footer {
166
+ border-top: none;
167
+ padding-top: 0;
168
+ }
169
+
170
+ /* Available status specific styles */
171
+ .appointment-slot.available {
172
+ gap: 11px;
173
+ }
174
+
175
+ .appointment-slot.available .appointment-footer {
176
+ display: flex;
177
+ justify-content: flex-end;
178
+ align-items: center;
179
+ align-self: stretch;
180
+ }
181
+
182
+ .appointment-slot.available .action-button-container {
183
+ display: flex;
184
+ padding: 4px 6px;
185
+ border-radius: 8px;
186
+ justify-content: center;
187
+ align-items: center;
188
+ gap: 4px;
189
+ }
190
+
191
+ .appointment-slot.available .action-button-container:hover {
192
+ background-color: var(--Primary-Light-grey, #f4f7fb);
193
+ }
194
+
195
+ .appointment-slot.available .icon-close-container {
196
+ display: flex;
197
+ width: 16px;
198
+ height: 16px;
199
+ padding: 3px;
200
+ justify-content: center;
201
+ align-items: center;
202
+ font-size: 9px;
203
+ color: var(--Primary-Dark-grey, var(--dark-grey, #456073));
204
+ }
205
+
206
+ .appointment-slot.available .icon-close {
207
+ width: 9px;
208
+ height: 9px;
209
+ flex-shrink: 0;
210
+ }
211
+
212
+ .appointment-slot.available .make-unavailable-text {
213
+ color: var(--Primary-Dark-grey, var(--dark-grey, #456073));
214
+ font-family: "Open Sans", sans-serif;
215
+ font-size: 14px;
216
+ font-style: normal;
217
+ font-weight: 400;
218
+ line-height: normal;
219
+ }
220
+
221
+ .available-icon-close {
222
+ font-size: 8px;
223
+ color: var(--Primary-Dark-grey, var(--dark-grey, #456073));
224
+ }
225
+
226
+ /* Passed status styles */
227
+ .appointment-slot.passed .document-actions {
228
+ display: flex;
229
+ align-items: center;
230
+ gap: 8px;
231
+ }
232
+
233
+ .appointment-slot.passed .document-count,
234
+ .appointment-slot.passed .note-count {
235
+ display: flex;
236
+ align-items: center;
237
+ gap: 4px;
238
+ }
239
+
240
+ .appointment-slot.passed .document-count-icon,
241
+ .appointment-slot.passed .note-count-icon {
242
+ width: 16px;
243
+ height: 16px;
244
+ }
245
+
246
+ .appointment-slot.passed .document-count-number,
247
+ .appointment-slot.passed .note-count-number {
248
+ color: var(--Primary-Mid-black, #171e25);
249
+ font-family: Inter, sans-serif;
250
+ font-size: 14px;
251
+ font-weight: 600;
252
+ line-height: normal;
253
+ }
254
+
255
+ /* Summary status styles */
256
+ .appointment-slot-summary {
257
+ width: 463px;
258
+ /* height: 182px; */
259
+ display: flex;
260
+ padding: 16px;
261
+ flex-direction: column;
262
+ justify-content: center;
263
+ align-items: flex-start;
264
+ gap: 12px;
265
+ border-radius: 16px;
266
+ background: var(--Primary-Blanc, #fff);
267
+ box-shadow: 0px 1px 9px 0px rgba(15, 133, 168, 0.08);
268
+ }
269
+
270
+ .appointment-slot-summary .appointment-header {
271
+ display: flex;
272
+ justify-content: space-between;
273
+ align-items: flex-start;
274
+ align-self: stretch;
275
+ }
276
+
277
+ .appointment-slot-summary .appointment-content-container {
278
+ display: flex;
279
+ flex-direction: column;
280
+ justify-content: center;
281
+ align-items: flex-start;
282
+ gap: 10px;
283
+ }
284
+
285
+ .appointment-slot-summary .appointment-footer {
286
+ padding-top: 11px;
287
+ }
288
+
289
+ .appointment-slot-summary .date-time-container {
290
+ display: flex;
291
+ flex-direction: column;
292
+ justify-content: center;
293
+ align-items: flex-start;
294
+ gap: 3px;
295
+ }
296
+
297
+ .appointment-slot-summary .summary-date {
298
+ color: var(--Primary-Dark-grey, var(--dark-grey, #456073));
299
+ text-align: center;
300
+ font-family: Inter, sans-serif;
301
+ font-size: 20px;
302
+ font-style: normal;
303
+ font-weight: 700;
304
+ line-height: 0.8;
305
+ }
306
+
307
+ .appointment-slot-summary .summary-time {
308
+ color: var(--Primary-Dark-grey, var(--dark-grey, #456073));
309
+ font-family: Inter, sans-serif;
310
+ font-size: 20px;
311
+ font-style: normal;
312
+ font-weight: 700;
313
+ line-height: normal;
314
+ letter-spacing: 0.2px;
315
+ }
316
+
317
+ .appointment-slot-summary .icon-container {
318
+ display: flex;
319
+ width: 40px;
320
+ height: 40px;
321
+ padding: 910px 11px 11px 10px;
322
+ justify-content: center;
323
+ align-items: center;
324
+ }
325
+
326
+ .appointment-slot-summary .appointment-content {
327
+ color: var(--Primary-Dark-grey, var(--dark-grey, #456073));
328
+ font-family: "Open Sans";
329
+ font-size: 16px;
330
+ font-style: normal;
331
+ font-weight: 400;
332
+ line-height: 1;
333
+ }
334
+
335
+ .appointment-slot-summary .client-name {
336
+ color: var(--Tags-Mid-grey, var(--light-grey, #728ea7));
337
+ font-family: "Open Sans", sans-serif;
338
+ font-size: 12px;
339
+ font-style: normal;
340
+ font-weight: 400;
341
+ line-height: normal;
342
+ letter-spacing: 0.36px;
343
+ }
344
+
345
+ .appointment-slot-summary .tags-container {
346
+ display: flex;
347
+ align-items: flex-start;
348
+ gap: 8px;
349
+ align-self: stretch;
350
+ padding-top: 3px;
351
+ }
352
+
353
+ .appointment-slot-summary .document-actions-container {
354
+ display: flex;
355
+ flex-direction: column;
356
+ justify-content: center;
357
+ align-items: flex-end;
358
+ gap: 8px;
359
+ }
360
+ .appointment-slot-summary .document-actions {
361
+ display: flex;
362
+ flex-direction: row;
363
+ justify-content: center;
364
+ align-items: center;
365
+ gap: 8px;
366
+ }
@@ -0,0 +1,25 @@
1
+ import React from "react";
2
+ import "./AppointmentSlot.css";
3
+ type AppointmentStatus = "pending" | "available" | "cancelled" | "passed" | "refused" | "confirmed" | "unavailable" | "summary";
4
+ export interface AppointmentSlotProps {
5
+ status: AppointmentStatus;
6
+ startTime: string;
7
+ endTime: string;
8
+ date?: string;
9
+ clientName?: string;
10
+ appointmentContent?: string;
11
+ tags?: string[];
12
+ noteCount?: string;
13
+ documentCount?: string;
14
+ actions?: {
15
+ onApprove?: () => void;
16
+ onReject?: () => void;
17
+ onMakeUnavailable?: () => void;
18
+ onEdit?: () => void;
19
+ onViewDocument?: () => void;
20
+ };
21
+ isEditable?: boolean;
22
+ appointmentDetails?: string;
23
+ }
24
+ declare const AppointmentSlot: React.FC<AppointmentSlotProps>;
25
+ export default AppointmentSlot;
@@ -0,0 +1,109 @@
1
+ import React, { useState, useCallback } from "react";
2
+ import "./AppointmentSlot.css";
3
+ import AppointementStatusTag from "../../atoms/tags/AppointementStatusTag";
4
+ import OtherStatusTag from "../../atoms/tags/OtherStatusTag";
5
+ import ActionCircleButton from "../../atoms/buttons/ActionCircleButton";
6
+ import IconButton from "../../atoms/buttons/IconButton";
7
+ var AppointmentSlot = function (_a) {
8
+ var status = _a.status, startTime = _a.startTime, endTime = _a.endTime, date = _a.date, clientName = _a.clientName, appointmentContent = _a.appointmentContent, tags = _a.tags, noteCount = _a.noteCount, documentCount = _a.documentCount, actions = _a.actions;
9
+ var _b = useState(false), isActive = _b[0], setIsActive = _b[1];
10
+ // Handlers
11
+ var handleApprove = useCallback(function () {
12
+ var _a;
13
+ console.log("Approved!");
14
+ (_a = actions === null || actions === void 0 ? void 0 : actions.onApprove) === null || _a === void 0 ? void 0 : _a.call(actions);
15
+ }, [actions]);
16
+ var handleReject = useCallback(function () {
17
+ var _a;
18
+ console.log("Refused!");
19
+ (_a = actions === null || actions === void 0 ? void 0 : actions.onReject) === null || _a === void 0 ? void 0 : _a.call(actions);
20
+ }, [actions]);
21
+ var handleMouseDown = function (e) {
22
+ if (!isClickableElement(e.target)) {
23
+ setIsActive(true);
24
+ }
25
+ };
26
+ var handleMouseUp = function () {
27
+ setIsActive(false);
28
+ };
29
+ var handleClick = function (e) {
30
+ if (!isClickableElement(e.target)) {
31
+ console.log("card clicked");
32
+ }
33
+ };
34
+ // Helper function
35
+ var isClickableElement = function (element) {
36
+ return (element.closest(".action-button-container, .document-actions, button") !==
37
+ null);
38
+ };
39
+ // Render functions
40
+ var renderHeader = function () { return (React.createElement("div", { className: "appointment-header" },
41
+ React.createElement("span", { className: "appointment-time" }, "".concat(startTime, " - ").concat(endTime)),
42
+ status !== "summary" && (React.createElement(AppointementStatusTag, { status: status })))); };
43
+ var renderFooter = function () {
44
+ if (status === "available") {
45
+ return renderAvailableFooter();
46
+ }
47
+ if (status === "summary") {
48
+ return null;
49
+ }
50
+ if (status !== "unavailable") {
51
+ return renderDefaultFooter();
52
+ }
53
+ return null;
54
+ };
55
+ var renderAvailableFooter = function () { return (React.createElement("div", { className: "appointment-footer" },
56
+ React.createElement("div", { className: "action-button-container", onClick: actions === null || actions === void 0 ? void 0 : actions.onMakeUnavailable },
57
+ React.createElement("div", { className: "icon-close-container" },
58
+ React.createElement("i", { className: "allaw-icon-close" })),
59
+ React.createElement("span", { className: "make-unavailable-text" }, "Rendre indisponible")))); };
60
+ var renderDefaultFooter = function () { return (React.createElement("div", { className: "appointment-footer" },
61
+ React.createElement("div", { className: "footer-left" },
62
+ clientName && React.createElement("div", { className: "client-name" }, clientName),
63
+ appointmentContent && (React.createElement("div", { className: "appointment-content" }, appointmentContent)),
64
+ renderTags()),
65
+ renderActionButtons())); };
66
+ var renderTags = function () {
67
+ return tags && (React.createElement("div", { className: "tags-container" }, tags.map(function (tag, index) { return (React.createElement(OtherStatusTag, { key: index, label: tag })); })));
68
+ };
69
+ var renderActionButtons = function () {
70
+ switch (status) {
71
+ case "pending":
72
+ return (React.createElement("div", { className: "action-button-container" },
73
+ React.createElement(ActionCircleButton, { status: "dual", onApprove: handleApprove, onReject: handleReject })));
74
+ case "confirmed":
75
+ return (React.createElement("div", { className: "document-actions" },
76
+ React.createElement(IconButton, { style: "smallFilled", iconName: "allaw-icon-document", onClick: actions === null || actions === void 0 ? void 0 : actions.onViewDocument }),
77
+ documentCount && (React.createElement("span", { className: "document-count" }, documentCount))));
78
+ case "passed":
79
+ return (React.createElement("div", { className: "document-actions" },
80
+ React.createElement(IconButton, { style: "smallFilled", iconName: "allaw-icon-edit-2", onClick: actions === null || actions === void 0 ? void 0 : actions.onEdit }),
81
+ noteCount && React.createElement("span", { className: "note-count" }, noteCount),
82
+ React.createElement(IconButton, { style: "smallFilled", iconName: "allaw-icon-document", onClick: actions === null || actions === void 0 ? void 0 : actions.onViewDocument }),
83
+ documentCount && (React.createElement("span", { className: "document-count" }, documentCount))));
84
+ default:
85
+ return null;
86
+ }
87
+ };
88
+ if (status === "summary") {
89
+ return (React.createElement("div", { className: "appointment-slot-summary" },
90
+ React.createElement("div", { className: "appointment-header" },
91
+ React.createElement("div", { className: "date-time-container" },
92
+ React.createElement("span", { className: "summary-date" }, date),
93
+ React.createElement("span", { className: "summary-time" }, "".concat(startTime, " - ").concat(endTime))),
94
+ React.createElement(IconButton, { style: "largeFilled", iconName: "allaw-icon-edit-2", onClick: actions === null || actions === void 0 ? void 0 : actions.onEdit })),
95
+ React.createElement("div", { className: "appointment-footer" },
96
+ React.createElement("div", { className: "appointment-content-container" },
97
+ React.createElement("div", { className: "client-name" }, clientName),
98
+ React.createElement("div", { className: "appointment-content" }, appointmentContent),
99
+ renderTags()),
100
+ React.createElement("div", { className: "document-actions-container" },
101
+ React.createElement("div", { className: "document-actions" },
102
+ React.createElement(IconButton, { style: "smallFilled", iconName: "allaw-icon-document", onClick: actions === null || actions === void 0 ? void 0 : actions.onViewDocument }),
103
+ documentCount && (React.createElement("span", { className: "document-count" }, documentCount)))))));
104
+ }
105
+ return (React.createElement("div", { className: "appointment-slot ".concat(status, " ").concat(isActive ? "active" : ""), onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, onMouseLeave: handleMouseUp, onClick: handleClick },
106
+ renderHeader(),
107
+ renderFooter()));
108
+ };
109
+ export default AppointmentSlot;
@@ -0,0 +1,2 @@
1
+ export { default as AppointmentSlot } from "./AppointmentSlot";
2
+ export type { AppointmentSlotProps } from "./AppointmentSlot";
@@ -0,0 +1 @@
1
+ export { default as AppointmentSlot } from "./AppointmentSlot";
@@ -0,0 +1,32 @@
1
+ .breadcrumb {
2
+ font-family: "Open Sans", sans-serif;
3
+ line-height: 1;
4
+ }
5
+
6
+ .breadcrumb-link {
7
+ text-decoration: none;
8
+ vertical-align: middle;
9
+ display: inline-block;
10
+ }
11
+
12
+ .breadcrumb-separator {
13
+ color: var(--mid-grey);
14
+ font-size: 12px;
15
+ margin: 0 0.625rem;
16
+ vertical-align: middle;
17
+ display: inline-block;
18
+ }
19
+
20
+ .breadcrumb-separator i {
21
+ vertical-align: middle;
22
+ line-height: 1;
23
+ }
24
+
25
+ .breadcrumb-link:last-child {
26
+ pointer-events: none;
27
+ }
28
+
29
+ .breadcrumb-link .tiny-info {
30
+ vertical-align: middle;
31
+ display: inline-block;
32
+ }
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import "./Breadcrumb.css";
3
+ export interface BreadcrumbItem {
4
+ key: number;
5
+ label: string;
6
+ link: string;
7
+ }
8
+ export interface BreadcrumbProps {
9
+ items: BreadcrumbItem[];
10
+ }
11
+ declare const Breadcrumb: React.FC<BreadcrumbProps>;
12
+ export default Breadcrumb;
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import "./Breadcrumb.css";
3
+ import TinyInfo from "../../atoms/typography/TinyInfo";
4
+ var Breadcrumb = function (_a) {
5
+ var items = _a.items;
6
+ return (React.createElement("nav", { className: "breadcrumb" }, items.map(function (item, index) { return (React.createElement(React.Fragment, { key: item.key },
7
+ index > 0 && (React.createElement("span", { className: "breadcrumb-separator" },
8
+ React.createElement("i", { className: "allaw-icon-chevron-right" }))),
9
+ React.createElement("a", { href: item.link, className: "breadcrumb-link" },
10
+ React.createElement(TinyInfo, { variant: "medium14", color: index === items.length - 1 ? "dark-grey" : "mid-grey", text: item.label })))); })));
11
+ };
12
+ export default Breadcrumb;
@@ -0,0 +1,2 @@
1
+ export { default as Breadcrumb } from "./Breadcrumb";
2
+ export type { BreadcrumbProps } from "./Breadcrumb";
@@ -0,0 +1 @@
1
+ export { default as Breadcrumb } from "./Breadcrumb";
@@ -0,0 +1,119 @@
1
+ @import "../../../styles/colors.css";
2
+
3
+ .case-card-wrapper {
4
+ display: flex;
5
+ width: 562px;
6
+ height: 116px;
7
+ padding: 12px 16px 16px 15px;
8
+ justify-content: space-between;
9
+ align-items: flex-start;
10
+ flex-shrink: 0;
11
+ border-radius: 8px;
12
+ border: 1px solid var(--venom-grey, #e6edf5);
13
+ background: var(--Primary-Blanc, #fff);
14
+ box-shadow: 0px 1px 9px 0px rgba(15, 133, 168, 0.08);
15
+ }
16
+
17
+ .case-card-wrapper.case-card-mobile,
18
+ .case-card-wrapper.case-card-archived {
19
+ height: 108px;
20
+ }
21
+
22
+ .case-card-content {
23
+ display: flex;
24
+ flex-direction: column;
25
+ justify-content: space-between;
26
+ align-items: flex-start;
27
+ align-self: stretch;
28
+ }
29
+
30
+ .case-card-header {
31
+ display: flex;
32
+ flex-direction: column;
33
+ align-items: flex-start;
34
+ gap: 4px;
35
+ }
36
+
37
+ .case-card-client-name {
38
+ color: var(--Tags-Mid-grey, var(--light-grey, #728ea7));
39
+ font-family: "Open Sans", sans-serif;
40
+ font-size: 12px;
41
+ font-weight: 400;
42
+ line-height: 15px;
43
+ letter-spacing: 0.3px;
44
+ }
45
+
46
+ .case-card-title,
47
+ .case-card-title-extended {
48
+ display: -webkit-box;
49
+ -webkit-box-orient: vertical;
50
+ align-self: stretch;
51
+ overflow: hidden;
52
+ color: var(--Primary-Mid-black, var(--primary-black, #171e25));
53
+ text-overflow: ellipsis;
54
+ font-family: Poppins, sans-serif;
55
+ font-size: 18px;
56
+ font-weight: 600;
57
+ line-height: 19px;
58
+ letter-spacing: 0.1px;
59
+ }
60
+
61
+ .case-card-next-appointment {
62
+ display: flex;
63
+ flex-direction: column;
64
+ align-items: flex-end;
65
+ gap: 8px;
66
+ align-self: stretch;
67
+ line-height: 0px;
68
+ }
69
+
70
+ .case-card-mobile .case-card-next-appointment {
71
+ gap: 1px;
72
+ }
73
+
74
+ .case-card-next-appointment-label {
75
+ color: var(--Primary-Mid-black, var(--primary-black, #171e25));
76
+ font-family: "Open Sans", sans-serif;
77
+ font-size: 12px;
78
+ font-weight: 400;
79
+ line-height: normal;
80
+ letter-spacing: 0.12px;
81
+ }
82
+
83
+ .case-card-next-appointment-date {
84
+ color: var(--Primary-Mid-black, var(--primary-black, #171e25));
85
+ font-family: Inter, sans-serif;
86
+ font-size: 20px;
87
+ font-weight: 700;
88
+ line-height: 9px;
89
+ }
90
+
91
+ .case-card-next-appointment-time {
92
+ color: var(--Primary-Mid-black, var(--primary-black, #171e25));
93
+ font-family: Inter, sans-serif;
94
+ font-size: 14px;
95
+ font-weight: 700;
96
+ line-height: 16px;
97
+ }
98
+
99
+ .case-card-next-appointment-date-only {
100
+ color: var(--Primary-Dark-grey, var(--dark-grey, #456073));
101
+ font-family: Inter, sans-serif;
102
+ font-size: 14px;
103
+ font-weight: 600;
104
+ line-height: normal;
105
+ }
106
+
107
+ .case-card-categories {
108
+ display: flex;
109
+ gap: 8px;
110
+ margin-top: 8px;
111
+ }
112
+
113
+ .case-card-mobile .case-card-next-appointment-label {
114
+ color: var(--Primary-Dark-grey, var(--dark-grey, #456073));
115
+ }
116
+
117
+ .case-card-archived .case-card-next-appointment {
118
+ display: none;
119
+ }