@event-calendar/core 0.5.0 → 0.8.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.
Files changed (4) hide show
  1. package/README.md +75 -6
  2. package/index.css +1 -1
  3. package/index.js +82 -58
  4. package/package.json +3 -3
package/README.md CHANGED
@@ -4,7 +4,7 @@ See [demo](https://vkurko.github.io/calendar/).
4
4
 
5
5
  Full-sized drag & drop JavaScript event calendar with resource view:
6
6
 
7
- * Lightweight (40.8kb [br](https://en.wikipedia.org/wiki/Brotli) compressed `modern` version)
7
+ * Lightweight (47kb [br](https://en.wikipedia.org/wiki/Brotli) compressed `modern` version)
8
8
  * Zero-dependency (pre-built bundle)
9
9
  * Used by [Bookly](https://wordpress.org/plugins/bookly-responsive-appointment-booking-tool/)
10
10
 
@@ -25,6 +25,8 @@ Inspired by [FullCalendar](https://fullcalendar.io/), implements similar options
25
25
  - [datesAboveResources](#datesaboveresources)
26
26
  - [datesSet](#datesset)
27
27
  - [dayHeaderFormat](#dayheaderformat)
28
+ - [dayMaxEvents](#daymaxevents)
29
+ - [dayPopoverFormat](#daypopoverformat)
28
30
  - [displayEventEnd](#displayeventend)
29
31
  - [dragScroll](#dragscroll)
30
32
  - [duration](#duration)
@@ -55,14 +57,17 @@ Inspired by [FullCalendar](https://fullcalendar.io/), implements similar options
55
57
  - [highlightedDates](#highlighteddates)
56
58
  - [lazyFetching](#lazyfetching)
57
59
  - [listDayFormat](#listdayformat)
58
- </td><td>
59
-
60
60
  - [listDaySideFormat](#listdaysideformat)
61
61
  - [loading](#loading)
62
+ </td><td>
63
+
62
64
  - [locale](#locale)
63
65
  - [monthMode](#monthmode)
66
+ - [moreLinkContent](#morelinkcontent)
64
67
  - [noEventsClick](#noeventsclick)
65
68
  - [noEventsContent](#noeventscontent)
69
+ - [nowIndicator](#nowindicator)
70
+ - [pointer](#pointer)
66
71
  - [resources](#resources)
67
72
  - [scrollTime](#scrolltime)
68
73
  - [slotDuration](#slotduration)
@@ -360,6 +365,24 @@ function (date) {
360
365
  </tr>
361
366
  </table>
362
367
 
368
+ ### dayMaxEvents
369
+ - Type `boolean`
370
+ - Default `false`
371
+
372
+ Determines the maximum number of stacked event levels for a given day in the `dayGrid` view.
373
+
374
+ If there are too many events, a link like `+2 more` is displayed.
375
+
376
+ Currently, only the value `true` is supported, which limits the number of events to the height of the day cell.
377
+
378
+ ### dayPopoverFormat
379
+ - Type `object` or `function`
380
+ - Default `{month: 'long', day: 'numeric', year: 'numeric'}`
381
+
382
+ Defines the date format of title of the popover created by the [dayMaxEvents](#daymaxevents) option.
383
+
384
+ This value can be either an object with options for the native JavaScript [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) object, or a callback function that returns formatted string:
385
+
363
386
  ### displayEventEnd
364
387
  - Type `boolean`
365
388
  - Default `true`
@@ -1139,6 +1162,40 @@ Defines the `locales` parameter for the native JavaScript [Intl.DateTimeFormat](
1139
1162
 
1140
1163
  Tells the calendar that visible dates should start from the [firstDay](#firstday) of the week, even if it will display days outside the current range (this is a common case for a month calendar when you can see days from adjacent months).
1141
1164
 
1165
+ ### moreLinkContent
1166
+ - Type `string`, `object`or `function`
1167
+ - Default `undefined`
1168
+
1169
+ Defines the text that is displayed instead of the default `+2 more` created by the [dayMaxEvents](#daymaxevents) option.
1170
+
1171
+ This value can be either a string containing HTML `'<p>...</p>'`, an object containing the HTML string `{html: '<p>...</p>'}`, an object containing an array of DOM nodes `{domNodes: [node1, node2, ...]}` or a function that returns any of the above formats:
1172
+
1173
+ ```js
1174
+ function (arg) {
1175
+ // return string or object
1176
+ }
1177
+ ```
1178
+ `arg` is an object with the following properties:
1179
+ <table>
1180
+ <tr>
1181
+ <td>
1182
+
1183
+ `num`
1184
+ </td>
1185
+ <td>The number of hidden events</td>
1186
+ </tr>
1187
+ <tr>
1188
+ <td>
1189
+
1190
+ `text`
1191
+ </td>
1192
+ <td>
1193
+
1194
+ The default text like `+2 more`
1195
+ </td>
1196
+ </tr>
1197
+ </table>
1198
+
1142
1199
  ### noEventsClick
1143
1200
  - Type `function`
1144
1201
  - Default `undefined`
@@ -1183,6 +1240,18 @@ function () {
1183
1240
  }
1184
1241
  ```
1185
1242
 
1243
+ ### nowIndicator
1244
+ - Type `boolean`
1245
+ - Default `false`
1246
+
1247
+ Enables a marker indicating the current time in `timeGrid`/`resourceTimeGrid` views.
1248
+
1249
+ ### pointer
1250
+ - Type `boolean`
1251
+ - Default `false`
1252
+
1253
+ Enables mouse cursor pointer in `timeGrid`/`resourceTimeGrid` views.
1254
+
1186
1255
  ### resources
1187
1256
  - Type `Array`
1188
1257
  - Default `[]`
@@ -1258,7 +1327,7 @@ This should be a value that can be parsed into a [Duration](#duration-object) ob
1258
1327
 
1259
1328
  ### theme
1260
1329
  - Type `object` or `function`
1261
- - Default `{calendar: 'ec', header: 'ec-header', withScroll: 'ec-with-scroll', hiddenScroll: 'ec-hidden-scroll', body: 'ec-body', week: 'ec-week', compact: 'ec-compact', toolbar: 'ec-toolbar', sidebar: 'ec-sidebar', content: 'ec-content', lines: 'ec-lines', line: 'ec-line', days: 'ec-days', day: 'ec-day', dayHead: 'ec-day-head', today: 'ec-today', otherMonth: 'ec-other-month', highlight: 'ec-highlight', events: 'ec-events', event: 'ec-event', eventTime: 'ec-event-time', eventTitle: 'ec-event-title', bgEvents: 'ec-bg-events', bgEvent: 'ec-bg-event', hiddenTimes: 'ec-hidden-times', time: 'ec-time', button: 'ec-button', buttonGroup: 'ec-button-group', icon: 'ec-icon', active: 'ec-active', title: 'ec-title', month: 'ec-month', daySide: 'ec-day-side', eventTag: 'ec-event-tag', list: 'ec-list', noEvents: 'ec-no-events', resource: 'ec-resource', resourceTitle: 'ec-resource-title'}`
1330
+ - Default `{active: 'ec-active', bgEvent: 'ec-bg-event', bgEvents: 'ec-bg-events', body: 'ec-body', button: 'ec-button', buttonGroup: 'ec-button-group', calendar: 'ec', compact: 'ec-compact', content: 'ec-content', day: 'ec-day', dayHead: 'ec-day-head', days: 'ec-days', event: 'ec-event', eventTime: 'ec-event-time', eventTitle: 'ec-event-title', events: 'ec-events', extra: 'ec-extra', handle: 'ec-handle', header: 'ec-header', hiddenScroll: 'ec-hidden-scroll', hiddenTimes: 'ec-hidden-times', highlight: 'ec-highlight', icon: 'ec-icon', line: 'ec-line', lines: 'ec-lines', nowIndicator: 'ec-now-indicator', otherMonth: 'ec-other-month', sidebar: 'ec-sidebar', today: 'ec-today', time: 'ec-time', title: 'ec-title', toolbar: 'ec-toolbar', week: 'ec-week', withScroll: 'ec-with-scroll', uniform: 'ec-uniform', dayFoot: 'ec-day-foot', month: 'ec-month', popup: 'ec-popup', daySide: 'ec-day-side', eventTag: 'ec-event-tag', list: 'ec-list', noEvents: 'ec-no-events', resource: 'ec-resource', resourceTitle: 'ec-resource-title', draggable: 'ec-draggable', ghost: 'ec-ghost', preview: 'ec-preview', pointer: 'ec-pointer'}`
1262
1331
 
1263
1332
  Defines the CSS classes that the Event Calendar uses to generate HTML markup.
1264
1333
 
@@ -1499,7 +1568,7 @@ Boolean (`true` or `false`) or `undefined`. The value overriding the [eventStart
1499
1568
 
1500
1569
  The rendering type of the event. Can be `'auto'` or `'background'`
1501
1570
 
1502
- In addition, in your callback functions, you may get the `'ghost'` and `'preview'` for this property, which are internal values and are used to display events during drag-and-drop operations
1571
+ In addition, in your callback functions, you may get the `'ghost'`, `'preview'` and `'pointer'` for this property, which are internal values and are used, for example, to display events during drag-and-drop operations
1503
1572
  </td>
1504
1573
  </tr>
1505
1574
  <tr>
@@ -1606,7 +1675,7 @@ Here are all admissible fields for the event’s input object:
1606
1675
  </td>
1607
1676
  <td>
1608
1677
 
1609
- `boolean` Overrides the master [eventDurationEditable](#eventstarteditable) option for this single event. Default `undefined`
1678
+ `boolean` Overrides the master [eventStartEditable](#eventstarteditable) option for this single event. Default `undefined`
1610
1679
  </td>
1611
1680
  </tr>
1612
1681
  <tr>
package/index.css CHANGED
@@ -1 +1 @@
1
- .ec-flex{display:flex}.ec-body.ec-month,.ec-days,.ec-day,.ec-day-title,.ec-resource{flex:1 1 0%;min-width:0;max-width:100%}.ec{display:flex;flex-direction:column}.ec ::-webkit-scrollbar{background:#fff}.ec ::-webkit-scrollbar-thumb{border:4px solid #fff;box-shadow:none;background:#dadce0;border-radius:8px;min-height:40px}.ec :hover::-webkit-scrollbar-thumb{background:#bdc1c6}.ec-hidden-scroll{display:none;overflow-y:scroll;visibility:hidden;flex-shrink:0}.ec-with-scroll .ec-hidden-scroll{display:block}.ec-toolbar{flex:0 0 auto;display:flex;justify-content:space-between;align-items:center;margin-bottom:1em}.ec-toolbar>*{margin-bottom:-0.5em}.ec-toolbar>*>*{margin-bottom:.5em}.ec-toolbar>*>*:not(:last-child){margin-right:.75em}.ec-title{margin:0}.ec-button{background-color:#fff;border:1px solid #ced4da;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem}.ec-button:not(:disabled){color:#212529;cursor:pointer}.ec-button:not(:disabled):hover,.ec-button.ec-active{background-color:#ececec;border-color:#b1bbc4}.ec-button-group{display:inline-flex}.ec-button-group .ec-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.ec-button-group .ec-button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.ec-icon{display:inline-block;width:1em}.ec-icon.ec-prev:after,.ec-icon.ec-next:after{content:"";position:relative;width:.5em;height:.5em;border-top:2px solid #212529;border-right:2px solid #212529;display:inline-block}.ec-icon.ec-prev:after{transform:rotate(-135deg) translate(-2px, 2px)}.ec-icon.ec-next:after{transform:rotate(45deg) translate(-2px, 2px)}.ec-header,.ec-body,.ec-days,.ec-day{border:1px solid #dadce0}.ec-header{display:flex;flex-shrink:0}.ec-header .ec-resource{flex-direction:column}.ec-header .ec-resource .ec-days{border-top-style:solid}.ec-header .ec-days{border-bottom:none}.ec-header .ec-day{min-height:24px;line-height:24px;text-align:center;overflow:hidden;text-overflow:ellipsis}.ec-body{position:relative;overflow-x:hidden;overflow-y:auto}.ec-body:not(.ec-list){border-top:none}.ec-sidebar{flex:0 0 auto;width:auto;max-width:100%;padding:0 4px 0 8px}.ec-content{display:flex}.ec-month .ec-content{flex-direction:column;height:100%}.ec-list .ec-content{flex-direction:column}.ec-resource{display:flex}.ec-days{display:flex;border-style:none none solid}.ec-days:last-child{border-bottom:none}.ec-month .ec-days,.ec-resource .ec-days{flex:1 0 auto}.ec-day{border-style:none none none solid}.ec-day.ec-today{background-color:#fcf8e3}.ec-day.ec-highlight{background-color:#e5f7fe}.ec-month .ec-day{min-height:5em}.ec-month .ec-day:first-child{border-left:none}.ec-day.ec-other-month .ec-day-head{opacity:.3}.ec-list .ec-day{flex:1 0 auto;background-color:#fff;border-style:solid none;padding:8px 14px;font-weight:bold;position:sticky;top:0;z-index:1}.ec-list .ec-day:first-child{border-top:none}.ec-month .ec-day-head{text-align:right;padding:4px}.ec-month .ec-preview{top:0}.ec-list .ec-day-side{float:right}.ec-list .ec-no-events{text-align:center;padding:5em 0}.ec-events{margin:0 6px 0 0}.ec-week .ec-events,.ec-events.ec-preview{position:relative}.ec-event{display:flex;flex-direction:column;padding:2px;color:#fff;box-sizing:border-box;box-shadow:0 0 1px 0 #dadce0;background-color:#039be5;border-radius:3px;font-size:.85em;line-height:1.5}.ec-month .ec-event{position:relative}.ec-week .ec-event{position:absolute}.ec-list .ec-event{flex-direction:row;padding:8px 14px;color:inherit;background-color:transparent;border-radius:0}.ec-event.ec-preview{cursor:pointer;position:absolute;z-index:99999;width:100%;-webkit-user-select:none;user-select:none;opacity:.8}.ec-event-tag{width:4px;border-radius:2px;margin-right:8px}.ec-event-time{overflow:hidden;white-space:nowrap;margin-bottom:1px;flex-shrink:0}.ec-event-title{overflow:hidden}.ec-week .ec-event-title{position:sticky;top:0}.ec-list .ec-event-title{font-size:1rem}.ec-draggable{cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:none}.ec-ghost{opacity:.5;-webkit-user-select:none;user-select:none;touch-action:none}.ec-bg-events{position:relative}.ec-bg-event{position:absolute;background-color:#dadce0;opacity:.3;width:100%}.ec-hidden-times{visibility:hidden;overflow-y:hidden;height:0}.ec-time,.ec-line{height:24px}.ec-time{position:relative;line-height:24px;top:-12px;text-align:right;white-space:nowrap}.ec-lines{width:8px}.ec-line:not(:first-child):after{content:"";position:absolute;width:100%;border-bottom:1px solid #dadce0;pointer-events:none}.ec-body:not(.ec-compact) .ec-line:nth-child(even):after{border-bottom-style:dotted}
1
+ .ec-flex{display:flex}.ec-body.ec-month,.ec-days,.ec-day,.ec-day-title,.ec-resource{flex:1 1 0%;min-width:0;max-width:100%}.ec{display:flex;flex-direction:column}.ec ::-webkit-scrollbar{background:#fff}.ec ::-webkit-scrollbar-thumb{border:4px solid #fff;box-shadow:none;background:#dadce0;border-radius:8px;min-height:40px}.ec :hover::-webkit-scrollbar-thumb{background:#bdc1c6}.ec-hidden-scroll{display:none;overflow-y:scroll;visibility:hidden;flex-shrink:0}.ec-with-scroll .ec-hidden-scroll{display:block}.ec-toolbar{flex:0 0 auto;display:flex;justify-content:space-between;align-items:center;margin-bottom:1em}.ec-toolbar>*{margin-bottom:-0.5em}.ec-toolbar>*>*{margin-bottom:.5em}.ec-toolbar>*>*:not(:last-child){margin-right:.75em}.ec-title{margin:0}.ec-button{background-color:#fff;border:1px solid #ced4da;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem}.ec-button:not(:disabled){color:#212529;cursor:pointer}.ec-button:not(:disabled):hover,.ec-button.ec-active{background-color:#ececec;border-color:#b1bbc4}.ec-button-group{display:inline-flex}.ec-button-group .ec-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.ec-button-group .ec-button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.ec-icon{display:inline-block;width:1em}.ec-icon.ec-prev:after,.ec-icon.ec-next:after{content:"";position:relative;width:.5em;height:.5em;border-top:2px solid #212529;border-right:2px solid #212529;display:inline-block}.ec-icon.ec-prev:after{transform:rotate(-135deg) translate(-2px, 2px)}.ec-icon.ec-next:after{transform:rotate(45deg) translate(-2px, 2px)}.ec-header,.ec-body,.ec-days,.ec-day{border:1px solid #dadce0}.ec-header{display:flex;flex-shrink:0}.ec-header .ec-resource{flex-direction:column}.ec-header .ec-resource .ec-days{border-top-style:solid}.ec-header .ec-days{border-bottom:none}.ec-header .ec-day{min-height:24px;line-height:24px;text-align:center;overflow:hidden;text-overflow:ellipsis}.ec-body{position:relative;overflow-x:hidden;overflow-y:auto}.ec-body:not(.ec-list){border-top:none}.ec-sidebar{flex:0 0 auto;width:auto;max-width:100%;padding:0 4px 0 8px}.ec-content{display:flex}.ec-month .ec-content{flex-direction:column;height:100%}.ec-month.ec-uniform .ec-content{overflow:hidden}.ec-list .ec-content{flex-direction:column}.ec-resource{display:flex}.ec-days{display:flex;border-style:none none solid}.ec-days:last-child{border-bottom:none}.ec-month .ec-days,.ec-resource .ec-days{flex:1 0 auto}.ec-month.ec-uniform .ec-days{flex:1 1 0%;min-height:0}.ec-day{border-style:none none none solid}.ec-day.ec-today{background-color:#fcf8e3}.ec-day.ec-highlight{background-color:#e5f7fe}.ec-month.ec-body .ec-day{min-height:5em;position:relative}.ec-month.ec-uniform .ec-day{min-height:0}.ec-month .ec-day:first-child{border-left:none}.ec-day.ec-other-month .ec-day-head{opacity:.3}.ec-list .ec-day{flex:1 0 auto;background-color:#fff;border-style:solid none;padding:8px 14px;font-weight:bold;position:-webkit-sticky;position:sticky;top:0;z-index:2}.ec-list .ec-day:first-child{border-top:none}.ec-month .ec-day-head{text-align:right;padding:4px 4px 3px}.ec-month .ec-day-foot{position:absolute;bottom:0;padding:2px;font-size:.85em}.ec-month .ec-day-foot a{cursor:pointer}.ec-list .ec-day-side{float:right}.ec-list .ec-no-events{text-align:center;padding:5em 0}.ec-events{margin:0 6px 0 0}.ec-week .ec-events,.ec-events.ec-preview{position:relative}.ec-event{display:flex;flex-direction:column;padding:2px;color:#fff;box-sizing:border-box;box-shadow:0 0 1px 0 #dadce0;background-color:#039be5;border-radius:3px;font-size:.85em;line-height:1.5;z-index:1}.ec-month .ec-event{position:relative;flex-direction:row}.ec-week .ec-event{position:absolute}.ec-list .ec-event{flex-direction:row;padding:8px 14px;color:inherit;background-color:transparent;border-radius:0}.ec-event.ec-preview{cursor:pointer;position:absolute;z-index:1000;width:100%;-webkit-user-select:none;user-select:none;opacity:.8}.ec-event.ec-pointer{color:inherit;pointer-events:none;-webkit-user-select:none;user-select:none;position:absolute;z-index:0;box-shadow:none;display:none}.ec-day:hover .ec-event.ec-pointer{display:flex}.ec-event-tag{width:4px;border-radius:2px;margin-right:8px}.ec-event-time{overflow:hidden;white-space:nowrap;margin:0 0 1px 0;flex-shrink:0}.ec-month .ec-event-time{margin:0 3px 0 0;max-width:100%;text-overflow:ellipsis}.ec-event-title{overflow:hidden}.ec-month .ec-event-title{white-space:nowrap;text-overflow:ellipsis}.ec-week .ec-event-title{position:-webkit-sticky;position:sticky;top:0}.ec-list .ec-event-title{font-size:1rem}.ec-draggable{cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:none}.ec-ghost{opacity:.5;-webkit-user-select:none;user-select:none;touch-action:none}.ec-bg-events{position:relative}.ec-bg-event{position:absolute;background-color:#dadce0;opacity:.3;width:100%}.ec-hidden-times{visibility:hidden;overflow-y:hidden;height:0}.ec-time,.ec-line{height:24px}.ec-time{position:relative;line-height:24px;top:-12px;text-align:right;white-space:nowrap}.ec-lines{width:8px}.ec-line:not(:first-child):after{content:"";position:absolute;width:100%;border-bottom:1px solid #dadce0;pointer-events:none}.ec-body:not(.ec-compact) .ec-line:nth-child(even):after{border-bottom-style:dotted}.ec-popup{position:absolute;top:0;width:110%;min-width:180px;z-index:1010;padding:8px 10px 14px;background-color:#fff;border-radius:6px;outline:1px solid transparent;box-shadow:0 1px 3px 0 rgba(60,64,67,.3),0 4px 8px 3px rgba(60,64,67,.15)}.ec-popup .ec-day-head{text-align:left;display:flex;justify-content:space-between}.ec-popup .ec-day-head a{cursor:pointer;font-size:1.5em;line-height:.8}.ec-popup .ec-events{margin:0}.ec-extra{position:relative}.ec-now-indicator{position:absolute;z-index:1005;width:100%;border-top:#ea4335 solid 2px}.ec-now-indicator:before{background:#ea4335;border-radius:50%;content:"";position:absolute;height:12px;margin-left:-7px;margin-top:-7px;width:12px}
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { is_function, tick, noop, SvelteComponent, init, safe_not_equal, empty, insert, detach, destroy_each, component_subscribe, set_store_value, element, text, attr, append, listen, set_data, space, transition_in, group_outros, transition_out, check_outros, create_component, mount_component, destroy_component, set_style } from 'svelte/internal';
1
+ import { is_function, tick, noop, identity, SvelteComponent, init, safe_not_equal, empty, insert, detach, destroy_each, component_subscribe, set_store_value, element, text, attr, append, listen, set_data, space, transition_in, group_outros, transition_out, check_outros, create_component, mount_component, destroy_component, set_style } from 'svelte/internal';
2
2
  import { getContext, setContext } from 'svelte';
3
3
  import { derived, writable, get } from 'svelte/store';
4
4
  import { setMidnight, createDate, createDuration, createEvents, createEventSources, assign, cloneDate, prevClosestDay, addDuration, subtractDay, derived2, addDay, createView, nextClosestDay, DAY_IN_SECONDS, toLocalDate, toISOString, writable2, intl, intlRange, subtractDuration, toEventWithLocalDates, toViewWithLocalDates } from '@event-calendar/common';
@@ -45,6 +45,7 @@ function createOptions(plugins) {
45
45
  loading: undefined,
46
46
  locale: undefined,
47
47
  monthMode: false,
48
+ nowIndicator: false,
48
49
  scrollTime: '06:00:00',
49
50
  slotDuration: '00:30:00',
50
51
  slotHeight: 24, // ec option
@@ -55,37 +56,40 @@ function createOptions(plugins) {
55
56
  slotMaxTime: '24:00:00',
56
57
  slotMinTime: '00:00:00',
57
58
  theme: {
58
- calendar: 'ec',
59
- header: 'ec-header',
60
- withScroll: 'ec-with-scroll',
61
- hiddenScroll: 'ec-hidden-scroll',
59
+ active: 'ec-active',
60
+ bgEvent: 'ec-bg-event',
61
+ bgEvents: 'ec-bg-events',
62
62
  body: 'ec-body',
63
- week: 'ec-week',
63
+ button: 'ec-button',
64
+ buttonGroup: 'ec-button-group',
65
+ calendar: 'ec',
64
66
  compact: 'ec-compact',
65
- toolbar: 'ec-toolbar',
66
- sidebar: 'ec-sidebar',
67
67
  content: 'ec-content',
68
- lines: 'ec-lines',
69
- line: 'ec-line',
70
- days: 'ec-days',
71
68
  day: 'ec-day',
72
69
  dayHead: 'ec-day-head',
73
- today: 'ec-today',
74
- otherMonth: 'ec-other-month',
75
- highlight: 'ec-highlight',
76
- events: 'ec-events',
70
+ days: 'ec-days',
77
71
  event: 'ec-event',
78
72
  eventTime: 'ec-event-time',
79
73
  eventTitle: 'ec-event-title',
80
- bgEvents: 'ec-bg-events',
81
- bgEvent: 'ec-bg-event',
74
+ events: 'ec-events',
75
+ extra: 'ec-extra',
76
+ handle: 'ec-handle',
77
+ header: 'ec-header',
78
+ hiddenScroll: 'ec-hidden-scroll',
82
79
  hiddenTimes: 'ec-hidden-times',
83
- time: 'ec-time',
84
- button: 'ec-button',
85
- buttonGroup: 'ec-button-group',
80
+ highlight: 'ec-highlight',
86
81
  icon: 'ec-icon',
87
- active: 'ec-active',
88
- title: 'ec-title'
82
+ line: 'ec-line',
83
+ lines: 'ec-lines',
84
+ nowIndicator: 'ec-now-indicator',
85
+ otherMonth: 'ec-other-month',
86
+ sidebar: 'ec-sidebar',
87
+ today: 'ec-today',
88
+ time: 'ec-time',
89
+ title: 'ec-title',
90
+ toolbar: 'ec-toolbar',
91
+ week: 'ec-week',
92
+ withScroll: 'ec-with-scroll'
89
93
  },
90
94
  titleFormat: {
91
95
  year: 'numeric',
@@ -361,9 +365,12 @@ class State {
361
365
  this._viewDates = viewDates(this);
362
366
  this._view = view(this);
363
367
  this._viewComponent = writable(undefined);
368
+ // Interaction
364
369
  this._interaction = writable({});
365
- this._interactionComponent = writable(null);
366
- this._dragEvent = writable(null);
370
+ this._interactionEvents = writable([null, null]); // drag, pointer
371
+ this._draggable = writable(noop);
372
+ this._classes = writable(identity);
373
+ this._scroll = writable(undefined);
367
374
 
368
375
  // Let plugins create their private stores
369
376
  for (let plugin of plugins) {
@@ -432,7 +439,7 @@ function parseOpts(opts, state) {
432
439
  }
433
440
  }
434
441
 
435
- /* packages/core/src/Buttons.svelte generated by Svelte v3.42.4 */
442
+ /* packages/core/src/Buttons.svelte generated by Svelte v3.46.3 */
436
443
 
437
444
  function get_each_context$1(ctx, list, i) {
438
445
  const child_ctx = ctx.slice();
@@ -835,7 +842,7 @@ class Buttons extends SvelteComponent {
835
842
  }
836
843
  }
837
844
 
838
- /* packages/core/src/Toolbar.svelte generated by Svelte v3.42.4 */
845
+ /* packages/core/src/Toolbar.svelte generated by Svelte v3.46.3 */
839
846
 
840
847
  function get_each_context(ctx, list, i) {
841
848
  const child_ctx = ctx.slice();
@@ -1205,7 +1212,7 @@ class Toolbar extends SvelteComponent {
1205
1212
  }
1206
1213
  }
1207
1214
 
1208
- /* packages/core/src/Calendar.svelte generated by Svelte v3.42.4 */
1215
+ /* packages/core/src/Calendar.svelte generated by Svelte v3.46.3 */
1209
1216
 
1210
1217
  function create_fragment(ctx) {
1211
1218
  let div;
@@ -1227,7 +1234,7 @@ function create_fragment(ctx) {
1227
1234
  switch_instance0 = new switch_value(switch_props());
1228
1235
  }
1229
1236
 
1230
- var switch_value_1 = /*$_interactionComponent*/ ctx[3];
1237
+ var switch_value_1 = /*$_interaction*/ ctx[3].component;
1231
1238
 
1232
1239
  function switch_props_1(ctx) {
1233
1240
  return {};
@@ -1288,7 +1295,7 @@ function create_fragment(ctx) {
1288
1295
  }
1289
1296
  }
1290
1297
 
1291
- if (switch_value_1 !== (switch_value_1 = /*$_interactionComponent*/ ctx[3])) {
1298
+ if (switch_value_1 !== (switch_value_1 = /*$_interaction*/ ctx[3].component)) {
1292
1299
  if (switch_instance1) {
1293
1300
  group_outros();
1294
1301
  const old_component = switch_instance1;
@@ -1341,17 +1348,23 @@ function create_fragment(ctx) {
1341
1348
  }
1342
1349
 
1343
1350
  function instance($$self, $$props, $$invalidate) {
1351
+ let $events;
1352
+ let $_events;
1353
+ let $eventSources;
1344
1354
  let $theme;
1345
1355
  let $height;
1346
1356
  let $_viewComponent;
1347
- let $_interactionComponent;
1357
+ let $_interaction;
1348
1358
  let { plugins = [] } = $$props;
1349
1359
  let { options = {} } = $$props;
1350
1360
  let state = new State(plugins, options);
1351
1361
  setContext('state', state);
1352
- let { _viewComponent, _interactionComponent, height, theme } = state;
1362
+ let { _viewComponent, _interaction, _events, events, eventSources, height, theme } = state;
1353
1363
  component_subscribe($$self, _viewComponent, value => $$invalidate(2, $_viewComponent = value));
1354
- component_subscribe($$self, _interactionComponent, value => $$invalidate(3, $_interactionComponent = value));
1364
+ component_subscribe($$self, _interaction, value => $$invalidate(3, $_interaction = value));
1365
+ component_subscribe($$self, _events, value => $$invalidate(22, $_events = value));
1366
+ component_subscribe($$self, events, value => $$invalidate(21, $events = value));
1367
+ component_subscribe($$self, eventSources, value => $$invalidate(23, $eventSources = value));
1355
1368
  component_subscribe($$self, height, value => $$invalidate(1, $height = value));
1356
1369
  component_subscribe($$self, theme, value => $$invalidate(0, $theme = value));
1357
1370
 
@@ -1389,12 +1402,12 @@ function instance($$self, $$props, $$invalidate) {
1389
1402
  }
1390
1403
 
1391
1404
  function addEvent(event) {
1392
- state._events.update(events => events.concat(state.events.parse([event])));
1405
+ updateEvents(events => events.concat(state.events.parse([event])));
1393
1406
  return this;
1394
1407
  }
1395
1408
 
1396
1409
  function updateEvent(event) {
1397
- state._events.update(events => {
1410
+ updateEvents(events => {
1398
1411
  for (let e of events) {
1399
1412
  if (e.id == event.id) {
1400
1413
  assign(e, state.events.parse([event])[0]);
@@ -1409,7 +1422,7 @@ function instance($$self, $$props, $$invalidate) {
1409
1422
  }
1410
1423
 
1411
1424
  function removeEventById(id) {
1412
- state._events.update(events => events.filter(event => event.id != id));
1425
+ updateEvents(events => events.filter(event => event.id != id));
1413
1426
  return this;
1414
1427
  }
1415
1428
 
@@ -1417,13 +1430,21 @@ function instance($$self, $$props, $$invalidate) {
1417
1430
  return toViewWithLocalDates(state._view.get());
1418
1431
  }
1419
1432
 
1433
+ function updateEvents(func) {
1434
+ if ($eventSources.length) {
1435
+ set_store_value(_events, $_events = func($_events), $_events);
1436
+ } else {
1437
+ set_store_value(events, $events = func($events), $events);
1438
+ }
1439
+ }
1440
+
1420
1441
  $$self.$$set = $$props => {
1421
- if ('plugins' in $$props) $$invalidate(8, plugins = $$props.plugins);
1422
- if ('options' in $$props) $$invalidate(9, options = $$props.options);
1442
+ if ('plugins' in $$props) $$invalidate(11, plugins = $$props.plugins);
1443
+ if ('options' in $$props) $$invalidate(12, options = $$props.options);
1423
1444
  };
1424
1445
 
1425
1446
  $$self.$$.update = () => {
1426
- if ($$self.$$.dirty & /*options*/ 512) {
1447
+ if ($$self.$$.dirty & /*options*/ 4096) {
1427
1448
  // Reactively update options that did change
1428
1449
  for (let [name, value] of diff(options)) {
1429
1450
  setOption(name, value);
@@ -1435,9 +1456,12 @@ function instance($$self, $$props, $$invalidate) {
1435
1456
  $theme,
1436
1457
  $height,
1437
1458
  $_viewComponent,
1438
- $_interactionComponent,
1459
+ $_interaction,
1439
1460
  _viewComponent,
1440
- _interactionComponent,
1461
+ _interaction,
1462
+ _events,
1463
+ events,
1464
+ eventSources,
1441
1465
  height,
1442
1466
  theme,
1443
1467
  plugins,
@@ -1458,49 +1482,49 @@ class Calendar extends SvelteComponent {
1458
1482
  super();
1459
1483
 
1460
1484
  init(this, options, instance, create_fragment, safe_not_equal, {
1461
- plugins: 8,
1462
- options: 9,
1463
- setOption: 10,
1464
- getOption: 11,
1465
- refetchEvents: 12,
1466
- getEventById: 13,
1467
- addEvent: 14,
1468
- updateEvent: 15,
1469
- removeEventById: 16,
1470
- getView: 17
1485
+ plugins: 11,
1486
+ options: 12,
1487
+ setOption: 13,
1488
+ getOption: 14,
1489
+ refetchEvents: 15,
1490
+ getEventById: 16,
1491
+ addEvent: 17,
1492
+ updateEvent: 18,
1493
+ removeEventById: 19,
1494
+ getView: 20
1471
1495
  });
1472
1496
  }
1473
1497
 
1474
1498
  get setOption() {
1475
- return this.$$.ctx[10];
1499
+ return this.$$.ctx[13];
1476
1500
  }
1477
1501
 
1478
1502
  get getOption() {
1479
- return this.$$.ctx[11];
1503
+ return this.$$.ctx[14];
1480
1504
  }
1481
1505
 
1482
1506
  get refetchEvents() {
1483
- return this.$$.ctx[12];
1507
+ return this.$$.ctx[15];
1484
1508
  }
1485
1509
 
1486
1510
  get getEventById() {
1487
- return this.$$.ctx[13];
1511
+ return this.$$.ctx[16];
1488
1512
  }
1489
1513
 
1490
1514
  get addEvent() {
1491
- return this.$$.ctx[14];
1515
+ return this.$$.ctx[17];
1492
1516
  }
1493
1517
 
1494
1518
  get updateEvent() {
1495
- return this.$$.ctx[15];
1519
+ return this.$$.ctx[18];
1496
1520
  }
1497
1521
 
1498
1522
  get removeEventById() {
1499
- return this.$$.ctx[16];
1523
+ return this.$$.ctx[19];
1500
1524
  }
1501
1525
 
1502
1526
  get getView() {
1503
- return this.$$.ctx[17];
1527
+ return this.$$.ctx[20];
1504
1528
  }
1505
1529
  }
1506
1530
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-calendar/core",
3
- "version": "0.5.0",
3
+ "version": "0.8.0",
4
4
  "title": "Event Calendar Core package",
5
5
  "description": "Full-sized drag & drop event calendar with resource view",
6
6
  "keywords": ["calendar", "event", "resource", "full-sized"],
@@ -18,7 +18,7 @@
18
18
  "./package.json": "./package.json"
19
19
  },
20
20
  "dependencies": {
21
- "@event-calendar/common": "~0.5.0",
22
- "svelte": "^3.42.4"
21
+ "@event-calendar/common": "~0.8.0",
22
+ "svelte": "^3.46.3"
23
23
  }
24
24
  }