@event-calendar/core 5.0.0 → 5.0.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
@@ -245,8 +245,8 @@ This bundle contains a version of the calendar that includes all plugins and is
245
245
 
246
246
  The first step is to include the following lines of code in the `<head>` section of your page:
247
247
  ```html
248
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@event-calendar/build@5.0.0/dist/event-calendar.min.css">
249
- <script src="https://cdn.jsdelivr.net/npm/@event-calendar/build@5.0.0/dist/event-calendar.min.js"></script>
248
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@event-calendar/build@5.0.1/dist/event-calendar.min.css">
249
+ <script src="https://cdn.jsdelivr.net/npm/@event-calendar/build@5.0.1/dist/event-calendar.min.js"></script>
250
250
  ```
251
251
 
252
252
  <details>
package/dist/index.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * EventCalendar v5.0.0
2
+ * EventCalendar v5.0.1
3
3
  * https://github.com/vkurko/calendar
4
4
  */
5
5
  .ec {
@@ -213,7 +213,7 @@
213
213
  }
214
214
  .ec-icon {
215
215
  display: inline-block;
216
- width: 1em;
216
+ inline-size: 1em;
217
217
 
218
218
  &.ec-prev:after,
219
219
  &.ec-next:after {
@@ -227,11 +227,19 @@
227
227
  }
228
228
 
229
229
  &.ec-prev:after {
230
- transform: rotate(-135deg) translate(-2px, 2px);
230
+ inset-inline-start: 3px;
231
+ rotate: -135deg;
232
+ }
233
+ [dir="rtl"] &.ec-prev:after {
234
+ rotate: 135deg;
231
235
  }
232
236
 
233
237
  &.ec-next:after {
234
- transform: rotate(45deg) translate(-2px, 2px);
238
+ inset-inline-start: -3px;
239
+ rotate: 45deg;
240
+ }
241
+ [dir="rtl"] &.ec-next:after {
242
+ rotate: -45deg;
235
243
  }
236
244
  }
237
245
  .ec-sidebar {
@@ -281,14 +289,15 @@
281
289
  min-block-size: 1.5em;
282
290
  }
283
291
  .ec-expander {
284
- margin-right: .25em;
285
- width: 1.25em;
292
+ inline-size: 1.25em;
293
+ margin-inline-end: .25em;
294
+ margin-block-start: -1px;
286
295
 
287
296
  .ec-button {
288
297
  line-height: normal;
289
298
  padding: 0;
290
299
  aspect-ratio: 1;
291
- height: 1.25em;
300
+ block-size: 1.25em;
292
301
  }
293
302
  }
