@event-calendar/core 4.0.2 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-calendar/core",
3
- "version": "4.0.2",
3
+ "version": "4.1.0",
4
4
  "title": "Event Calendar Core package",
5
5
  "description": "Full-sized drag & drop event calendar with resource & timeline views",
6
6
  "keywords": [
@@ -31,7 +31,7 @@
31
31
  "#lib": "./src/lib/index.js",
32
32
  "#components": "./src/lib/components/index.js"
33
33
  },
34
- "peerDependencies": {
35
- "svelte": "^5.25.10"
34
+ "dependencies": {
35
+ "svelte": "^5.28.2"
36
36
  }
37
37
  }
@@ -1,6 +1,7 @@
1
1
  <script>
2
2
  import {getContext} from 'svelte';
3
3
  import BaseEvent from './BaseEvent.svelte';
4
+ import {bgEvent, helperEvent} from "#lib";
4
5
 
5
6
  let {
6
7
  el = $bindable(),
@@ -14,6 +15,7 @@
14
15
  let {_interaction, _iClasses} = getContext('state');
15
16
 
16
17
  let event = $derived(chunk.event);
18
+ let display = $derived(chunk.event.display);
17
19
 
18
20
  // Class
19
21
  let classes = $derived(classNames => $_iClasses(classNames, event));
@@ -23,9 +25,9 @@
23
25
  ? jsEvent => $_interaction.action.drag(
24
26
  event, jsEvent, forceDate?.(), forceMargin?.()
25
27
  )
26
- : undefined;
28
+ : $_interaction.action?.noAction;
27
29
  }
28
- let onpointerdown = $derived(createDragHandler(event));
30
+ let onpointerdown = $derived(!bgEvent(display) && !helperEvent(display) ? createDragHandler(event) : undefined);
29
31
 
30
32
  let Resizer = $derived($_interaction.resizer);
31
33
  </script>
package/src/lib/dom.js CHANGED
@@ -41,7 +41,7 @@ export function getElementWithPayload(x, y, root = document) {
41
41
  return el;
42
42
  }
43
43
  /** @see https://github.com/vkurko/calendar/issues/142 */
