@event-calendar/core 4.0.3 → 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/README.md +5 -5
- package/dist/index.css +11 -2
- package/dist/index.js +34 -30
- package/package.json +2 -2
- package/src/lib/components/InteractableEvent.svelte +4 -2
- package/src/lib/dom.js +1 -1
- package/src/lib/times.js +3 -7
- package/src/plugins/interaction/Auxiliary.svelte +6 -2
- package/src/plugins/interaction/Resizer.svelte +5 -1
- package/src/plugins/interaction/lib/events.js +2 -6
- package/src/plugins/resource-timeline/Body.svelte +1 -1
- package/src/plugins/resource-timeline/Header.svelte +8 -8
- package/src/plugins/time-grid/Body.svelte +3 -5
- package/src/plugins/time-grid/Section.svelte +8 -3
- package/src/storage/options.js +1 -1
- package/src/styles/time-grid.scss +5 -1
- package/src/styles/timeline.scss +7 -3
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.0
|
|
231
|
-
<script src="https://cdn.jsdelivr.net/npm/@event-calendar/build@4.0
|
|
230
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@event-calendar/build@4.1.0/dist/event-calendar.min.css">
|
|
231
|
+
<script src="https://cdn.jsdelivr.net/npm/@event-calendar/build@4.1.0/dist/event-calendar.min.js"></script>
|
|
232
232
|
```
|
|
233
233
|
|
|
234
234
|
<details>
|
|
@@ -2138,13 +2138,13 @@ function (time) {
|
|
|
2138
2138
|
- Type `string`, `integer` or `object`
|
|
2139
2139
|
- Default `undefined`
|
|
2140
2140
|
|
|
2141
|
-
The interval at which slot labels should be displayed in `timeGrid` views.
|
|
2141
|
+
The interval at which slot labels should be displayed in `timeGrid`/`resourceTimeline` views.
|
|
2142
2142
|
|
|
2143
2143
|
This should be a value that can be parsed into a [Duration](#duration-object) object.
|
|
2144
2144
|
|
|
2145
2145
|
If not specified, then if `slotDuration` is less than 1 hour, the interval is considered to be twice as long, i.e. the labels are displayed every other time.
|
|
2146
2146
|
|
|
2147
|
-
If the interval is set to zero, then labels are displayed for all slots, including the very first one, which is not normally displayed.
|
|
2147
|
+
If the interval is set to zero, then labels are displayed for all slots, including the very first one, which is not normally displayed in `timeGrid` views.
|
|
2148
2148
|
|
|
2149
2149
|
### slotMaxTime
|
|
2150
2150
|
- Type `string`, `integer` or `object`
|
|
@@ -2176,7 +2176,7 @@ Defines the time slot width in pixels in `resourceTimeline` views. When changing
|
|
|
2176
2176
|
|
|
2177
2177
|
### theme
|
|
2178
2178
|
- Type `object` or `function`
|
|
2179
|
-
- Default `{allDay: 'ec-all-day', active: 'ec-active', bgEvent: 'ec-bg-event', bgEvents: 'ec-bg-events', body: 'ec-body', button: 'ec-button', buttonGroup: 'ec-button-group', calendar: 'ec',
|
|
2179
|
+
- Default `{allDay: 'ec-all-day', active: 'ec-active', bgEvent: 'ec-bg-event', bgEvents: 'ec-bg-events', body: 'ec-body', button: 'ec-button', buttonGroup: 'ec-button-group', calendar: 'ec', container: 'ec-container', content: 'ec-content', day: 'ec-day', dayHead: 'ec-day-head', dayFoot: 'ec-day-foot', days: 'ec-days', daySide: 'ec-day-side', draggable: 'ec-draggable', dragging: 'ec-dragging', event: 'ec-event', eventBody: 'ec-event-body', eventTag: 'ec-event-tag', eventTime: 'ec-event-time', eventTitle: 'ec-event-title', events: 'ec-events', expander: 'ec-expander', extra: 'ec-extra', ghost: 'ec-ghost', handle: 'ec-handle', header: 'ec-header', hiddenScroll: 'ec-hidden-scroll', highlight: 'ec-highlight', icon: 'ec-icon', line: 'ec-line', lines: 'ec-lines', main: 'ec-main', minor: 'ec-minor', noEvents: 'ec-no-events', nowIndicator: 'ec-now-indicator', otherMonth: 'ec-other-month', pointer: 'ec-pointer', popup: 'ec-popup', preview: 'ec-preview', resizer: 'ec-resizer', resizingX: 'ec-resizing-x', resizingY: 'ec-resizing-y', resource: 'ec-resource', selecting: 'ec-selecting', sidebar: 'ec-sidebar', sidebarTitle: 'ec-sidebar-title', today: 'ec-today', time: 'ec-time', times: 'ec-times', title: 'ec-title', toolbar: 'ec-toolbar', view: 'ec-timeline ec-resource-week-view', weekdays: ['ec-sun', 'ec-mon', 'ec-tue', 'ec-wed', 'ec-thu', 'ec-fri', 'ec-sat'], withScroll: 'ec-with-scroll', uniform: 'ec-uniform'}`
|
|
2180
2180
|
> Views override the default value as follows:
|
|
2181
2181
|
> - dayGridMonth `theme => ({...theme, view: 'ec-day-grid ec-month-view'})`
|
|
2182
2182
|
> - listDay `theme => ({...theme, view: 'ec-list ec-day-view'})`
|
package/dist/index.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* EventCalendar v4.0
|
|
2
|
+
* EventCalendar v4.1.0
|
|
3
3
|
* https://github.com/vkurko/calendar
|
|
4
4
|
*/
|
|
5
5
|
.ec {
|
|
@@ -126,6 +126,9 @@
|
|
|
126
126
|
overflow: hidden;
|
|
127
127
|
text-overflow: ellipsis;
|
|
128
128
|
}
|
|
129
|
+
.ec-timeline .ec-time.ec-minor {
|
|
130
|
+
visibility: hidden;
|
|
131
|
+
}
|
|
129
132
|
.ec-timeline .ec-time, .ec-timeline .ec-line {
|
|
130
133
|
width: 72px;
|
|
131
134
|
}
|
|
@@ -151,6 +154,9 @@
|
|
|
151
154
|
border-left: 1px solid var(--ec-border-color);
|
|
152
155
|
pointer-events: none;
|
|
153
156
|
}
|
|
157
|
+
.ec-timeline .ec-line.ec-minor:after {
|
|
158
|
+
border-left-style: dotted;
|
|
159
|
+
}
|
|
154
160
|
.ec-timeline .ec-sidebar {
|
|
155
161
|
padding: 0;
|
|
156
162
|
border: 1px solid var(--ec-border-color);
|
|
@@ -209,6 +215,9 @@
|
|
|
209
215
|
top: -12px;
|
|
210
216
|
text-align: right;
|
|
211
217
|
}
|
|
218
|
+
.ec-time-grid .ec-time.ec-minor {
|
|
219
|
+
visibility: hidden;
|
|
220
|
+
}
|
|
212
221
|
.ec-time-grid .ec-header .ec-time,
|
|
213
222
|
.ec-time-grid .ec-all-day .ec-time {
|
|
214
223
|
visibility: hidden;
|
|
@@ -229,7 +238,7 @@
|
|
|
229
238
|
border-bottom: 1px solid var(--ec-border-color);
|
|
230
239
|
pointer-events: none;
|
|
231
240
|
}
|
|
232
|
-
.ec-time-grid .ec-
|
|
241
|
+
.ec-time-grid .ec-line.ec-minor:after {
|
|
233
242
|
border-bottom-style: dotted;
|
|
234
243
|
}
|
|
235
244
|
.ec-time-grid .ec-sidebar-title {
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* EventCalendar v4.0
|
|
2
|
+
* EventCalendar v4.1.0
|
|
3
3
|
* https://github.com/vkurko/calendar
|
|
4
4
|
*/
|
|
5
5
|
import { tick, getContext, untrack, setContext, onMount, mount, unmount } from "svelte";
|
|
@@ -304,7 +304,7 @@ function getElementWithPayload(x, y, root2 = document) {
|
|
|
304
304
|
if (hasPayload(el)) {
|
|
305
305
|
return el;
|
|
306
306
|
}
|
|
307
|
-
if (el.shadowRoot) {
|
|
307
|
+
if (el.shadowRoot && el.shadowRoot !== root2) {
|
|
308
308
|
let shadowEl = getElementWithPayload(x, y, el.shadowRoot);
|
|
309
309
|
if (shadowEl) {
|
|
310
310
|
return shadowEl;
|
|
@@ -748,18 +748,14 @@ function createTimes(date, $slotDuration, $slotLabelInterval, $_slotTimeLimits,
|
|
|
748
748
|
if ($slotLabelInterval === void 0) {
|
|
749
749
|
$slotLabelInterval = $slotDuration.seconds < 3600 ? createDuration($slotDuration.seconds * 2) : $slotDuration;
|
|
750
750
|
}
|
|
751
|
-
let
|
|
752
|
-
let label;
|
|
753
|
-
if (!showAll) {
|
|
754
|
-
label = cloneDate(date);
|
|
755
|
-
}
|
|
751
|
+
let label = cloneDate(date);
|
|
756
752
|
while (date < end) {
|
|
757
753
|
times2.push([
|
|
758
754
|
toISOString(date),
|
|
759
755
|
$_intlSlotLabel.format(date),
|
|
760
|
-
|
|
756
|
+
date >= label
|
|
761
757
|
]);
|
|
762
|
-
while (
|
|
758
|
+
while ($slotLabelInterval.seconds && date >= label) {
|
|
763
759
|
addDuration(label, $slotLabelInterval);
|
|
764
760
|
}
|
|
765
761
|
addDuration(date, $slotDuration);
|
|
@@ -882,7 +878,6 @@ function createOptions(plugins) {
|
|
|
882
878
|
button: "ec-button",
|
|
883
879
|
buttonGroup: "ec-button-group",
|
|
884
880
|
calendar: "ec",
|
|
885
|
-
compact: "ec-compact",
|
|
886
881
|
content: "ec-content",
|
|
887
882
|
day: "ec-day",
|
|
888
883
|
dayHead: "ec-day-head",
|
|
@@ -901,6 +896,7 @@ function createOptions(plugins) {
|
|
|
901
896
|
icon: "ec-icon",
|
|
902
897
|
line: "ec-line",
|
|
903
898
|
lines: "ec-lines",
|
|
899
|
+
minor: "ec-minor",
|
|
904
900
|
nowIndicator: "ec-now-indicator",
|
|
905
901
|
otherMonth: "ec-other-month",
|
|
906
902
|
resource: "ec-resource",
|
|
@@ -1968,15 +1964,16 @@ function InteractableEvent($$anchor, $$props) {
|
|
|
1968
1964
|
let el = $.prop($$props, "el", 15);
|
|
1969
1965
|
let { _interaction, _iClasses } = getContext("state");
|
|
1970
1966
|
let event = $.derived(() => $$props.chunk.event);
|
|
1967
|
+
let display = $.derived(() => $$props.chunk.event.display);
|
|
1971
1968
|
let classes = $.derived(() => (classNames) => $_iClasses()(classNames, $.get(event)));
|
|
1972
1969
|
function createDragHandler(event2) {
|
|
1973
|
-
var _a;
|
|
1970
|
+
var _a, _b;
|
|
1974
1971
|
return ((_a = $_interaction().action) == null ? void 0 : _a.draggable(event2)) ? (jsEvent) => {
|
|
1975
|
-
var _a2,
|
|
1976
|
-
return $_interaction().action.drag(event2, jsEvent, (_a2 = $$props.forceDate) == null ? void 0 : _a2.call($$props), (
|
|
1977
|
-
} : void 0;
|
|
1972
|
+
var _a2, _b2;
|
|
1973
|
+
return $_interaction().action.drag(event2, jsEvent, (_a2 = $$props.forceDate) == null ? void 0 : _a2.call($$props), (_b2 = $$props.forceMargin) == null ? void 0 : _b2.call($$props));
|
|
1974
|
+
} : (_b = $_interaction().action) == null ? void 0 : _b.noAction;
|
|
1978
1975
|
}
|
|
1979
|
-
let onpointerdown = $.derived(() => createDragHandler($.get(event)));
|
|
1976
|
+
let onpointerdown = $.derived(() => !bgEvent($.get(display)) && !helperEvent($.get(display)) ? createDragHandler($.get(event)) : void 0);
|
|
1980
1977
|
let Resizer2 = $.derived(() => $_interaction().resizer);
|
|
1981
1978
|
{
|
|
1982
1979
|
const body = ($$anchor2, defaultBody = $.noop) => {
|
|
@@ -2787,10 +2784,10 @@ const index$4 = {
|
|
|
2787
2784
|
}
|
|
2788
2785
|
};
|
|
2789
2786
|
function eventDraggable(event, $eventStartEditable, $editable) {
|
|
2790
|
-
return
|
|
2787
|
+
return event.startEditable ?? $eventStartEditable ?? event.editable ?? $editable;
|
|
2791
2788
|
}
|
|
2792
2789
|
function eventResizable(event, $eventDurationEditable, $editable) {
|
|
2793
|
-
return
|
|
2790
|
+
return event.durationEditable ?? $eventDurationEditable ?? event.editable ?? $editable;
|
|
2794
2791
|
}
|
|
2795
2792
|
let busy = false;
|
|
2796
2793
|
function animate(fn) {
|
|
@@ -3514,7 +3511,8 @@ function Resizer($$anchor, $$props) {
|
|
|
3514
3511
|
_interaction
|
|
3515
3512
|
} = getContext("state");
|
|
3516
3513
|
let event = $.derived(() => $$props.chunk.event);
|
|
3517
|
-
let
|
|
3514
|
+
let display = $.derived(() => $$props.chunk.event.display);
|
|
3515
|
+
let resizable = $.derived(() => !bgEvent($.get(display)) && !helperEvent($.get(display)) && eventResizable($.get(event), $eventDurationEditable(), $editable()));
|
|
3518
3516
|
function createResizeHandler(start) {
|
|
3519
3517
|
return (jsEvent) => {
|
|
3520
3518
|
var _a, _b;
|
|
@@ -3589,7 +3587,7 @@ function Auxiliary($$anchor, $$props) {
|
|
|
3589
3587
|
let { display } = event;
|
|
3590
3588
|
return [
|
|
3591
3589
|
...classNames,
|
|
3592
|
-
helperEvent(display) ? [$theme()[display]] : eventDraggable(event, $eventStartEditable(), $editable()) ? [$theme().draggable] : []
|
|
3590
|
+
helperEvent(display) ? [$theme()[display]] : !bgEvent(display) && eventDraggable(event, $eventStartEditable(), $editable()) ? [$theme().draggable] : []
|
|
3593
3591
|
];
|
|
3594
3592
|
});
|
|
3595
3593
|
});
|
|
@@ -4027,20 +4025,27 @@ function Section($$anchor, $$props) {
|
|
|
4027
4025
|
$.push($$props, true);
|
|
4028
4026
|
const [$$stores, $$cleanup] = $.setup_stores();
|
|
4029
4027
|
const $allDayContent = () => $.store_get(allDayContent, "$allDayContent", $$stores);
|
|
4028
|
+
const $slotLabelInterval = () => $.store_get(slotLabelInterval, "$slotLabelInterval", $$stores);
|
|
4030
4029
|
const $theme = () => $.store_get(theme, "$theme", $$stores);
|
|
4031
4030
|
const $_times = () => $.store_get(_times, "$_times", $$stores);
|
|
4032
|
-
let {
|
|
4031
|
+
let {
|
|
4032
|
+
allDayContent,
|
|
4033
|
+
slotLabelInterval,
|
|
4034
|
+
theme,
|
|
4035
|
+
_times
|
|
4036
|
+
} = getContext("state");
|
|
4033
4037
|
let allDayText = $.derived(() => createAllDayContent($allDayContent()));
|
|
4038
|
+
let showAllTimes = $.derived(() => $slotLabelInterval() && $slotLabelInterval().seconds <= 0);
|
|
4034
4039
|
var fragment = root$f();
|
|
4035
4040
|
var div = $.first_child(fragment);
|
|
4036
4041
|
var div_1 = $.child(div);
|
|
4037
4042
|
$.action(div_1, ($$node, $$action_arg) => setContent == null ? void 0 : setContent($$node, $$action_arg), () => $.get(allDayText));
|
|
4038
4043
|
var node = $.sibling(div_1, 2);
|
|
4039
|
-
$.each(node, 1, $_times, $.index, ($$anchor2, time) => {
|
|
4044
|
+
$.each(node, 1, $_times, $.index, ($$anchor2, time, i) => {
|
|
4040
4045
|
var time_1 = root_1$4();
|
|
4041
|
-
$.action(time_1, ($$node, $$action_arg) => setContent == null ? void 0 : setContent($$node, $$action_arg), () => $.get(time)[
|
|
4046
|
+
$.action(time_1, ($$node, $$action_arg) => setContent == null ? void 0 : setContent($$node, $$action_arg), () => $.get(time)[1]);
|
|
4042
4047
|
$.template_effect(() => {
|
|
4043
|
-
$.set_class(time_1, 1, $theme().time);
|
|
4048
|
+
$.set_class(time_1, 1, `${$theme().time ?? ""}${(i || $.get(showAllTimes)) && $.get(time)[2] ? "" : " " + $theme().minor}`);
|
|
4044
4049
|
$.set_attribute(time_1, "datetime", $.get(time)[0]);
|
|
4045
4050
|
});
|
|
4046
4051
|
$.append($$anchor2, time_1);
|
|
@@ -4089,10 +4094,10 @@ var root$e = $.template(`<div><div><!></div></div>`);
|
|
|
4089
4094
|
function Body$1($$anchor, $$props) {
|
|
4090
4095
|
$.push($$props, true);
|
|
4091
4096
|
const [$$stores, $$cleanup] = $.setup_stores();
|
|
4092
|
-
const $slotDuration = () => $.store_get(slotDuration, "$slotDuration", $$stores);
|
|
4093
4097
|
const $_viewDates = () => $.store_get(_viewDates, "$_viewDates", $$stores);
|
|
4094
4098
|
const $scrollTime = () => $.store_get(scrollTime, "$scrollTime", $$stores);
|
|
4095
4099
|
const $_slotTimeLimits = () => $.store_get(_slotTimeLimits, "$_slotTimeLimits", $$stores);
|
|
4100
|
+
const $slotDuration = () => $.store_get(slotDuration, "$slotDuration", $$stores);
|
|
4096
4101
|
const $slotHeight = () => $.store_get(slotHeight, "$slotHeight", $$stores);
|
|
4097
4102
|
const $theme = () => $.store_get(theme, "$theme", $$stores);
|
|
4098
4103
|
const $_times = () => $.store_get(_times, "$_times", $$stores);
|
|
@@ -4108,7 +4113,6 @@ function Body$1($$anchor, $$props) {
|
|
|
4108
4113
|
theme
|
|
4109
4114
|
} = getContext("state");
|
|
4110
4115
|
let el = $.state(void 0);
|
|
4111
|
-
let compact = $.derived(() => $slotDuration().seconds >= 3600);
|
|
4112
4116
|
$.user_effect(() => {
|
|
4113
4117
|
$.store_set(_bodyEl, $.get(el));
|
|
4114
4118
|
});
|
|
@@ -4127,9 +4131,9 @@ function Body$1($$anchor, $$props) {
|
|
|
4127
4131
|
const lines = ($$anchor2) => {
|
|
4128
4132
|
var fragment = $.comment();
|
|
4129
4133
|
var node_1 = $.first_child(fragment);
|
|
4130
|
-
$.each(node_1, 1,
|
|
4134
|
+
$.each(node_1, 1, $_times, $.index, ($$anchor3, time) => {
|
|
4131
4135
|
var div_2 = root_2$5();
|
|
4132
|
-
$.template_effect(() => $.set_class(div_2, 1, $theme().line));
|
|
4136
|
+
$.template_effect(() => $.set_class(div_2, 1, `${$theme().line ?? ""}${$.get(time)[2] ? "" : " " + $theme().minor}`));
|
|
4133
4137
|
$.append($$anchor3, div_2);
|
|
4134
4138
|
});
|
|
4135
4139
|
$.append($$anchor2, fragment);
|
|
@@ -4147,7 +4151,7 @@ function Body$1($$anchor, $$props) {
|
|
|
4147
4151
|
$.bind_this(div, ($$value) => $.set(el, $$value), () => $.get(el));
|
|
4148
4152
|
$.action(div, ($$node, $$action_arg) => observeResize == null ? void 0 : observeResize($$node, $$action_arg), () => () => $.store_set(_recheckScrollable, true));
|
|
4149
4153
|
$.template_effect(() => {
|
|
4150
|
-
$.set_class(div, 1,
|
|
4154
|
+
$.set_class(div, 1, $theme().body);
|
|
4151
4155
|
$.set_class(div_1, 1, $theme().content);
|
|
4152
4156
|
});
|
|
4153
4157
|
$.append($$anchor, div);
|
|
@@ -5437,7 +5441,7 @@ function Header($$anchor, $$props) {
|
|
|
5437
5441
|
$.action(time_2, ($$node, $$action_arg) => setContent == null ? void 0 : setContent($$node, $$action_arg), () => $.get(time)[1]);
|
|
5438
5442
|
$.reset(div_5);
|
|
5439
5443
|
$.template_effect(() => {
|
|
5440
|
-
$.set_class(div_5, 1, $theme().time);
|
|
5444
|
+
$.set_class(div_5, 1, `${$theme().time ?? ""}${$.get(time)[2] ? "" : " " + $theme().minor}`);
|
|
5441
5445
|
$.set_attribute(time_2, "datetime", $.get(time)[0]);
|
|
5442
5446
|
});
|
|
5443
5447
|
$.append($$anchor4, div_5);
|
|
@@ -6024,7 +6028,7 @@ function Body($$anchor, $$props) {
|
|
|
6024
6028
|
var node = $.first_child(fragment);
|
|
6025
6029
|
$.each(node, 1, () => $_dayTimes()[$.get(date).getTime()], $.index, ($$anchor3, time) => {
|
|
6026
6030
|
var div_3 = root_2();
|
|
6027
|
-
$.template_effect(() => $.set_class(div_3, 1, $theme().line));
|
|
6031
|
+
$.template_effect(() => $.set_class(div_3, 1, `${$theme().line ?? ""}${$.get(time)[2] ? "" : " " + $theme().minor}`));
|
|
6028
6032
|
$.append($$anchor3, div_3);
|
|
6029
6033
|
});
|
|
6030
6034
|
$.append($$anchor2, fragment);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event-calendar/core",
|
|
3
|
-
"version": "4.0
|
|
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": [
|
|
@@ -34,4 +34,4 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
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
|
-
:
|
|
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
|
|
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
|
-
|
|
23
|
+
date >= label
|
|
28
24
|
]);
|
|
29
|
-
while (
|
|
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
|
-
: (
|
|
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(
|
|
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
|
}
|
|
@@ -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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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}
|
|
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
|
|
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
|
|
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">
|
package/src/storage/options.js
CHANGED
|
@@ -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-
|
|
67
|
+
.ec-line.ec-minor:after {
|
|
64
68
|
border-bottom-style: dotted;
|
|
65
69
|
}
|
|
66
70
|
|
package/src/styles/timeline.scss
CHANGED
|
@@ -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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
114
|
+
.ec-line.ec-minor:after {
|
|
115
|
+
border-left-style: dotted;
|
|
116
|
+
}
|
|
113
117
|
|
|
114
118
|
.ec-sidebar {
|
|
115
119
|
padding: 0;
|