gorombo-payload-appointments 1.0.0

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 (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +308 -0
  3. package/dist/collections/Appointments.d.ts +2 -0
  4. package/dist/collections/Appointments.js +165 -0
  5. package/dist/collections/Appointments.js.map +1 -0
  6. package/dist/collections/GuestCustomers.d.ts +2 -0
  7. package/dist/collections/GuestCustomers.js +106 -0
  8. package/dist/collections/GuestCustomers.js.map +1 -0
  9. package/dist/collections/Services.d.ts +2 -0
  10. package/dist/collections/Services.js +147 -0
  11. package/dist/collections/Services.js.map +1 -0
  12. package/dist/collections/TeamMembers.d.ts +2 -0
  13. package/dist/collections/TeamMembers.js +184 -0
  14. package/dist/collections/TeamMembers.js.map +1 -0
  15. package/dist/components/BeforeDashboardClient.d.ts +2 -0
  16. package/dist/components/BeforeDashboardClient.js +162 -0
  17. package/dist/components/BeforeDashboardClient.js.map +1 -0
  18. package/dist/components/BeforeDashboardServer.d.ts +2 -0
  19. package/dist/components/BeforeDashboardServer.js +22 -0
  20. package/dist/components/BeforeDashboardServer.js.map +1 -0
  21. package/dist/components/BeforeDashboardServer.module.css +5 -0
  22. package/dist/components/calendar/Calendar.module.css +506 -0
  23. package/dist/components/calendar/CalendarContainer.d.ts +3 -0
  24. package/dist/components/calendar/CalendarContainer.js +246 -0
  25. package/dist/components/calendar/CalendarContainer.js.map +1 -0
  26. package/dist/components/calendar/DayView.d.ts +3 -0
  27. package/dist/components/calendar/DayView.js +192 -0
  28. package/dist/components/calendar/DayView.js.map +1 -0
  29. package/dist/components/calendar/EventPopover.d.ts +3 -0
  30. package/dist/components/calendar/EventPopover.js +257 -0
  31. package/dist/components/calendar/EventPopover.js.map +1 -0
  32. package/dist/components/calendar/EventRenderer.d.ts +3 -0
  33. package/dist/components/calendar/EventRenderer.js +76 -0
  34. package/dist/components/calendar/EventRenderer.js.map +1 -0
  35. package/dist/components/calendar/WeekView.d.ts +3 -0
  36. package/dist/components/calendar/WeekView.js +203 -0
  37. package/dist/components/calendar/WeekView.js.map +1 -0
  38. package/dist/components/calendar/index.d.ts +6 -0
  39. package/dist/components/calendar/index.js +7 -0
  40. package/dist/components/calendar/index.js.map +1 -0
  41. package/dist/components/calendar/types.d.ts +69 -0
  42. package/dist/components/calendar/types.js +3 -0
  43. package/dist/components/calendar/types.js.map +1 -0
  44. package/dist/endpoints/customEndpointHandler.d.ts +2 -0
  45. package/dist/endpoints/customEndpointHandler.js +7 -0
  46. package/dist/endpoints/customEndpointHandler.js.map +1 -0
  47. package/dist/endpoints/getAvailableSlots.d.ts +12 -0
  48. package/dist/endpoints/getAvailableSlots.js +291 -0
  49. package/dist/endpoints/getAvailableSlots.js.map +1 -0
  50. package/dist/exports/client.d.ts +3 -0
  51. package/dist/exports/client.js +4 -0
  52. package/dist/exports/client.js.map +1 -0
  53. package/dist/exports/rsc.d.ts +1 -0
  54. package/dist/exports/rsc.js +3 -0
  55. package/dist/exports/rsc.js.map +1 -0
  56. package/dist/globals/OpeningTimes.d.ts +2 -0
  57. package/dist/globals/OpeningTimes.js +196 -0
  58. package/dist/globals/OpeningTimes.js.map +1 -0
  59. package/dist/hooks/addAdminTitle.d.ts +7 -0
  60. package/dist/hooks/addAdminTitle.js +86 -0
  61. package/dist/hooks/addAdminTitle.js.map +1 -0
  62. package/dist/hooks/sendCustomerEmail.d.ts +6 -0
  63. package/dist/hooks/sendCustomerEmail.js +351 -0
  64. package/dist/hooks/sendCustomerEmail.js.map +1 -0
  65. package/dist/hooks/setEndDateTime.d.ts +6 -0
  66. package/dist/hooks/setEndDateTime.js +44 -0
  67. package/dist/hooks/setEndDateTime.js.map +1 -0
  68. package/dist/hooks/validateCustomerOrGuest.d.ts +6 -0
  69. package/dist/hooks/validateCustomerOrGuest.js +21 -0
  70. package/dist/hooks/validateCustomerOrGuest.js.map +1 -0
  71. package/dist/index.d.ts +23 -0
  72. package/dist/index.js +183 -0
  73. package/dist/index.js.map +1 -0
  74. package/package.json +135 -0
@@ -0,0 +1,506 @@
1
+ /* Calendar Container */
2
+ .calendarContainer {
3
+ display: flex;
4
+ flex-direction: column;
5
+ height: 100%;
6
+ min-height: 600px;
7
+ background: var(--theme-elevation-0);
8
+ border: 1px solid var(--theme-elevation-100);
9
+ border-radius: 8px;
10
+ overflow: hidden;
11
+ }
12
+
13
+ /* Header */
14
+ .calendarHeader {
15
+ display: flex;
16
+ align-items: center;
17
+ justify-content: space-between;
18
+ padding: 16px 20px;
19
+ background: var(--theme-elevation-50);
20
+ border-bottom: 1px solid var(--theme-elevation-100);
21
+ }
22
+
23
+ .calendarNav {
24
+ display: flex;
25
+ align-items: center;
26
+ gap: 12px;
27
+ }
28
+
29
+ .navButton {
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ width: 36px;
34
+ height: 36px;
35
+ background: var(--theme-elevation-0);
36
+ border: 1px solid var(--theme-elevation-150);
37
+ border-radius: 6px;
38
+ cursor: pointer;
39
+ color: var(--theme-elevation-800);
40
+ transition: all 0.15s ease;
41
+ }
42
+
43
+ .navButton:hover {
44
+ background: var(--theme-elevation-100);
45
+ border-color: var(--theme-elevation-200);
46
+ }
47
+
48
+ .dateTitle {
49
+ font-size: 18px;
50
+ font-weight: 600;
51
+ color: var(--theme-elevation-900);
52
+ min-width: 200px;
53
+ text-align: center;
54
+ }
55
+
56
+ .todayButton {
57
+ padding: 8px 16px;
58
+ background: var(--theme-success-500);
59
+ color: white;
60
+ border: none;
61
+ border-radius: 6px;
62
+ font-size: 14px;
63
+ font-weight: 500;
64
+ cursor: pointer;
65
+ transition: background 0.15s ease;
66
+ }
67
+
68
+ .todayButton:hover {
69
+ background: var(--theme-success-600);
70
+ }
71
+
72
+ .viewToggle {
73
+ display: flex;
74
+ gap: 4px;
75
+ padding: 4px;
76
+ background: var(--theme-elevation-100);
77
+ border-radius: 6px;
78
+ }
79
+
80
+ .viewButton {
81
+ padding: 6px 14px;
82
+ background: transparent;
83
+ border: none;
84
+ border-radius: 4px;
85
+ font-size: 14px;
86
+ color: var(--theme-elevation-600);
87
+ cursor: pointer;
88
+ transition: all 0.15s ease;
89
+ }
90
+
91
+ .viewButton.active {
92
+ background: var(--theme-elevation-0);
93
+ color: var(--theme-elevation-900);
94
+ font-weight: 500;
95
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
96
+ }
97
+
98
+ /* Week View Grid */
99
+ .weekGrid {
100
+ display: grid;
101
+ grid-template-columns: 60px repeat(7, 1fr);
102
+ flex: 1;
103
+ overflow-y: auto;
104
+ }
105
+
106
+ .dayGrid {
107
+ display: grid;
108
+ grid-template-columns: 60px 1fr;
109
+ flex: 1;
110
+ overflow-y: auto;
111
+ }
112
+
113
+ /* Day Headers */
114
+ .dayHeaders {
115
+ display: contents;
116
+ }
117
+
118
+ .timeGutter {
119
+ background: var(--theme-elevation-50);
120
+ border-right: 1px solid var(--theme-elevation-100);
121
+ border-bottom: 1px solid var(--theme-elevation-100);
122
+ position: sticky;
123
+ top: 0;
124
+ z-index: 3;
125
+ }
126
+
127
+ .dayHeader {
128
+ padding: 12px 8px;
129
+ text-align: center;
130
+ background: var(--theme-elevation-50);
131
+ border-bottom: 1px solid var(--theme-elevation-100);
132
+ border-right: 1px solid var(--theme-elevation-100);
133
+ position: sticky;
134
+ top: 0;
135
+ z-index: 2;
136
+ }
137
+
138
+ .dayHeader:last-child {
139
+ border-right: none;
140
+ }
141
+
142
+ .dayHeader.isToday {
143
+ background: var(--theme-success-50);
144
+ }
145
+
146
+ .dayName {
147
+ font-size: 12px;
148
+ font-weight: 500;
149
+ color: var(--theme-elevation-500);
150
+ text-transform: uppercase;
151
+ letter-spacing: 0.5px;
152
+ }
153
+
154
+ .dayNumber {
155
+ font-size: 20px;
156
+ font-weight: 600;
157
+ color: var(--theme-elevation-800);
158
+ margin-top: 4px;
159
+ }
160
+
161
+ .dayHeader.isToday .dayNumber {
162
+ display: inline-flex;
163
+ align-items: center;
164
+ justify-content: center;
165
+ width: 32px;
166
+ height: 32px;
167
+ background: var(--theme-success-500);
168
+ color: white;
169
+ border-radius: 50%;
170
+ }
171
+
172
+ /* Time Slots */
173
+ .timeColumn {
174
+ display: contents;
175
+ }
176
+
177
+ .timeSlot {
178
+ padding: 4px 8px;
179
+ font-size: 11px;
180
+ color: var(--theme-elevation-500);
181
+ text-align: right;
182
+ background: var(--theme-elevation-0);
183
+ border-right: 1px solid var(--theme-elevation-100);
184
+ border-bottom: 1px solid var(--theme-elevation-50);
185
+ height: 60px;
186
+ box-sizing: border-box;
187
+ }
188
+
189
+ /* Day Columns */
190
+ .dayColumn {
191
+ position: relative;
192
+ border-right: 1px solid var(--theme-elevation-100);
193
+ min-height: 60px;
194
+ }
195
+
196
+ .dayColumn:last-child {
197
+ border-right: none;
198
+ }
199
+
200
+ .hourSlot {
201
+ height: 60px;
202
+ border-bottom: 1px solid var(--theme-elevation-50);
203
+ cursor: pointer;
204
+ transition: background 0.1s ease;
205
+ }
206
+
207
+ .hourSlot:hover {
208
+ background: var(--theme-elevation-50);
209
+ }
210
+
211
+ .halfHourLine {
212
+ position: absolute;
213
+ left: 0;
214
+ right: 0;
215
+ border-top: 1px dashed var(--theme-elevation-100);
216
+ pointer-events: none;
217
+ }
218
+
219
+ /* Events */
220
+ .event {
221
+ position: absolute;
222
+ left: 2px;
223
+ right: 2px;
224
+ border-radius: 4px;
225
+ padding: 4px 8px;
226
+ overflow: hidden;
227
+ cursor: pointer;
228
+ font-size: 12px;
229
+ line-height: 1.3;
230
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
231
+ transition: transform 0.1s ease, box-shadow 0.1s ease;
232
+ z-index: 1;
233
+ }
234
+
235
+ .event:hover {
236
+ transform: translateX(2px);
237
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
238
+ z-index: 2;
239
+ }
240
+
241
+ .event.appointment {
242
+ border-left: 3px solid;
243
+ }
244
+
245
+ .event.blockout {
246
+ background: repeating-linear-gradient(
247
+ 45deg,
248
+ var(--theme-elevation-100),
249
+ var(--theme-elevation-100) 5px,
250
+ var(--theme-elevation-150) 5px,
251
+ var(--theme-elevation-150) 10px
252
+ );
253
+ color: var(--theme-elevation-600);
254
+ }
255
+
256
+ .eventTitle {
257
+ font-weight: 500;
258
+ white-space: nowrap;
259
+ overflow: hidden;
260
+ text-overflow: ellipsis;
261
+ }
262
+
263
+ .eventTime {
264
+ font-size: 11px;
265
+ opacity: 0.8;
266
+ margin-top: 2px;
267
+ }
268
+
269
+ .eventCustomer {
270
+ font-size: 11px;
271
+ opacity: 0.7;
272
+ margin-top: 2px;
273
+ white-space: nowrap;
274
+ overflow: hidden;
275
+ text-overflow: ellipsis;
276
+ }
277
+
278
+ /* Status indicators */
279
+ .event.scheduled {
280
+ opacity: 0.9;
281
+ }
282
+
283
+ .event.confirmed {
284
+ opacity: 1;
285
+ }
286
+
287
+ .event.completed {
288
+ opacity: 0.6;
289
+ }
290
+
291
+ .event.cancelled {
292
+ opacity: 0.4;
293
+ text-decoration: line-through;
294
+ }
295
+
296
+ .event.noShow {
297
+ opacity: 0.5;
298
+ border-style: dashed;
299
+ }
300
+
301
+ /* Popover */
302
+ .popover {
303
+ position: fixed;
304
+ z-index: 1000;
305
+ min-width: 280px;
306
+ max-width: 360px;
307
+ background: var(--theme-elevation-0);
308
+ border: 1px solid var(--theme-elevation-150);
309
+ border-radius: 8px;
310
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
311
+ overflow: hidden;
312
+ }
313
+
314
+ .popoverHeader {
315
+ display: flex;
316
+ align-items: flex-start;
317
+ justify-content: space-between;
318
+ padding: 16px;
319
+ background: var(--theme-elevation-50);
320
+ border-bottom: 1px solid var(--theme-elevation-100);
321
+ }
322
+
323
+ .popoverTitle {
324
+ font-size: 16px;
325
+ font-weight: 600;
326
+ color: var(--theme-elevation-900);
327
+ margin: 0;
328
+ }
329
+
330
+ .popoverStatus {
331
+ display: inline-flex;
332
+ padding: 4px 8px;
333
+ font-size: 11px;
334
+ font-weight: 500;
335
+ text-transform: uppercase;
336
+ border-radius: 4px;
337
+ margin-top: 8px;
338
+ }
339
+
340
+ .popoverStatus.scheduled {
341
+ background: var(--theme-warning-100);
342
+ color: var(--theme-warning-700);
343
+ }
344
+
345
+ .popoverStatus.confirmed {
346
+ background: var(--theme-success-100);
347
+ color: var(--theme-success-700);
348
+ }
349
+
350
+ .popoverStatus.completed {
351
+ background: var(--theme-elevation-100);
352
+ color: var(--theme-elevation-600);
353
+ }
354
+
355
+ .popoverStatus.cancelled {
356
+ background: var(--theme-error-100);
357
+ color: var(--theme-error-700);
358
+ }
359
+
360
+ .popoverClose {
361
+ display: flex;
362
+ align-items: center;
363
+ justify-content: center;
364
+ width: 28px;
365
+ height: 28px;
366
+ background: transparent;
367
+ border: none;
368
+ border-radius: 4px;
369
+ cursor: pointer;
370
+ color: var(--theme-elevation-500);
371
+ transition: all 0.15s ease;
372
+ }
373
+
374
+ .popoverClose:hover {
375
+ background: var(--theme-elevation-100);
376
+ color: var(--theme-elevation-800);
377
+ }
378
+
379
+ .popoverBody {
380
+ padding: 16px;
381
+ }
382
+
383
+ .popoverRow {
384
+ display: flex;
385
+ gap: 12px;
386
+ padding: 8px 0;
387
+ border-bottom: 1px solid var(--theme-elevation-50);
388
+ }
389
+
390
+ .popoverRow:last-child {
391
+ border-bottom: none;
392
+ }
393
+
394
+ .popoverLabel {
395
+ flex-shrink: 0;
396
+ width: 80px;
397
+ font-size: 12px;
398
+ font-weight: 500;
399
+ color: var(--theme-elevation-500);
400
+ }
401
+
402
+ .popoverValue {
403
+ font-size: 14px;
404
+ color: var(--theme-elevation-800);
405
+ }
406
+
407
+ .popoverActions {
408
+ display: flex;
409
+ gap: 8px;
410
+ padding: 12px 16px;
411
+ background: var(--theme-elevation-50);
412
+ border-top: 1px solid var(--theme-elevation-100);
413
+ }
414
+
415
+ .popoverButton {
416
+ flex: 1;
417
+ padding: 8px 16px;
418
+ font-size: 14px;
419
+ font-weight: 500;
420
+ border-radius: 6px;
421
+ cursor: pointer;
422
+ transition: all 0.15s ease;
423
+ }
424
+
425
+ .popoverButton.primary {
426
+ background: var(--theme-success-500);
427
+ color: white;
428
+ border: none;
429
+ }
430
+
431
+ .popoverButton.primary:hover {
432
+ background: var(--theme-success-600);
433
+ }
434
+
435
+ .popoverButton.secondary {
436
+ background: var(--theme-elevation-0);
437
+ color: var(--theme-elevation-700);
438
+ border: 1px solid var(--theme-elevation-200);
439
+ }
440
+
441
+ .popoverButton.secondary:hover {
442
+ background: var(--theme-elevation-100);
443
+ }
444
+
445
+ /* Overlay for popover backdrop */
446
+ .overlay {
447
+ position: fixed;
448
+ top: 0;
449
+ left: 0;
450
+ right: 0;
451
+ bottom: 0;
452
+ z-index: 999;
453
+ }
454
+
455
+ /* Current time indicator */
456
+ .currentTimeIndicator {
457
+ position: absolute;
458
+ left: 0;
459
+ right: 0;
460
+ height: 2px;
461
+ background: var(--theme-error-500);
462
+ z-index: 10;
463
+ pointer-events: none;
464
+ }
465
+
466
+ .currentTimeIndicator::before {
467
+ content: '';
468
+ position: absolute;
469
+ left: -4px;
470
+ top: -3px;
471
+ width: 8px;
472
+ height: 8px;
473
+ background: var(--theme-error-500);
474
+ border-radius: 50%;
475
+ }
476
+
477
+ /* Loading state */
478
+ .loading {
479
+ display: flex;
480
+ align-items: center;
481
+ justify-content: center;
482
+ height: 100%;
483
+ color: var(--theme-elevation-500);
484
+ }
485
+
486
+ /* Empty state */
487
+ .empty {
488
+ display: flex;
489
+ flex-direction: column;
490
+ align-items: center;
491
+ justify-content: center;
492
+ padding: 40px;
493
+ color: var(--theme-elevation-500);
494
+ text-align: center;
495
+ }
496
+
497
+ .emptyIcon {
498
+ font-size: 48px;
499
+ margin-bottom: 16px;
500
+ opacity: 0.5;
501
+ }
502
+
503
+ .emptyText {
504
+ font-size: 14px;
505
+ max-width: 300px;
506
+ }
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import type { CalendarProps } from './types.js';
3
+ export declare const CalendarContainer: React.FC<CalendarProps>;