@event-calendar/build 2.7.2 → 3.0.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 CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  See [demo](https://vkurko.github.io/calendar/) and [changelog](CHANGELOG.md).
4
4
 
5
- Full-sized drag & drop JavaScript event calendar with resource view:
5
+ Full-sized drag & drop JavaScript event calendar with resource & timeline views:
6
6
 
7
- * Lightweight (33kb [br](https://en.wikipedia.org/wiki/Brotli) compressed)
7
+ * Lightweight (40kb [br](https://en.wikipedia.org/wiki/Brotli) compressed)
8
8
  * Zero-dependency (pre-built bundle)
9
9
  * Used on over 70,000 websites with [Bookly](https://wordpress.org/plugins/bookly-responsive-appointment-booking-tool/)
10
10
 
@@ -96,6 +96,7 @@ Inspired by [FullCalendar](https://fullcalendar.io/), implements similar options
96
96
  - [slotLabelFormat](#slotlabelformat)
97
97
  - [slotMaxTime](#slotmaxtime)
98
98
  - [slotMinTime](#slotmintime)
99
+ - [slotWidth](#slotwidth)
99
100
  - [theme](#theme)
100
101
  - [titleFormat](#titleformat)
101
102
  - [unselect](#unselect)
@@ -153,6 +154,7 @@ You must use at least one plugin that provides a view. The following plugins are
153
154
 
154
155
  * `@event-calendar/day-grid`
155
156
  * `@event-calendar/list`
157
+ * `@event-calendar/resource-timeline`
156
158
  * `@event-calendar/resource-time-grid`
157
159
  * `@event-calendar/time-grid`
158
160
  * `@event-calendar/interaction` (doesn't provide a view)
@@ -200,8 +202,8 @@ import '@event-calendar/core/index.css';
200
202
  ### Pre-built browser ready bundle
201
203
  Include the following lines of code in the `<head>` section of your page:
202
204
  ```html
203
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@event-calendar/build@2.7.2/event-calendar.min.css">
204
- <script src="https://cdn.jsdelivr.net/npm/@event-calendar/build@2.7.2/event-calendar.min.js"></script>
205
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@event-calendar/build@3.0.0/event-calendar.min.css">
206
+ <script src="https://cdn.jsdelivr.net/npm/@event-calendar/build@3.0.0/event-calendar.min.js"></script>
205
207
  ```
206
208
 
207
209
  <details>
@@ -290,13 +292,15 @@ When hidden with `false`, all-day events will not be displayed in `timeGrid`/`re
290
292
 
291
293
  ### buttonText
292
294
  - Type `object` or `function`
293
- - Default `{close: 'Close', dayGridMonth: 'month', listDay: 'list', listMonth: 'list', listWeek: 'list', listYear: 'list', resourceTimeGridDay: 'day', resourceTimeGridWeek: 'week', timeGridDay: 'day', timeGridWeek: 'week', today: 'today'}`
295
+ - Default `{close: 'Close', dayGridMonth: 'month', listDay: 'list', listMonth: 'list', listWeek: 'list', listYear: 'list', resourceTimelineDay: 'timeline', resourceTimelineWeek: 'timeline', resourceTimeGridDay: 'resources', resourceTimeGridWeek: 'resources', timeGridDay: 'day', timeGridWeek: 'week', today: 'today'}`
294
296
  > Views override the default value as follows:
295
297
  > - dayGridMonth `text => ({...text, next: 'Next month', prev: 'Previous month'})`
296
298
  > - listDay `text => ({...text, next: 'Next day', prev: 'Previous day'})`
297
299
  > - listMonth `text => ({...text, next: 'Next month', prev: 'Previous month'})`
298
300
  > - listWeek `text => ({...text, next: 'Next week', prev: 'Previous week'})`
299
301
  > - listYear `text => ({...text, next: 'Next year', prev: 'Previous year'})`
302
+ > - resourceTimelineDay `text => ({...text, next: 'Next day', prev: 'Previous day'})`
303
+ > - resourceTimelineWeek `text => ({...text, next: 'Next week', prev: 'Previous week'})`
300
304
  > - resourceTimeGridDay `text => ({...text, next: 'Next day', prev: 'Previous day'})`
301
305
  > - resourceTimeGridWeek `text => ({...text, next: 'Next week', prev: 'Previous week'})`
302
306
  > - timeGridDay `text => ({...text, next: 'Next day', prev: 'Previous day'})`
@@ -534,6 +538,8 @@ function (date) {
534
538
  - Default `{dateStyle: 'long'}`
535
539
  > Views override the default value as follows:
536
540
  > - dayGridMonth `{weekday: 'long'}`
541
+ > - resourceTimelineDay `{dateStyle: 'long', timeStyle: 'short'}`
542
+ > - resourceTimelineWeek `{dateStyle: 'long', timeStyle: 'short'}`
537
543
 
538
544
  Defines the text that is used inside the `aria-label` attribute in calendar column headings.
539
545
 
@@ -624,13 +630,11 @@ Determines whether the calendar should automatically scroll during the event dra
624
630
  > Views override the default value as follows:
625
631
  > - dayGridMonth `{months: 1}`
626
632
  > - listDay `{days: 1}`
627
- > - listWeek `{weeks: 1}`
628
633
  > - listMonth `{months: 1}`
629
634
  > - listYear `{years: 1}`
635
+ > - resourceTimelineDay `{days: 1}`
630
636
  > - resourceTimeGridDay `{days: 1}`
631
- > - resourceTimeGridWeek `{weeks: 1}`
632
637
  > - timeGridDay `{days: 1}`
633
- > - timeGridWeek `{weeks: 1}`
634
638
 
635
639
  Sets the duration of a view.
636
640
 
@@ -1786,7 +1790,7 @@ Enables a marker indicating the current time in `timeGrid`/`resourceTimeGrid` vi
1786
1790
  - Default `false`
1787
1791
  - Requires `Interaction` plugin
1788
1792
 
1789
- Enables mouse cursor pointer in `timeGrid`/`resourceTimeGrid` views.
1793
+ Enables mouse cursor pointer in `timeGrid`/`resourceTimeGrid` and other views.
1790
1794
 
1791
1795
  ### resources
1792
1796
  - Type `Array`
@@ -2003,10 +2007,10 @@ If set to `false`, then intersecting events will be placed next to each other.
2003
2007
  - Type `integer`
2004
2008
  - Default `24`
2005
2009
 
2006
- Defines the time slot height in pixels. When changing the setting, you must additionally override the following CSS styles:
2010
+ Defines the time slot height in pixels in the `timeGrid`/`resourceTimeGrid` views. When changing the setting, you must additionally override the following CSS styles:
2007
2011
 
2008
2012
  ```css
2009
- .ec-time, .ec-line {
2013
+ .ec-time-grid .ec-time, .ec-time-grid .ec-line {
2010
2014
  height: 24px; /* override this value */
2011
2015
  }
2012
2016
  ```
@@ -2050,9 +2054,21 @@ Defines the first time slot that will be displayed for each day.
2050
2054
 
2051
2055
  This should be a value that can be parsed into a [Duration](#duration-object) object.
2052
2056
 
2057
+ ### slotWidth
2058
+ - Type `integer`
2059
+ - Default `52`
2060
+
2061
+ Defines the time slot width in pixels in `ResourceTimeline` views. When changing the setting, you must additionally override the following CSS styles:
2062
+
2063
+ ```css
2064
+ .ec-timeline .ec-time, .ec-timeline .ec-line {
2065
+ width: 52px; /* override this value */
2066
+ }
2067
+ ```
2068
+
2053
2069
  ### theme
2054
2070
  - Type `object` or `function`
2055
- - Default `{active: 'ec-active', allDay: 'ec-all-day', 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', dayFoot: 'ec-day-foot', dayHead: 'ec-day-head', daySide: 'ec-day-side', days: 'ec-days', 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', 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', 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', resourceTitle: 'ec-resource-title', selecting: 'ec-selecting', sidebar: 'ec-sidebar', sidebarTitle: 'ec-sidebar-title', time: 'ec-time', title: 'ec-title', today: 'ec-today', toolbar: 'ec-toolbar', uniform: 'ec-uniform', view: '', weekdays: ['ec-sun', 'ec-mon', 'ec-tue', 'ec-wed', 'ec-thu', 'ec-fri', 'ec-sat'], withScroll: 'ec-with-scroll'}`
2071
+ - 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', compact: 'ec-compact', 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', 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', 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'}`
2056
2072
  > Views override the default value as follows:
2057
2073
  > - dayGridMonth `theme => ({...theme, view: 'ec-day-grid ec-month-view'})`
2058
2074
  > - listDay `theme => ({...theme, view: 'ec-list ec-day-view'})`
@@ -2178,7 +2194,7 @@ Clicking on elements that match this CSS selector will prevent the current selec
2178
2194
  - Type `string`
2179
2195
  - Default `'resourceTimeGridWeek'`
2180
2196
 
2181
- The view that is displayed in the calendar. Can be `'dayGridMonth'`, `'listDay'`, `'listWeek'`, `'listMonth'`, `'listYear'`, `'resourceTimeGridDay'`, `'resourceTimeGridWeek'`, `'timeGridDay'` or `'timeGridWeek'`.
2197
+ The view that is displayed in the calendar. Can be `'dayGridMonth'`, `'listDay'`, `'listWeek'`, `'listMonth'`, `'listYear'`, `'resourceTimelineDay'`, `'resourceTimelineWeek'`, `'resourceTimeGridDay'`, `'resourceTimeGridWeek'`, `'timeGridDay'` or `'timeGridWeek'`.
2182
2198
 
2183
2199
  ### viewDidMount
2184
2200
  - Type `function`
@@ -1 +1 @@
1
- .ec{color-scheme:light;--ec-h: 0;--ec-s: 0%;--ec-l-300: 91.00%;--ec-l-500: 83.50%;--ec-l-600: 78.40%;--ec-l-700: 71.40%;--ec-bg-fallback-color: #fff;--ec-hs: var(--ec-h), var(--ec-s);--ec-color-300: hsl(var(--ec-hs), var(--ec-l-300));--ec-color-500: hsl(var(--ec-hs), var(--ec-l-500));--ec-color-600: hsl(var(--ec-hs), var(--ec-l-600));--ec-color-700: hsl(var(--ec-hs), var(--ec-l-700));--ec-border-color: var(--ec-color-500);--ec-accent-color: var(--ec-color-600);--ec-button-bg-color: var(--ec-bg-color);--ec-button-border-color: var(--ec-color-600);--ec-button-text-color: var(--ec-text-color);--ec-button-active-bg-color: var(--ec-color-300);--ec-button-active-border-color: var(--ec-color-700);--ec-button-active-text-color: var(--ec-button-text-color);--ec-event-bg-color: #039be5;--ec-event-text-color: #fff;--ec-bg-event-color: var(--ec-color-500);--ec-bg-event-opacity: 0.3;--ec-list-day-bg-color: var(--ec-bg-color, var(--ec-bg-fallback-color));--ec-today-bg-color: rgba(255, 220, 40, .15);--ec-highlight-color: rgba(188, 232, 241, .3);--ec-popup-bg-color: var(--ec-bg-color, var(--ec-bg-fallback-color));--ec-now-indicator-color: #ea4335}.ec-dark .ec{color-scheme:dark;--ec-h: 215;--ec-s: 15%;--ec-l-300: 25.50%;--ec-l-500: 42.40%;--ec-l-600: 49.80%;--ec-l-700: 57.30%;--ec-bg-fallback-color: #22272e}@media(prefers-color-scheme: dark){.ec-auto-dark .ec{color-scheme:dark;--ec-h: 215;--ec-s: 15%;--ec-l-300: 25.50%;--ec-l-500: 42.40%;--ec-l-600: 49.80%;--ec-l-700: 57.30%;--ec-bg-fallback-color: #22272e}}.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;color:var(--ec-text-color);background-color:var(--ec-bg-color);-webkit-tap-highlight-color:rgba(0,0,0,0)}.ec ::-webkit-scrollbar{background-color:rgba(0,0,0,0)}.ec ::-webkit-scrollbar-thumb{border:4px solid rgba(0,0,0,0);box-shadow:none;background-color:var(--ec-border-color);background-clip:padding-box;border-radius:8px;min-height:40px}.ec :hover::-webkit-scrollbar-thumb{background-color:var(--ec-accent-color)}.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:var(--ec-button-bg-color);border:1px solid var(--ec-button-border-color);padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem}.ec-button:not(:disabled){color:var(--ec-button-text-color);cursor:pointer}.ec-button:not(:disabled):hover,.ec-button.ec-active{background-color:var(--ec-button-active-bg-color);border-color:var(--ec-button-active-border-color);color:var(--ec-button-active-text-color);z-index:1}.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 currentcolor;border-right:2px solid currentcolor;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-all-day,.ec-body,.ec-days,.ec-day,.ec-list .ec-day-head{border:1px solid var(--ec-border-color)}.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-all-day{flex-shrink:0;border-top:none}.ec-all-day .ec-days{border-bottom:none}.ec-all-day .ec-day{padding-bottom:4px}.ec-body{position:relative;overflow-x:hidden;overflow-y:auto}.ec:not(.ec-list) .ec-body{border-top:none}.ec-day-grid .ec-body{flex:1 1 auto}.ec-sidebar{flex:0 0 auto;width:auto;max-width:100%;padding:0 4px 0 8px;display:flex;flex-direction:column;justify-content:center}.ec-sidebar-title{visibility:hidden;overflow-y:hidden;height:0;text-align:right}.ec-all-day .ec-sidebar-title{visibility:visible;height:auto;padding:8px 0}.ec-content{display:flex}.ec-day-grid .ec-content{flex-direction:column;height:100%}.ec-day-grid .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-day-grid .ec-days,.ec-resource .ec-days{flex:1 0 auto}.ec-day-grid .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:var(--ec-today-bg-color)}.ec-day.ec-highlight{background-color:var(--ec-highlight-color)}.ec-day-grid .ec-body .ec-day{min-height:5em;position:relative}.ec-day-grid .ec-uniform .ec-day{min-height:0}.ec-day-grid .ec-day:first-child{border-left:none}.ec-day.ec-other-month .ec-day-head{opacity:.3}.ec-list .ec-day{border:none}.ec-day-grid .ec-day-head{display:block;text-align:right;padding:4px 4px 3px}.ec-day-grid .ec-day-foot{position:absolute;bottom:0;padding:2px;font-size:.85em}.ec-day-grid .ec-day-foot a{cursor:pointer}.ec-list .ec-day-head{flex:1 0 auto;background-color:var(--ec-list-day-bg-color);border-style:solid none;margin:-1px 0 0;padding:8px 14px;position:sticky;top:0;z-index:2}.ec-list .ec-day:first-child .ec-day-head{border-top:none}.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-time-grid .ec-events,.ec-events.ec-preview{position:relative}.ec-event{display:flex;padding:2px;color:var(--ec-event-text-color);box-sizing:border-box;box-shadow:0 0 1px 0 var(--ec-border-color);background-color:var(--ec-event-bg-color);border-radius:3px;font-size:.85em;line-height:1.5;z-index:1}.ec-day-grid .ec-event,.ec-all-day .ec-event{position:relative}.ec-time-grid .ec-body .ec-event{position:absolute}.ec-list .ec-event{flex-direction:row;padding:8px 14px;color:inherit;background-color:rgba(0,0,0,0);border-radius:0}.ec-event.ec-preview{position:absolute;z-index:1000;width:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.8}.ec-event.ec-pointer{color:inherit;pointer-events:none;-webkit-user-select:none;-moz-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-body{display:flex;flex-direction:column;width:100%}.ec-day-grid .ec-event-body,.ec-all-day .ec-event-body{flex-direction:row}.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-day-grid .ec-event-time{margin:0 3px 0 0;max-width:100%;text-overflow:ellipsis}.ec-event-title{overflow:hidden;margin:unset;font-weight:inherit}.ec-day-grid .ec-event-title,.ec-all-day .ec-event-title{min-height:1.5em;white-space:nowrap;text-overflow:ellipsis}.ec-time-grid .ec-body .ec-event-title{position:sticky;top:0}.ec-list .ec-event-title{font-size:1rem}.ec-draggable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-ghost{opacity:.5;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.ec-bg-events{position:relative}.ec-bg-event{position:absolute;background-color:var(--ec-bg-event-color);opacity:var(--ec-bg-event-opacity);width:100%;z-index:1}.ec-time,.ec-line{height:24px}.ec-time{position:relative;line-height:24px;top:-12px;text-align:right;white-space:nowrap}.ec-header .ec-time,.ec-all-day .ec-time{visibility:hidden;overflow-y:hidden;height:0}.ec-lines{width:8px}.ec-line:not(:first-child):after{content:"";position:absolute;width:100%;border-bottom:1px solid var(--ec-border-color);pointer-events:none}.ec-body:not(.ec-compact) .ec-line:nth-child(even):after{border-bottom-style:dotted}.ec-popup{position:absolute;top:0;display:flex;flex-direction:column;width:110%;min-width:180px;z-index:1010;padding:8px 10px 14px;background-color:var(--ec-popup-bg-color);border:1px solid var(--ec-border-color);border-radius:6px;outline:1px solid rgba(0,0,0,0);box-shadow:0 1px 3px 0 hsla(var(--ec-hs), 50%, 0.15),0 4px 8px 3px hsla(var(--ec-hs), 50%, 0.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;min-height:0;overflow:auto}.ec-extra{position:relative;height:100%;overflow:hidden;margin-left:-6.5px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-now-indicator{position:absolute;z-index:1005;width:100%;border-top:var(--ec-now-indicator-color) solid 2px;pointer-events:none}.ec-now-indicator:before{background:var(--ec-now-indicator-color);border-radius:50%;content:"";position:absolute;height:12px;margin-top:-7px;width:12px;pointer-events:none}.ec-resizer{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-day-grid .ec-resizer,.ec-all-day .ec-resizer{top:0;right:0;bottom:0;width:50%;max-width:8px;cursor:ew-resize}.ec-time-grid .ec-body .ec-resizer{left:0;right:0;bottom:0;height:50%;max-height:8px;cursor:ns-resize}.ec-dragging{cursor:pointer !important}.ec-resizing-y{cursor:ns-resize !important}.ec-resizing-x{cursor:ew-resize !important}
1
+ .ec{color-scheme:light;--ec-h:0;--ec-s:0%;--ec-l-300:91.00%;--ec-l-500:83.50%;--ec-l-600:78.40%;--ec-l-700:71.40%;--ec-bg-fallback-color:#fff;--ec-hs:var(--ec-h),var(--ec-s);--ec-color-300:hsl(var(--ec-hs),var(--ec-l-300));--ec-color-500:hsl(var(--ec-hs),var(--ec-l-500));--ec-color-600:hsl(var(--ec-hs),var(--ec-l-600));--ec-color-700:hsl(var(--ec-hs),var(--ec-l-700));--ec-border-color:var(--ec-color-500);--ec-accent-color:var(--ec-color-600);--ec-button-bg-color:var(--ec-bg-color);--ec-button-border-color:var(--ec-color-600);--ec-button-text-color:var(--ec-text-color);--ec-button-active-bg-color:var(--ec-color-300);--ec-button-active-border-color:var(--ec-color-700);--ec-button-active-text-color:var(--ec-button-text-color);--ec-event-bg-color:#039be5;--ec-event-text-color:#fff;--ec-bg-event-color:var(--ec-color-500);--ec-bg-event-opacity:0.3;--ec-list-day-bg-color:var(--ec-bg-color,var(--ec-bg-fallback-color));--ec-today-bg-color:rgba(255,220,40,.15);--ec-highlight-color:rgba(188,232,241,.3);--ec-popup-bg-color:var(--ec-bg-color,var(--ec-bg-fallback-color));--ec-now-indicator-color:#ea4335}.ec-dark .ec{color-scheme:dark;--ec-h:215;--ec-s:15%;--ec-l-300:25.50%;--ec-l-500:42.40%;--ec-l-600:49.80%;--ec-l-700:57.30%;--ec-bg-fallback-color:#22272e}@media(prefers-color-scheme:dark){.ec-auto-dark .ec{color-scheme:dark;--ec-h:215;--ec-s:15%;--ec-l-300:25.50%;--ec-l-500:42.40%;--ec-l-600:49.80%;--ec-l-700:57.30%;--ec-bg-fallback-color:#22272e}}.ec-timeline .ec-container{display:flex;flex:1 1 0%;min-height:0}.ec-timeline .ec-main{display:flex;flex-direction:column;min-width:0}.ec-timeline .ec-content{flex-direction:column}.ec-timeline .ec-body{flex:1 1 auto;overflow:auto}.ec-timeline .ec-body .ec-content{min-height:100%;min-width:-moz-max-content;min-width:max-content;position:relative}.ec-timeline .ec-body .ec-days{flex-shrink:0}.ec-timeline .ec-body .ec-days:not(:last-child){flex-grow:0}.ec-timeline .ec-header{overflow:hidden}.ec-timeline .ec-header .ec-days{min-width:-moz-max-content;min-width:max-content}.ec-timeline .ec-header .ec-day{display:flex;flex-basis:auto;flex-direction:column}.ec-timeline .ec-day,.ec-timeline .ec-header .ec-day:first-child .ec-day-head,.ec-timeline .ec-header .ec-day:first-child .ec-time:first-child{border:none}.ec-timeline .ec-day-head{border-style:none none none solid}.ec-timeline .ec-times{border-style:solid none none;display:flex}.ec-timeline .ec-time{border-left:1px solid var(--ec-border-color);box-sizing:border-box}.ec-timeline .ec-line,.ec-timeline .ec-time{width:52px}.ec-timeline .ec-events{height:100%;position:relative}.ec-timeline .ec-event{position:absolute}.ec-timeline .ec-bg-event{height:100%;z-index:auto}.ec-timeline .ec-lines{display:flex}.ec-timeline .ec-line:not(:first-child):after{border-left:1px solid var(--ec-border-color);content:"";height:100%;pointer-events:none;position:absolute}.ec-timeline .ec-sidebar{border-right-style:solid;border:1px solid var(--ec-border-color);border-right:1px var(--ec-border-color);padding:0}.ec-timeline .ec-sidebar .ec-sidebar-title{border-bottom:1px solid var(--ec-border-color);flex-shrink:0}.ec-timeline .ec-sidebar .ec-content{flex:1;overflow:hidden}.ec-timeline .ec-sidebar .ec-resource{flex-shrink:0;padding:0 8px}.ec-timeline .ec-sidebar .ec-resource:not(:last-child){border-bottom:1px solid var(--ec-border-color);flex-grow:0}.ec-timeline .ec-sidebar .ec-resource:last-child{flex-basis:100%!important}.ec-timeline .ec-sidebar .ec-resource span{padding-top:8px}.ec-time-grid .ec-body .ec-event{position:absolute}.ec-time-grid .ec-body .ec-event-title{position:sticky;top:0}.ec-time-grid .ec-body .ec-resizer{bottom:0;cursor:ns-resize;height:50%;left:0;max-height:8px;right:0}.ec-time-grid .ec-bg-event{width:100%;z-index:1}.ec-time-grid .ec-time{line-height:24px;position:relative;text-align:right;top:-12px}.ec-time-grid .ec-all-day .ec-time,.ec-time-grid .ec-header .ec-time{height:0;overflow-y:hidden;visibility:hidden}.ec-time-grid .ec-line,.ec-time-grid .ec-time{height:24px}.ec-time-grid .ec-lines{width:8px}.ec-time-grid .ec-line:not(:first-child):after{border-bottom:1px solid var(--ec-border-color);content:"";pointer-events:none;position:absolute;width:100%}.ec-time-grid .ec-body:not(.ec-compact) .ec-line:nth-child(2n):after{border-bottom-style:dotted}.ec-time-grid .ec-sidebar-title{height:0;overflow-y:hidden;text-align:right;visibility:hidden}.ec-time-grid .ec-all-day .ec-sidebar-title{height:auto;padding:8px 0;visibility:visible}.ec-day,.ec-days,.ec-resource{flex:1 1 0;max-width:100%;min-width:0}.ec{background-color:var(--ec-bg-color);color:var(--ec-text-color);display:flex;flex-direction:column;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ec ::-webkit-scrollbar{background-color:transparent}.ec ::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:var(--ec-border-color);border:4px solid transparent;border-radius:8px;box-shadow:none;min-height:40px}.ec :hover::-webkit-scrollbar-thumb{background-color:var(--ec-accent-color)}.ec-hidden-scroll{display:none;flex-shrink:0;overflow-y:scroll;visibility:hidden}.ec-with-scroll .ec-hidden-scroll{display:block}.ec-toolbar{align-items:center;display:flex;flex:0 0 auto;justify-content:space-between;margin-bottom:1em}.ec-toolbar>*{margin-bottom:-.5em}.ec-toolbar>*>*{margin-bottom:.5em}.ec-toolbar>*>:not(:last-child){margin-right:.75em}.ec-title{margin:0}.ec-button{background-color:var(--ec-button-bg-color);border:1px solid var(--ec-button-border-color);border-radius:.25rem;font-size:1rem;line-height:1.5;padding:.375rem .75rem}.ec-button:not(:disabled){color:var(--ec-button-text-color);cursor:pointer}.ec-button.ec-active,.ec-button:not(:disabled):hover{background-color:var(--ec-button-active-bg-color);border-color:var(--ec-button-active-border-color);color:var(--ec-button-active-text-color);z-index:1}.ec-button-group{display:inline-flex}.ec-button-group .ec-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.ec-button-group .ec-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.ec-icon{display:inline-block;width:1em}.ec-icon.ec-next:after,.ec-icon.ec-prev:after{border-right:2px solid;border-top:2px solid;content:"";display:inline-block;height:.5em;position:relative;width:.5em}.ec-icon.ec-prev:after{transform:rotate(-135deg) translate(-2px,2px)}.ec-icon.ec-next:after{transform:rotate(45deg) translate(-2px,2px)}.ec-all-day,.ec-body,.ec-day,.ec-day-head,.ec-days,.ec-header,.ec-times{border:1px solid var(--ec-border-color)}.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{line-height:24px;min-height:24px;overflow:hidden;text-align:center;text-overflow:ellipsis}.ec-all-day{border-top:none;flex-shrink:0}.ec-all-day .ec-days{border-bottom:none}.ec-all-day .ec-day{padding-bottom:4px}.ec-body{overflow-x:hidden;overflow-y:auto;position:relative}.ec:not(.ec-list) .ec-body{border-top:none}.ec-day-grid .ec-body{flex:1 1 auto}.ec-sidebar{flex:0 0 auto;flex-direction:column;max-width:100%;padding:0 4px 0 8px;width:auto}.ec-content,.ec-sidebar{display:flex}.ec-day-grid .ec-content{flex-direction:column;height:100%}.ec-day-grid .ec-uniform .ec-content{overflow:hidden}.ec-list .ec-content{flex-direction:column}.ec-days,.ec-resource{display:flex}.ec-days{border-style:none none solid}.ec-days:last-child{border-bottom:none}.ec-day-grid .ec-days,.ec-resource .ec-days{flex:1 0 auto}.ec-day-grid .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:var(--ec-today-bg-color)}.ec-day.ec-highlight{background-color:var(--ec-highlight-color)}.ec-day-grid .ec-body .ec-day{min-height:5em;position:relative}.ec-day-grid .ec-uniform .ec-day{min-height:0}.ec-day-grid .ec-day:first-child{border-left:none}.ec-day.ec-other-month .ec-day-head{opacity:.3}.ec-list .ec-day{border:none}.ec-day-grid .ec-day-head{border:none;display:block;padding:4px 4px 3px;text-align:right}.ec-day-grid .ec-day-foot{bottom:0;font-size:.85em;padding:2px;position:absolute}.ec-day-grid .ec-day-foot a{cursor:pointer}.ec-list .ec-day-head{background-color:var(--ec-list-day-bg-color);border-style:solid none;margin:-1px 0 0;padding:8px 14px;position:sticky;top:0;z-index:2}.ec-list .ec-day:first-child .ec-day-head{border-top:none}.ec-list .ec-day-side{float:right}.ec-list .ec-no-events{padding:5em 0;text-align:center}.ec-events{margin:0 6px 0 0}.ec-events.ec-preview,.ec-time-grid .ec-events{position:relative}.ec-all-day .ec-events,.ec-day-grid .ec-events{display:flow-root}.ec-event{background-color:var(--ec-event-bg-color);border-radius:3px;box-shadow:0 0 1px 0 var(--ec-border-color);box-sizing:border-box;color:var(--ec-event-text-color);display:flex;font-size:.85em;line-height:1.5;padding:2px;z-index:1}.ec-all-day .ec-event,.ec-day-grid .ec-event{position:relative}.ec-list .ec-event{background-color:transparent;border-radius:0;color:inherit;flex-direction:row;padding:8px 14px}.ec-event.ec-preview{opacity:.8;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:1000}.ec-event.ec-pointer{box-shadow:none;color:inherit;display:flex;pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:0}.ec-event-body{display:flex;flex-direction:column;width:100%}.ec-all-day .ec-event-body,.ec-day-grid .ec-event-body,.ec-timeline .ec-event-body{flex-direction:row}.ec-event-tag{border-radius:2px;margin-right:8px;width:4px}.ec-event-time{flex-shrink:0;margin:0 0 1px;overflow:hidden;white-space:nowrap}.ec-day-grid .ec-event-time,.ec-timeline .ec-event-time{margin:0 3px 0 0;max-width:100%;text-overflow:ellipsis}.ec-event-title{font-weight:inherit;margin:unset;overflow:hidden}.ec-all-day .ec-event-title,.ec-day-grid .ec-event-title,.ec-timeline .ec-event-title{min-height:1.5em;text-overflow:ellipsis;white-space:nowrap}.ec-list .ec-event-title{font-size:1rem}.ec-draggable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-ghost{opacity:.5;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-bg-events{position:relative}.ec-bg-event{background-color:var(--ec-bg-event-color);opacity:var(--ec-bg-event-opacity);position:absolute}.ec-time{white-space:nowrap}.ec-popup{background-color:var(--ec-popup-bg-color);border:1px solid var(--ec-border-color);border-radius:6px;box-shadow:0 1px 3px 0 hsla(var(--ec-hs),50%,.15),0 4px 8px 3px hsla(var(--ec-hs),50%,.15);display:flex;flex-direction:column;min-width:180px;outline:1px solid transparent;padding:8px 10px 14px;position:absolute;top:0;width:110%;z-index:1010}.ec-popup .ec-day-head{display:flex;justify-content:space-between;text-align:left}.ec-popup .ec-day-head a{cursor:pointer;font-size:1.5em;line-height:.8}.ec-popup .ec-events{margin:0;min-height:0;overflow:auto}.ec-extra{height:100%;margin-left:-6.5px;overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-now-indicator{border-top:2px solid var(--ec-now-indicator-color);pointer-events:none;position:absolute;width:100%;z-index:1005}.ec-now-indicator:before{background:var(--ec-now-indicator-color);border-radius:50%;content:"";height:12px;margin-top:-7px;pointer-events:none;position:absolute;width:12px}.ec-resizer{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ec-all-day .ec-resizer,.ec-day-grid .ec-resizer,.ec-timeline .ec-resizer{bottom:0;cursor:ew-resize;max-width:8px;right:0;top:0;width:50%}.ec-dragging{cursor:pointer!important}.ec-resizing-y{cursor:ns-resize!important}.ec-resizing-x{cursor:ew-resize!important}