@mintplayer/scheduler-wc 1.2.0 → 2.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.
@@ -1,633 +1,650 @@
1
- /**
2
- * Scheduler CSS styles as a template literal
3
- */
4
- export const schedulerStyles = `
5
- :host {
6
- display: block;
7
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
8
- font-size: 14px;
9
- --scheduler-border-color: #ddd;
10
- --scheduler-header-bg: #f8f9fa;
11
- --scheduler-today-bg: #fff3cd;
12
- --scheduler-slot-height: 40px;
13
- --scheduler-time-gutter-width: 80px;
14
- --scheduler-event-border-radius: 4px;
15
- --scheduler-now-indicator-color: #dc3545;
16
- --scheduler-preview-bg: rgba(0, 123, 255, 0.3);
17
- --scheduler-greyed-slot-bg: rgba(0, 0, 0, 0.1);
18
- --scheduler-column-min-width: 120px;
19
- --scheduler-touch-hold-duration: 500ms;
20
- }
21
-
22
- * {
23
- box-sizing: border-box;
24
- }
25
-
26
- .scheduler-container {
27
- display: flex;
28
- flex-direction: column;
29
- height: 100%;
30
- border: 1px solid var(--scheduler-border-color);
31
- border-radius: 4px;
32
- overflow: hidden;
33
- background: #fff;
34
- }
35
-
36
- /* Header */
37
- .scheduler-header {
38
- display: flex;
39
- align-items: center;
40
- justify-content: space-between;
41
- padding: 8px 12px;
42
- background: var(--scheduler-header-bg);
43
- border-bottom: 1px solid var(--scheduler-border-color);
44
- flex-shrink: 0;
45
- }
46
-
47
- .scheduler-nav {
48
- display: flex;
49
- align-items: center;
50
- gap: 8px;
51
- }
52
-
53
- .scheduler-nav button {
54
- padding: 6px 12px;
55
- border: 1px solid var(--scheduler-border-color);
56
- border-radius: 4px;
57
- background: #fff;
58
- cursor: pointer;
59
- font-size: 14px;
60
- }
61
-
62
- .scheduler-nav button:hover {
63
- background: #e9ecef;
64
- }
65
-
66
- .scheduler-title {
67
- font-size: 18px;
68
- font-weight: 600;
69
- }
70
-
71
- .scheduler-view-switcher {
72
- display: flex;
73
- gap: 4px;
74
- }
75
-
76
- .scheduler-view-switcher button {
77
- padding: 6px 12px;
78
- border: 1px solid var(--scheduler-border-color);
79
- border-radius: 4px;
80
- background: #fff;
81
- cursor: pointer;
82
- font-size: 13px;
83
- }
84
-
85
- .scheduler-view-switcher button:hover {
86
- background: #e9ecef;
87
- }
88
-
89
- .scheduler-view-switcher button.active {
90
- background: #0d6efd;
91
- color: #fff;
92
- border-color: #0d6efd;
93
- }
94
-
95
- /* Main content area */
96
- .scheduler-body {
97
- display: flex;
98
- flex: 1;
99
- overflow: hidden;
100
- }
101
-
102
- .scheduler-sidebar {
103
- width: var(--scheduler-time-gutter-width);
104
- flex-shrink: 0;
105
- border-right: 1px solid var(--scheduler-border-color);
106
- background: var(--scheduler-header-bg);
107
- }
108
-
109
- .scheduler-content {
110
- flex: 1;
111
- overflow: auto;
112
- position: relative;
113
- }
114
-
115
- /* Week/Day View Grid */
116
- .scheduler-grid {
117
- display: grid;
118
- min-width: 100%;
119
- }
120
-
121
- .scheduler-day-headers {
122
- display: flex;
123
- border-bottom: 1px solid var(--scheduler-border-color);
124
- background: var(--scheduler-header-bg);
125
- position: sticky;
126
- top: 0;
127
- z-index: 10;
128
- min-width: fit-content;
129
- }
130
-
131
- .scheduler-day-header {
132
- flex: 1 0 var(--scheduler-column-min-width);
133
- min-width: var(--scheduler-column-min-width);
134
- text-align: center;
135
- padding: 8px 4px;
136
- border-right: 1px solid var(--scheduler-border-color);
137
- font-weight: 500;
138
- }
139
-
140
- .scheduler-day-header:last-child {
141
- border-right: none;
142
- }
143
-
144
- .scheduler-day-header.today {
145
- background: var(--scheduler-today-bg);
146
- }
147
-
148
- .scheduler-day-header .day-name {
149
- font-size: 12px;
150
- color: #666;
151
- text-transform: uppercase;
152
- }
153
-
154
- .scheduler-day-header .day-number {
155
- font-size: 20px;
156
- font-weight: 600;
157
- margin-top: 2px;
158
- }
159
-
160
- .scheduler-time-grid {
161
- display: flex;
162
- position: relative;
163
- min-width: fit-content;
164
- }
165
-
166
- .scheduler-time-gutter {
167
- width: var(--scheduler-time-gutter-width);
168
- flex-shrink: 0;
169
- border-right: 1px solid var(--scheduler-border-color);
170
- background: var(--scheduler-header-bg);
171
- }
172
-
173
- .scheduler-time-slot-label {
174
- height: var(--scheduler-slot-height);
175
- padding: 0 8px;
176
- font-size: 12px;
177
- color: #666;
178
- text-align: right;
179
- position: relative;
180
- top: -8px;
181
- white-space: nowrap;
182
- }
183
-
184
- .scheduler-days-container {
185
- display: flex;
186
- flex: 1;
187
- position: relative;
188
- min-width: fit-content;
189
- }
190
-
191
- .scheduler-day-column {
192
- flex: 1 0 var(--scheduler-column-min-width);
193
- min-width: var(--scheduler-column-min-width);
194
- position: relative;
195
- border-right: 1px solid var(--scheduler-border-color);
196
- }
197
-
198
- .scheduler-day-column:last-child {
199
- border-right: none;
200
- }
201
-
202
- .scheduler-time-slot {
203
- height: var(--scheduler-slot-height);
204
- border-bottom: 1px solid #eee;
205
- position: relative;
206
- }
207
-
208
- .scheduler-time-slot:nth-child(2n) {
209
- border-bottom-color: var(--scheduler-border-color);
210
- }
211
-
212
- .scheduler-time-slot.greyed {
213
- background: var(--scheduler-greyed-slot-bg);
214
- }
215
-
216
- /* Events */
217
- .scheduler-events-container {
218
- position: absolute;
219
- top: 0;
220
- left: 0;
221
- right: 0;
222
- bottom: 0;
223
- pointer-events: none;
224
- }
225
-
226
- .scheduler-event {
227
- position: absolute;
228
- border-radius: var(--scheduler-event-border-radius);
229
- padding: 2px 4px;
230
- font-size: 12px;
231
- overflow: hidden;
232
- cursor: pointer;
233
- pointer-events: auto;
234
- border-left: 3px solid rgba(0, 0, 0, 0.2);
235
- }
236
-
237
- /* Prevent browser from handling touch gestures on events (enables drag) */
238
- .scheduler-event:not(.preview) {
239
- touch-action: none;
240
- -ms-touch-action: none;
241
- }
242
-
243
- .scheduler-event:hover {
244
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
245
- }
246
-
247
- .scheduler-event.selected {
248
- box-shadow: 0 0 0 3px #212529;
249
- }
250
-
251
- .scheduler-event .event-title {
252
- font-weight: 500;
253
- white-space: nowrap;
254
- overflow: hidden;
255
- text-overflow: ellipsis;
256
- }
257
-
258
- .scheduler-event .event-time {
259
- font-size: 11px;
260
- opacity: 0.8;
261
- }
262
-
263
- .scheduler-event.preview {
264
- background: var(--scheduler-preview-bg);
265
- border: 2px dashed #0d6efd;
266
- pointer-events: none;
267
- }
268
-
269
- /* Resize handles */
270
- .scheduler-event .resize-handle {
271
- position: absolute;
272
- left: 0;
273
- right: 0;
274
- height: 8px;
275
- cursor: ns-resize;
276
- }
277
-
278
- .scheduler-event .resize-handle.top {
279
- top: 0;
280
- }
281
-
282
- .scheduler-event .resize-handle.bottom {
283
- bottom: 0;
284
- }
285
-
286
- /* Now indicator */
287
- .scheduler-now-indicator {
288
- position: absolute;
289
- left: 0;
290
- right: 0;
291
- height: 2px;
292
- background: var(--scheduler-now-indicator-color);
293
- z-index: 5;
294
- pointer-events: none;
295
- }
296
-
297
- .scheduler-now-indicator::before {
298
- content: '';
299
- position: absolute;
300
- left: -4px;
301
- top: -4px;
302
- width: 10px;
303
- height: 10px;
304
- border-radius: 50%;
305
- background: var(--scheduler-now-indicator-color);
306
- }
307
-
308
- /* Month View */
309
- .scheduler-month-grid {
310
- display: grid;
311
- grid-template-columns: repeat(7, 1fr);
312
- grid-auto-rows: minmax(100px, 1fr);
313
- height: 100%;
314
- }
315
-
316
- .scheduler-month-day {
317
- border-right: 1px solid var(--scheduler-border-color);
318
- border-bottom: 1px solid var(--scheduler-border-color);
319
- padding: 4px;
320
- overflow: hidden;
321
- }
322
-
323
- .scheduler-month-day:nth-child(7n) {
324
- border-right: none;
325
- }
326
-
327
- .scheduler-month-day.other-month {
328
- background: #f8f9fa;
329
- color: #adb5bd;
330
- }
331
-
332
- .scheduler-month-day.today {
333
- background: var(--scheduler-today-bg);
334
- }
335
-
336
- .scheduler-month-day .day-number {
337
- font-weight: 500;
338
- margin-bottom: 4px;
339
- }
340
-
341
- .scheduler-month-day .month-events {
342
- display: flex;
343
- flex-direction: column;
344
- gap: 2px;
345
- }
346
-
347
- .scheduler-month-event {
348
- padding: 2px 4px;
349
- border-radius: 2px;
350
- font-size: 11px;
351
- white-space: nowrap;
352
- overflow: hidden;
353
- text-overflow: ellipsis;
354
- cursor: pointer;
355
- }
356
-
357
- .scheduler-more-link {
358
- font-size: 11px;
359
- color: #0d6efd;
360
- cursor: pointer;
361
- margin-top: 2px;
362
- }
363
-
364
- /* Year View */
365
- .scheduler-year-grid {
366
- display: grid;
367
- grid-template-columns: repeat(4, 1fr);
368
- gap: 16px;
369
- padding: 16px;
370
- }
371
-
372
- .scheduler-year-month {
373
- border: 1px solid var(--scheduler-border-color);
374
- border-radius: 4px;
375
- overflow: hidden;
376
- }
377
-
378
- .scheduler-year-month-header {
379
- padding: 8px;
380
- background: var(--scheduler-header-bg);
381
- font-weight: 600;
382
- text-align: center;
383
- cursor: pointer;
384
- }
385
-
386
- .scheduler-year-month-header:hover {
387
- background: #e9ecef;
388
- }
389
-
390
- .scheduler-mini-month {
391
- display: grid;
392
- grid-template-columns: repeat(7, 1fr);
393
- gap: 1px;
394
- padding: 4px;
395
- }
396
-
397
- .scheduler-mini-day {
398
- aspect-ratio: 1;
399
- display: flex;
400
- align-items: center;
401
- justify-content: center;
402
- font-size: 11px;
403
- cursor: pointer;
404
- border-radius: 50%;
405
- }
406
-
407
- .scheduler-mini-day:hover {
408
- background: #e9ecef;
409
- }
410
-
411
- .scheduler-mini-day.has-events {
412
- font-weight: 600;
413
- }
414
-
415
- .scheduler-mini-day.has-events::after {
416
- content: '';
417
- position: absolute;
418
- bottom: 2px;
419
- width: 4px;
420
- height: 4px;
421
- border-radius: 50%;
422
- background: #0d6efd;
423
- }
424
-
425
- .scheduler-mini-day.today {
426
- background: var(--scheduler-today-bg);
427
- }
428
-
429
- .scheduler-mini-day.other-month {
430
- color: #adb5bd;
431
- }
432
-
433
- /* Timeline View */
434
- .scheduler-timeline {
435
- display: flex;
436
- flex-direction: column;
437
- height: 100%;
438
- }
439
-
440
- .scheduler-timeline-header {
441
- display: flex;
442
- border-bottom: 1px solid var(--scheduler-border-color);
443
- background: var(--scheduler-header-bg);
444
- position: sticky;
445
- top: 0;
446
- z-index: 10;
447
- }
448
-
449
- .scheduler-resource-header {
450
- width: 200px;
451
- flex-shrink: 0;
452
- padding: 8px;
453
- border-right: 1px solid var(--scheduler-border-color);
454
- font-weight: 600;
455
- }
456
-
457
- .scheduler-timeline-slots-header {
458
- display: flex;
459
- flex: 1;
460
- overflow: hidden;
461
- }
462
-
463
- .scheduler-timeline-slot-header {
464
- flex-shrink: 0;
465
- padding: 8px;
466
- text-align: center;
467
- border-right: 1px solid var(--scheduler-border-color);
468
- font-size: 12px;
469
- }
470
-
471
- .scheduler-timeline-body {
472
- display: flex;
473
- flex-direction: column;
474
- flex: 1;
475
- overflow: auto;
476
- }
477
-
478
- .scheduler-timeline-row {
479
- display: flex;
480
- border-bottom: 1px solid var(--scheduler-border-color);
481
- min-height: 40px;
482
- }
483
-
484
- .scheduler-timeline-row.group {
485
- background: var(--scheduler-header-bg);
486
- font-weight: 600;
487
- }
488
-
489
- .scheduler-resource-cell {
490
- width: 200px;
491
- flex-shrink: 0;
492
- padding: 8px;
493
- border-right: 1px solid var(--scheduler-border-color);
494
- display: flex;
495
- align-items: center;
496
- gap: 8px;
497
- }
498
-
499
- .scheduler-resource-cell .expand-toggle {
500
- cursor: pointer;
501
- width: 16px;
502
- height: 16px;
503
- display: flex;
504
- align-items: center;
505
- justify-content: center;
506
- }
507
-
508
- .scheduler-timeline-slots {
509
- display: flex;
510
- flex: 1;
511
- position: relative;
512
- }
513
-
514
- .scheduler-timeline-slot {
515
- flex-shrink: 0;
516
- border-right: 1px solid #eee;
517
- height: 100%;
518
- }
519
-
520
- .scheduler-timeline-slot.greyed {
521
- background: var(--scheduler-greyed-slot-bg);
522
- }
523
-
524
- .scheduler-timeline-events {
525
- position: absolute;
526
- top: 0;
527
- left: 0;
528
- right: 0;
529
- bottom: 0;
530
- pointer-events: none;
531
- }
532
-
533
- .scheduler-timeline-event {
534
- position: absolute;
535
- height: calc(100% - 4px);
536
- top: 2px;
537
- border-radius: var(--scheduler-event-border-radius);
538
- padding: 2px 6px;
539
- font-size: 12px;
540
- overflow: hidden;
541
- cursor: pointer;
542
- pointer-events: auto;
543
- }
544
-
545
- .scheduler-timeline-event.selected {
546
- box-shadow: 0 0 0 3px #212529;
547
- }
548
-
549
- /* Loading state */
550
- .scheduler-loading {
551
- display: flex;
552
- align-items: center;
553
- justify-content: center;
554
- height: 200px;
555
- color: #666;
556
- }
557
-
558
- /* Empty state */
559
- .scheduler-empty {
560
- display: flex;
561
- align-items: center;
562
- justify-content: center;
563
- height: 200px;
564
- color: #666;
565
- font-style: italic;
566
- }
567
-
568
- /* Touch drag mode indicator */
569
- .scheduler-container.touch-drag-mode {
570
- cursor: grabbing;
571
- user-select: none;
572
- -webkit-user-select: none;
573
- touch-action: none;
574
- -ms-touch-action: none;
575
- }
576
-
577
- .scheduler-container.touch-drag-mode .scheduler-content {
578
- overflow: hidden;
579
- touch-action: none;
580
- -ms-touch-action: none;
581
- }
582
-
583
- .scheduler-event.touch-hold-pending {
584
- animation: touch-hold-pulse 0.5s ease-in-out;
585
- touch-action: none;
586
- -ms-touch-action: none;
587
- }
588
-
589
- .scheduler-event.touch-hold-active {
590
- transform: scale(1.02);
591
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
592
- z-index: 100;
593
- touch-action: none;
594
- -ms-touch-action: none;
595
- }
596
-
597
- .scheduler-time-slot.touch-hold-pending,
598
- .scheduler-timeline-slot.touch-hold-pending {
599
- animation: touch-hold-pulse 0.5s ease-in-out;
600
- }
601
-
602
- .scheduler-time-slot.touch-hold-active,
603
- .scheduler-timeline-slot.touch-hold-active {
604
- background: var(--scheduler-preview-bg);
605
- }
606
-
607
- @keyframes touch-hold-pulse {
608
- 0% { opacity: 1; }
609
- 50% { opacity: 0.7; }
610
- 100% { opacity: 1; }
611
- }
612
-
613
- /* Scrollbar styling */
614
- .scheduler-content::-webkit-scrollbar {
615
- width: 8px;
616
- height: 8px;
617
- }
618
-
619
- .scheduler-content::-webkit-scrollbar-track {
620
- background: #f1f1f1;
621
- }
622
-
623
- .scheduler-content::-webkit-scrollbar-thumb {
624
- background: #c1c1c1;
625
- border-radius: 4px;
626
- }
627
-
628
- .scheduler-content::-webkit-scrollbar-thumb:hover {
629
- background: #a1a1a1;
630
- }
631
- `;
1
+ // AUTO-GENERATED — do not edit by hand.
2
+ // Source: scheduler.styles.scss
3
+ // Regenerate with the codegen-wc Nx target.
4
+ import { unsafeCSS } from 'lit';
5
+ export const schedulerStyles = unsafeCSS(`:host {
6
+ display: block;
7
+ height: 100%;
8
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, sans-serif;
9
+ font-size: 14px;
10
+ --scheduler-border-color: #ddd;
11
+ --scheduler-header-bg: #f8f9fa;
12
+ --scheduler-today-bg: #fff3cd;
13
+ --scheduler-slot-height: 40px;
14
+ --scheduler-time-gutter-width: 80px;
15
+ --scheduler-event-border-radius: 4px;
16
+ --scheduler-now-indicator-color: #dc3545;
17
+ --scheduler-preview-bg: rgba(0, 123, 255, 0.3);
18
+ --scheduler-greyed-slot-bg: rgba(0, 0, 0, 0.1);
19
+ --scheduler-column-min-width: 120px;
20
+ --scheduler-touch-hold-duration: 500ms;
21
+ }
22
+
23
+ * {
24
+ box-sizing: border-box;
25
+ }
26
+
27
+ .scheduler-container {
28
+ display: flex;
29
+ flex-direction: column;
30
+ height: 100%;
31
+ border: 1px solid var(--scheduler-border-color);
32
+ border-radius: 4px;
33
+ overflow: hidden;
34
+ background: #fff;
35
+ }
36
+
37
+ /* Header */
38
+ .scheduler-header {
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: space-between;
42
+ padding: 8px 12px;
43
+ background: var(--scheduler-header-bg);
44
+ border-bottom: 1px solid var(--scheduler-border-color);
45
+ flex-shrink: 0;
46
+ }
47
+
48
+ .scheduler-nav {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: 8px;
52
+ }
53
+
54
+ .scheduler-nav button {
55
+ padding: 6px 12px;
56
+ border: 1px solid var(--scheduler-border-color);
57
+ border-radius: 4px;
58
+ background: #fff;
59
+ cursor: pointer;
60
+ font-size: 14px;
61
+ }
62
+
63
+ .scheduler-nav button:hover {
64
+ background: #e9ecef;
65
+ }
66
+
67
+ .scheduler-title {
68
+ font-size: 18px;
69
+ font-weight: 600;
70
+ }
71
+
72
+ .scheduler-view-switcher {
73
+ display: flex;
74
+ gap: 4px;
75
+ }
76
+
77
+ .scheduler-view-switcher button {
78
+ padding: 6px 12px;
79
+ border: 1px solid var(--scheduler-border-color);
80
+ border-radius: 4px;
81
+ background: #fff;
82
+ cursor: pointer;
83
+ font-size: 13px;
84
+ }
85
+
86
+ .scheduler-view-switcher button:hover {
87
+ background: #e9ecef;
88
+ }
89
+
90
+ .scheduler-view-switcher button.active {
91
+ background: #0d6efd;
92
+ color: #fff;
93
+ border-color: #0d6efd;
94
+ }
95
+
96
+ /* Main content area */
97
+ .scheduler-body {
98
+ display: flex;
99
+ flex: 1;
100
+ overflow: hidden;
101
+ }
102
+
103
+ .scheduler-sidebar {
104
+ width: var(--scheduler-time-gutter-width);
105
+ flex-shrink: 0;
106
+ border-right: 1px solid var(--scheduler-border-color);
107
+ background: var(--scheduler-header-bg);
108
+ }
109
+
110
+ .scheduler-content {
111
+ flex: 1;
112
+ overflow: auto;
113
+ position: relative;
114
+ }
115
+
116
+ /* Week/Day View Grid */
117
+ .scheduler-grid {
118
+ display: grid;
119
+ min-width: 100%;
120
+ }
121
+
122
+ .scheduler-day-headers {
123
+ display: flex;
124
+ border-bottom: 1px solid var(--scheduler-border-color);
125
+ background: var(--scheduler-header-bg);
126
+ position: sticky;
127
+ top: 0;
128
+ z-index: 10;
129
+ min-width: fit-content;
130
+ }
131
+
132
+ .scheduler-day-header {
133
+ flex: 1 0 var(--scheduler-column-min-width);
134
+ min-width: var(--scheduler-column-min-width);
135
+ text-align: center;
136
+ padding: 8px 4px;
137
+ border-right: 1px solid var(--scheduler-border-color);
138
+ font-weight: 500;
139
+ }
140
+
141
+ .scheduler-day-header:last-child {
142
+ border-right: none;
143
+ }
144
+
145
+ .scheduler-day-header.today {
146
+ background: var(--scheduler-today-bg);
147
+ }
148
+
149
+ .scheduler-day-header .day-name {
150
+ font-size: 12px;
151
+ color: #666;
152
+ text-transform: uppercase;
153
+ }
154
+
155
+ .scheduler-day-header .day-number {
156
+ font-size: 20px;
157
+ font-weight: 600;
158
+ margin-top: 2px;
159
+ }
160
+
161
+ .scheduler-time-grid {
162
+ display: flex;
163
+ position: relative;
164
+ min-width: fit-content;
165
+ }
166
+
167
+ .scheduler-time-gutter {
168
+ width: var(--scheduler-time-gutter-width);
169
+ flex-shrink: 0;
170
+ border-right: 1px solid var(--scheduler-border-color);
171
+ background: var(--scheduler-header-bg);
172
+ }
173
+
174
+ .scheduler-time-slot-label {
175
+ height: var(--scheduler-slot-height);
176
+ padding: 0 8px;
177
+ font-size: 12px;
178
+ color: #666;
179
+ text-align: right;
180
+ position: relative;
181
+ top: -8px;
182
+ white-space: nowrap;
183
+ }
184
+
185
+ .scheduler-days-container {
186
+ display: flex;
187
+ flex: 1;
188
+ position: relative;
189
+ min-width: fit-content;
190
+ }
191
+
192
+ .scheduler-day-column {
193
+ flex: 1 0 var(--scheduler-column-min-width);
194
+ min-width: var(--scheduler-column-min-width);
195
+ position: relative;
196
+ border-right: 1px solid var(--scheduler-border-color);
197
+ }
198
+
199
+ .scheduler-day-column:last-child {
200
+ border-right: none;
201
+ }
202
+
203
+ .scheduler-time-slot {
204
+ height: var(--scheduler-slot-height);
205
+ border-bottom: 1px solid #eee;
206
+ position: relative;
207
+ }
208
+
209
+ .scheduler-time-slot:nth-child(2n) {
210
+ border-bottom-color: var(--scheduler-border-color);
211
+ }
212
+
213
+ .scheduler-time-slot.greyed {
214
+ background: var(--scheduler-greyed-slot-bg);
215
+ }
216
+
217
+ /* Events */
218
+ .scheduler-events-container {
219
+ position: absolute;
220
+ top: 0;
221
+ left: 0;
222
+ right: 0;
223
+ bottom: 0;
224
+ pointer-events: none;
225
+ }
226
+
227
+ .scheduler-event {
228
+ position: absolute;
229
+ border-radius: var(--scheduler-event-border-radius);
230
+ padding: 2px 4px;
231
+ font-size: 12px;
232
+ overflow: hidden;
233
+ cursor: pointer;
234
+ pointer-events: auto;
235
+ border-left: 3px solid rgba(0, 0, 0, 0.2);
236
+ }
237
+
238
+ /* Prevent browser from handling touch gestures on events (enables drag) */
239
+ .scheduler-event:not(.preview) {
240
+ touch-action: none;
241
+ -ms-touch-action: none;
242
+ }
243
+
244
+ .scheduler-event:hover {
245
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
246
+ }
247
+
248
+ .scheduler-event.selected {
249
+ box-shadow: 0 0 0 3px #212529;
250
+ }
251
+
252
+ .scheduler-event .event-title {
253
+ font-weight: 500;
254
+ white-space: nowrap;
255
+ overflow: hidden;
256
+ text-overflow: ellipsis;
257
+ }
258
+
259
+ .scheduler-event .event-time {
260
+ font-size: 11px;
261
+ opacity: 0.8;
262
+ }
263
+
264
+ .scheduler-event.preview {
265
+ background: var(--scheduler-preview-bg);
266
+ border: 2px dashed #0d6efd;
267
+ pointer-events: none;
268
+ }
269
+
270
+ /* Resize handles */
271
+ .scheduler-event .resize-handle {
272
+ position: absolute;
273
+ left: 0;
274
+ right: 0;
275
+ height: 8px;
276
+ cursor: ns-resize;
277
+ }
278
+
279
+ .scheduler-event .resize-handle.top {
280
+ top: 0;
281
+ }
282
+
283
+ .scheduler-event .resize-handle.bottom {
284
+ bottom: 0;
285
+ }
286
+
287
+ /* Now indicator */
288
+ .scheduler-now-indicator {
289
+ position: absolute;
290
+ left: 0;
291
+ right: 0;
292
+ height: 2px;
293
+ background: var(--scheduler-now-indicator-color);
294
+ z-index: 5;
295
+ pointer-events: none;
296
+ }
297
+
298
+ .scheduler-now-indicator::before {
299
+ content: "";
300
+ position: absolute;
301
+ left: -4px;
302
+ top: -4px;
303
+ width: 10px;
304
+ height: 10px;
305
+ border-radius: 50%;
306
+ background: var(--scheduler-now-indicator-color);
307
+ }
308
+
309
+ /* Month View */
310
+ .scheduler-month-grid {
311
+ display: grid;
312
+ grid-template-columns: repeat(7, 1fr);
313
+ grid-auto-rows: minmax(100px, 1fr);
314
+ height: 100%;
315
+ }
316
+
317
+ .scheduler-month-day {
318
+ border-right: 1px solid var(--scheduler-border-color);
319
+ border-bottom: 1px solid var(--scheduler-border-color);
320
+ padding: 4px;
321
+ overflow: hidden;
322
+ }
323
+
324
+ .scheduler-month-day:nth-child(7n) {
325
+ border-right: none;
326
+ }
327
+
328
+ .scheduler-month-day.other-month {
329
+ background: #f8f9fa;
330
+ color: #adb5bd;
331
+ }
332
+
333
+ .scheduler-month-day.today {
334
+ background: var(--scheduler-today-bg);
335
+ }
336
+
337
+ .scheduler-month-day .day-number {
338
+ font-weight: 500;
339
+ margin-bottom: 4px;
340
+ }
341
+
342
+ .scheduler-month-day .month-events {
343
+ display: flex;
344
+ flex-direction: column;
345
+ gap: 2px;
346
+ }
347
+
348
+ .scheduler-month-event {
349
+ padding: 2px 4px;
350
+ border-radius: 2px;
351
+ font-size: 11px;
352
+ white-space: nowrap;
353
+ overflow: hidden;
354
+ text-overflow: ellipsis;
355
+ cursor: pointer;
356
+ }
357
+
358
+ .scheduler-more-link {
359
+ font-size: 11px;
360
+ color: #0d6efd;
361
+ cursor: pointer;
362
+ margin-top: 2px;
363
+ }
364
+
365
+ /* Year View */
366
+ .scheduler-year-grid {
367
+ display: grid;
368
+ grid-template-columns: repeat(4, 1fr);
369
+ gap: 16px;
370
+ padding: 16px;
371
+ }
372
+
373
+ .scheduler-year-month {
374
+ border: 1px solid var(--scheduler-border-color);
375
+ border-radius: 4px;
376
+ overflow: hidden;
377
+ }
378
+
379
+ .scheduler-year-month-header {
380
+ padding: 8px;
381
+ background: var(--scheduler-header-bg);
382
+ font-weight: 600;
383
+ text-align: center;
384
+ cursor: pointer;
385
+ }
386
+
387
+ .scheduler-year-month-header:hover {
388
+ background: #e9ecef;
389
+ }
390
+
391
+ .scheduler-mini-month {
392
+ display: grid;
393
+ grid-template-columns: repeat(7, 1fr);
394
+ gap: 1px;
395
+ padding: 4px;
396
+ }
397
+
398
+ .scheduler-mini-day {
399
+ aspect-ratio: 1;
400
+ display: flex;
401
+ align-items: center;
402
+ justify-content: center;
403
+ font-size: 11px;
404
+ cursor: pointer;
405
+ border-radius: 50%;
406
+ }
407
+
408
+ .scheduler-mini-day:hover {
409
+ background: #e9ecef;
410
+ }
411
+
412
+ .scheduler-mini-day.has-events {
413
+ font-weight: 600;
414
+ }
415
+
416
+ .scheduler-mini-day.has-events::after {
417
+ content: "";
418
+ position: absolute;
419
+ bottom: 2px;
420
+ width: 4px;
421
+ height: 4px;
422
+ border-radius: 50%;
423
+ background: #0d6efd;
424
+ }
425
+
426
+ .scheduler-mini-day.today {
427
+ background: var(--scheduler-today-bg);
428
+ }
429
+
430
+ .scheduler-mini-day.other-month {
431
+ color: #adb5bd;
432
+ }
433
+
434
+ /* Timeline View */
435
+ .scheduler-timeline {
436
+ display: flex;
437
+ flex-direction: column;
438
+ height: 100%;
439
+ }
440
+
441
+ .scheduler-timeline-header {
442
+ display: flex;
443
+ border-bottom: 1px solid var(--scheduler-border-color);
444
+ background: var(--scheduler-header-bg);
445
+ position: sticky;
446
+ top: 0;
447
+ z-index: 10;
448
+ }
449
+
450
+ .scheduler-resource-header {
451
+ width: 200px;
452
+ flex-shrink: 0;
453
+ padding: 8px;
454
+ border-right: 1px solid var(--scheduler-border-color);
455
+ font-weight: 600;
456
+ }
457
+
458
+ .scheduler-timeline-slots-header {
459
+ display: flex;
460
+ flex: 1;
461
+ overflow: hidden;
462
+ }
463
+
464
+ .scheduler-timeline-slot-header {
465
+ flex-shrink: 0;
466
+ padding: 8px;
467
+ text-align: center;
468
+ border-right: 1px solid var(--scheduler-border-color);
469
+ font-size: 12px;
470
+ }
471
+
472
+ .scheduler-timeline-body {
473
+ display: flex;
474
+ flex-direction: column;
475
+ flex: 1;
476
+ overflow: auto;
477
+ }
478
+
479
+ .scheduler-timeline-row {
480
+ display: flex;
481
+ border-bottom: 1px solid var(--scheduler-border-color);
482
+ min-height: 40px;
483
+ }
484
+
485
+ .scheduler-timeline-row.group {
486
+ background: var(--scheduler-header-bg);
487
+ font-weight: 600;
488
+ }
489
+
490
+ .scheduler-resource-cell {
491
+ width: 200px;
492
+ flex-shrink: 0;
493
+ padding: 8px;
494
+ border-right: 1px solid var(--scheduler-border-color);
495
+ display: flex;
496
+ align-items: center;
497
+ gap: 8px;
498
+ }
499
+
500
+ .scheduler-resource-cell .expand-toggle {
501
+ cursor: pointer;
502
+ width: 16px;
503
+ height: 16px;
504
+ display: flex;
505
+ align-items: center;
506
+ justify-content: center;
507
+ }
508
+
509
+ .scheduler-timeline-slots {
510
+ display: flex;
511
+ flex: 1;
512
+ position: relative;
513
+ }
514
+
515
+ .scheduler-timeline-slot {
516
+ flex-shrink: 0;
517
+ border-right: 1px solid #eee;
518
+ height: 100%;
519
+ }
520
+
521
+ .scheduler-timeline-slot.greyed {
522
+ background: var(--scheduler-greyed-slot-bg);
523
+ }
524
+
525
+ .scheduler-timeline-events {
526
+ position: absolute;
527
+ top: 0;
528
+ left: 0;
529
+ right: 0;
530
+ bottom: 0;
531
+ pointer-events: none;
532
+ }
533
+
534
+ .scheduler-timeline-event {
535
+ position: absolute;
536
+ height: calc(100% - 4px);
537
+ top: 2px;
538
+ border-radius: var(--scheduler-event-border-radius);
539
+ padding: 2px 6px;
540
+ font-size: 12px;
541
+ overflow: hidden;
542
+ cursor: pointer;
543
+ pointer-events: auto;
544
+ }
545
+
546
+ .scheduler-timeline-event.selected {
547
+ box-shadow: 0 0 0 3px #212529;
548
+ }
549
+
550
+ /* Loading state */
551
+ .scheduler-loading {
552
+ display: flex;
553
+ align-items: center;
554
+ justify-content: center;
555
+ height: 200px;
556
+ color: #666;
557
+ }
558
+
559
+ /* Empty state */
560
+ .scheduler-empty {
561
+ display: flex;
562
+ align-items: center;
563
+ justify-content: center;
564
+ height: 200px;
565
+ color: #666;
566
+ font-style: italic;
567
+ }
568
+
569
+ /* Touch drag mode indicator */
570
+ .scheduler-container.touch-drag-mode {
571
+ cursor: grabbing;
572
+ user-select: none;
573
+ -webkit-user-select: none;
574
+ touch-action: none;
575
+ -ms-touch-action: none;
576
+ }
577
+
578
+ .scheduler-container.touch-drag-mode .scheduler-content {
579
+ overflow: hidden;
580
+ touch-action: none;
581
+ -ms-touch-action: none;
582
+ }
583
+
584
+ .scheduler-event.touch-hold-pending {
585
+ animation: touch-hold-pulse 0.5s ease-in-out;
586
+ touch-action: none;
587
+ -ms-touch-action: none;
588
+ }
589
+
590
+ .scheduler-event.touch-hold-active {
591
+ transform: scale(1.02);
592
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
593
+ z-index: 100;
594
+ touch-action: none;
595
+ -ms-touch-action: none;
596
+ }
597
+
598
+ .scheduler-time-slot.touch-hold-pending,
599
+ .scheduler-timeline-slot.touch-hold-pending {
600
+ animation: touch-hold-pulse 0.5s ease-in-out;
601
+ }
602
+
603
+ .scheduler-time-slot.touch-hold-active,
604
+ .scheduler-timeline-slot.touch-hold-active {
605
+ background: var(--scheduler-preview-bg);
606
+ }
607
+
608
+ @keyframes touch-hold-pulse {
609
+ 0% {
610
+ opacity: 1;
611
+ }
612
+ 50% {
613
+ opacity: 0.7;
614
+ }
615
+ 100% {
616
+ opacity: 1;
617
+ }
618
+ }
619
+ /* Pan mode styling */
620
+ .scheduler-content.pan-mode {
621
+ cursor: grabbing;
622
+ user-select: none;
623
+ }
624
+
625
+ /* Scroll blocking during drag operations */
626
+ .scheduler-content.scroll-blocked {
627
+ overflow: hidden !important;
628
+ touch-action: none !important;
629
+ }
630
+
631
+ /* Scrollbar styling */
632
+ .scheduler-content::-webkit-scrollbar {
633
+ width: 8px;
634
+ height: 8px;
635
+ }
636
+
637
+ .scheduler-content::-webkit-scrollbar-track {
638
+ background: #f1f1f1;
639
+ }
640
+
641
+ .scheduler-content::-webkit-scrollbar-thumb {
642
+ background: #c1c1c1;
643
+ border-radius: 4px;
644
+ }
645
+
646
+ .scheduler-content::-webkit-scrollbar-thumb:hover {
647
+ background: #a1a1a1;
648
+ }`);
632
649
  export default schedulerStyles;
633
650
  //# sourceMappingURL=scheduler.styles.js.map