@nomideusz/svelte-calendar 1.2.0 → 1.3.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.
@@ -164,7 +164,8 @@ const weekDays = $derived.by(() => {
164
164
  out.push({
165
165
  ms,
166
166
  dayName: weekdayLong(ms, locale),
167
- dateLabel: `${monthLong(ms, locale)} ${dayNum(ms)}`,
167
+ month: monthLong(ms, locale),
168
+ num: dayNum(ms),
168
169
  tier,
169
170
  isToday: ms === todayMs,
170
171
  events: dayEvts,
@@ -210,12 +211,6 @@ const weekDays = $derived.by(() => {
210
211
  <div class="ag-card-body">
211
212
  <EventContent event={ev}>
212
213
  <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
214
  <span class="ag-card-meta">
220
215
  {#if isNow}
221
216
  {L.until} {fmt(ev.end)}
@@ -227,6 +222,12 @@ const weekDays = $derived.by(() => {
227
222
  <span class="ag-card-eta">{eta}</span>
228
223
  {/if}
229
224
  </span>
225
+ {#if ev.subtitle}
226
+ <span class="ag-card-sub">{ev.subtitle}</span>
227
+ {/if}
228
+ {#if ev.location}
229
+ <span class="ag-card-loc">{ev.location}</span>
230
+ {/if}
230
231
  {#if ev.tags?.length}
231
232
  <div class="ag-card-tags">
232
233
  {#each ev.tags as tag}
@@ -326,8 +327,9 @@ const weekDays = $derived.by(() => {
326
327
  onkeydown={ondayclick ? (e) => dayKeydown(e, day.ms) : undefined}
327
328
  >
328
329
  <div class="ag-wday-head-left">
330
+ {#if showDates}<span class="ag-wday-num">{day.num}</span>{/if}
329
331
  <span class="ag-wday-name">{day.dayName}</span>
330
- {#if showDates}<span class="ag-wday-date">{day.dateLabel}</span>{/if}
332
+ {#if showDates}<span class="ag-wday-date">{day.month}</span>{/if}
331
333
  </div>
332
334
  {#if dayHeaderSnippet}
333
335
  <div class="ag-wday-custom-header">
@@ -382,13 +384,14 @@ const weekDays = $derived.by(() => {
382
384
  onkeydown={ondayclick ? (e) => dayKeydown(e, day.ms) : undefined}
383
385
  >
384
386
  <div class="ag-wday-head-left">
387
+ {#if showDates}<span class="ag-wday-num">{day.num}</span>{/if}
385
388
  {#if day.isToday}
386
- <span class="ag-wday-badge">{L.today}</span>
387
- {:else if day.tier === 'tomorrow'}
388
- <span class="ag-wday-badge ag-wday-badge--muted">{L.tomorrow}</span>
389
+ <span class="ag-wday-badge">{L.today}</span>
390
+ {:else if day.tier === 'tomorrow'}
391
+ <span class="ag-wday-badge ag-wday-badge--muted">{L.tomorrow}</span>
389
392
  {/if}
390
393
  <span class="ag-wday-name">{day.dayName}</span>
391
- {#if showDates}<span class="ag-wday-date">{day.dateLabel}</span>{/if}
394
+ {#if showDates}<span class="ag-wday-date">{day.month}</span>{/if}
392
395
  </div>
393
396
  {#if dayHeaderSnippet}
394
397
  <div class="ag-wday-custom-header">
@@ -589,8 +592,8 @@ const weekDays = $derived.by(() => {
589
592
  .ag-allday-chip {
590
593
  display: flex;
591
594
  align-items: center;
592
- gap: 4px;
593
- padding: 2px 8px;
595
+ gap: 6px;
596
+ padding: 4px 10px;
594
597
  border-radius: 0;
595
598
  border: none;
596
599
  background: var(--ev-color);
@@ -612,15 +615,14 @@ const weekDays = $derived.by(() => {
612
615
  display: none;
613
616
  }
614
617
  .ag-allday-title {
615
- font: 500 0.7rem/1.2 var(--dt-sans, system-ui, sans-serif);
618
+ font: 500 13.5px/1.2 var(--dt-sans, system-ui, sans-serif);
616
619
  color: inherit;
617
620
  white-space: nowrap;
618
621
  }
619
622
  .ag-allday-span {
620
- font: 500 10px/1.2 var(--dt-sans, system-ui, sans-serif);
623
+ font: 400 12.5px/1.2 var(--dt-sans, system-ui, sans-serif);
621
624
  font-variant-numeric: tabular-nums;
622
625
  color: inherit;
623
- opacity: 0.8;
624
626
  white-space: nowrap;
625
627
  }
626
628
 
@@ -630,6 +632,9 @@ const weekDays = $derived.by(() => {
630
632
  .ag-card {
631
633
  position: relative;
632
634
  display: flex;
635
+ /* A <button> shrinks to its content; the NOW card sits outside the
636
+ stretching slot column, so it claims the row explicitly. */
637
+ width: 100%;
633
638
  align-items: stretch;
634
639
  border-radius: 0;
635
640
  background: transparent;
@@ -676,19 +681,20 @@ const weekDays = $derived.by(() => {
676
681
  .ag-card--limited::before {
677
682
  background: repeating-linear-gradient(180deg, var(--ev-color) 0 4px, transparent 4px 7px);
678
683
  }
684
+ /* Planner scale: title 15/500, time 14 tabular in ink, meta 12.5 in ink-2.
685
+ The body keeps a reading measure so meta never drifts across a wide row. */
679
686
  .ag-card-body {
680
- padding: 7px 10px 7px 13px;
687
+ padding: 8px 10px 8px 13px;
681
688
  display: flex;
682
689
  flex-direction: column;
683
- gap: 2px;
690
+ gap: 3px;
684
691
  min-width: 0;
692
+ max-width: 44rem;
685
693
  flex: 1;
686
694
  }
687
695
  .ag-card-title {
688
- font-size: 13px;
689
- font-weight: 500;
696
+ font: 500 15px/1.25 var(--dt-sans, system-ui, sans-serif);
690
697
  color: var(--dt-text, rgba(0, 0, 0, 0.87));
691
- line-height: 1.3;
692
698
  word-break: break-word;
693
699
  flex: 1;
694
700
  min-width: 0;
@@ -700,48 +706,29 @@ const weekDays = $derived.by(() => {
700
706
  }
701
707
  .ag-card-meta {
702
708
  display: flex;
703
- align-items: center;
704
- font-size: 11px;
705
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
706
- font-family: var(--dt-sans, system-ui, sans-serif);
709
+ align-items: baseline;
710
+ flex-wrap: wrap;
711
+ column-gap: 8px;
712
+ row-gap: 2px;
713
+ font: 400 14px/1.2 var(--dt-sans, system-ui, sans-serif);
707
714
  font-variant-numeric: tabular-nums;
708
- line-height: 1;
709
- }
710
- .ag-card-dur {
711
- margin-left: 6px;
712
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
713
- }
714
- .ag-card-eta {
715
- margin-left: auto;
716
- font-size: 11px;
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;
715
+ color: var(--dt-text, rgba(0, 0, 0, 0.87));
725
716
  }
726
- .ag-card-loc {
727
- font-size: 10px;
728
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
729
- line-height: 1;
717
+ .ag-card-dur,
718
+ .ag-card-eta,
719
+ .ag-card-sub,
720
+ .ag-card-loc,
721
+ .ag-card-tag {
722
+ font: 400 12.5px/1.2 var(--dt-sans, system-ui, sans-serif);
723
+ color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
730
724
  }
731
725
  .ag-card-tags {
732
726
  display: flex;
733
- gap: 4px;
727
+ column-gap: 10px;
728
+ row-gap: 2px;
734
729
  flex-wrap: wrap;
735
730
  }
736
731
  .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
732
  white-space: nowrap;
746
733
  }
747
734
  .ag-card-progress {
@@ -775,13 +762,9 @@ const weekDays = $derived.by(() => {
775
762
  .ag-wday--today {
776
763
  background: color-mix(in srgb, var(--dt-accent, #2563eb) 2%, transparent);
777
764
  }
778
- .ag-wday--tomorrow .ag-card {
779
- opacity: 0.82;
780
- }
781
- /* Past days: token-based text dim instead of subtree opacity (readability) */
782
- .ag-wday--past .ag-wday-name {
783
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
784
- font-weight: 500;
765
+ /* Past days: quieter ink from the text tokens, no subtree opacity */
766
+ .ag-wday--past .ag-wday-num {
767
+ color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
785
768
  }
786
769
  .ag-wday--past .ag-wday-head {
787
770
  padding: 8px 20px 2px;
@@ -835,34 +818,40 @@ const weekDays = $derived.by(() => {
835
818
  align-items: baseline;
836
819
  gap: 8px;
837
820
  }
838
- .ag-wday-badge {
839
- font-size: 10px;
840
- font-weight: 500;
821
+ /* The planner's header type: the day number is the typography (40/400,
822
+ narrowed), the weekday a tracked 12/500 label; today takes the accent. */
823
+ .ag-wday-num {
824
+ font: 400 40px/1 var(--dt-sans, system-ui, sans-serif);
825
+ font-stretch: 90%;
826
+ letter-spacing: -0.02em;
827
+ font-variant-numeric: tabular-nums;
828
+ color: var(--dt-text, rgba(0, 0, 0, 0.87));
829
+ margin-inline-end: 4px;
830
+ }
831
+ .ag-wday-badge,
832
+ .ag-wday-name {
833
+ font: 500 12px/1 var(--dt-sans, system-ui, sans-serif);
841
834
  letter-spacing: 0.08em;
842
835
  text-transform: uppercase;
843
- color: var(--dt-accent, #2563eb);
836
+ color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
844
837
  }
845
- .ag-wday-badge--muted {
846
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
838
+ .ag-wday--today .ag-wday-num,
839
+ .ag-wday--today .ag-wday-name,
840
+ .ag-wday-badge {
841
+ color: var(--dt-accent, #2563eb);
847
842
  }
848
- .ag-wday-name {
849
- font-size: 13px;
850
- font-weight: 600;
851
- line-height: 1.2;
843
+ .ag-wday .ag-wday-badge--muted {
844
+ color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
852
845
  }
853
846
  .ag-wday-date {
854
- font-size: 11px;
855
- font-family: var(--dt-sans, system-ui, sans-serif);
856
- font-variant-numeric: tabular-nums;
857
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
858
- line-height: 1.2;
847
+ font: 400 12.5px/1 var(--dt-sans, system-ui, sans-serif);
848
+ color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
859
849
  }
860
850
 
861
851
  .ag-wday-empty {
862
- padding: 2px 20px 6px;
863
- font-size: 11px;
864
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
865
- font-style: italic;
852
+ padding: 2px 20px 8px;
853
+ font-size: 12.5px;
854
+ color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
866
855
  }
867
856
 
868
857
  /* Expanded day */
@@ -879,8 +868,7 @@ const weekDays = $derived.by(() => {
879
868
  padding: 2px 0;
880
869
  }
881
870
  .ag-wslot-now {
882
- font-size: 10px;
883
- font-weight: 700;
871
+ font: 500 12px/1.2 var(--dt-sans, system-ui, sans-serif);
884
872
  letter-spacing: 0.08em;
885
873
  text-transform: uppercase;
886
874
  color: var(--dt-accent, #2563eb);
@@ -896,8 +884,8 @@ const weekDays = $derived.by(() => {
896
884
  gap: 4px;
897
885
  }
898
886
  .ag-wday-past-line {
899
- font-size: 11px;
900
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
887
+ font-size: 12.5px;
888
+ color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
901
889
  padding: 6px 0 0;
902
890
  }
903
891
  .ag-wday-past-line--summary {
@@ -915,7 +903,7 @@ const weekDays = $derived.by(() => {
915
903
  }
916
904
  .ag-past-toggle:hover,
917
905
  .ag-past-toggle:active {
918
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
906
+ color: var(--dt-text, rgba(0, 0, 0, 0.87));
919
907
  }
920
908
  .ag-past-toggle:focus-visible {
921
909
  outline: none;
@@ -931,14 +919,14 @@ const weekDays = $derived.by(() => {
931
919
  @media (prefers-reduced-motion: reduce) {
932
920
  .ag-past-chevron { transition: none; }
933
921
  }
934
- /* Revealed completed events: dim + strike, single token layer */
935
- .ag-compact--done .ag-compact-title {
936
- text-decoration: line-through;
937
- text-decoration-color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
938
- }
922
+ /* Revealed completed events: quieter ink (single token layer). Strikethrough
923
+ is kept for cancelled only, so "done" and "called off" never read alike. */
924
+ .ag-compact--done .ag-compact-title,
939
925
  .ag-compact--done .ag-compact-time {
940
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
941
- font-weight: 400;
926
+ color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
927
+ }
928
+ .ag-compact--done::before {
929
+ opacity: 0.45;
942
930
  }
943
931
 
944
932
  /* Compact day events */
@@ -950,8 +938,8 @@ const weekDays = $derived.by(() => {
950
938
  position: relative;
951
939
  display: flex;
952
940
  align-items: baseline;
953
- gap: 6px;
954
- padding: 3px 0 3px 9px;
941
+ gap: 10px;
942
+ padding: 5px 0 5px 11px;
955
943
  border-bottom: 1px solid var(--dt-border, rgba(0, 0, 0, 0.3));
956
944
  cursor: pointer;
957
945
  min-width: 0;
@@ -982,26 +970,26 @@ const weekDays = $derived.by(() => {
982
970
  box-shadow: 0 0 0 2px var(--dt-accent, #2563eb);
983
971
  }
984
972
  .ag-compact-time {
985
- font-size: 11px;
986
- font-family: var(--dt-sans, system-ui, sans-serif);
973
+ font: 400 14px/1.3 var(--dt-sans, system-ui, sans-serif);
987
974
  font-variant-numeric: tabular-nums;
988
- font-weight: 400;
989
- color: var(--dt-text-2, rgba(0, 0, 0, 0.54));
990
- min-width: 40px;
975
+ color: var(--dt-text, rgba(0, 0, 0, 0.87));
976
+ min-width: 4.4em;
991
977
  flex-shrink: 0;
992
978
  white-space: nowrap;
993
- line-height: 1.4;
994
979
  }
995
- /* Title + location + subtitle + tags cluster. One line while it fits; on
996
- mobile the metadata wraps to a second line instead of crushing the title. */
980
+ /* Title + location + subtitle + tags cluster, sized to its content so the
981
+ meta and duration sit beside the title instead of across a wide row.
982
+ One line while it fits; on mobile the metadata wraps to a second line
983
+ instead of crushing the title. */
997
984
  .ag-compact-main {
998
985
  display: flex;
999
986
  align-items: baseline;
1000
- gap: 6px;
1001
- flex: 1;
987
+ gap: 10px;
988
+ flex: 0 1 auto;
1002
989
  min-width: 0;
1003
990
  }
1004
991
  .ag--mobile .ag-compact-main {
992
+ flex: 1;
1005
993
  flex-wrap: wrap;
1006
994
  row-gap: 2px;
1007
995
  }
@@ -1018,48 +1006,42 @@ const weekDays = $derived.by(() => {
1018
1006
  max-width: 100%;
1019
1007
  }
1020
1008
  .ag-compact-title {
1021
- font-size: 12px;
1022
- font-weight: 500;
1009
+ font: 500 15px/1.3 var(--dt-sans, system-ui, sans-serif);
1023
1010
  color: var(--dt-text, rgba(0, 0, 0, 0.87));
1024
- flex: 1;
1011
+ flex: 0 1 auto;
1025
1012
  /* The title is the row's identity — never let subtitle/tags/duration
1026
1013
  squeeze it out on narrow screens (min-width: 0 resolves to 0px). */
1027
- min-width: 35%;
1014
+ min-width: 6em;
1028
1015
  white-space: nowrap;
1029
1016
  overflow: hidden;
1030
1017
  text-overflow: ellipsis;
1031
1018
  transition: color 150ms;
1032
- line-height: 1.4;
1019
+ }
1020
+ .ag-compact-dur,
1021
+ .ag-compact-sub,
1022
+ .ag-compact-loc,
1023
+ .ag-compact-tag {
1024
+ font: 400 12.5px/1.3 var(--dt-sans, system-ui, sans-serif);
1025
+ color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
1026
+ white-space: nowrap;
1033
1027
  }
1034
1028
  .ag-compact-dur {
1035
- font-size: 10px;
1036
- font-family: var(--dt-sans, system-ui, sans-serif);
1037
1029
  font-variant-numeric: tabular-nums;
1038
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
1039
1030
  flex-shrink: 0;
1040
- white-space: nowrap;
1041
- line-height: 1.4;
1042
1031
  }
1043
1032
  .ag-compact-sub {
1044
- font-size: 10px;
1045
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
1046
1033
  flex-shrink: 3;
1047
1034
  min-width: 0;
1048
- white-space: nowrap;
1049
1035
  overflow: hidden;
1050
1036
  text-overflow: ellipsis;
1051
- max-width: 120px;
1052
- line-height: 1.4;
1037
+ max-width: 160px;
1053
1038
  }
1054
1039
  .ag-compact-loc {
1055
- font-size: 10px;
1056
- color: var(--dt-text-3, rgba(0, 0, 0, 0.38));
1057
1040
  flex-shrink: 3;
1058
1041
  min-width: 0;
1059
- white-space: nowrap;
1060
1042
  overflow: hidden;
1061
1043
  text-overflow: ellipsis;
1062
- max-width: 100px;
1044
+ max-width: 140px;
1063
1045
  }
1064
1046
  .ag-compact--cancelled .ag-compact-title {
1065
1047
  text-decoration: line-through;
@@ -1079,25 +1061,16 @@ const weekDays = $derived.by(() => {
1079
1061
  background: repeating-linear-gradient(180deg, var(--ev-color) 0 4px, transparent 4px 7px);
1080
1062
  }
1081
1063
  .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
1064
  flex-shrink: 1;
1092
1065
  min-width: 2.5em;
1093
- max-width: 80px;
1066
+ max-width: 120px;
1094
1067
  overflow: hidden;
1095
1068
  text-overflow: ellipsis;
1096
1069
  }
1097
1070
  .ag-compact-more {
1098
- font-size: 11px;
1099
- color: color-mix(in srgb, var(--dt-text, rgba(0, 0, 0, 0.87)) 72%, transparent);
1100
- padding: 2px 0 0 13px;
1071
+ font-size: 12.5px;
1072
+ color: var(--dt-text-2, rgba(0, 0, 0, 0.66));
1073
+ padding: 4px 0 0 11px;
1101
1074
  cursor: pointer;
1102
1075
  display: block;
1103
1076
  }
@@ -1181,67 +1154,16 @@ const weekDays = $derived.by(() => {
1181
1154
  .ag--mobile .ag-wday-compact {
1182
1155
  padding: 0 16px 12px;
1183
1156
  }
1157
+ /* Type is already on the planner scale; phones only get bigger targets. */
1184
1158
  .ag--mobile .ag-card-body {
1185
1159
  padding: 12px 14px;
1186
1160
  }
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
1161
  .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;
1162
+ padding: 8px 0 8px 11px;
1225
1163
  }
1226
1164
  .ag--mobile .ag-compact-more {
1227
- font-size: 12px;
1228
1165
  padding-top: 6px;
1229
1166
  }
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
1167
  .ag--mobile .ag-wslot-cards--multi {
1246
1168
  grid-template-columns: 1fr;
1247
1169
  }