@dodlhuat/basix 1.2.4 → 1.2.5

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.
package/css/calendar.scss CHANGED
@@ -170,11 +170,14 @@
170
170
  // ------------------------------------------------------------------
171
171
 
172
172
  .cal__month-grid {
173
- display: grid;
174
- grid-template-columns: repeat(7, minmax(0, 1fr));
175
173
  border: 1px solid var(--cal-border);
176
174
  border-radius: var(--cal-radius);
177
175
  overflow: hidden;
176
+ }
177
+
178
+ .cal__month-head {
179
+ display: grid;
180
+ grid-template-columns: repeat(7, minmax(0, 1fr));
178
181
  gap: 1px;
179
182
  background: var(--cal-border);
180
183
  }
@@ -190,27 +193,30 @@
190
193
  text-transform: uppercase;
191
194
  }
192
195
 
196
+ // Each week row is a 7-column subgrid with span bars overlaid
197
+ .cal__week-row {
198
+ display: grid;
199
+ grid-template-columns: repeat(7, minmax(0, 1fr));
200
+ gap: 1px;
201
+ background: var(--cal-border);
202
+ position: relative;
203
+ border-top: 1px solid var(--cal-border);
204
+
205
+ // Push event pills below span bars
206
+ .cal__day-events {
207
+ margin-top: calc(var(--span-lanes, 0) * var(--cal-span-lane-height, 20px));
208
+ }
209
+ }
210
+
193
211
  .cal__day {
194
212
  background: var(--cal-bg);
195
213
  padding: var(--cal-spacing-xs) var(--cal-spacing-sm);
196
214
  min-height: 88px;
197
- cursor: pointer;
198
- transition: background 0.15s ease;
215
+ cursor: default;
199
216
  position: relative;
200
217
 
201
- &:hover {
202
- background: var(--cal-bg-hover);
203
- }
204
-
205
- &:focus-visible {
206
- outline: 2px solid var(--cal-accent);
207
- outline-offset: -2px;
208
- z-index: 1;
209
- }
210
-
211
218
  &--empty {
212
219
  background: var(--cal-bg-alt);
213
- cursor: default;
214
220
  pointer-events: none;
215
221
  }
216
222
 
@@ -231,18 +237,6 @@
231
237
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--cal-accent) 20%, transparent);
232
238
  }
233
239
 
234
- &.is-selected {
235
- background: color-mix(in srgb, var(--cal-accent) 6%, var(--cal-bg));
236
-
237
- .cal__day-num {
238
- background: var(--cal-accent);
239
- color: var(--cal-accent-text);
240
- border-radius: 50%;
241
- font-weight: 700;
242
- box-shadow: 0 2px 8px color-mix(in srgb, var(--cal-accent) 35%, transparent);
243
- }
244
- }
245
-
246
240
  &.has-events::after {
247
241
  content: '';
248
242
  display: none;
@@ -326,6 +320,56 @@
326
320
  cursor: pointer;
327
321
  }
328
322
 
323
+ // ------------------------------------------------------------------
324
+ // Span bars — multi-day events in month and week all-day row
325
+ // ------------------------------------------------------------------
326
+
327
+ .cal__span-bar {
328
+ position: absolute;
329
+ height: 18px;
330
+ line-height: 18px;
331
+ font-size: 0.6875rem;
332
+ font-weight: 500;
333
+ padding: 0 6px;
334
+ border-radius: var(--cal-radius-sm);
335
+ background: var(--cal-bg-alt);
336
+ border-left: 2px solid var(--cal-accent-light);
337
+ color: var(--cal-text);
338
+ white-space: nowrap;
339
+ overflow: hidden;
340
+ text-overflow: ellipsis;
341
+ cursor: pointer;
342
+ z-index: 2;
343
+ transition: filter 0.12s ease, transform 0.1s ease;
344
+
345
+ // Position via CSS custom props set inline
346
+ left: calc(var(--span-col) * 100% / 7);
347
+ width: calc(var(--span-len) * 100% / 7 - 4px);
348
+
349
+ &:hover { filter: brightness(0.94); }
350
+ &:active { transform: scale(0.97); }
351
+ &:focus-visible {
352
+ outline: 2px solid var(--cal-accent);
353
+ outline-offset: 1px;
354
+ }
355
+
356
+ // Rounded end removed when event continues past week boundary
357
+ &--cont-before { border-left: none; border-radius: 0 var(--cal-radius-sm) var(--cal-radius-sm) 0; padding-left: 4px; }
358
+ &--cont-after { border-radius: var(--cal-radius-sm) 0 0 var(--cal-radius-sm); }
359
+ &--cont-before#{&}--cont-after { border-radius: 0; }
360
+
361
+ // Color variants — match badge semantics
362
+ &.badge-success { border-left-color: var(--success); background: color-mix(in srgb, var(--success) 14%, var(--cal-bg)); }
363
+ &.badge-warning { border-left-color: var(--warning); background: color-mix(in srgb, var(--warning) 14%, var(--cal-bg)); }
364
+ &.badge-error { border-left-color: var(--error); background: color-mix(in srgb, var(--error) 14%, var(--cal-bg)); }
365
+ &.badge-info { border-left-color: var(--accent-color); background: color-mix(in srgb, var(--accent-color) 14%, var(--cal-bg)); }
366
+ }
367
+
368
+ // Month view: bars sit just below the date number
369
+ .cal__week-row > .cal__span-bar {
370
+ top: calc(36px + var(--span-lane) * var(--cal-span-lane-height, 20px));
371
+ }
372
+
329
373
  .cal__event-time {
330
374
  font-weight: 600;
331
375
  margin-right: 3px;
@@ -375,7 +419,7 @@
375
419
  font-weight: 600;
376
420
  color: var(--cal-text-muted);
377
421
  border-left: 1px solid var(--cal-border);
378
- cursor: pointer;
422
+ cursor: default;
379
423
  text-transform: uppercase;
380
424
  letter-spacing: 0.04em;
381
425
 
@@ -402,31 +446,21 @@
402
446
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--cal-accent) 20%, transparent);
403
447
  }
