@nomideusz/svelte-calendar 1.2.0 → 1.4.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.
- package/README.md +143 -93
- package/dist/adapters/mapped.d.ts +7 -7
- package/dist/adapters/mapped.js +5 -2
- package/dist/adapters/memory.d.ts +7 -6
- package/dist/adapters/memory.js +3 -4
- package/dist/adapters/recurring.d.ts +6 -6
- package/dist/adapters/recurring.js +12 -14
- package/dist/calendar/Calendar.svelte +226 -304
- package/dist/calendar/Calendar.svelte.d.ts +1 -1
- package/dist/primitives/DayHeader.svelte +7 -7
- package/dist/primitives/EmptySlot.svelte +6 -6
- package/dist/primitives/EventBlock.svelte +19 -19
- package/dist/primitives/FloatingPanel.svelte +4 -4
- package/dist/primitives/NowIndicator.svelte +5 -5
- package/dist/primitives/TimeGutter.svelte +4 -4
- package/dist/theme/auto.d.ts +5 -0
- package/dist/theme/auto.js +16 -3
- package/dist/theme/presets.d.ts +2 -2
- package/dist/theme/presets.js +2 -2
- package/dist/views/agenda/AgendaDay.svelte +207 -323
- package/dist/views/agenda/AgendaWeek.svelte +145 -222
- package/dist/views/mobile/MobileDay.svelte +79 -60
- package/dist/views/mobile/MobileWeek.svelte +48 -38
- package/dist/views/month/MonthGrid.svelte +92 -36
- package/dist/views/planner/PlannerScroll.svelte +78 -72
- package/dist/views/planner/PlannerWeek.svelte +145 -90
- package/dist/views/shared/context.svelte.d.ts +2 -0
- package/dist/views/shared/context.svelte.js +1 -0
- package/dist/views/shared/format.d.ts +3 -0
- package/dist/views/shared/format.js +10 -1
- package/package.json +1 -1
- package/widget/widget.js +816 -725
|
@@ -164,9 +164,11 @@ const weekDays = $derived.by(() => {
|
|
|
164
164
|
out.push({
|
|
165
165
|
ms,
|
|
166
166
|
dayName: weekdayLong(ms, locale),
|
|
167
|
-
|
|
167
|
+
month: monthLong(ms, locale),
|
|
168
|
+
num: dayNum(ms),
|
|
168
169
|
tier,
|
|
169
|
-
|
|
170
|
+
// A dateless weekly template (showDates=false) has no today to mark.
|
|
171
|
+
isToday: showDates && ms === todayMs,
|
|
170
172
|
events: dayEvts,
|
|
171
173
|
allDayEvents: allDayEvts,
|
|
172
174
|
timedEvents: timedEvts,
|
|
@@ -198,7 +200,7 @@ const weekDays = $derived.by(() => {
|
|
|
198
200
|
class:ag-card--tentative={ev.status === 'tentative'}
|
|
199
201
|
class:ag-card--full={ev.status === 'full'}
|
|
200
202
|
class:ag-card--limited={ev.status === 'limited'}
|
|
201
|
-
style:--ev-color={ev.color || 'var(--dt-accent)'}
|
|
203
|
+
style:--ev-color={ev.color || 'var(--dt-event, var(--dt-accent))'}
|
|
202
204
|
aria-label="{ev.title}{statusText(ev)}, {fmt(ev.start)} – {fmt(ev.end)}, {duration(ev)}"
|
|
203
205
|
class:ag-card--drag={dragId === String(ev.id)}
|
|
204
206
|
draggable={canDrag(ev)}
|
|
@@ -210,12 +212,6 @@ const weekDays = $derived.by(() => {
|
|
|
210
212
|
<div class="ag-card-body">
|
|
211
213
|
<EventContent event={ev}>
|
|
212
214
|
<span class="ag-card-title">{ev.title}</span>
|
|
213
|
-
{#if ev.subtitle}
|
|
214
|
-
<span class="ag-card-sub">{ev.subtitle}</span>
|
|
215
|
-
{/if}
|
|
216
|
-
{#if ev.location}
|
|
217
|
-
<span class="ag-card-loc">{ev.location}</span>
|
|
218
|
-
{/if}
|
|
219
215
|
<span class="ag-card-meta">
|
|
220
216
|
{#if isNow}
|
|
221
217
|
{L.until} {fmt(ev.end)}
|
|
@@ -227,6 +223,12 @@ const weekDays = $derived.by(() => {
|
|
|
227
223
|
<span class="ag-card-eta">{eta}</span>
|
|
228
224
|
{/if}
|
|
229
225
|
</span>
|
|
226
|
+
{#if ev.subtitle}
|
|
227
|
+
<span class="ag-card-sub">{ev.subtitle}</span>
|
|
228
|
+
{/if}
|
|
229
|
+
{#if ev.location}
|
|
230
|
+
<span class="ag-card-loc">{ev.location}</span>
|
|
231
|
+
{/if}
|
|
230
232
|
{#if ev.tags?.length}
|
|
231
233
|
<div class="ag-card-tags">
|
|
232
234
|
{#each ev.tags as tag}
|
|
@@ -255,7 +257,7 @@ const weekDays = $derived.by(() => {
|
|
|
255
257
|
class:ag-compact--tentative={ev.status === 'tentative'}
|
|
256
258
|
class:ag-compact--full={ev.status === 'full'}
|
|
257
259
|
class:ag-compact--limited={ev.status === 'limited'}
|
|
258
|
-
style:--ev-color={ev.color || 'var(--dt-accent)'}
|
|
260
|
+
style:--ev-color={ev.color || 'var(--dt-event, var(--dt-accent))'}
|
|
259
261
|
aria-label="{ev.title}{statusText(ev)}{done ? `, ${L.completed}` : ''}, {fmt(ev.start)}, {duration(ev)}"
|
|
260
262
|
onclick={() => handleClick(ev)}
|
|
261
263
|
onpointerenter={() => oneventhover?.(ev)}
|
|
@@ -326,8 +328,9 @@ const weekDays = $derived.by(() => {
|
|
|
326
328
|
onkeydown={ondayclick ? (e) => dayKeydown(e, day.ms) : undefined}
|
|
327
329
|
>
|
|
328
330
|
<div class="ag-wday-head-left">
|
|
331
|
+
{#if showDates}<span class="ag-wday-num">{day.num}</span>{/if}
|
|
329
332
|
<span class="ag-wday-name">{day.dayName}</span>
|
|
330
|
-
{#if showDates}<span class="ag-wday-date">{day.
|
|
333
|
+
{#if showDates}<span class="ag-wday-date">{day.month}</span>{/if}
|
|
331
334
|
</div>
|
|
332
335
|
{#if dayHeaderSnippet}
|
|
333
336
|
<div class="ag-wday-custom-header">
|
|
@@ -382,13 +385,14 @@ const weekDays = $derived.by(() => {
|
|
|
382
385
|
onkeydown={ondayclick ? (e) => dayKeydown(e, day.ms) : undefined}
|
|
383
386
|
>
|
|
384
387
|
<div class="ag-wday-head-left">
|
|
388
|
+
{#if showDates}<span class="ag-wday-num">{day.num}</span>{/if}
|
|
385
389
|
{#if day.isToday}
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
390
|
+
<span class="ag-wday-badge">{L.today}</span>
|
|
391
|
+
{:else if showDates && day.tier === 'tomorrow'}
|
|
392
|
+
<span class="ag-wday-badge ag-wday-badge--muted">{L.tomorrow}</span>
|
|
389
393
|
{/if}
|
|
390
394
|
<span class="ag-wday-name">{day.dayName}</span>
|
|
391
|
-
{#if showDates}<span class="ag-wday-date">{day.
|
|
395
|
+
{#if showDates}<span class="ag-wday-date">{day.month}</span>{/if}
|
|
392
396
|
</div>
|
|
393
397
|
{#if dayHeaderSnippet}
|
|
394
398
|
<div class="ag-wday-custom-header">
|
|
@@ -526,7 +530,7 @@ const weekDays = $derived.by(() => {
|
|
|
526
530
|
width: 100%;
|
|
527
531
|
min-width: 0;
|
|
528
532
|
box-sizing: border-box;
|
|
529
|
-
color: var(--dt-text, rgba(
|
|
533
|
+
color: var(--dt-text, rgba(15, 15, 15, 0.87));
|
|
530
534
|
font-family: var(--dt-sans, system-ui, sans-serif);
|
|
531
535
|
}
|
|
532
536
|
.ag--auto {
|
|
@@ -589,8 +593,8 @@ const weekDays = $derived.by(() => {
|
|
|
589
593
|
.ag-allday-chip {
|
|
590
594
|
display: flex;
|
|
591
595
|
align-items: center;
|
|
592
|
-
gap:
|
|
593
|
-
padding:
|
|
596
|
+
gap: 6px;
|
|
597
|
+
padding: 4px 10px;
|
|
594
598
|
border-radius: 0;
|
|
595
599
|
border: none;
|
|
596
600
|
background: var(--ev-color);
|
|
@@ -603,7 +607,7 @@ const weekDays = $derived.by(() => {
|
|
|
603
607
|
}
|
|
604
608
|
.ag-allday-chip:focus-visible {
|
|
605
609
|
outline: none;
|
|
606
|
-
box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff), 0 0 0 2px var(--dt-accent, #
|
|
610
|
+
box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff), 0 0 0 2px var(--dt-accent, #1d4fd7);
|
|
607
611
|
}
|
|
608
612
|
.ag-allday-chip--selected {
|
|
609
613
|
box-shadow: inset 0 0 0 2px var(--dt-btn-text, #fff);
|
|
@@ -612,15 +616,14 @@ const weekDays = $derived.by(() => {
|
|
|
612
616
|
display: none;
|
|
613
617
|
}
|
|
614
618
|
.ag-allday-title {
|
|
615
|
-
font: 500
|
|
619
|
+
font: 500 13.5px/1.2 var(--dt-sans, system-ui, sans-serif);
|
|
616
620
|
color: inherit;
|
|
617
621
|
white-space: nowrap;
|
|
618
622
|
}
|
|
619
623
|
.ag-allday-span {
|
|
620
|
-
font:
|
|
624
|
+
font: 400 12.5px/1.2 var(--dt-sans, system-ui, sans-serif);
|
|
621
625
|
font-variant-numeric: tabular-nums;
|
|
622
626
|
color: inherit;
|
|
623
|
-
opacity: 0.8;
|
|
624
627
|
white-space: nowrap;
|
|
625
628
|
}
|
|
626
629
|
|
|
@@ -630,11 +633,14 @@ const weekDays = $derived.by(() => {
|
|
|
630
633
|
.ag-card {
|
|
631
634
|
position: relative;
|
|
632
635
|
display: flex;
|
|
636
|
+
/* A <button> shrinks to its content; the NOW card sits outside the
|
|
637
|
+
stretching slot column, so it claims the row explicitly. */
|
|
638
|
+
width: 100%;
|
|
633
639
|
align-items: stretch;
|
|
634
640
|
border-radius: 0;
|
|
635
641
|
background: transparent;
|
|
636
642
|
border: none;
|
|
637
|
-
border-bottom: 1px solid var(--dt-border, rgba(
|
|
643
|
+
border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.3));
|
|
638
644
|
overflow: hidden;
|
|
639
645
|
cursor: pointer;
|
|
640
646
|
transition: background 150ms, box-shadow 150ms;
|
|
@@ -650,18 +656,18 @@ const weekDays = $derived.by(() => {
|
|
|
650
656
|
}
|
|
651
657
|
.ag-card:hover,
|
|
652
658
|
.ag-card:active {
|
|
653
|
-
background: var(--dt-hover, rgba(
|
|
659
|
+
background: var(--dt-hover, rgba(15, 15, 15, 0.04));
|
|
654
660
|
}
|
|
655
661
|
.ag-card:focus-visible {
|
|
656
662
|
outline: none;
|
|
657
|
-
box-shadow: 0 0 0 2px var(--dt-accent, #
|
|
663
|
+
box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
|
|
658
664
|
}
|
|
659
665
|
.ag-card--selected {
|
|
660
666
|
box-shadow: inset 0 0 0 1px var(--ev-color);
|
|
661
667
|
}
|
|
662
668
|
.ag-card--cancelled .ag-card-title {
|
|
663
669
|
text-decoration: line-through;
|
|
664
|
-
color: var(--dt-text-2, rgba(
|
|
670
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
|
|
665
671
|
}
|
|
666
672
|
.ag-card--cancelled::before,
|
|
667
673
|
.ag-card--full::before {
|
|
@@ -670,25 +676,26 @@ const weekDays = $derived.by(() => {
|
|
|
670
676
|
.ag-card--tentative .ag-card-title,
|
|
671
677
|
.ag-card--limited .ag-card-title,
|
|
672
678
|
.ag-card--full .ag-card-title {
|
|
673
|
-
color: var(--dt-text-2, rgba(
|
|
679
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
|
|
674
680
|
}
|
|
675
681
|
.ag-card--tentative::before,
|
|
676
682
|
.ag-card--limited::before {
|
|
677
683
|
background: repeating-linear-gradient(180deg, var(--ev-color) 0 4px, transparent 4px 7px);
|
|
678
684
|
}
|
|
685
|
+
/* Planner scale: title 15/500, time 14 tabular in ink, meta 12.5 in ink-2.
|
|
686
|
+
The body keeps a reading measure so meta never drifts across a wide row. */
|
|
679
687
|
.ag-card-body {
|
|
680
|
-
padding:
|
|
688
|
+
padding: 8px 10px 8px 13px;
|
|
681
689
|
display: flex;
|
|
682
690
|
flex-direction: column;
|
|
683
|
-
gap:
|
|
691
|
+
gap: 3px;
|
|
684
692
|
min-width: 0;
|
|
693
|
+
max-width: 44rem;
|
|
685
694
|
flex: 1;
|
|
686
695
|
}
|
|
687
696
|
.ag-card-title {
|
|
688
|
-
font
|
|
689
|
-
|
|
690
|
-
color: var(--dt-text, rgba(0, 0, 0, 0.87));
|
|
691
|
-
line-height: 1.3;
|
|
697
|
+
font: 500 15px/1.25 var(--dt-sans, system-ui, sans-serif);
|
|
698
|
+
color: var(--dt-text, rgba(15, 15, 15, 0.87));
|
|
692
699
|
word-break: break-word;
|
|
693
700
|
flex: 1;
|
|
694
701
|
min-width: 0;
|
|
@@ -700,53 +707,34 @@ const weekDays = $derived.by(() => {
|
|
|
700
707
|
}
|
|
701
708
|
.ag-card-meta {
|
|
702
709
|
display: flex;
|
|
703
|
-
align-items:
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
710
|
+
align-items: baseline;
|
|
711
|
+
flex-wrap: wrap;
|
|
712
|
+
column-gap: 8px;
|
|
713
|
+
row-gap: 2px;
|
|
714
|
+
font: 400 14px/1.2 var(--dt-sans, system-ui, sans-serif);
|
|
707
715
|
font-variant-numeric: tabular-nums;
|
|
708
|
-
|
|
716
|
+
color: var(--dt-text, rgba(15, 15, 15, 0.87));
|
|
709
717
|
}
|
|
710
|
-
.ag-card-dur
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
.ag-card-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
font-weight: 500;
|
|
718
|
-
color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
|
|
719
|
-
letter-spacing: 0.02em;
|
|
720
|
-
}
|
|
721
|
-
.ag-card-sub {
|
|
722
|
-
font-size: 11px;
|
|
723
|
-
color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
|
|
724
|
-
line-height: 1;
|
|
725
|
-
}
|
|
726
|
-
.ag-card-loc {
|
|
727
|
-
font-size: 10px;
|
|
728
|
-
color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
|
|
729
|
-
line-height: 1;
|
|
718
|
+
.ag-card-dur,
|
|
719
|
+
.ag-card-eta,
|
|
720
|
+
.ag-card-sub,
|
|
721
|
+
.ag-card-loc,
|
|
722
|
+
.ag-card-tag {
|
|
723
|
+
font: 400 12.5px/1.2 var(--dt-sans, system-ui, sans-serif);
|
|
724
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
|
|
730
725
|
}
|
|
731
726
|
.ag-card-tags {
|
|
732
727
|
display: flex;
|
|
733
|
-
gap:
|
|
728
|
+
column-gap: 10px;
|
|
729
|
+
row-gap: 2px;
|
|
734
730
|
flex-wrap: wrap;
|
|
735
731
|
}
|
|
736
732
|
.ag-card-tag {
|
|
737
|
-
font: 500 10.5px / 1 var(--dt-sans, system-ui, sans-serif);
|
|
738
|
-
text-transform: uppercase;
|
|
739
|
-
letter-spacing: 0.04em;
|
|
740
|
-
color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
|
|
741
|
-
background: transparent;
|
|
742
|
-
border: 1px solid var(--dt-border-day, rgba(0, 0, 0, 0.6));
|
|
743
|
-
padding: 2px 5px;
|
|
744
|
-
border-radius: 0;
|
|
745
733
|
white-space: nowrap;
|
|
746
734
|
}
|
|
747
735
|
.ag-card-progress {
|
|
748
736
|
height: 3px;
|
|
749
|
-
background: var(--dt-border, rgba(
|
|
737
|
+
background: var(--dt-border, rgba(15, 15, 15, 0.08));
|
|
750
738
|
border-radius: 0;
|
|
751
739
|
overflow: hidden;
|
|
752
740
|
margin-top: 2px;
|
|
@@ -767,21 +755,17 @@ const weekDays = $derived.by(() => {
|
|
|
767
755
|
|
|
768
756
|
/* ═══ Week day groups ═══ */
|
|
769
757
|
.ag-wday {
|
|
770
|
-
border-bottom: 1px solid var(--dt-border, rgba(
|
|
758
|
+
border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.08));
|
|
771
759
|
}
|
|
772
760
|
.ag-wday:last-child {
|
|
773
761
|
border-bottom: none;
|
|
774
762
|
}
|
|
775
763
|
.ag-wday--today {
|
|
776
|
-
background: color-mix(in srgb, var(--dt-accent, #
|
|
777
|
-
}
|
|
778
|
-
.ag-wday--tomorrow .ag-card {
|
|
779
|
-
opacity: 0.82;
|
|
764
|
+
background: color-mix(in srgb, var(--dt-accent, #1d4fd7) 2%, transparent);
|
|
780
765
|
}
|
|
781
|
-
/* Past days:
|
|
782
|
-
.ag-wday--past .ag-wday-
|
|
783
|
-
color: var(--dt-text-2, rgba(
|
|
784
|
-
font-weight: 500;
|
|
766
|
+
/* Past days: quieter ink from the text tokens, no subtree opacity */
|
|
767
|
+
.ag-wday--past .ag-wday-num {
|
|
768
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
|
|
785
769
|
}
|
|
786
770
|
.ag-wday--past .ag-wday-head {
|
|
787
771
|
padding: 8px 20px 2px;
|
|
@@ -797,8 +781,8 @@ const weekDays = $derived.by(() => {
|
|
|
797
781
|
135deg,
|
|
798
782
|
transparent,
|
|
799
783
|
transparent 4px,
|
|
800
|
-
color-mix(in srgb, var(--dt-text, rgba(
|
|
801
|
-
color-mix(in srgb, var(--dt-text, rgba(
|
|
784
|
+
color-mix(in srgb, var(--dt-text, rgba(15, 15, 15, 0.87)) 8%, transparent) 4px,
|
|
785
|
+
color-mix(in srgb, var(--dt-text, rgba(15, 15, 15, 0.87)) 8%, transparent) 8px
|
|
802
786
|
);
|
|
803
787
|
pointer-events: none;
|
|
804
788
|
}
|
|
@@ -812,7 +796,7 @@ const weekDays = $derived.by(() => {
|
|
|
812
796
|
}
|
|
813
797
|
.ag-wday-head--click:focus-visible,
|
|
814
798
|
.ag-wday-empty--click:focus-visible {
|
|
815
|
-
outline: 2px solid var(--dt-accent, #
|
|
799
|
+
outline: 2px solid var(--dt-accent, #1d4fd7);
|
|
816
800
|
outline-offset: -2px;
|
|
817
801
|
border-radius: 4px;
|
|
818
802
|
}
|
|
@@ -823,7 +807,7 @@ const weekDays = $derived.by(() => {
|
|
|
823
807
|
padding: 8px 20px;
|
|
824
808
|
position: sticky;
|
|
825
809
|
top: 0;
|
|
826
|
-
background: var(--dt-bg, #
|
|
810
|
+
background: var(--dt-bg, #efebe9);
|
|
827
811
|
z-index: 1;
|
|
828
812
|
/* Own compositor layer: without it, fast (async) scrolling repaints
|
|
829
813
|
the pinned header a frame late and a gap flashes above it. */
|
|
@@ -835,34 +819,40 @@ const weekDays = $derived.by(() => {
|
|
|
835
819
|
align-items: baseline;
|
|
836
820
|
gap: 8px;
|
|
837
821
|
}
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
822
|
+
/* The planner's header type: the day number is the typography (40/400,
|
|
823
|
+
narrowed), the weekday a tracked 12/500 label; today takes the accent. */
|
|
824
|
+
.ag-wday-num {
|
|
825
|
+
font: 400 40px/1 var(--dt-sans, system-ui, sans-serif);
|
|
826
|
+
font-stretch: 90%;
|
|
827
|
+
letter-spacing: -0.02em;
|
|
828
|
+
font-variant-numeric: tabular-nums;
|
|
829
|
+
color: var(--dt-text, rgba(15, 15, 15, 0.87));
|
|
830
|
+
margin-inline-end: 4px;
|
|
831
|
+
}
|
|
832
|
+
.ag-wday-badge,
|
|
833
|
+
.ag-wday-name {
|
|
834
|
+
font: 500 12px/1 var(--dt-sans, system-ui, sans-serif);
|
|
841
835
|
letter-spacing: 0.08em;
|
|
842
836
|
text-transform: uppercase;
|
|
843
|
-
color: var(--dt-
|
|
837
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
|
|
844
838
|
}
|
|
845
|
-
.ag-wday
|
|
846
|
-
|
|
839
|
+
.ag-wday--today .ag-wday-num,
|
|
840
|
+
.ag-wday--today .ag-wday-name,
|
|
841
|
+
.ag-wday-badge {
|
|
842
|
+
color: var(--dt-accent, #1d4fd7);
|
|
847
843
|
}
|
|
848
|
-
.ag-wday-
|
|
849
|
-
|
|
850
|
-
font-weight: 600;
|
|
851
|
-
line-height: 1.2;
|
|
844
|
+
.ag-wday .ag-wday-badge--muted {
|
|
845
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
|
|
852
846
|
}
|
|
853
847
|
.ag-wday-date {
|
|
854
|
-
font
|
|
855
|
-
|
|
856
|
-
font-variant-numeric: tabular-nums;
|
|
857
|
-
color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
|
|
858
|
-
line-height: 1.2;
|
|
848
|
+
font: 400 12.5px/1 var(--dt-sans, system-ui, sans-serif);
|
|
849
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
|
|
859
850
|
}
|
|
860
851
|
|
|
861
852
|
.ag-wday-empty {
|
|
862
|
-
padding: 2px 20px
|
|
863
|
-
font-size:
|
|
864
|
-
color: var(--dt-text-
|
|
865
|
-
font-style: italic;
|
|
853
|
+
padding: 2px 20px 8px;
|
|
854
|
+
font-size: 12.5px;
|
|
855
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
|
|
866
856
|
}
|
|
867
857
|
|
|
868
858
|
/* Expanded day */
|
|
@@ -879,11 +869,10 @@ const weekDays = $derived.by(() => {
|
|
|
879
869
|
padding: 2px 0;
|
|
880
870
|
}
|
|
881
871
|
.ag-wslot-now {
|
|
882
|
-
font
|
|
883
|
-
font-weight: 700;
|
|
872
|
+
font: 500 12px/1.2 var(--dt-sans, system-ui, sans-serif);
|
|
884
873
|
letter-spacing: 0.08em;
|
|
885
874
|
text-transform: uppercase;
|
|
886
|
-
color: var(--dt-accent, #
|
|
875
|
+
color: var(--dt-accent, #1d4fd7);
|
|
887
876
|
}
|
|
888
877
|
.ag-wslot-cards {
|
|
889
878
|
display: flex;
|
|
@@ -896,8 +885,8 @@ const weekDays = $derived.by(() => {
|
|
|
896
885
|
gap: 4px;
|
|
897
886
|
}
|
|
898
887
|
.ag-wday-past-line {
|
|
899
|
-
font-size:
|
|
900
|
-
color: var(--dt-text-
|
|
888
|
+
font-size: 12.5px;
|
|
889
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
|
|
901
890
|
padding: 6px 0 0;
|
|
902
891
|
}
|
|
903
892
|
.ag-wday-past-line--summary {
|
|
@@ -915,11 +904,11 @@ const weekDays = $derived.by(() => {
|
|
|
915
904
|
}
|
|
916
905
|
.ag-past-toggle:hover,
|
|
917
906
|
.ag-past-toggle:active {
|
|
918
|
-
color: var(--dt-text
|
|
907
|
+
color: var(--dt-text, rgba(15, 15, 15, 0.87));
|
|
919
908
|
}
|
|
920
909
|
.ag-past-toggle:focus-visible {
|
|
921
910
|
outline: none;
|
|
922
|
-
box-shadow: 0 0 0 2px var(--dt-accent, #
|
|
911
|
+
box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
|
|
923
912
|
border-radius: 4px;
|
|
924
913
|
}
|
|
925
914
|
.ag-past-chevron {
|
|
@@ -931,14 +920,14 @@ const weekDays = $derived.by(() => {
|
|
|
931
920
|
@media (prefers-reduced-motion: reduce) {
|
|
932
921
|
.ag-past-chevron { transition: none; }
|
|
933
922
|
}
|
|
934
|
-
/* Revealed completed events:
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
text-decoration-color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
|
|
938
|
-
}
|
|
923
|
+
/* Revealed completed events: quieter ink (single token layer). Strikethrough
|
|
924
|
+
is kept for cancelled only, so "done" and "called off" never read alike. */
|
|
925
|
+
.ag-compact--done .ag-compact-title,
|
|
939
926
|
.ag-compact--done .ag-compact-time {
|
|
940
|
-
color: var(--dt-text-
|
|
941
|
-
|
|
927
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
|
|
928
|
+
}
|
|
929
|
+
.ag-compact--done::before {
|
|
930
|
+
opacity: 0.45;
|
|
942
931
|
}
|
|
943
932
|
|
|
944
933
|
/* Compact day events */
|
|
@@ -950,9 +939,9 @@ const weekDays = $derived.by(() => {
|
|
|
950
939
|
position: relative;
|
|
951
940
|
display: flex;
|
|
952
941
|
align-items: baseline;
|
|
953
|
-
gap:
|
|
954
|
-
padding:
|
|
955
|
-
border-bottom: 1px solid var(--dt-border, rgba(
|
|
942
|
+
gap: 10px;
|
|
943
|
+
padding: 5px 0 5px 11px;
|
|
944
|
+
border-bottom: 1px solid var(--dt-border, rgba(15, 15, 15, 0.3));
|
|
956
945
|
cursor: pointer;
|
|
957
946
|
min-width: 0;
|
|
958
947
|
width: 100%;
|
|
@@ -975,33 +964,33 @@ const weekDays = $derived.by(() => {
|
|
|
975
964
|
}
|
|
976
965
|
.ag-compact:hover,
|
|
977
966
|
.ag-compact:active {
|
|
978
|
-
background: var(--dt-hover, rgba(
|
|
967
|
+
background: var(--dt-hover, rgba(15, 15, 15, 0.04));
|
|
979
968
|
}
|
|
980
969
|
.ag-compact:focus-visible {
|
|
981
970
|
outline: none;
|
|
982
|
-
box-shadow: 0 0 0 2px var(--dt-accent, #
|
|
971
|
+
box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
|
|
983
972
|
}
|
|
984
973
|
.ag-compact-time {
|
|
985
|
-
font
|
|
986
|
-
font-family: var(--dt-sans, system-ui, sans-serif);
|
|
974
|
+
font: 400 14px/1.3 var(--dt-sans, system-ui, sans-serif);
|
|
987
975
|
font-variant-numeric: tabular-nums;
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
min-width: 40px;
|
|
976
|
+
color: var(--dt-text, rgba(15, 15, 15, 0.87));
|
|
977
|
+
min-width: 4.4em;
|
|
991
978
|
flex-shrink: 0;
|
|
992
979
|
white-space: nowrap;
|
|
993
|
-
line-height: 1.4;
|
|
994
980
|
}
|
|
995
|
-
/* Title + location + subtitle + tags cluster
|
|
996
|
-
|
|
981
|
+
/* Title + location + subtitle + tags cluster, sized to its content so the
|
|
982
|
+
meta and duration sit beside the title instead of across a wide row.
|
|
983
|
+
One line while it fits; on mobile the metadata wraps to a second line
|
|
984
|
+
instead of crushing the title. */
|
|
997
985
|
.ag-compact-main {
|
|
998
986
|
display: flex;
|
|
999
987
|
align-items: baseline;
|
|
1000
|
-
gap:
|
|
1001
|
-
flex: 1;
|
|
988
|
+
gap: 10px;
|
|
989
|
+
flex: 0 1 auto;
|
|
1002
990
|
min-width: 0;
|
|
1003
991
|
}
|
|
1004
992
|
.ag--mobile .ag-compact-main {
|
|
993
|
+
flex: 1;
|
|
1005
994
|
flex-wrap: wrap;
|
|
1006
995
|
row-gap: 2px;
|
|
1007
996
|
}
|
|
@@ -1018,52 +1007,46 @@ const weekDays = $derived.by(() => {
|
|
|
1018
1007
|
max-width: 100%;
|
|
1019
1008
|
}
|
|
1020
1009
|
.ag-compact-title {
|
|
1021
|
-
font
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
flex: 1;
|
|
1010
|
+
font: 500 15px/1.3 var(--dt-sans, system-ui, sans-serif);
|
|
1011
|
+
color: var(--dt-text, rgba(15, 15, 15, 0.87));
|
|
1012
|
+
flex: 0 1 auto;
|
|
1025
1013
|
/* The title is the row's identity — never let subtitle/tags/duration
|
|
1026
1014
|
squeeze it out on narrow screens (min-width: 0 resolves to 0px). */
|
|
1027
|
-
min-width:
|
|
1015
|
+
min-width: 6em;
|
|
1028
1016
|
white-space: nowrap;
|
|
1029
1017
|
overflow: hidden;
|
|
1030
1018
|
text-overflow: ellipsis;
|
|
1031
1019
|
transition: color 150ms;
|
|
1032
|
-
|
|
1020
|
+
}
|
|
1021
|
+
.ag-compact-dur,
|
|
1022
|
+
.ag-compact-sub,
|
|
1023
|
+
.ag-compact-loc,
|
|
1024
|
+
.ag-compact-tag {
|
|
1025
|
+
font: 400 12.5px/1.3 var(--dt-sans, system-ui, sans-serif);
|
|
1026
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
|
|
1027
|
+
white-space: nowrap;
|
|
1033
1028
|
}
|
|
1034
1029
|
.ag-compact-dur {
|
|
1035
|
-
font-size: 10px;
|
|
1036
|
-
font-family: var(--dt-sans, system-ui, sans-serif);
|
|
1037
1030
|
font-variant-numeric: tabular-nums;
|
|
1038
|
-
color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
|
|
1039
1031
|
flex-shrink: 0;
|
|
1040
|
-
white-space: nowrap;
|
|
1041
|
-
line-height: 1.4;
|
|
1042
1032
|
}
|
|
1043
1033
|
.ag-compact-sub {
|
|
1044
|
-
font-size: 10px;
|
|
1045
|
-
color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
|
|
1046
1034
|
flex-shrink: 3;
|
|
1047
1035
|
min-width: 0;
|
|
1048
|
-
white-space: nowrap;
|
|
1049
1036
|
overflow: hidden;
|
|
1050
1037
|
text-overflow: ellipsis;
|
|
1051
|
-
max-width:
|
|
1052
|
-
line-height: 1.4;
|
|
1038
|
+
max-width: 160px;
|
|
1053
1039
|
}
|
|
1054
1040
|
.ag-compact-loc {
|
|
1055
|
-
font-size: 10px;
|
|
1056
|
-
color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
|
|
1057
1041
|
flex-shrink: 3;
|
|
1058
1042
|
min-width: 0;
|
|
1059
|
-
white-space: nowrap;
|
|
1060
1043
|
overflow: hidden;
|
|
1061
1044
|
text-overflow: ellipsis;
|
|
1062
|
-
max-width:
|
|
1045
|
+
max-width: 140px;
|
|
1063
1046
|
}
|
|
1064
1047
|
.ag-compact--cancelled .ag-compact-title {
|
|
1065
1048
|
text-decoration: line-through;
|
|
1066
|
-
color: var(--dt-text-2, rgba(
|
|
1049
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
|
|
1067
1050
|
}
|
|
1068
1051
|
.ag-compact--cancelled::before,
|
|
1069
1052
|
.ag-compact--full::before {
|
|
@@ -1072,42 +1055,33 @@ const weekDays = $derived.by(() => {
|
|
|
1072
1055
|
.ag-compact--tentative .ag-compact-title,
|
|
1073
1056
|
.ag-compact--limited .ag-compact-title,
|
|
1074
1057
|
.ag-compact--full .ag-compact-title {
|
|
1075
|
-
color: var(--dt-text-2, rgba(
|
|
1058
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.54));
|
|
1076
1059
|
}
|
|
1077
1060
|
.ag-compact--tentative::before,
|
|
1078
1061
|
.ag-compact--limited::before {
|
|
1079
1062
|
background: repeating-linear-gradient(180deg, var(--ev-color) 0 4px, transparent 4px 7px);
|
|
1080
1063
|
}
|
|
1081
1064
|
.ag-compact-tag {
|
|
1082
|
-
font: 500 10.5px / 1 var(--dt-sans, system-ui, sans-serif);
|
|
1083
|
-
text-transform: uppercase;
|
|
1084
|
-
letter-spacing: 0.04em;
|
|
1085
|
-
color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
|
|
1086
|
-
background: transparent;
|
|
1087
|
-
border: 1px solid var(--dt-border-day, rgba(0, 0, 0, 0.6));
|
|
1088
|
-
padding: 1px 4px;
|
|
1089
|
-
border-radius: 0;
|
|
1090
|
-
white-space: nowrap;
|
|
1091
1065
|
flex-shrink: 1;
|
|
1092
1066
|
min-width: 2.5em;
|
|
1093
|
-
max-width:
|
|
1067
|
+
max-width: 120px;
|
|
1094
1068
|
overflow: hidden;
|
|
1095
1069
|
text-overflow: ellipsis;
|
|
1096
1070
|
}
|
|
1097
1071
|
.ag-compact-more {
|
|
1098
|
-
font-size:
|
|
1099
|
-
color:
|
|
1100
|
-
padding:
|
|
1072
|
+
font-size: 12.5px;
|
|
1073
|
+
color: var(--dt-text-2, rgba(15, 15, 15, 0.66));
|
|
1074
|
+
padding: 4px 0 0 11px;
|
|
1101
1075
|
cursor: pointer;
|
|
1102
1076
|
display: block;
|
|
1103
1077
|
}
|
|
1104
1078
|
.ag-compact-more:hover,
|
|
1105
1079
|
.ag-compact-more:active {
|
|
1106
|
-
color: var(--dt-text, rgba(
|
|
1080
|
+
color: var(--dt-text, rgba(15, 15, 15, 0.87));
|
|
1107
1081
|
}
|
|
1108
1082
|
.ag-compact-more:focus-visible {
|
|
1109
1083
|
outline: none;
|
|
1110
|
-
box-shadow: 0 0 0 2px var(--dt-accent, #
|
|
1084
|
+
box-shadow: 0 0 0 2px var(--dt-accent, #1d4fd7);
|
|
1111
1085
|
border-radius: 0;
|
|
1112
1086
|
}
|
|
1113
1087
|
|
|
@@ -1116,8 +1090,8 @@ const weekDays = $derived.by(() => {
|
|
|
1116
1090
|
opacity: 0.4;
|
|
1117
1091
|
}
|
|
1118
1092
|
.ag-wday--drop {
|
|
1119
|
-
background: var(--dt-hover, rgba(
|
|
1120
|
-
box-shadow: inset 0 0 0 1px var(--dt-accent, #
|
|
1093
|
+
background: var(--dt-hover, rgba(15, 15, 15, 0.04));
|
|
1094
|
+
box-shadow: inset 0 0 0 1px var(--dt-accent, #1d4fd7);
|
|
1121
1095
|
}
|
|
1122
1096
|
|
|
1123
1097
|
/* ═══ Timetable columns (desktop) ═══ */
|
|
@@ -1128,7 +1102,7 @@ const weekDays = $derived.by(() => {
|
|
|
1128
1102
|
/* Columns stretch to the tallest day, so the separator runs full height */
|
|
1129
1103
|
.ag--cols .ag-wday {
|
|
1130
1104
|
border-bottom: none;
|
|
1131
|
-
border-inline-start: 1px solid var(--dt-border, rgba(
|
|
1105
|
+
border-inline-start: 1px solid var(--dt-border, rgba(15, 15, 15, 0.08));
|
|
1132
1106
|
min-width: 0;
|
|
1133
1107
|
}
|
|
1134
1108
|
.ag--cols .ag-wday:first-child {
|
|
@@ -1181,67 +1155,16 @@ const weekDays = $derived.by(() => {
|
|
|
1181
1155
|
.ag--mobile .ag-wday-compact {
|
|
1182
1156
|
padding: 0 16px 12px;
|
|
1183
1157
|
}
|
|
1158
|
+
/* Type is already on the planner scale; phones only get bigger targets. */
|
|
1184
1159
|
.ag--mobile .ag-card-body {
|
|
1185
1160
|
padding: 12px 14px;
|
|
1186
1161
|
}
|
|
1187
|
-
.ag--mobile .ag-card-title {
|
|
1188
|
-
font-size: 15px;
|
|
1189
|
-
}
|
|
1190
|
-
.ag--mobile .ag-card-meta {
|
|
1191
|
-
font-size: 12px;
|
|
1192
|
-
}
|
|
1193
|
-
.ag--mobile .ag-card-sub {
|
|
1194
|
-
font-size: 12px;
|
|
1195
|
-
}
|
|
1196
|
-
.ag--mobile .ag-card-loc {
|
|
1197
|
-
font-size: 12px;
|
|
1198
|
-
}
|
|
1199
|
-
.ag--mobile .ag-card-eta {
|
|
1200
|
-
font-size: 12px;
|
|
1201
|
-
}
|
|
1202
|
-
.ag--mobile .ag-card-tag {
|
|
1203
|
-
font-size: 11px;
|
|
1204
|
-
}
|
|
1205
1162
|
.ag--mobile .ag-compact {
|
|
1206
|
-
padding: 8px 0;
|
|
1207
|
-
}
|
|
1208
|
-
.ag--mobile .ag-compact-title {
|
|
1209
|
-
font-size: 15px;
|
|
1210
|
-
}
|
|
1211
|
-
.ag--mobile .ag-compact-time {
|
|
1212
|
-
font-size: 12px;
|
|
1213
|
-
}
|
|
1214
|
-
.ag--mobile .ag-compact-dur {
|
|
1215
|
-
font-size: 12px;
|
|
1216
|
-
}
|
|
1217
|
-
.ag--mobile .ag-compact-sub {
|
|
1218
|
-
font-size: 12px;
|
|
1219
|
-
}
|
|
1220
|
-
.ag--mobile .ag-compact-loc {
|
|
1221
|
-
font-size: 11px;
|
|
1222
|
-
}
|
|
1223
|
-
.ag--mobile .ag-compact-tag {
|
|
1224
|
-
font-size: 11px;
|
|
1163
|
+
padding: 8px 0 8px 11px;
|
|
1225
1164
|
}
|
|
1226
1165
|
.ag--mobile .ag-compact-more {
|
|
1227
|
-
font-size: 12px;
|
|
1228
1166
|
padding-top: 6px;
|
|
1229
1167
|
}
|
|
1230
|
-
.ag--mobile .ag-allday-span {
|
|
1231
|
-
font-size: 11px;
|
|
1232
|
-
}
|
|
1233
|
-
.ag--mobile .ag-wday-badge {
|
|
1234
|
-
font-size: 11px;
|
|
1235
|
-
}
|
|
1236
|
-
.ag--mobile .ag-wslot-now {
|
|
1237
|
-
font-size: 11px;
|
|
1238
|
-
}
|
|
1239
|
-
.ag--mobile .ag-wday-empty {
|
|
1240
|
-
font-size: 12px;
|
|
1241
|
-
}
|
|
1242
|
-
.ag--mobile .ag-wday-past-line {
|
|
1243
|
-
font-size: 12px;
|
|
1244
|
-
}
|
|
1245
1168
|
.ag--mobile .ag-wslot-cards--multi {
|
|
1246
1169
|
grid-template-columns: 1fr;
|
|
1247
1170
|
}
|