294
303
  .ec-slot {
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * EventCalendar v5.0.0
2
+ * EventCalendar v5.0.1
3
3
  * https://github.com/vkurko/calendar
4
4
  */
5
5
  import { tick, getContext, untrack, setContext, onMount, mount, unmount } from "svelte";
@@ -1025,8 +1025,9 @@ function filteredEvents(state) {
1025
1025
  let [$_events, $eventFilter, $eventOrder, $filterEventsWithResources, $resources] = values;
1026
1026
  let result = [...$_events];
1027
1027
  if (isFunction($eventFilter)) {
1028
- result = result.map(toEventWithLocalDates).filter((event, index2, events2) => $eventFilter({
1029
- event,
1028
+ let events2 = $_events.map(toEventWithLocalDates);
1029
+ result = result.filter((event, index2) => $eventFilter({
1030
+ event: toEventWithLocalDates(event),
1030
1031
  index: index2,
1031
1032
  events: events2,
1032
1033
  view: view2
@@ -2761,7 +2762,7 @@ function Action($$anchor, $$props) {
2761
2762
  let toX;
2762
2763
  let toY;
2763
2764
  let gridEl;
2764
- let scrollable;
2765
+ let allDaySlot;
2765
2766
  let delta;
2766
2767
  let allDay;
2767
2768
  let iClass;
@@ -2873,7 +2874,7 @@ function Action($$anchor, $$props) {
2873
2874
  fromY = toY = jsEvent.clientY;
2874
2875
  let dayEl = getElementWithPayload(toX, toY);
2875
2876
  ({ allDay, date, resource } = getPayload(dayEl)(toX, toY));
2876
- scrollable = $_mainEl() === ancestor(dayEl, 3);
2877
+ allDaySlot = $_mainEl() !== ancestor(dayEl, 3);
2877
2878
  gridEl = ancestor(dayEl, 1);
2878
2879
  calcViewport();
2879
2880
  if (jsEvent.pointerType !== "mouse") {
@@ -2960,19 +2961,19 @@ function Action($$anchor, $$props) {
2960
2961
  let thresholdX = 24;
2961
2962
  animate(() => {
2962
2963
  if (viewport) {
2963
- if (scrollable) {
2964
+ if (!allDaySlot) {
2964
2965
  if (toY < viewport.top + thresholdY) {
2965
2966
  $.store_mutate(_mainEl, $.untrack($_mainEl).scrollTop += max(-8, (toY - viewport.top - thresholdY) / 3), $.untrack($_mainEl));
2966
2967
  }
2967
2968
  if (toY > viewport.bottom - thresholdY) {
2968
2969
  $.store_mutate(_mainEl, $.untrack($_mainEl).scrollTop += min(8, (toY - viewport.bottom + thresholdY) / 3), $.untrack($_mainEl));
2969
2970
  }
2970
- if (toX < viewport.left + thresholdX) {
2971
- $.store_mutate(_mainEl, $.untrack($_mainEl).scrollLeft += max(-8, (toX - viewport.left - thresholdX) / 3), $.untrack($_mainEl));
2972
- }
2973
- if (toX > viewport.right - thresholdX) {
2974
- $.store_mutate(_mainEl, $.untrack($_mainEl).scrollLeft += min(8, (toX - viewport.right + thresholdX) / 3), $.untrack($_mainEl));
2975
- }
2971
+ }
2972
+ if (toX < viewport.left + thresholdX) {
2973
+ $.store_mutate(_mainEl, $.untrack($_mainEl).scrollLeft += max(-8, (toX - viewport.left - thresholdX) / 3), $.untrack($_mainEl));
2974
+ }
2975
+ if (toX > viewport.right - thresholdX) {
2976
+ $.store_mutate(_mainEl, $.untrack($_mainEl).scrollLeft += min(8, (toX - viewport.right + thresholdX) / 3), $.untrack($_mainEl));
2976
2977
  }
2977
2978
  if (toY < thresholdY) {
2978
2979
  window.scrollBy(0, max(-8, (toY - thresholdY) / 3));
@@ -3077,6 +3078,13 @@ function Action($$anchor, $$props) {
3077
3078
  return findPayload(dayEl.previousElementSibling);
3078
3079
  }
3079
3080
  } else {
3081
+ if (selecting() && payload.resource && !$_iEvents()[0].resourceIds.includes(payload.resource.id)) {
3082
+ if (toX > fromX) {
3083
+ return findPayload(dayEl.previousElementSibling);
3084
+ } else {
3085
+ return findPayload(dayEl.nextElementSibling);
3086
+ }
3087
+ }
3080
3088
  return payload;
3081
3089
  }
3082
3090
  }
@@ -3088,8 +3096,8 @@ function Action($$anchor, $$props) {
3088
3096
  viewport = {
3089
3097
  left: max(0, gridRect.left + $_mainEl().scrollLeft),
3090
3098
  right: min(document.documentElement.clientWidth, mainRect.left + $_mainEl().clientWidth) - 2,
3091
- top: max(0, gridRect.top + (scrollable ? $_mainEl().scrollTop : 0)),
3092
- bottom: min(document.documentElement.clientHeight, scrollable ? mainRect.top + $_mainEl().clientHeight : gridRect.bottom) - 2
3099
+ top: max(0, gridRect.top + (!allDaySlot ? $_mainEl().scrollTop : 0)),
3100
+ bottom: min(document.documentElement.clientHeight, !allDaySlot ? mainRect.top + $_mainEl().clientHeight : gridRect.bottom) - 2
3093
3101
  };
3094
3102
  }
3095
3103
  function createIEvent(jsEvent, callback) {
@@ -4179,14 +4187,14 @@ var root_1$3 = $.from_html(`<div></div>`);
4179
4187
  function NowIndicator$1($$anchor, $$props) {
4180
4188
  $.push($$props, true);
4181
4189
  const $_today = () => $.store_get(_today, "$_today", $$stores);
4182
- const $slotDuration = () => $.store_get(slotDuration, "$slotDuration", $$stores);
4183
4190
  const $_now = () => $.store_get(_now, "$_now", $$stores);
4191
+ const $slotDuration = () => $.store_get(slotDuration, "$slotDuration", $$stores);
4184
4192
  const $slotHeight = () => $.store_get(slotHeight, "$slotHeight", $$stores);
4185
4193
  const $_mainEl = () => $.store_get(_mainEl, "$_mainEl", $$stores);
4186
4194
  const $_sidebarWidth = () => $.store_get(_sidebarWidth, "$_sidebarWidth", $$stores);
4187
4195
  const $theme = () => $.store_get(theme, "$theme", $$stores);
4188
4196
  const [$$stores, $$cleanup] = $.setup_stores();
4189
- let fullwidth = $.prop($$props, "fullwidth", 3, false);
4197
+ let span = $.prop($$props, "span", 3, 1);
4190
4198
  let {
4191
4199
  _mainEl,
4192
4200
  _now,
@@ -4203,8 +4211,11 @@ function NowIndicator$1($$anchor, $$props) {
4203
4211
  }
4204
4212
  }
4205
4213
  return {};
4206
- }), gridColumn = $.derived(() => $.get($$d).gridColumn), start = $.derived(() => $.get($$d).start);
4214
+ }), gridColumn = $.derived(() => $.get($$d).gridColumn), start = $.derived(() => $.get($$d).start), end = $.derived(() => $.get($$d).end);
4207
4215
  let top = $.derived(() => {
4216
+ if ($_now() < $.get(start) || $_now() > $.get(end)) {
4217
+ return null;
4218
+ }
4208
4219
  let step = toSeconds($slotDuration());
4209
4220
  return ($_now() - $.get(start)) / 1e3 / step * $slotHeight();
4210
4221
  });
@@ -4226,14 +4237,14 @@ function NowIndicator$1($$anchor, $$props) {
4226
4237
  $.template_effect(() => {
4227
4238
  $.set_class(div, 1, $theme().nowIndicator);
4228
4239
  styles = $.set_style(div, "", styles, {
4229
- "grid-column": `${$.get(gridColumn) + 1}${fullwidth() ? ` / span ${$$props.days.length}` : ""}`,
4240
+ "grid-column": `${$.get(gridColumn) + 1} / span ${span() ?? ""}`,
4230
4241
  "inset-block-start": `${$.get(top) ?? ""}px`
4231
4242
  });
4232
4243
  });
4233
4244
  $.append($$anchor2, div);
4234
4245
  };
4235
4246
  $.if(node, ($$render) => {
4236
- if ($.get(gridColumn)) $$render(consequent);
4247
+ if ($.get(gridColumn) && $.get(top) !== null) $$render(consequent);
4237
4248
  });
4238
4249
  }
4239
4250
  $.append($$anchor, fragment);
@@ -4262,7 +4273,7 @@ function View$1($$anchor, $$props) {
4262
4273
  const $_sidebarWidth = () => $.store_get(_sidebarWidth, "$_sidebarWidth", $$stores);
4263
4274
  const $allDaySlot = () => $.store_get(allDaySlot, "$allDaySlot", $$stores);
4264
4275
  const $_slots = () => $.store_get(_slots, "$_slots", $$stores);
4265
- const $nowIndicator = () => $.store_get(nowIndicator, "$nowIndicator", $$stores);
4276
+ const $showNowIndicator = () => $.store_get(showNowIndicator, "$showNowIndicator", $$stores);
4266
4277
  const [$$stores, $$cleanup] = $.setup_stores();
4267
4278
  let {
4268
4279
  _mainEl,
@@ -4277,7 +4288,7 @@ function View$1($$anchor, $$props) {
4277
4288
  allDaySlot,
4278
4289
  columnWidth,
4279
4290
  highlightedDates,
4280
- nowIndicator,
4291
+ nowIndicator: showNowIndicator,
4281
4292
  scrollTime,
4282
4293
  slotHeight,
4283
4294
  slotDuration,
@@ -4476,23 +4487,32 @@ function View$1($$anchor, $$props) {
4476
4487
  $.reset(div_4);
4477
4488
  var node_12 = $.sibling(div_4, 2);
4478
4489
  {
4479
- var consequent_2 = ($$anchor2) => {
4490
+ var consequent_3 = ($$anchor2) => {
4480
4491
  var fragment_14 = $.comment();
4481
4492
  var node_13 = $.first_child(fragment_14);
4482
- $.each(node_13, 17, () => $.get(grid), $.index, ($$anchor3, days) => {
4483
- NowIndicator$1($$anchor3, {
4484
- get days() {
4485
- return $.get(days);
4486
- },
4487
- get fullwidth() {
4488
- return $$props.fullwidthNowIndicator;
4489
- }
4493
+ {
4494
+ var consequent_2 = ($$anchor3) => {
4495
+ var fragment_15 = $.comment();
4496
+ var node_14 = $.first_child(fragment_15);
4497
+ $.snippet(node_14, () => $$props.nowIndicator, () => $.get(grid));
4498
+ $.append($$anchor3, fragment_15);
4499
+ };
4500
+ var alternate_1 = ($$anchor3) => {
4501
+ NowIndicator$1($$anchor3, {
4502
+ get days() {
4503
+ return $.get(grid)[0];
4504
+ }
4505
+ });
4506
+ };
4507
+ $.if(node_13, ($$render) => {
4508
+ if ($$props.nowIndicator) $$render(consequent_2);
4509
+ else $$render(alternate_1, false);
4490
4510
  });
4491
- });
4511
+ }
4492
4512
  $.append($$anchor2, fragment_14);
4493
4513
  };
4494
4514
  $.if(node_12, ($$render) => {
4495
- if ($nowIndicator()) $$render(consequent_2);
4515
+ if ($showNowIndicator()) $$render(consequent_3);
4496
4516
  });
4497
4517
  }
4498
4518
  $.reset(section);
@@ -4554,15 +4574,16 @@ function View_1($$anchor, $$props) {
4554
4574
  return { date, resource, disabled, highlight };
4555
4575
  });
4556
4576
  {
4557
- let $0 = $.derived(() => 1 + i * $.get(days).length);
4558
- let $1 = $.derived(() => $datesAboveResources() && $.get(computed_const).disabled);
4559
- let $2 = $.derived(() => $datesAboveResources() && $.get(computed_const).highlight);
4577
+ let $0 = $.derived(() => grid()[0].length > 1 ? $theme().colGroup : void 0);
4578
+ let $1 = $.derived(() => 1 + i * $.get(days).length);
4579
+ let $2 = $.derived(() => $datesAboveResources() && $.get(computed_const).disabled);
4580
+ let $3 = $.derived(() => $datesAboveResources() && $.get(computed_const).highlight);
4560
4581
  ColHead($$anchor3, {
4561
4582
  get date() {
4562
4583
  return $.get(computed_const).date;
4563
4584
  },
4564
4585
  get className() {
4565
- return $theme().colGroup;
4586
+ return $.get($0);
4566
4587
  },
4567
4588
  get weekday() {
4568
4589
  return $datesAboveResources();
@@ -4571,13 +4592,13 @@ function View_1($$anchor, $$props) {
4571
4592
  return $.get(days).length;
4572
4593
  },
4573
4594
  get colIndex() {
4574
- return $.get($0);
4595
+ return $.get($1);
4575
4596
  },
4576
4597
  get disabled() {
4577
- return $.get($1);
4598
+ return $.get($2);
4578
4599
  },
4579
4600
  get highlight() {
4580
- return $.get($2);
4601
+ return $.get($3);
4581
4602
  },
4582
4603
  children: ($$anchor4, $$slotProps) => {
4583
4604
  var fragment_3 = $.comment();
@@ -4610,75 +4631,143 @@ function View_1($$anchor, $$props) {
4610
4631
  }
4611
4632
  });
4612
4633
  var node_2 = $.sibling(node, 2);
4613
- $.each(node_2, 17, grid, $.index, ($$anchor3, days, i) => {
4614
- var fragment_6 = $.comment();
4615
- var node_3 = $.first_child(fragment_6);
4616
- $.each(node_3, 17, () => $.get(days), $.index, ($$anchor4, day, j) => {
4617
- const computed_const_1 = $.derived(() => {
4618
- const { dayStart: date, resource, disabled, highlight } = $.get(day);
4619
- return { date, resource, disabled, highlight };
4634
+ {
4635
+ var consequent_2 = ($$anchor3) => {
4636
+ var fragment_6 = $.comment();
4637
+ var node_3 = $.first_child(fragment_6);
4638
+ $.each(node_3, 17, grid, $.index, ($$anchor4, days, i) => {
4639
+ var fragment_7 = $.comment();
4640
+ var node_4 = $.first_child(fragment_7);
4641
+ $.each(node_4, 17, () => $.get(days), $.index, ($$anchor5, day, j) => {
4642
+ const computed_const_1 = $.derived(() => {
4643
+ const { dayStart: date, resource, disabled, highlight } = $.get(day);
4644
+ return { date, resource, disabled, highlight };
4645
+ });
4646
+ {
4647
+ let $0 = $.derived(() => 1 + j + i * $.get(days).length);
4648
+ ColHead($$anchor5, {
4649
+ get date() {
4650
+ return $.get(computed_const_1).date;
4651
+ },
4652
+ get colIndex() {
4653
+ return $.get($0);
4654
+ },
4655
+ get disabled() {
4656
+ return $.get(computed_const_1).disabled;
4657
+ },
4658
+ get highlight() {
4659
+ return $.get(computed_const_1).highlight;
4660
+ },
4661
+ children: ($$anchor6, $$slotProps) => {
4662
+ var fragment_9 = $.comment();
4663
+ var node_5 = $.first_child(fragment_9);
4664
+ {
4665
+ var consequent_1 = ($$anchor7) => {
4666
+ Label$1($$anchor7, {
4667
+ get resource() {
4668
+ return $.get(computed_const_1).resource;
4669
+ },
4670
+ get date() {
4671
+ return $.get(computed_const_1).date;
4672
+ }
4673
+ });
4674
+ };
4675
+ var alternate_1 = ($$anchor7) => {
4676
+ DayHeader($$anchor7, {
4677
+ get date() {
4678
+ return $.get(computed_const_1).date;
4679
+ },
4680
+ get alPrefix() {
4681
+ return resourceLabels[i];
4682
+ }
4683
+ });
4684
+ };
4685
+ $.if(node_5, ($$render) => {
4686
+ if ($datesAboveResources()) $$render(consequent_1);
4687
+ else $$render(alternate_1, false);
4688
+ });
4689
+ }
4690
+ $.append($$anchor6, fragment_9);
4691
+ },
4692
+ $$slots: { default: true }
4693
+ });
4694
+ }
4695
+ });
4696
+ $.append($$anchor4, fragment_7);
4620
4697
  });
4698
+ $.append($$anchor3, fragment_6);
4699
+ };
4700
+ $.if(node_2, ($$render) => {
4701
+ if (grid()[0].length > 1) $$render(consequent_2);
4702
+ });
4703
+ }
4704
+ $.append($$anchor2, fragment_1);
4705
+ };
4706
+ const nowIndicator = ($$anchor2, grid = $.noop) => {
4707
+ var fragment_12 = $.comment();
4708
+ var node_6 = $.first_child(fragment_12);
4709
+ {
4710
+ var consequent_3 = ($$anchor3) => {
4621
4711
  {
4622
- let $0 = $.derived(() => 1 + j + i * $.get(days).length);
4623
- ColHead($$anchor4, {
4624
- get date() {
4625
- return $.get(computed_const_1).date;
4626
- },
4627
- get colIndex() {
4712
+ let $0 = $.derived(() => grid().flat());
4713
+ NowIndicator$1($$anchor3, {
4714
+ get days() {
4628
4715
  return $.get($0);
4629
4716
  },
4630
- get disabled() {
4631
- return $.get(computed_const_1).disabled;
4632
- },
4633
- get highlight() {
4634
- return $.get(computed_const_1).highlight;
4635
- },
4636
- children: ($$anchor5, $$slotProps) => {
4637
- var fragment_8 = $.comment();
4638
- var node_4 = $.first_child(fragment_8);
4639
- {
4640
- var consequent_1 = ($$anchor6) => {
4641
- Label$1($$anchor6, {
4642
- get resource() {
4643
- return $.get(computed_const_1).resource;
4644
- },
4645
- get date() {
4646
- return $.get(computed_const_1).date;
4647
- }
4648
- });
4649
- };
4650
- var alternate_1 = ($$anchor6) => {
4651
- DayHeader($$anchor6, {
4652
- get date() {
4653
- return $.get(computed_const_1).date;
4654
- },
4655
- get alPrefix() {
4656
- return resourceLabels[i];
4657
- }
4658
- });
4659
- };
4660
- $.if(node_4, ($$render) => {
4661
- if ($datesAboveResources()) $$render(consequent_1);
4662
- else $$render(alternate_1, false);
4663
- });
4664
- }
4665
- $.append($$anchor5, fragment_8);
4666
- },
4667
- $$slots: { default: true }
4717
+ get span() {
4718
+ return grid()[0].length;
4719
+ }
4668
4720
  });
4669
4721
  }
4722
+ };
4723
+ var alternate_3 = ($$anchor3) => {
4724
+ var fragment_14 = $.comment();
4725
+ var node_7 = $.first_child(fragment_14);
4726
+ {
4727
+ var consequent_4 = ($$anchor4) => {
4728
+ var fragment_15 = $.comment();
4729
+ var node_8 = $.first_child(fragment_15);
4730
+ $.each(node_8, 17, grid, $.index, ($$anchor5, days) => {
4731
+ NowIndicator$1($$anchor5, {
4732
+ get days() {
4733
+ return $.get(days);
4734
+ }
4735
+ });
4736
+ });
4737
+ $.append($$anchor4, fragment_15);
4738
+ };
4739
+ var alternate_2 = ($$anchor4) => {
4740
+ {
4741
+ let $0 = $.derived(() => grid().flat());
4742
+ NowIndicator$1($$anchor4, {
4743
+ get days() {
4744
+ return $.get($0);
4745
+ },
4746
+ get span() {
4747
+ return grid().length;
4748
+ }
4749
+ });
4750
+ }
4751
+ };
4752
+ $.if(node_7, ($$render) => {
4753
+ if (grid()[0].length > 1) $$render(consequent_4);
4754
+ else $$render(alternate_2, false);
4755
+ });
4756
+ }
4757
+ $.append($$anchor3, fragment_14);
4758
+ };
4759
+ $.if(node_6, ($$render) => {
4760
+ if ($datesAboveResources()) $$render(consequent_3);
4761
+ else $$render(alternate_3, false);
4670
4762
  });
4671
- $.append($$anchor3, fragment_6);
4672
- });
4673
- $.append($$anchor2, fragment_1);
4763
+ }
4764
+ $.append($$anchor2, fragment_12);
4674
4765
  };
4675
4766
  View$1($$anchor, {
4676
4767
  createGridFn: () => createGrid$2($_viewDates(), $_viewResources(), $_slotTimeLimits(), $datesAboveResources(), $validRange(), $highlightedDates()),
4677
- get fullwidthNowIndicator() {
4678
- return $datesAboveResources();
4679
- },
4680
4768
  header,
4681
- $$slots: { header: true }
4769
+ nowIndicator,
4770
+ $$slots: { header: true, nowIndicator: true }
4682
4771
  });
4683
4772
  }
4684
4773
  $.pop();
@@ -4697,6 +4786,7 @@ const index$2 = {
4697
4786
  options.views.resourceTimeGridDay = {
4698
4787
  buttonText: btnTextDay,
4699
4788
  component: View_1,
4789
+ dayHeaderFormat: { weekday: "long" },
4700
4790
  duration: { days: 1 },
4701
4791
  theme: themeView("ec-resource ec-time-grid ec-day-view")
4702
4792
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-calendar/core",
3
- "version": "5.0.0",
3
+ "version": "5.0.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.45.8"
35
+ "svelte": "^5.45.10"
36
36
  }
37
37
  }
@@ -27,7 +27,7 @@
27
27
  let resource, newResource;
28
28
  let fromX, fromY;
29
29
  let toX, toY;
30
- let gridEl, scrollable;
30
+ let gridEl, allDaySlot;
31
31
  let delta;
32
32
  let allDay;
33
33
  let iClass;
@@ -180,7 +180,7 @@
180
180
  let dayEl = getElementWithPayload(toX, toY);
181
181
  ({allDay, date, resource} = getPayload(dayEl)(toX, toY));
182
182
 
183
- scrollable = $_mainEl === ancestor(dayEl, 3); // test for "all-day" slot
183
+ allDaySlot = $_mainEl !== ancestor(dayEl, 3);
184
184
  gridEl = ancestor(dayEl, 1);
185
185
  calcViewport();
186
186
 
@@ -285,19 +285,19 @@
285
285
  let thresholdX = 24;
286
286
  animate(() => {
287
287
  if (viewport) {
288
- if (scrollable) {
288
+ if (!allDaySlot) {
289
289
  if (toY < viewport.top + thresholdY) {
290
290
  $_mainEl.scrollTop += max(-8, (toY - viewport.top - thresholdY) / 3);
291
291
  }
292
292
  if (toY > viewport.bottom - thresholdY) {
293
293
  $_mainEl.scrollTop += min(8, (toY - viewport.bottom + thresholdY) / 3);
294
294
  }
295
- if (toX < viewport.left + thresholdX) {
296
- $_mainEl.scrollLeft += max(-8, (toX - viewport.left - thresholdX) / 3);
297
- }
298
- if (toX > viewport.right - thresholdX) {
299
- $_mainEl.scrollLeft += min(8, (toX - viewport.right + thresholdX) / 3);
300
- }
295
+ }
296
+ if (toX < viewport.left + thresholdX) {
297
+ $_mainEl.scrollLeft += max(-8, (toX - viewport.left - thresholdX) / 3);
298
+ }
299
+ if (toX > viewport.right - thresholdX) {
300
+ $_mainEl.scrollLeft += min(8, (toX - viewport.right + thresholdX) / 3);
301
301
  }
302
302
  if (toY < thresholdY) {
303
303
  window.scrollBy(0, max(-8, (toY - thresholdY) / 3));
@@ -417,6 +417,13 @@
417
417
  return findPayload(dayEl.previousElementSibling);
418
418
  }
419
419
  } else {
420
+ if (selecting() && payload.resource && !$_iEvents[0].resourceIds.includes(payload.resource.id)) {
421
+ if (toX > fromX) {
422
+ return findPayload(dayEl.previousElementSibling);
423
+ } else {
424
+ return findPayload(dayEl.nextElementSibling);
425
+ }
426
+ }
420
427
  return payload;
421
428
  }
422
429
  }
@@ -429,8 +436,8 @@
429
436
  viewport = {
430
437
  left: max(0, gridRect.left + $_mainEl.scrollLeft),
431
438
  right: min(document.documentElement.clientWidth, mainRect.left + $_mainEl.clientWidth) - 2,
432
- top: max(0, gridRect.top + (scrollable ? $_mainEl.scrollTop : 0)),
433
- bottom: min(document.documentElement.clientHeight, scrollable ? mainRect.top + $_mainEl.clientHeight : gridRect.bottom) - 2
439
+ top: max(0, gridRect.top + (!allDaySlot ? $_mainEl.scrollTop : 0)),
440
+ bottom: min(document.documentElement.clientHeight, !allDaySlot ? mainRect.top + $_mainEl.clientHeight : gridRect.bottom) - 2
434
441
  };
435
442
  }
436
443
 
@@ -4,6 +4,7 @@
4
4
  import {ColHead, DayHeader} from '#components';
5
5
  import Label from './Label.svelte';
6
6
  import View from '../time-grid/View.svelte';
7
+ import NowIndicator from '../time-grid/NowIndicator.svelte';
7
8
 
8
9
  let {_viewDates, _viewResources, _slotTimeLimits, datesAboveResources, highlightedDates, validRange, theme} = getContext('state');
9
10
 
@@ -14,14 +15,13 @@
14
15
  createGridFn={() => createGrid(
15
16
  $_viewDates, $_viewResources, $_slotTimeLimits, $datesAboveResources, $validRange, $highlightedDates
16
17
  )}
17
- fullwidthNowIndicator={$datesAboveResources}
18
18
  >
19
19
  {#snippet header(grid)}
20
20
  {#each grid as days, i}
21
21
  {@const {dayStart: date, resource, disabled, highlight} = days[0]}
22
22
  <ColHead
23
23
  {date}
24
- className={$theme.colGroup}
24
+ className={grid[0].length > 1 ? $theme.colGroup : undefined}
25
25
  weekday={$datesAboveResources}
26
26
  colSpan={days.length}
27
27
  colIndex={1 + i * days.length}
@@ -35,17 +35,33 @@
35
35
  {/if}
36
36
  </ColHead>
37
37
  {/each}
38
- {#each grid as days, i}
39
- {#each days as day, j}
40
- {@const {dayStart: date, resource, disabled, highlight} = day}
41
- <ColHead {date} colIndex={1 + j + i * days.length} {disabled} {highlight}>
42
- {#if $datesAboveResources}
43
- <Label {resource} {date}/>
44
- {:else}
45
- <DayHeader {date} alPrefix={resourceLabels[i]}/>
46
- {/if}
47
- </ColHead>
38
+ {#if grid[0].length > 1}
39
+ {#each grid as days, i}
40
+ {#each days as day, j}
41
+ {@const {dayStart: date, resource, disabled, highlight} = day}
42
+ <ColHead {date} colIndex={1 + j + i * days.length} {disabled} {highlight}>
43
+ {#if $datesAboveResources}
44
+ <Label {resource} {date}/>
45
+ {:else}
46
+ <DayHeader {date} alPrefix={resourceLabels[i]}/>
47
+ {/if}
48
+ </ColHead>
49
+ {/each}
48
50
  {/each}
49
- {/each}
51
+ {/if}
52
+ {/snippet}
53
+
54
+ {#snippet nowIndicator(grid)}
55
+ {#if $datesAboveResources}
56
+ <NowIndicator days={grid.flat()} span={grid[0].length}/>
57
+ {:else}
58
+ {#if grid[0].length > 1}
59
+ {#each grid as days}
60
+ <NowIndicator {days} />
61
+ {/each}
62
+ {:else}
63
+ <NowIndicator days={grid.flat()} span={grid.length}/>
64
+ {/if}
65
+ {/if}
50
66
  {/snippet}
51
67
  </View>
@@ -19,6 +19,7 @@ export default {
19
19
  options.views.resourceTimeGridDay = {
20
20
  buttonText: btnTextDay,
21
21
  component: View,
22
+ dayHeaderFormat: {weekday: 'long'},
22
23
  duration: {days: 1},
23
24
  theme: themeView('ec-resource ec-time-grid ec-day-view')
24
25
  };
@@ -2,12 +2,12 @@
2
2
  import {getContext} from 'svelte';
3
3
  import {datesEqual, toSeconds, intersectionObserver} from '#lib';
4
4
 
5
- let {days, fullwidth = false} = $props();
5
+ let {days, span = 1} = $props();
6
6
 
7
7
  let {_mainEl, _now, _today, _sidebarWidth, slotDuration, slotHeight, theme} = getContext('state');
8
8
 
9
9
  // Layout
10
- let {gridColumn, start} = $derived.by(() => {
10
+ let {gridColumn, start, end} = $derived.by(() => {
11
11
  for (let day of days) {
12
12
  if (datesEqual(day.dayStart, $_today)) {
13
13
  return day;
@@ -16,6 +16,9 @@
16
16
  return {};
17
17
  });
18
18
  let top = $derived.by(() => {
19
+ if ($_now < start || $_now > end) {
20
+ return null;
21
+ }
19
22
  let step = toSeconds($slotDuration);
20
23
  return ($_now - start) / 1000 / step * $slotHeight;
21
24
  });
@@ -31,10 +34,10 @@
31
34
  }
32
35
  </script>
33
36
 
34
- {#if gridColumn}
37
+ {#if gridColumn && top !== null}
35
38
  <div {@attach intersectionObserver(onIntersect, observerOptions)}
36
39
  class="{$theme.nowIndicator}"
37
- style:grid-column="{gridColumn + 1}{fullwidth ? ` / span ${days.length}` : ''}"
40
+ style:grid-column="{gridColumn + 1} / span {span}"
38
41
  style:inset-block-start="{top}px"
39
42
  ></div>
40
43
  {/if}
@@ -8,11 +8,11 @@
8
8
  import AllDayEvent from './AllDayEvent.svelte';
9
9
  import NowIndicator from './NowIndicator.svelte';
10
10
 
11
- let {header, createGridFn, fullwidthNowIndicator} = $props();
11
+ let {header, nowIndicator, createGridFn} = $props();
12
12
 
13
13
  let {_mainEl, _filteredEvents, _iEvents, _sidebarWidth, _slotLabelPeriodicity, _slotTimeLimits, _slots,
14
- _viewDates, allDayContent, allDaySlot, columnWidth, highlightedDates, nowIndicator, scrollTime, slotHeight,
15
- slotDuration, theme, validRange} = getContext('state');
14
+ _viewDates, allDayContent, allDaySlot, columnWidth, highlightedDates, nowIndicator: showNowIndicator,
15
+ scrollTime, slotHeight, slotDuration, theme, validRange} = getContext('state');
16
16
 
17
17
  let headerHeight = $state(0);
18
18
  let allDayText = $derived(createAllDayContent($allDayContent));
@@ -127,9 +127,11 @@
127
127
  </div>
128
128
  </div>
129
129
 
130
- {#if $nowIndicator}
131
- {#each grid as days}
132
- <NowIndicator {days} fullwidth={fullwidthNowIndicator}/>
133
- {/each}
130
+ {#if $showNowIndicator}
131
+ {#if nowIndicator}
132
+ {@render nowIndicator(grid)}
133
+ {:else}
134
+ <NowIndicator days={grid[0]}/>
135
+ {/if}
134
136
  {/if}
135
137
  </section>
@@ -193,10 +193,10 @@ export function filteredEvents(state){
193
193
 
194
194
  // Filter events
195
195
  if (isFunction($eventFilter)) {
196
+ let events = $_events.map(toEventWithLocalDates);
196
197
  result = result
197
- .map(toEventWithLocalDates)
198
- .filter((event, index, events) => $eventFilter({
199
- event,
198
+ .filter((event, index) => $eventFilter({
199
+ event: toEventWithLocalDates(event),
200
200
  index,
201
201
  events,
202
202
  view
@@ -47,13 +47,14 @@
47
47
  }
48
48
 
49
49
  .ec-expander {
50
- margin-right: .25em;
51
- width: 1.25em;
50
+ inline-size: 1.25em;
51
+ margin-inline-end: .25em;
52
+ margin-block-start: -1px;
52
53
 
53
54
  .ec-button {
54
55
  line-height: normal;
55
56
  padding: 0;
56
57
  aspect-ratio: 1;
57
- height: 1.25em;
58
+ block-size: 1.25em;
58
59
  }
59
60
  }
@@ -57,7 +57,7 @@
57
57
 
58
58
  .ec-icon {
59
59
  display: inline-block;
60
- width: 1em;
60
+ inline-size: 1em;
61
61
 
62
62
  &.ec-prev:after,
63
63
  &.ec-next:after {
@@ -71,10 +71,18 @@
71
71
  }
72
72
 
73
73
  &.ec-prev:after {
74
- transform: rotate(-135deg) translate(-2px, 2px);
74
+ inset-inline-start: 3px;
75
+ rotate: -135deg;
76
+ }
77
+ [dir="rtl"] &.ec-prev:after {
78
+ rotate: 135deg;
75
79
  }
76
80
 
77
81
  &.ec-next:after {
78
- transform: rotate(45deg) translate(-2px, 2px);
82
+ inset-inline-start: -3px;
83
+ rotate: 45deg;
84
+ }
85
+ [dir="rtl"] &.ec-next:after {
86
+ rotate: -45deg;
79
87
  }
80
88
  }