404
448
 
405
- &.is-selected span {
406
- background: var(--cal-accent);
407
- color: var(--cal-accent-text);
408
- }
409
449
  }
410
450
 
411
451
  .cal__allday {
412
452
  display: grid;
413
- grid-template-columns: var(--cal-time-col-width) repeat(7, minmax(0, 1fr));
453
+ grid-template-columns: var(--cal-time-col-width) 1fr;
414
454
  border-bottom: 1px solid var(--cal-border);
415
- min-height: 32px;
416
455
  background: var(--cal-bg);
417
456
  overflow-y: auto;
418
457
  scrollbar-gutter: stable;
419
458
  scrollbar-width: thin;
420
459
  scrollbar-color: transparent transparent;
421
460
 
422
- &::-webkit-scrollbar {
423
- width: 5px;
424
- }
425
-
461
+ &::-webkit-scrollbar { width: 5px; }
426
462
  &::-webkit-scrollbar-track,
427
- &::-webkit-scrollbar-thumb {
428
- background: transparent;
429
- }
463
+ &::-webkit-scrollbar-thumb { background: transparent; }
430
464
  }
431
465
 
432
466
  .cal__allday-label {
@@ -439,12 +473,26 @@
439
473
  font-weight: 500;
440
474
  }
441
475
 
476
+ // Span container for all-day events in week view
477
+ .cal__allday-spans {
478
+ position: relative;
479
+ display: grid;
480
+ grid-template-columns: repeat(7, minmax(0, 1fr));
481
+ min-height: calc(max(var(--allday-lanes, 1), 1) * var(--cal-span-lane-height, 20px) + 6px);
482
+
483
+ // Week view span bars: no date-num offset, 2px top padding per lane
484
+ > .cal__span-bar {
485
+ top: calc(var(--span-lane) * var(--cal-span-lane-height, 20px) + 3px);
486
+ }
487
+ }
488
+
442
489
  .cal__allday-col {
443
490
  border-left: 1px solid var(--cal-border);
444
- padding: 3px;
445
- display: flex;
446
- flex-direction: column;
447
- gap: 2px;
491
+ min-height: 100%;
492
+
493
+ &:first-child {
494
+ border-left: none;
495
+ }
448
496
  }
449
497
 
450
498
  .cal__week-body {
@@ -583,7 +631,7 @@
583
631
  // Now-line
584
632
  .cal__now-line {
585
633
  position: absolute;
586
- left: 0;
634
+ left: var(--cal-time-col-width);
587
635
  right: 0;
588
636
  height: 2px;
589
637
  background: var(--error);
@@ -764,10 +812,19 @@
764
812
  .cal__month-grid {
765
813
  border: none;
766
814
  border-radius: 0;
815
+ }
816
+
817
+ .cal__month-head {
767
818
  gap: 0;
768
819
  background: transparent;
769
820
  }
770
821
 
822
+ .cal__week-row {
823
+ gap: 0;
824
+ background: transparent;
825
+ border-top: none;
826
+ }
827
+
771
828
  .cal__weekday {
772
829
  background: transparent;
773
830
  padding: var(--cal-spacing-sm) 0;
@@ -783,14 +840,6 @@
783
840
  justify-content: flex-start;
784
841
  background: transparent;
785
842
 
786
- &:hover {
787
- background: transparent;
788
-
789
- .cal__day-num {
790
- background: var(--cal-bg-hover);
791
- }
792
- }
793
-
794
843
  &--empty {
795
844
  background: transparent;
796
845
  }
@@ -801,10 +850,6 @@
801
850
  }
802
851
  }
803
852
 
804
- &.is-selected {
805
- background: transparent;
806
- }
807
-
808
853
  &.has-events::after {
809
854
  display: block;
810
855
  position: static;
@@ -822,10 +867,16 @@
822
867
 
823
868
  .cal__day-events,
824
869
  .cal__event-pill,
825
- .cal__event-more {
870
+ .cal__event-more,
871
+ .cal__span-bar {
826
872
  display: none;
827
873
  }
828
874
 
875
+ // Reset span-lane-based margin since bars are hidden
876
+ .cal__week-row .cal__day-events {
877
+ margin-top: 0;
878
+ }
879
+
829
880
  // Week view — compact
830
881
  .cal {
831
882
  --cal-time-col-width: 40px;
@@ -909,10 +960,10 @@
909
960
  animation: cal-cell-in 0.3s cubic-bezier(0.2, 0, 0, 1) both;
910
961
  }
911
962
 
912
- // Stagger the first 5 rows (35 day cells) for a wave effect
913
- @for $i from 1 through 49 {
914
- .cal__month-grid .cal__day:nth-child(#{$i}) {
915
- animation-delay: #{0.01s * $i};
963
+ // Stagger day cells across week rows
964
+ @for $i from 1 through 7 {
965
+ .cal__week-row:nth-child(#{$i}) .cal__day {
966
+ animation-delay: #{0.03s * ($i - 1) + 0.01s};
916
967
  }
917
968
  }
918
969