44
- if (el.shadowRoot) {
44
+ if (el.shadowRoot && el.shadowRoot !== root) {
45
45
  let shadowEl = getElementWithPayload(x, y, el.shadowRoot);
46
46
  if (shadowEl) {
47
47
  return shadowEl;
package/src/lib/times.js CHANGED
@@ -14,19 +14,15 @@ export function createTimes(date, $slotDuration, $slotLabelInterval, $_slotTimeL
14
14
  ? createDuration($slotDuration.seconds * 2)
15
15
  : $slotDuration;
16
16
  }
17
- let showAll = $slotLabelInterval.seconds <= 0;
18
- let label;
19
- if (!showAll) {
20
- label = cloneDate(date);
21
- }
17
+ let label = cloneDate(date);
22
18
  // Build times
23
19
  while (date < end) {
24
20
  times.push([
25
21
  toISOString(date),
26
22
  $_intlSlotLabel.format(date),
27
- showAll || (times.length && date >= label)
23
+ date >= label
28
24
  ]);
29
- while (!showAll && date >= label) {
25
+ while ($slotLabelInterval.seconds && date >= label) {
30
26
  addDuration(label, $slotLabelInterval);
31
27
  }
32
28
  addDuration(date, $slotDuration);
@@ -1,6 +1,6 @@
1
1
  <script>
2
2
  import {getContext} from 'svelte';
3
- import {helperEvent, listen} from '#lib';
3
+ import {bgEvent, helperEvent, listen} from '#lib';
4
4
  import {eventDraggable} from './lib';
5
5
  import Action from './Action.svelte';
6
6
  import Pointer from './Pointer.svelte';
@@ -21,7 +21,11 @@
21
21
  ...classNames,
22
22
  helperEvent(display)
23
23
  ? [$theme[display]]
24
- : (eventDraggable(event, $eventStartEditable, $editable) ? [$theme.draggable] : [])
24
+ : (
25
+ !bgEvent(display) && eventDraggable(event, $eventStartEditable, $editable)
26
+ ? [$theme.draggable]
27
+ : []
28
+ )
25
29
  ];
26
30
  };
27
31
  });
@@ -1,5 +1,6 @@
1
1
  <script>
2
2
  import {getContext} from 'svelte';
3
+ import {bgEvent, helperEvent} from '#lib';
3
4
  import {eventResizable} from './lib';
4
5
 
5
6
  let {chunk, axis, forceDate = undefined, forceMargin = undefined, children} = $props();
@@ -7,8 +8,11 @@
7
8
  let {theme, eventDurationEditable, eventResizableFromStart, editable, _interaction} = getContext('state');
8
9
 
9
10
  let event = $derived(chunk.event);
11
+ let display = $derived(chunk.event.display);
10
12
 
11
- let resizable = $derived(eventResizable(event, $eventDurationEditable, $editable));
13
+ let resizable = $derived(
14
+ !bgEvent(display) && !helperEvent(display) && eventResizable(event, $eventDurationEditable, $editable)
15
+ );
12
16
 
13
17
  function createResizeHandler(start) {
14
18
  return jsEvent => $_interaction.action.resize(
@@ -1,13 +1,9 @@
1
1
  import {bgEvent, helperEvent} from '#lib';
2
2
 
3
3
  export function eventDraggable(event, $eventStartEditable, $editable) {
4
- return (event.startEditable ?? $eventStartEditable ?? event.editable ?? $editable) &&
5
- !bgEvent(event.display) &&
6
- !helperEvent(event.display);
4
+ return (event.startEditable ?? $eventStartEditable ?? event.editable ?? $editable);
7
5
  }
8
6
 
9
7
  export function eventResizable(event, $eventDurationEditable, $editable) {
10
- return (event.durationEditable ?? $eventDurationEditable ?? event.editable ?? $editable) &&
11
- !bgEvent(event.display) &&
12
- !helperEvent(event.display);
8
+ return (event.durationEditable ?? $eventDurationEditable ?? event.editable ?? $editable);
13
9
  }
@@ -50,7 +50,7 @@
50
50
  <div class="{$theme.lines}">
51
51
  {#each $_viewDates as date}
52
52
  {#each $_dayTimes[date.getTime()] as time}
53
- <div class="{$theme.line}"></div>
53
+ <div class="{$theme.line}{time[2] ? '' : ' ' + $theme.minor}"></div>
54
54
  {/each}
55
55
  {/each}
56
56
  </div>
@@ -19,7 +19,7 @@
19
19
  </div>
20
20
  <div class="{$theme.times}">
21
21
  {#each $_dayTimes[date.getTime()] as time}
22
- <div class="{$theme.time}" role="columnheader">
22
+ <div class="{$theme.time}{time[2] ? '' : ' ' + $theme.minor}" role="columnheader">
23
23
  <time
24
24
  datetime="{time[0]}"
25
25
  use:setContent={time[1]}
@@ -28,13 +28,13 @@
28
28
  {/each}
29
29
  </div>
30
30
  {:else}
31
- <div class="{$theme.time}" role="columnheader">
32
- <time
33
- datetime="{toISOString(date, 10)}"
34
- aria-label="{$_intlDayHeaderAL.format(date)}"
35
- use:setContent={$_intlDayHeader.format(date)}
36
- ></time>
37
- </div>
31
+ <div class="{$theme.time}" role="columnheader">
32
+ <time
33
+ datetime="{toISOString(date, 10)}"
34
+ aria-label="{$_intlDayHeaderAL.format(date)}"
35
+ use:setContent={$_intlDayHeader.format(date)}
36
+ ></time>
37
+ </div>
38
38
  {/if}
39
39
  </div>
40
40
  {/each}
@@ -11,8 +11,6 @@
11
11
 
12
12
  let el = $state();
13
13
 
14
- let compact = $derived($slotDuration.seconds >= 3600);
15
-
16
14
  $effect(() => {
17
15
  $_bodyEl = el;
18
16
  });
@@ -30,14 +28,14 @@
30
28
 
31
29
  <div
32
30
  bind:this={el}
33
- class="{$theme.body}{compact ? ' ' + $theme.compact : ''}"
31
+ class="{$theme.body}"
34
32
  use:observeResize={() => $_recheckScrollable = true}
35
33
  >
36
34
  <div class="{$theme.content}">
37
35
  <Section {children}>
38
36
  {#snippet lines()}
39
- {#each new Array($_times.length) as line}
40
- <div class="{$theme.line}"></div>
37
+ {#each $_times as time}
38
+ <div class="{$theme.line}{time[2] ? '' : ' ' + $theme.minor}"></div>
41
39
  {/each}
42
40
  {/snippet}
43
41
  </Section>
@@ -5,15 +5,20 @@
5
5
 
6
6
  let {children, lines} = $props();
7
7
 
8
- let {allDayContent, theme, _times} = getContext('state');
8
+ let {allDayContent, slotLabelInterval, theme, _times} = getContext('state');
9
9
 
10
10
  let allDayText = $derived(createAllDayContent($allDayContent));
11
+ let showAllTimes = $derived($slotLabelInterval && $slotLabelInterval.seconds <= 0);
11
12
  </script>
12
13
 
13
14
  <div class="{$theme.sidebar}">
14
15
  <div class="{$theme.sidebarTitle}" use:setContent={allDayText}></div>
15
- {#each $_times as time}
16
- <time class="{$theme.time}" datetime="{time[0]}" use:setContent={time[2] ? time[1] : ''}></time>
16
+ {#each $_times as time, i}
17
+ <time
18
+ class="{$theme.time}{(i || showAllTimes) && time[2] ? '' : ' ' + $theme.minor}"
19
+ datetime="{time[0]}"
20
+ use:setContent={time[1]}
21
+ ></time>
17
22
  {/each}
18
23
  </div>
19
24
  <div class="{$theme.days}" role="row">
@@ -79,7 +79,6 @@ export function createOptions(plugins) {
79
79
  button: 'ec-button',
80
80
  buttonGroup: 'ec-button-group',
81
81
  calendar: 'ec',
82
- compact: 'ec-compact',
83
82
  content: 'ec-content',
84
83
  day: 'ec-day',
85
84
  dayHead: 'ec-day-head',
@@ -98,6 +97,7 @@ export function createOptions(plugins) {
98
97
  icon: 'ec-icon',
99
98
  line: 'ec-line',
100
99
  lines: 'ec-lines',
100
+ minor: 'ec-minor',
101
101
  nowIndicator: 'ec-now-indicator',
102
102
  otherMonth: 'ec-other-month',
103
103
  resource: 'ec-resource',
@@ -34,6 +34,10 @@
34
34
  line-height: 24px;
35
35
  top: -12px;
36
36
  text-align: right;
37
+
38
+ &.ec-minor {
39
+ visibility: hidden;
40
+ }
37
41
  }
38
42
 
39
43
  .ec-header .ec-time ,
@@ -60,7 +64,7 @@
60
64
  pointer-events: none;
61
65
  }
62
66
 
63
- .ec-body:not(.ec-compact) .ec-line:nth-child(even):after {
67
+ .ec-line.ec-minor:after {
64
68
  border-bottom-style: dotted;
65
69
  }
66
70
 
@@ -74,6 +74,10 @@
74
74
  min-height: 24px;
75
75
  overflow: hidden;
76
76
  text-overflow: ellipsis;
77
+
78
+ &.ec-minor {
79
+ visibility: hidden;
80
+ }
77
81
  }
78
82
 
79
83
  .ec-time, .ec-line {
@@ -107,9 +111,9 @@
107
111
  pointer-events: none;
108
112
  }
109
113
 
110
- //.ec-body:not(.ec-compact) .ec-line:nth-child(even):after {
111
- // border-bottom-style: dotted;
112
- //}
114
+ .ec-line.ec-minor:after {
115
+ border-left-style: dotted;
116
+ }
113
117
 
114
118
  .ec-sidebar {
115
119
  padding: 0;