@event-calendar/core 4.2.0 → 4.3.1

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 CHANGED
@@ -227,8 +227,8 @@ This bundle contains a version of the calendar that includes all plugins and is
227
227
 
228
228
  The first step is to include the following lines of code in the `<head>` section of your page:
229
229
  ```html
230
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@event-calendar/build@4.2.0/dist/event-calendar.min.css">
231
- <script src="https://cdn.jsdelivr.net/npm/@event-calendar/build@4.2.0/dist/event-calendar.min.js"></script>
230
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@event-calendar/build@4.3.1/dist/event-calendar.min.css">
231
+ <script src="https://cdn.jsdelivr.net/npm/@event-calendar/build@4.3.1/dist/event-calendar.min.js"></script>
232
232
  ```
233
233
 
234
234
  <details>
package/dist/index.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * EventCalendar v4.2.0
2
+ * EventCalendar v4.3.1
3
3
  * https://github.com/vkurko/calendar
4
4
  */
5
5
  .ec {
@@ -74,6 +74,7 @@
74
74
  display: flex;
75
75
  flex-direction: column;
76
76
  min-width: 0;
77
+ position: relative;
77
78
  }
78
79
  .ec-timeline .ec-content {
79
80
  flex-direction: column;
@@ -725,19 +726,27 @@
725
726
  .ec-now-indicator {
726
727
  position: absolute;
727
728
  z-index: 1005;
729
+ pointer-events: none;
730
+ }
731
+ .ec-time-grid .ec-now-indicator {
728
732
  width: 100%;
729
733
  border-top: var(--ec-now-indicator-color) solid 2px;
730
- pointer-events: none;
734
+ }
735
+ .ec-timeline .ec-now-indicator {
736
+ border-left: var(--ec-now-indicator-color) solid 2px;
737
+ will-change: transform;
731
738
  }
732
739
  .ec-now-indicator:before {
733
740
  background: var(--ec-now-indicator-color);
734
741
  border-radius: 50%;
735
742
  content: "";
736
- position: absolute;
743
+ display: block;
737
744
  height: 12px;
738
745
  margin-top: -7px;
739
746
  width: 12px;
740
- pointer-events: none;
747
+ }
748
+ .ec-timeline .ec-now-indicator:before {
749
+ margin-left: -7px;
741
750
  }
742
751
 
743
752
  .ec-resizer {
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * EventCalendar v4.2.0
2
+ * EventCalendar v4.3.1
3
3
  * https://github.com/vkurko/calendar
4
4
  */
5
5
  import { tick, getContext, untrack, setContext, onMount, mount, unmount } from "svelte";
@@ -299,13 +299,14 @@ function ancestor(el, up) {
299
299
  function height(el) {
300
300
  return rect(el).height;
301
301
  }
302
- function getElementWithPayload(x, y, root2 = document) {
302
+ function getElementWithPayload(x, y, root2 = document, processed = []) {
303
+ processed.push(root2);
303
304
  for (let el of root2.elementsFromPoint(x, y)) {
304
305
  if (hasPayload(el)) {
305
306
  return el;
306
307
  }
307
- if (el.shadowRoot && el.shadowRoot !== root2) {
308
- let shadowEl = getElementWithPayload(x, y, el.shadowRoot);
308
+ if (el.shadowRoot && !processed.includes(el.shadowRoot)) {
309
+ let shadowEl = getElementWithPayload(x, y, el.shadowRoot, processed);
309
310
  if (shadowEl) {
310
311
  return shadowEl;
311
312
  }
@@ -1240,12 +1241,12 @@ function filterOpts(opts, state) {
1240
1241
  function validKey(key, state) {
1241
1242
  return state.hasOwnProperty(key) && key[0] !== "_";
1242
1243
  }
1243
- var root_2$7 = $.template(`<h2></h2>`);
1244
- var root_4$3 = $.template(`<button><i></i></button>`);
1245
- var root_6$1 = $.template(`<button><i></i></button>`);
1246
- var root_8$1 = $.template(`<button> </button>`);
1247
- var root_10$1 = $.template(`<button></button>`);
1248
- var root_12$1 = $.template(`<button> </button>`);
1244
+ var root_2$7 = $.from_html(`<h2></h2>`);
1245
+ var root_4$3 = $.from_html(`<button><i></i></button>`);
1246
+ var root_6$1 = $.from_html(`<button><i></i></button>`);
1247
+ var root_8$1 = $.from_html(`<button> </button>`);
1248
+ var root_10$1 = $.from_html(`<button></button>`);
1249
+ var root_12$1 = $.from_html(`<button> </button>`);
1249
1250
  function Buttons($$anchor, $$props) {
1250
1251
  $.push($$props, false);
1251
1252
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -1464,9 +1465,9 @@ function Buttons($$anchor, $$props) {
1464
1465
  $.pop();
1465
1466
  $$cleanup();
1466
1467
  }
1467
- var root_3$5 = $.template(`<div><!></div>`);
1468
- var root_1$c = $.template(`<div></div>`);
1469
- var root$r = $.template(`<nav></nav>`);
1468
+ var root_3$5 = $.from_html(`<div><!></div>`);
1469
+ var root_1$d = $.from_html(`<div></div>`);
1470
+ var root$r = $.from_html(`<nav></nav>`);
1470
1471
  function Toolbar($$anchor, $$props) {
1471
1472
  $.push($$props, true);
1472
1473
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -1483,7 +1484,7 @@ function Toolbar($$anchor, $$props) {
1483
1484
  });
1484
1485
  var nav = root$r();
1485
1486
  $.each(nav, 21, () => keys($.get(sections)), $.index, ($$anchor2, key) => {
1486
- var div = root_1$c();
1487
+ var div = root_1$d();
1487
1488
  $.each(div, 21, () => $.get(sections)[$.get(key)], $.index, ($$anchor3, buttons) => {
1488
1489
  var fragment = $.comment();
1489
1490
  var node = $.first_child(fragment);
@@ -1600,7 +1601,7 @@ function Auxiliary$1($$anchor, $$props) {
1600
1601
  $.pop();
1601
1602
  $$cleanup();
1602
1603
  }
1603
- var root$q = $.template(`<div><!> <!></div> <!>`, 1);
1604
+ var root$q = $.from_html(`<div><!> <!></div> <!>`, 1);
1604
1605
  function Calendar($$anchor, $$props) {
1605
1606
  $.push($$props, true);
1606
1607
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -1772,8 +1773,8 @@ function days(state) {
1772
1773
  return days2;
1773
1774
  });
1774
1775
  }
1775
- var root_1$b = $.template(`<div role="columnheader"><span></span></div>`);
1776
- var root$p = $.template(`<div><div role="row"></div> <div></div></div>`);
1776
+ var root_1$c = $.from_html(`<div role="columnheader"><span></span></div>`);
1777
+ var root$p = $.from_html(`<div><div role="row"></div> <div></div></div>`);
1777
1778
  function Header$1($$anchor, $$props) {
1778
1779
  $.push($$props, false);
1779
1780
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -1791,7 +1792,7 @@ function Header$1($$anchor, $$props) {
1791
1792
  var div = root$p();
1792
1793
  var div_1 = $.child(div);
1793
1794
  $.each(div_1, 5, $_days, $.index, ($$anchor2, day) => {
1794
- var div_2 = root_1$b();
1795
+ var div_2 = root_1$c();
1795
1796
  var span = $.child(div_2);
1796
1797
  $.action(span, ($$node, $$action_arg) => setContent == null ? void 0 : setContent($$node, $$action_arg), () => $_intlDayHeader().format($.get(day)));
1797
1798
  $.reset(div_2);
@@ -1823,8 +1824,8 @@ function Header$1($$anchor, $$props) {
1823
1824
  $.pop();
1824
1825
  $$cleanup();
1825
1826
  }
1826
- var root_1$a = $.template(`<div></div>`);
1827
- var root$o = $.template(`<article><!></article>`);
1827
+ var root_1$b = $.from_html(`<div></div>`);
1828
+ var root$o = $.from_html(`<article><!></article>`);
1828
1829
  function BaseEvent($$anchor, $$props) {
1829
1830
  $.push($$props, true);
1830
1831
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -1871,7 +1872,7 @@ function BaseEvent($$anchor, $$props) {
1871
1872
  bgEvent($.get(display)) ? $theme().bgEvent : $theme().event,
1872
1873
  ...createEventClasses($eventClassNames(), $.get(event), $_view())
1873
1874
  ]).join(" "));
1874
- let $$d = $.derived(() => createEventContent($$props.chunk, $displayEventEnd(), $eventContent(), $theme(), $_intlEventTime(), $_view())), timeText = $.derived(() => $.get($$d)[0]), content = $.derived(() => $.get($$d)[1]);
1875
+ let $$d = $.derived(() => createEventContent($$props.chunk, $displayEventEnd(), $eventContent(), $theme(), $_intlEventTime(), $_view())), $$array = $.derived(() => $.to_array($.get($$d), 2)), timeText = $.derived(() => $.get($$array)[0]), content = $.derived(() => $.get($$array)[1]);
1875
1876
  onMount(() => {
1876
1877
  if (isFunction($eventDidMount())) {
1877
1878
  $eventDidMount()({
@@ -1909,7 +1910,7 @@ function BaseEvent($$anchor, $$props) {
1909
1910
  };
1910
1911
  {
1911
1912
  const defaultBody = ($$anchor2) => {
1912
- var div = root_1$a();
1913
+ var div = root_1$b();
1913
1914
  $.action(div, ($$node, $$action_arg) => setContent == null ? void 0 : setContent($$node, $$action_arg), () => $.get(content));
1914
1915
  $.template_effect(() => $.set_class(div, 1, $.clsx($theme().eventBody)));
1915
1916
  $.append($$anchor2, div);
@@ -2141,7 +2142,7 @@ function Event$4($$anchor, $$props) {
2141
2142
  $$cleanup();
2142
2143
  return $$pop;
2143
2144
  }
2144
- var root$n = $.template(`<div><div><time></time> <a role="button" tabindex="0">&times;</a></div> <div></div></div>`);
2145
+ var root$n = $.from_html(`<div><div><time></time> <a role="button" tabindex="0">&times;</a></div> <div></div></div>`);
2145
2146
  function Popup($$anchor, $$props) {
2146
2147
  $.push($$props, true);
2147
2148
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -2268,12 +2269,12 @@ function Popup($$anchor, $$props) {
2268
2269
  $$cleanup();
2269
2270
  }
2270
2271
  $.delegate(["pointerdown", "click", "keydown"]);
2271
- var root_1$9 = $.template(`<span></span>`);
2272
- var root_5$1 = $.template(`<div><!></div>`);
2273
- var root_6 = $.template(`<div><!></div>`);
2274
- var root_4$2 = $.template(`<!> <!>`, 1);
2275
- var root_10 = $.template(`<a role="button" tabindex="0" aria-haspopup="true"></a>`);
2276
- var root$m = $.template(`<div role="cell"><div><time></time> <!></div> <div><!></div> <!> <div><!></div> <!> <div><!></div></div>`);
2272
+ var root_1$a = $.from_html(`<span></span>`);
2273
+ var root_5$1 = $.from_html(`<div><!></div>`);
2274
+ var root_6 = $.from_html(`<div><!></div>`);
2275
+ var root_4$2 = $.from_html(`<!> <!>`, 1);
2276
+ var root_10 = $.from_html(`<a role="button" tabindex="0" aria-haspopup="true"></a>`);
2277
+ var root$m = $.from_html(`<div role="cell"><div><time></time> <!></div> <div><!></div> <!> <div><!></div> <!> <div><!></div></div>`);
2277
2278
  function Day$4($$anchor, $$props) {
2278
2279
  $.push($$props, true);
2279
2280
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -2401,7 +2402,7 @@ function Day$4($$anchor, $$props) {
2401
2402
  var node = $.sibling(time, 2);
2402
2403
  {
2403
2404
  var consequent = ($$anchor2) => {
2404
- var span = root_1$9();
2405
+ var span = root_1$a();
2405
2406
  $.action(span, ($$node, $$action_arg) => setContent == null ? void 0 : setContent($$node, $$action_arg), () => $.get(weekNumber));
2406
2407
  $.template_effect(() => $.set_class(span, 1, $theme().weekNumber));
2407
2408
  $.append($$anchor2, span);
@@ -2570,7 +2571,7 @@ function Day$4($$anchor, $$props) {
2570
2571
  return $$pop;
2571
2572
  }
2572
2573
  $.delegate(["pointerdown", "click", "keydown"]);
2573
- var root$l = $.template(`<div role="row"></div>`);
2574
+ var root$l = $.from_html(`<div role="row"></div>`);
2574
2575
  function Week$1($$anchor, $$props) {
2575
2576
  $.push($$props, true);
2576
2577
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -2611,7 +2612,7 @@ function Week$1($$anchor, $$props) {
2611
2612
  prepareEventChunks$1(bgChunks2, $hiddenDays());
2612
2613
  let longChunks2 = prepareEventChunks$1(chunks2, $hiddenDays());
2613
2614
  return [chunks2, bgChunks2, longChunks2];
2614
- }), chunks = $.derived(() => $.get($$d)[0]), bgChunks = $.derived(() => $.get($$d)[1]), longChunks = $.derived(() => $.get($$d)[2]);
2615
+ }), $$array = $.derived(() => $.to_array($.get($$d), 3)), chunks = $.derived(() => $.get($$array)[0]), bgChunks = $.derived(() => $.get($$array)[1]), longChunks = $.derived(() => $.get($$array)[2]);
2615
2616
  let iChunks = $.derived(() => $_iEvents().map((event) => {
2616
2617
  let chunk;
2617
2618
  if (event && eventIntersects(event, $.get(start), $.get(end))) {
@@ -2660,7 +2661,7 @@ function Week$1($$anchor, $$props) {
2660
2661
  $$cleanup();
2661
2662
  return $$pop;
2662
2663
  }
2663
- var root$k = $.template(`<div><div></div></div>`);
2664
+ var root$k = $.from_html(`<div><div></div></div>`);
2664
2665
  function Body$3($$anchor, $$props) {
2665
2666
  $.push($$props, true);
2666
2667
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -2735,7 +2736,7 @@ function Body$3($$anchor, $$props) {
2735
2736
  $.pop();
2736
2737
  $$cleanup();
2737
2738
  }
2738
- var root$j = $.template(`<!> <!>`, 1);
2739
+ var root$j = $.from_html(`<!> <!>`, 1);
2739
2740
  function View$4($$anchor) {
2740
2741
  var fragment = root$j();
2741
2742
  var node = $.first_child(fragment);
@@ -3487,9 +3488,9 @@ function Pointer($$anchor, $$props) {
3487
3488
  $$cleanup();
3488
3489
  return $$pop;
3489
3490
  }
3490
- var root_1$8 = $.template(`<div></div>`);
3491
- var root_2$6 = $.template(`<div></div>`);
3492
- var root$i = $.template(`<!> <!> <!>`, 1);
3491
+ var root_1$9 = $.from_html(`<div></div>`);
3492
+ var root_2$6 = $.from_html(`<div></div>`);
3493
+ var root$i = $.from_html(`<!> <!> <!>`, 1);
3493
3494
  function Resizer($$anchor, $$props) {
3494
3495
  $.push($$props, true);
3495
3496
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -3519,7 +3520,7 @@ function Resizer($$anchor, $$props) {
3519
3520
  var node = $.first_child(fragment);
3520
3521
  {
3521
3522
  var consequent = ($$anchor2) => {
3522
- var div = root_1$8();
3523
+ var div = root_1$9();
3523
3524
  var event_handler = $.derived(() => createResizeHandler(true));
3524
3525
  div.__pointerdown = function(...$$args) {
3525
3526
  var _a;
@@ -3555,7 +3556,7 @@ function Resizer($$anchor, $$props) {
3555
3556
  $$cleanup();
3556
3557
  }
3557
3558
  $.delegate(["pointerdown"]);
3558
- var root$h = $.template(`<!> <!>`, 1);
3559
+ var root$h = $.from_html(`<!> <!>`, 1);
3559
3560
  function Auxiliary($$anchor, $$props) {
3560
3561
  $.push($$props, true);
3561
3562
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -3663,7 +3664,7 @@ const index$3 = {
3663
3664
  state._auxiliary.update(($_auxiliary) => [...$_auxiliary, Auxiliary]);
3664
3665
  }
3665
3666
  };
3666
- var root_1$7 = $.template(`<div></div> <!>`, 1);
3667
+ var root_1$8 = $.from_html(`<div></div> <!>`, 1);
3667
3668
  function Event$3($$anchor, $$props) {
3668
3669
  $.push($$props, true);
3669
3670
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -3681,7 +3682,7 @@ function Event$3($$anchor, $$props) {
3681
3682
  });
3682
3683
  {
3683
3684
  const body = ($$anchor2, defaultBody = $.noop, bgColor = $.noop, txtColor = $.noop) => {
3684
- var fragment_1 = root_1$7();
3685
+ var fragment_1 = root_1$8();
3685
3686
  var div = $.first_child(fragment_1);
3686
3687
  let styles_1;
3687
3688
  var node = $.sibling(div, 2);
@@ -3709,7 +3710,7 @@ function Event$3($$anchor, $$props) {
3709
3710
  $.pop();
3710
3711
  $$cleanup();
3711
3712
  }
3712
- var root_1$6 = $.template(`<div role="listitem"><h4><time></time> <time></time></h4> <!></div>`);
3713
+ var root_1$7 = $.from_html(`<div role="listitem"><h4><time></time> <time></time></h4> <!></div>`);
3713
3714
  function Day$3($$anchor, $$props) {
3714
3715
  $.push($$props, true);
3715
3716
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -3770,7 +3771,7 @@ function Day$3($$anchor, $$props) {
3770
3771
  var node = $.first_child(fragment);
3771
3772
  {
3772
3773
  var consequent = ($$anchor2) => {
3773
- var div = root_1$6();
3774
+ var div = root_1$7();
3774
3775
  div.__pointerdown = function(...$$args) {
3775
3776
  var _a, _b;
3776
3777
  (_b = (_a = $_interaction().action) == null ? void 0 : _a.select) == null ? void 0 : _b.apply(this, $$args);
@@ -3825,8 +3826,8 @@ function onclick$1(jsEvent, $noEventsClick, noEventsClick, $_view, _view) {
3825
3826
  });
3826
3827
  }
3827
3828
  }
3828
- var root_1$5 = $.template(`<div></div>`);
3829
- var root$g = $.template(`<div><div><!></div></div>`);
3829
+ var root_1$6 = $.from_html(`<div></div>`);
3830
+ var root$g = $.from_html(`<div><div><!></div></div>`);
3830
3831
  function Body$2($$anchor, $$props) {
3831
3832
  $.push($$props, true);
3832
3833
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -3866,7 +3867,7 @@ function Body$2($$anchor, $$props) {
3866
3867
  var node = $.child(div_1);
3867
3868
  {
3868
3869
  var consequent = ($$anchor2) => {
3869
- var div_2 = root_1$5();
3870
+ var div_2 = root_1$6();
3870
3871
  div_2.__click = [
3871
3872
  onclick$1,
3872
3873
  $noEventsClick,
@@ -4015,8 +4016,8 @@ function createAllDayContent(allDayContent) {
4015
4016
  }
4016
4017
  return content;
4017
4018
  }
4018
- var root_1$4 = $.template(`<time></time>`);
4019
- var root$f = $.template(`<div><div></div> <!></div> <div role="row"><div><!></div> <!></div>`, 1);
4019
+ var root_1$5 = $.from_html(`<time></time>`);
4020
+ var root$f = $.from_html(`<div><div></div> <!></div> <div role="row"><div><!></div> <!></div>`, 1);
4020
4021
  function Section($$anchor, $$props) {
4021
4022
  $.push($$props, true);
4022
4023
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -4038,7 +4039,7 @@ function Section($$anchor, $$props) {
4038
4039
  $.action(div_1, ($$node, $$action_arg) => setContent == null ? void 0 : setContent($$node, $$action_arg), () => $.get(allDayText));
4039
4040
  var node = $.sibling(div_1, 2);
4040
4041
  $.each(node, 1, $_times, $.index, ($$anchor2, time, i) => {
4041
- var time_1 = root_1$4();
4042
+ var time_1 = root_1$5();
4042
4043
  $.action(time_1, ($$node, $$action_arg) => setContent == null ? void 0 : setContent($$node, $$action_arg), () => $.get(time)[1]);
4043
4044
  $.template_effect(() => {
4044
4045
  $.set_class(time_1, 1, `${$theme().time ?? ""}${(i || $.get(showAllTimes)) && $.get(time)[2] ? "" : " " + $theme().minor}`);
@@ -4085,8 +4086,8 @@ function Section($$anchor, $$props) {
4085
4086
  $.pop();
4086
4087
  $$cleanup();
4087
4088
  }
4088
- var root_2$5 = $.template(`<div></div>`);
4089
- var root$e = $.template(`<div><div><!></div></div>`);
4089
+ var root_2$5 = $.from_html(`<div></div>`);
4090
+ var root$e = $.from_html(`<div><div><!></div></div>`);
4090
4091
  function Body$1($$anchor, $$props) {
4091
4092
  $.push($$props, true);
4092
4093
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -4199,8 +4200,8 @@ function Event$2($$anchor, $$props) {
4199
4200
  $.pop();
4200
4201
  $$cleanup();
4201
4202
  }
4202
- var root$d = $.template(`<div></div>`);
4203
- function NowIndicator($$anchor, $$props) {
4203
+ var root$d = $.from_html(`<div></div>`);
4204
+ function NowIndicator$1($$anchor, $$props) {
4204
4205
  $.push($$props, true);
4205
4206
  const [$$stores, $$cleanup] = $.setup_stores();
4206
4207
  const $_now = () => $.store_get(_now, "$_now", $$stores);
@@ -4217,10 +4218,10 @@ function NowIndicator($$anchor, $$props) {
4217
4218
  _today,
4218
4219
  _slotTimeLimits
4219
4220
  } = getContext("state");
4220
- let start = $.derived(() => ($_now() - $_today()) / 1e3 / 60);
4221
+ let start = $.derived(() => ($_now() - $_today()) / 1e3);
4221
4222
  let top = $.derived(() => {
4222
- let step = $slotDuration().seconds / 60;
4223
- let offset = $_slotTimeLimits().min.seconds / 60;
4223
+ let step = $slotDuration().seconds;
4224
+ let offset = $_slotTimeLimits().min.seconds;
4224
4225
  return ($.get(start) - offset) / step * $slotHeight();
4225
4226
  });
4226
4227
  var div = root$d();
@@ -4232,8 +4233,8 @@ function NowIndicator($$anchor, $$props) {
4232
4233
  $.pop();
4233
4234
  $$cleanup();
4234
4235
  }
4235
- var root_3$4 = $.template(`<!> <!> <!>`, 1);
4236
- var root$c = $.template(`<div role="cell"><div><!></div> <div><!></div> <div><!></div></div>`);
4236
+ var root_3$4 = $.from_html(`<!> <!> <!>`, 1);
4237
+ var root$c = $.from_html(`<div role="cell"><div><!></div> <div><!></div> <div><!></div></div>`);
4237
4238
  function Day$2($$anchor, $$props) {
4238
4239
  $.push($$props, true);
4239
4240
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -4293,7 +4294,7 @@ function Day$2($$anchor, $$props) {
4293
4294
  }
4294
4295
  groupEventChunks(chunks2);
4295
4296
  return [chunks2, bgChunks2];
4296
- }), chunks = $.derived(() => $.get($$d)[0]), bgChunks = $.derived(() => $.get($$d)[1]);
4297
+ }), $$array = $.derived(() => $.to_array($.get($$d), 2)), chunks = $.derived(() => $.get($$array)[0]), bgChunks = $.derived(() => $.get($$array)[1]);
4297
4298
  let iChunks = $.derived(() => {
4298
4299
  if ($.get(disabled)) {
4299
4300
  return [];
@@ -4400,7 +4401,7 @@ function Day$2($$anchor, $$props) {
4400
4401
  var node_6 = $.child(div_3);
4401
4402
  {
4402
4403
  var consequent_4 = ($$anchor2) => {
4403
- NowIndicator($$anchor2, {});
4404
+ NowIndicator$1($$anchor2, {});
4404
4405
  };
4405
4406
  $.if(node_6, ($$render) => {
4406
4407
  if ($nowIndicator() && $.get(isToday) && !$.get(disabled)) $$render(consequent_4);
@@ -4468,8 +4469,8 @@ function Event$1($$anchor, $$props) {
4468
4469
  });
4469
4470
  return $.pop({ reposition });
4470
4471
  }
4471
- var root_3$3 = $.template(`<div><!></div>`);
4472
- var root$b = $.template(`<div role="cell"><div><!></div> <!> <div><!></div></div>`);
4472
+ var root_3$3 = $.from_html(`<div><!></div>`);
4473
+ var root$b = $.from_html(`<div role="cell"><div><!></div> <!> <div><!></div></div>`);
4473
4474
  function Day$1($$anchor, $$props) {
4474
4475
  $.push($$props, true);
4475
4476
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -4637,7 +4638,7 @@ function Week($$anchor, $$props) {
4637
4638
  prepareEventChunks$1(bgChunks2, $hiddenDays());
4638
4639
  let longChunks2 = prepareEventChunks$1(chunks2, $hiddenDays());
4639
4640
  return [chunks2, bgChunks2, longChunks2];
4640
- }), chunks = $.derived(() => $.get($$d)[0]), bgChunks = $.derived(() => $.get($$d)[1]), longChunks = $.derived(() => $.get($$d)[2]);
4641
+ }), $$array = $.derived(() => $.to_array($.get($$d), 3)), chunks = $.derived(() => $.get($$array)[0]), bgChunks = $.derived(() => $.get($$array)[1]), longChunks = $.derived(() => $.get($$array)[2]);
4641
4642
  function reposition() {
4642
4643
  runReposition(refs, $$props.dates);
4643
4644
  }
@@ -4689,9 +4690,9 @@ function Week($$anchor, $$props) {
4689
4690
  $.pop();
4690
4691
  $$cleanup();
4691
4692
  }
4692
- var root_2$4 = $.template(`<div role="columnheader"><time></time></div>`);
4693
- var root_3$2 = $.template(`<div><div><!> <div></div></div></div>`);
4694
- var root$a = $.template(`<div><!> <div></div></div> <!> <!>`, 1);
4693
+ var root_2$4 = $.from_html(`<div role="columnheader"><time></time></div>`);
4694
+ var root_3$2 = $.from_html(`<div><div><!> <div></div></div></div>`);
4695
+ var root$a = $.from_html(`<div><!> <div></div></div> <!> <!>`, 1);
4695
4696
  function View$2($$anchor, $$props) {
4696
4697
  $.push($$props, false);
4697
4698
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -4826,7 +4827,7 @@ const TimeGrid = {
4826
4827
  state._times = times(state);
4827
4828
  }
4828
4829
  };
4829
- var root$9 = $.template(`<span></span>`);
4830
+ var root$9 = $.from_html(`<span></span>`);
4830
4831
  function Label$1($$anchor, $$props) {
4831
4832
  $.push($$props, true);
4832
4833
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -4879,17 +4880,17 @@ function Label$1($$anchor, $$props) {
4879
4880
  $.pop();
4880
4881
  $$cleanup();
4881
4882
  }
4882
- var root_3$1 = $.template(`<div><time></time></div>`);
4883
- var root_4$1 = $.template(`<div><!></div>`);
4884
- var root_7 = $.template(`<div role="columnheader"><!></div>`);
4885
- var root_8 = $.template(`<div role="columnheader"><time></time></div>`);
4886
- var root_5 = $.template(`<div></div>`);
4887
- var root_2$3 = $.template(`<div><!> <!></div>`);
4888
- var root_12 = $.template(`<div></div>`);
4889
- var root_15 = $.template(`<div><!></div>`);
4890
- var root_9 = $.template(`<div><div><!> <div></div></div></div>`);
4891
- var root_17 = $.template(`<div></div>`);
4892
- var root$8 = $.template(`<div><!> <div></div></div> <!> <!>`, 1);
4883
+ var root_3$1 = $.from_html(`<div><time></time></div>`);
4884
+ var root_4$1 = $.from_html(`<div><!></div>`);
4885
+ var root_7 = $.from_html(`<div role="columnheader"><!></div>`);
4886
+ var root_8 = $.from_html(`<div role="columnheader"><time></time></div>`);
4887
+ var root_5 = $.from_html(`<div></div>`);
4888
+ var root_2$3 = $.from_html(`<div><!> <!></div>`);
4889
+ var root_12 = $.from_html(`<div></div>`);
4890
+ var root_15 = $.from_html(`<div><!></div>`);
4891
+ var root_9 = $.from_html(`<div><div><!> <div></div></div></div>`);
4892
+ var root_17 = $.from_html(`<div></div>`);
4893
+ var root$8 = $.from_html(`<div><!> <div></div></div> <!> <!>`, 1);
4893
4894
  function View$1($$anchor, $$props) {
4894
4895
  $.push($$props, true);
4895
4896
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -5209,7 +5210,7 @@ function dayTimes(state) {
5209
5210
  function nestedResources(state) {
5210
5211
  return derived(state.resources, ($resources) => $resources.some((resource) => getPayload(resource).children.length));
5211
5212
  }
5212
- var root$7 = $.template(`<span></span>`);
5213
+ var root$7 = $.from_html(`<span></span>`);
5213
5214
  function Label($$anchor, $$props) {
5214
5215
  $.push($$props, true);
5215
5216
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -5250,9 +5251,9 @@ function onclick(_, expanded, payload, toggle, resources) {
5250
5251
  toggle($.get(payload).children, $.get(expanded));
5251
5252
  resources.update(identity);
5252
5253
  }
5253
- var root_1$3 = $.template(`<span></span>`);
5254
- var root_2$2 = $.template(`<button><!></button>`);
5255
- var root$6 = $.template(`<!> <span><!></span>`, 1);
5254
+ var root_1$4 = $.from_html(`<span></span>`);
5255
+ var root_2$2 = $.from_html(`<button><!></button>`);
5256
+ var root$6 = $.from_html(`<!> <span><!></span>`, 1);
5256
5257
  function Expander($$anchor, $$props) {
5257
5258
  $.push($$props, true);
5258
5259
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -5276,7 +5277,7 @@ function Expander($$anchor, $$props) {
5276
5277
  var fragment = root$6();
5277
5278
  var node = $.first_child(fragment);
5278
5279
  $.each(node, 17, () => Array($.get(payload).level), $.index, ($$anchor2, level) => {
5279
- var span = root_1$3();
5280
+ var span = root_1$4();
5280
5281
  $.template_effect(() => $.set_class(span, 1, $theme().expander));
5281
5282
  $.append($$anchor2, span);
5282
5283
  });
@@ -5323,8 +5324,8 @@ function Expander($$anchor, $$props) {
5323
5324
  $$cleanup();
5324
5325
  }
5325
5326
  $.delegate(["click"]);
5326
- var root_1$2 = $.template(`<div role="rowheader"><!> <!></div>`);
5327
- var root$5 = $.template(`<div><div></div> <div></div></div>`);
5327
+ var root_1$3 = $.from_html(`<div role="rowheader"><!> <!></div>`);
5328
+ var root$5 = $.from_html(`<div><div></div> <div></div></div>`);
5328
5329
  function Sidebar($$anchor, $$props) {
5329
5330
  $.push($$props, false);
5330
5331
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -5352,7 +5353,7 @@ function Sidebar($$anchor, $$props) {
5352
5353
  var div_1 = $.child(div);
5353
5354
  var div_2 = $.sibling(div_1, 2);
5354
5355
  $.each(div_2, 5, $_viewResources, $.index, ($$anchor2, resource) => {
5355
- var div_3 = root_1$2();
5356
+ var div_3 = root_1$3();
5356
5357
  var node = $.child(div_3);
5357
5358
  {
5358
5359
  var consequent = ($$anchor3) => {
@@ -5399,17 +5400,18 @@ function Sidebar($$anchor, $$props) {
5399
5400
  $.pop();
5400
5401
  $$cleanup();
5401
5402
  }
5402
- var root_3 = $.template(`<div role="columnheader"><time></time></div>`);
5403
- var root_2$1 = $.template(`<div><time></time></div> <div></div>`, 1);
5404
- var root_4 = $.template(`<div role="columnheader"><time></time></div>`);
5405
- var root_1$1 = $.template(`<div><!></div>`);
5406
- var root$4 = $.template(`<div><div role="row"></div> <div></div></div>`);
5403
+ var root_3 = $.from_html(`<div role="columnheader"><time></time></div>`);
5404
+ var root_2$1 = $.from_html(`<div><time></time></div> <div></div>`, 1);
5405
+ var root_4 = $.from_html(`<div role="columnheader"><time></time></div>`);
5406
+ var root_1$2 = $.from_html(`<div><!></div>`);
5407
+ var root$4 = $.from_html(`<div><div role="row"></div> <div></div></div>`);
5407
5408
  function Header($$anchor, $$props) {
5408
5409
  $.push($$props, false);
5409
5410
  const [$$stores, $$cleanup] = $.setup_stores();
5410
5411
  const $theme = () => $.store_get(theme, "$theme", $$stores);
5411
5412
  const $_headerEl = () => $.store_get(_headerEl, "$_headerEl", $$stores);
5412
5413
  const $_viewDates = () => $.store_get(_viewDates, "$_viewDates", $$stores);
5414
+ const $_today = () => $.store_get(_today, "$_today", $$stores);
5413
5415
  const $slotDuration = () => $.store_get(slotDuration, "$slotDuration", $$stores);
5414
5416
  const $_intlDayHeaderAL = () => $.store_get(_intlDayHeaderAL, "$_intlDayHeaderAL", $$stores);
5415
5417
  const $_intlDayHeader = () => $.store_get(_intlDayHeader, "$_intlDayHeader", $$stores);
@@ -5420,6 +5422,7 @@ function Header($$anchor, $$props) {
5420
5422
  _intlDayHeader,
5421
5423
  _intlDayHeaderAL,
5422
5424
  _dayTimes,
5425
+ _today,
5423
5426
  _viewDates,
5424
5427
  slotDuration,
5425
5428
  theme
@@ -5428,7 +5431,7 @@ function Header($$anchor, $$props) {
5428
5431
  var div = root$4();
5429
5432
  var div_1 = $.child(div);
5430
5433
  $.each(div_1, 5, $_viewDates, $.index, ($$anchor2, date) => {
5431
- var div_2 = root_1$1();
5434
+ var div_2 = root_1$2();
5432
5435
  var node = $.child(div_2);
5433
5436
  {
5434
5437
  var consequent = ($$anchor3) => {
@@ -5491,12 +5494,13 @@ function Header($$anchor, $$props) {
5491
5494
  }
5492
5495
  $.reset(div_2);
5493
5496
  $.template_effect(
5494
- ($0) => $.set_class(div_2, 1, `${$theme().day ?? ""} ${$0 ?? ""}`),
5497
+ ($0, $1) => $.set_class(div_2, 1, `${$theme().day ?? ""} ${$0 ?? ""}${$1 ?? ""}`),
5495
5498
  [
5496
5499
  () => {
5497
5500
  var _a;
5498
5501
  return (_a = $theme().weekdays) == null ? void 0 : _a[$.get(date).getUTCDay()];
5499
- }
5502
+ },
5503
+ () => datesEqual($.get(date), $_today()) ? " " + $theme().today : ""
5500
5504
  ],
5501
5505
  $.derived_safe_equal
5502
5506
  );
@@ -5699,8 +5703,8 @@ function Event($$anchor, $$props) {
5699
5703
  $$cleanup();
5700
5704
  return $$pop;
5701
5705
  }
5702
- var root_1 = $.template(`<!> <!> <!> <!>`, 1);
5703
- var root$3 = $.template(`<div role="cell"><div><!></div></div>`);
5706
+ var root_1$1 = $.from_html(`<!> <!> <!> <!>`, 1);
5707
+ var root$3 = $.from_html(`<div role="cell"><div><!></div></div>`);
5704
5708
  function Day($$anchor, $$props) {
5705
5709
  $.push($$props, true);
5706
5710
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -5761,7 +5765,7 @@ function Day($$anchor, $$props) {
5761
5765
  var node = $.child(div_1);
5762
5766
  {
5763
5767
  var consequent_2 = ($$anchor2) => {
5764
- var fragment = root_1();
5768
+ var fragment = root_1$1();
5765
5769
  var node_1 = $.first_child(fragment);
5766
5770
  $.each(node_1, 17, () => $.get(dayBgChunks), (chunk) => chunk.event, ($$anchor3, chunk) => {
5767
5771
  Event($$anchor3, {
@@ -5850,7 +5854,7 @@ function Day($$anchor, $$props) {
5850
5854
  return $$pop;
5851
5855
  }
5852
5856
  $.delegate(["pointerdown"]);
5853
- var root$2 = $.template(`<div role="row"></div>`);
5857
+ var root$2 = $.from_html(`<div role="row"></div>`);
5854
5858
  function Days($$anchor, $$props) {
5855
5859
  $.push($$props, true);
5856
5860
  const [$$stores, $$cleanup] = $.setup_stores();
@@ -5886,7 +5890,7 @@ function Days($$anchor, $$props) {
5886
5890
  addDay(end2);
5887
5891
  }
5888
5892
  return [start2, end2];
5889
- }), start = $.derived(() => $.get($$d)[0]), end = $.derived(() => $.get($$d)[1]);
5893
+ }), $$array = $.derived(() => $.to_array($.get($$d), 2)), start = $.derived(() => $.get($$array)[0]), end = $.derived(() => $.get($$array)[1]);
5890
5894
  let $$d_1 = $.derived(() => {
5891
5895
  let chunks2 = [];
5892
5896
  let bgChunks2 = [];
@@ -5904,7 +5908,7 @@ function Days($$anchor, $$props) {
5904
5908
  [bgChunks2] = prepareEventChunks(bgChunks2, $_viewDates(), $_dayTimeLimits(), $slotDuration());
5905
5909
  [chunks2, longChunks2] = prepareEventChunks(chunks2, $_viewDates(), $_dayTimeLimits(), $slotDuration());
5906
5910
  return [chunks2, bgChunks2, longChunks2];
5907
- }), chunks = $.derived(() => $.get($$d_1)[0]), bgChunks = $.derived(() => $.get($$d_1)[1]), longChunks = $.derived(() => $.get($$d_1)[2]);
5911
+ }), $$array_3 = $.derived(() => $.to_array($.get($$d_1), 3)), chunks = $.derived(() => $.get($$array_3)[0]), bgChunks = $.derived(() => $.get($$array_3)[1]), longChunks = $.derived(() => $.get($$array_3)[2]);
5908
5912
  let iChunks = $.derived(() => $_iEvents().map((event) => {
5909
5913
  let chunk;
5910
5914
  if (event && eventIntersects(event, $.get(start), $.get(end), $$props.resource)) {
@@ -5961,14 +5965,14 @@ function Days($$anchor, $$props) {
5961
5965
  $$cleanup();
5962
5966
  return $$pop;
5963
5967
  }
5964
- var root_2 = $.template(`<div></div>`);
5965
- var root$1 = $.template(`<div><div><div></div> <!></div></div>`);
5968
+ var root_2 = $.from_html(`<div></div>`);
5969
+ var root$1 = $.from_html(`<div><div><div></div> <!></div></div>`);
5966
5970
  function Body($$anchor, $$props) {
5967
5971
  $.push($$props, true);
5968
5972
  const [$$stores, $$cleanup] = $.setup_stores();
5969
- const $_bodyEl = () => $.store_get(_bodyEl, "$_bodyEl", $$stores);
5970
5973
  const $_dayTimeLimits = () => $.store_get(_dayTimeLimits, "$_dayTimeLimits", $$stores);
5971
5974
  const $_viewDates = () => $.store_get(_viewDates, "$_viewDates", $$stores);
5975
+ const $_bodyEl = () => $.store_get(_bodyEl, "$_bodyEl", $$stores);
5972
5976
  const $scrollTime = () => $.store_get(scrollTime, "$scrollTime", $$stores);
5973
5977
  const $slotDuration = () => $.store_get(slotDuration, "$slotDuration", $$stores);
5974
5978
  const $slotWidth = () => $.store_get(slotWidth, "$slotWidth", $$stores);
@@ -5981,28 +5985,28 @@ function Body($$anchor, $$props) {
5981
5985
  const $_dayTimes = () => $.store_get(_dayTimes, "$_dayTimes", $$stores);
5982
5986
  let {
5983
5987
  _bodyEl,
5988
+ _bodyHeight,
5989
+ _bodyWidth,
5990
+ _bodyScrollLeft,
5984
5991
  _headerEl,
5985
5992
  _events,
5986
5993
  _sidebarEl,
5987
5994
  _dayTimes,
5988
5995
  _dayTimeLimits,
5996
+ _recheckScrollable,
5989
5997
  _resHs,
5990
5998
  _viewResources,
5991
5999
  _viewDates,
5992
- _recheckScrollable,
5993
6000
  scrollTime,
5994
6001
  slotDuration,
5995
6002
  slotWidth,
5996
6003
  theme
5997
6004
  } = getContext("state");
5998
- let el = $.state(void 0);
5999
6005
  let refs = [];
6000
- $.user_effect(() => {
6001
- $.store_set(_bodyEl, $.get(el));
6002
- });
6003
6006
  function scrollToTime() {
6004
6007
  let slotTimeLimits2 = getSlotTimeLimits($_dayTimeLimits(), $_viewDates()[0]);
6005
- $.get(el).scrollLeft = (toSeconds($scrollTime()) - toSeconds(slotTimeLimits2.min)) / toSeconds($slotDuration()) * $slotWidth();
6008
+ $.store_mutate(_bodyEl, $.untrack($_bodyEl).scrollLeft = (toSeconds($scrollTime()) - toSeconds(slotTimeLimits2.min)) / toSeconds($slotDuration()) * $slotWidth(), $.untrack($_bodyEl));
6009
+ $.store_set(_bodyScrollLeft, $_bodyEl().scrollLeft);
6006
6010
  }
6007
6011
  $.user_effect(() => {
6008
6012
  $_viewDates();
@@ -6021,6 +6025,12 @@ function Body($$anchor, $$props) {
6021
6025
  function onscroll() {
6022
6026
  $.store_mutate(_headerEl, $.untrack($_headerEl).scrollLeft = $_bodyEl().scrollLeft, $.untrack($_headerEl));
6023
6027
  $.store_mutate(_sidebarEl, $.untrack($_sidebarEl).scrollTop = $_bodyEl().scrollTop, $.untrack($_sidebarEl));
6028
+ $.store_set(_bodyScrollLeft, $_bodyEl().scrollLeft);
6029
+ }
6030
+ function onresize() {
6031
+ $.store_set(_bodyHeight, $_bodyEl().clientHeight);
6032
+ $.store_set(_bodyWidth, $_bodyEl().clientWidth);
6033
+ $.store_set(_recheckScrollable, true);
6024
6034
  }
6025
6035
  var div = root$1();
6026
6036
  $.event("resize", $.window, reposition);
@@ -6052,8 +6062,8 @@ function Body($$anchor, $$props) {
6052
6062
  });
6053
6063
  $.reset(div_1);
6054
6064
  $.reset(div);
6055
- $.bind_this(div, ($$value) => $.set(el, $$value), () => $.get(el));
6056
- $.action(div, ($$node, $$action_arg) => observeResize == null ? void 0 : observeResize($$node, $$action_arg), () => () => $.store_set(_recheckScrollable, true));
6065
+ $.bind_this(div, ($$value) => $.store_set(_bodyEl, $$value), () => $_bodyEl());
6066
+ $.action(div, ($$node, $$action_arg) => observeResize == null ? void 0 : observeResize($$node, $$action_arg), () => onresize);
6057
6067
  $.template_effect(() => {
6058
6068
  $.set_class(div, 1, $theme().body);
6059
6069
  $.set_class(div_1, 1, $theme().content);
@@ -6064,12 +6074,85 @@ function Body($$anchor, $$props) {
6064
6074
  $.pop();
6065
6075
  $$cleanup();
6066
6076
  }
6067
- var root = $.template(`<div><!> <div><!> <!></div></div>`);
6077
+ var root_1 = $.from_html(`<div></div>`);
6078
+ function NowIndicator($$anchor, $$props) {
6079
+ $.push($$props, true);
6080
+ const [$$stores, $$cleanup] = $.setup_stores();
6081
+ const $_viewDates = () => $.store_get(_viewDates, "$_viewDates", $$stores);
6082
+ const $_dayTimeLimits = () => $.store_get(_dayTimeLimits, "$_dayTimeLimits", $$stores);
6083
+ const $_today = () => $.store_get(_today, "$_today", $$stores);
6084
+ const $_now = () => $.store_get(_now, "$_now", $$stores);
6085
+ const $slotDuration = () => $.store_get(slotDuration, "$slotDuration", $$stores);
6086
+ const $slotWidth = () => $.store_get(slotWidth, "$slotWidth", $$stores);
6087
+ const $_bodyScrollLeft = () => $.store_get(_bodyScrollLeft, "$_bodyScrollLeft", $$stores);
6088
+ const $_bodyWidth = () => $.store_get(_bodyWidth, "$_bodyWidth", $$stores);
6089
+ const $theme = () => $.store_get(theme, "$theme", $$stores);
6090
+ const $_headerHeight = () => $.store_get(_headerHeight, "$_headerHeight", $$stores);
6091
+ const $_bodyHeight = () => $.store_get(_bodyHeight, "$_bodyHeight", $$stores);
6092
+ let {
6093
+ slotDuration,
6094
+ slotWidth,
6095
+ theme,
6096
+ _bodyHeight,
6097
+ _bodyWidth,
6098
+ _bodyScrollLeft,
6099
+ _headerHeight,
6100
+ _dayTimeLimits,
6101
+ _now,
6102
+ _today,
6103
+ _viewDates
6104
+ } = getContext("state");
6105
+ let left = $.derived(() => {
6106
+ let offset = 0;
6107
+ for (let i = 0; i < $_viewDates().length; ++i) {
6108
+ let slotTimeLimits2 = getSlotTimeLimits($_dayTimeLimits(), $_viewDates()[i]);
6109
+ if (datesEqual($_viewDates()[i], $_today())) {
6110
+ let dayStart = addDuration(cloneDate($_viewDates()[i]), slotTimeLimits2.min);
6111
+ let dayEnd = addDuration(cloneDate($_viewDates()[i]), slotTimeLimits2.max);
6112
+ if ($_now() >= dayStart && $_now() <= dayEnd) {
6113
+ offset += ($_now() - dayStart) / 1e3;
6114
+ break;
6115
+ } else {
6116
+ return null;
6117
+ }
6118
+ } else {
6119
+ offset += slotTimeLimits2.max.seconds - slotTimeLimits2.min.seconds;
6120
+ }
6121
+ }
6122
+ let step = $slotDuration().seconds;
6123
+ return offset / step * $slotWidth() - $_bodyScrollLeft();
6124
+ });
6125
+ var fragment = $.comment();
6126
+ var node = $.first_child(fragment);
6127
+ {
6128
+ var consequent = ($$anchor2) => {
6129
+ var div = root_1();
6130
+ let styles;
6131
+ $.template_effect(() => {
6132
+ $.set_class(div, 1, $theme().nowIndicator);
6133
+ styles = $.set_style(div, "", styles, {
6134
+ top: `${$_headerHeight() + 2}px`,
6135
+ left: `${$.get(left) ?? ""}px`,
6136
+ height: `${$_bodyHeight() - 1}px`
6137
+ });
6138
+ });
6139
+ $.append($$anchor2, div);
6140
+ };
6141
+ $.if(node, ($$render) => {
6142
+ if ($.get(left) !== null && $.get(left) >= 3 && $.get(left) <= $_bodyWidth() - 3) $$render(consequent);
6143
+ });
6144
+ }
6145
+ $.append($$anchor, fragment);
6146
+ $.pop();
6147
+ $$cleanup();
6148
+ }
6149
+ var root = $.from_html(`<div><!> <div><!> <!> <!></div></div>`);
6068
6150
  function View($$anchor, $$props) {
6069
6151
  $.push($$props, false);
6070
6152
  const [$$stores, $$cleanup] = $.setup_stores();
6071
6153
  const $theme = () => $.store_get(theme, "$theme", $$stores);
6072
- let { theme } = getContext("state");
6154
+ const $nowIndicator = () => $.store_get(nowIndicator, "$nowIndicator", $$stores);
6155
+ let { nowIndicator, theme } = getContext("state");
6073
6156
  $.init();
6074
6157
  var div = root();
6075
6158
  var node = $.child(div);
@@ -6079,6 +6162,15 @@ function View($$anchor, $$props) {
6079
6162
  Header(node_1, {});
6080
6163
  var node_2 = $.sibling(node_1, 2);
6081
6164
  Body(node_2, {});
6165
+ var node_3 = $.sibling(node_2, 2);
6166
+ {
6167
+ var consequent = ($$anchor2) => {
6168
+ NowIndicator($$anchor2, {});
6169
+ };
6170
+ $.if(node_3, ($$render) => {
6171
+ if ($nowIndicator()) $$render(consequent);
6172
+ });
6173
+ }
6082
6174
  $.reset(div_1);
6083
6175
  $.reset(div);
6084
6176
  $.template_effect(() => {
@@ -6135,6 +6227,9 @@ const index = {
6135
6227
  if (!("_viewResources" in state)) {
6136
6228
  state._viewResources = viewResources(state);
6137
6229
  }
6230
+ state._bodyHeight = writable(0);
6231
+ state._bodyWidth = writable(0);
6232
+ state._bodyScrollLeft = writable(0);
6138
6233
  state._headerEl = writable(void 0);
6139
6234
  state._headerHeight = writable(0);
6140
6235
  state._dayTimeLimits = dayTimeLimits(state);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-calendar/core",
3
- "version": "4.2.0",
3
+ "version": "4.3.1",
4
4
  "title": "Event Calendar Core package",
5
5
  "description": "Full-sized drag & drop event calendar with resource & timeline views",
6
6
  "keywords": [
@@ -32,6 +32,6 @@
32
32
  "#components": "./src/lib/components/index.js"
33
33
  },
34
34
  "dependencies": {
35
- "svelte": "^5.28.6"
35
+ "svelte": "^5.33.14"
36
36
  }
37
37
  }
package/src/lib/dom.js CHANGED
@@ -35,14 +35,15 @@ export function height(el) {
35
35
  return rect(el).height;
36
36
  }
37
37
 
38
- export function getElementWithPayload(x, y, root = document) {
38
+ export function getElementWithPayload(x, y, root = document, processed = []) {
39
+ processed.push(root);
39
40
  for (let el of root.elementsFromPoint(x, y)) {
40
41
  if (hasPayload(el)) {
41
42
  return el;
42
43
  }
43
44
  /** @see https://github.com/vkurko/calendar/issues/142 */
44
- if (el.shadowRoot && el.shadowRoot !== root) {
45
- let shadowEl = getElementWithPayload(x, y, el.shadowRoot);
45
+ if (el.shadowRoot && !processed.includes(el.shadowRoot)) {
46
+ let shadowEl = getElementWithPayload(x, y, el.shadowRoot, processed);
46
47
  if (shadowEl) {
47
48
  return shadowEl;
48
49
  }
@@ -4,19 +4,15 @@
4
4
  import {getSlotTimeLimits} from './lib.js';
5
5
  import Days from './Days.svelte';
6
6
 
7
- let {_bodyEl, _headerEl, _events, _sidebarEl, _dayTimes, _dayTimeLimits, _resHs, _viewResources, _viewDates,
8
- _recheckScrollable, scrollTime, slotDuration, slotWidth, theme} = getContext('state');
7
+ let {_bodyEl, _bodyHeight, _bodyWidth, _bodyScrollLeft, _headerEl, _events, _sidebarEl, _dayTimes, _dayTimeLimits,
8
+ _recheckScrollable, _resHs, _viewResources, _viewDates, scrollTime, slotDuration, slotWidth, theme} = getContext('state');
9
9
 
10
- let el = $state();
11
10
  let refs = [];
12
11
 
13
- $effect(() => {
14
- $_bodyEl = el;
15
- });
16
-
17
12
  function scrollToTime() {
18
13
  let slotTimeLimits = getSlotTimeLimits($_dayTimeLimits, $_viewDates[0]);
19
- el.scrollLeft = (toSeconds($scrollTime) - toSeconds(slotTimeLimits.min)) / toSeconds($slotDuration) * $slotWidth;
14
+ $_bodyEl.scrollLeft = (toSeconds($scrollTime) - toSeconds(slotTimeLimits.min)) / toSeconds($slotDuration) * $slotWidth;
15
+ $_bodyScrollLeft = $_bodyEl.scrollLeft;
20
16
  }
21
17
  $effect(() => {
22
18
  $_viewDates;
@@ -37,14 +33,21 @@
37
33
  function onscroll() {
38
34
  $_headerEl.scrollLeft = $_bodyEl.scrollLeft;
39
35
  $_sidebarEl.scrollTop = $_bodyEl.scrollTop;
36
+ $_bodyScrollLeft = $_bodyEl.scrollLeft;
37
+ }
38
+
39
+ function onresize() {
40
+ $_bodyHeight = $_bodyEl.clientHeight;
41
+ $_bodyWidth = $_bodyEl.clientWidth;
42
+ $_recheckScrollable = true;
40
43
  }
41
44
  </script>
42
45
 
43
46
  <div
44
- bind:this={el}
47
+ bind:this={$_bodyEl}
45
48
  class="{$theme.body}"
46
49
  {onscroll}
47
- use:observeResize={() => $_recheckScrollable = true}
50
+ use:observeResize={onresize}
48
51
  >
49
52
  <div class="{$theme.content}">
50
53
  <div class="{$theme.lines}">
@@ -1,14 +1,15 @@
1
1
  <script>
2
2
  import {getContext} from 'svelte';
3
- import {setContent, toISOString, toSeconds, observeResize} from '#lib';
3
+ import {datesEqual, setContent, toISOString, toSeconds, observeResize} from '#lib';
4
4
 
5
- let {_headerEl, _headerHeight,_intlDayHeader, _intlDayHeaderAL, _dayTimes, _viewDates, slotDuration, theme} = getContext('state');
5
+ let {_headerEl, _headerHeight, _intlDayHeader, _intlDayHeaderAL, _dayTimes, _today, _viewDates,
6
+ slotDuration, theme} = getContext('state');
6
7
  </script>
7
8
 
8
9
  <div class="{$theme.header}" bind:this={$_headerEl} use:observeResize={() => $_headerHeight = $_headerEl.clientHeight}>
9
10
  <div class="{$theme.days}" role="row">
10
11
  {#each $_viewDates as date}
11
- <div class="{$theme.day} {$theme.weekdays?.[date.getUTCDay()]}">
12
+ <div class="{$theme.day} {$theme.weekdays?.[date.getUTCDay()]}{datesEqual(date, $_today) ? ' ' + $theme.today : ''}">
12
13
  {#if toSeconds($slotDuration)}
13
14
  <div class="{$theme.dayHead}">
14
15
  <time
@@ -0,0 +1,39 @@
1
+ <script>
2
+ import {getContext} from 'svelte';
3
+ import {addDuration, cloneDate, datesEqual} from '#lib';
4
+ import {getSlotTimeLimits} from './lib.js';
5
+
6
+ let {slotDuration, slotWidth, theme, _bodyHeight, _bodyWidth, _bodyScrollLeft,
7
+ _headerHeight, _dayTimeLimits, _now, _today, _viewDates} = getContext('state');
8
+
9
+ // Style
10
+ let left = $derived.by(() => {
11
+ let offset = 0;
12
+ for (let i = 0; i < $_viewDates.length; ++i) {
13
+ let slotTimeLimits = getSlotTimeLimits($_dayTimeLimits, $_viewDates[i]);
14
+ if (datesEqual($_viewDates[i], $_today)) {
15
+ let dayStart = addDuration(cloneDate($_viewDates[i]), slotTimeLimits.min);
16
+ let dayEnd = addDuration(cloneDate($_viewDates[i]), slotTimeLimits.max);
17
+ if ($_now >= dayStart && $_now <= dayEnd) {
18
+ offset += ($_now - dayStart) / 1000;
19
+ break;
20
+ } else {
21
+ return null;
22
+ }
23
+ } else {
24
+ offset += slotTimeLimits.max.seconds - slotTimeLimits.min.seconds;
25
+ }
26
+ }
27
+ let step = $slotDuration.seconds;
28
+ return offset / step * $slotWidth - $_bodyScrollLeft;
29
+ });
30
+ </script>
31
+
32
+ {#if left !== null && left >= 3 && left <= $_bodyWidth - 3}
33
+ <div
34
+ class="{$theme.nowIndicator}"
35
+ style:top="{$_headerHeight+2}px"
36
+ style:left="{left}px"
37
+ style:height="{$_bodyHeight-1}px"
38
+ ></div>
39
+ {/if}
@@ -3,8 +3,9 @@
3
3
  import Sidebar from './Sidebar.svelte';
4
4
  import Header from './Header.svelte';
5
5
  import Body from './Body.svelte';
6
+ import NowIndicator from './NowIndicator.svelte';
6
7
 
7
- let {theme} = getContext('state');
8
+ let {nowIndicator, theme} = getContext('state');
8
9
  </script>
9
10
 
10
11
  <div class="{$theme.container}">
@@ -12,5 +13,8 @@
12
13
  <div class="{$theme.main}">
13
14
  <Header/>
14
15
  <Body/>
16
+ {#if $nowIndicator}
17
+ <NowIndicator/>
18
+ {/if}
15
19
  </div>
16
20
  </div>
@@ -51,6 +51,9 @@ export default {
51
51
  if (!('_viewResources' in state)) {
52
52
  state._viewResources = viewResources(state);
53
53
  }
54
+ state._bodyHeight = writable(0);
55
+ state._bodyWidth = writable(0);
56
+ state._bodyScrollLeft = writable(0);
54
57
  state._headerEl = writable(undefined);
55
58
  state._headerHeight = writable(0);
56
59
  state._dayTimeLimits = dayTimeLimits(state); // flexible time limits per day
@@ -3,11 +3,11 @@
3
3
 
4
4
  let {slotDuration, slotHeight, theme, _now, _today, _slotTimeLimits} = getContext('state');
5
5
 
6
- let start = $derived(($_now - $_today) / 1000 / 60);
6
+ let start = $derived(($_now - $_today) / 1000);
7
7
  // Style
8
8
  let top = $derived.by(() => {
9
- let step = $slotDuration.seconds / 60;
10
- let offset = $_slotTimeLimits.min.seconds / 60;
9
+ let step = $slotDuration.seconds;
10
+ let offset = $_slotTimeLimits.min.seconds;
11
11
  return (start - offset) / step * $slotHeight;
12
12
  });
13
13
  </script>
@@ -497,19 +497,27 @@
497
497
  .ec-now-indicator {
498
498
  position: absolute;
499
499
  z-index: 1005;
500
- width: 100%;
501
- border-top: var(--ec-now-indicator-color) solid 2px;
502
500
  pointer-events: none;
501
+ .ec-time-grid & {
502
+ width: 100%;
503
+ border-top: var(--ec-now-indicator-color) solid 2px;
504
+ }
505
+ .ec-timeline & {
506
+ border-left: var(--ec-now-indicator-color) solid 2px;
507
+ will-change: transform;
508
+ }
503
509
 
504
510
  &:before {
505
511
  background: var(--ec-now-indicator-color);
506
512
  border-radius: 50%;
507
513
  content: "";
508
- position: absolute;
514
+ display: block;
509
515
  height: 12px;
510
516
  margin-top: -7px;
511
517
  width: 12px;
512
- pointer-events: none;
518
+ .ec-timeline & {
519
+ margin-left: -7px;
520
+ }
513
521
  }
514
522
  }
515
523
 
@@ -9,6 +9,7 @@
9
9
  display: flex;
10
10
  flex-direction: column;
11
11
  min-width: 0;
12
+ position: relative;
12
13
  }
13
14
 
14
15
  .ec-content {