@fullcalendar/core 7.0.0-beta.1 → 7.0.0-beta.3
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/index.cjs +19 -36
- package/index.d.ts +0 -1
- package/index.global.js +1278 -1203
- package/index.global.min.js +2 -2
- package/index.js +20 -37
- package/internal-common.cjs +4118 -4026
- package/internal-common.d.ts +148 -148
- package/internal-common.js +4106 -4010
- package/internal.cjs +10 -15
- package/internal.d.ts +1 -2
- package/internal.js +1 -1
- package/locales/af.global.js +1 -1
- package/locales/af.global.min.js +1 -1
- package/locales/ar-dz.global.js +1 -1
- package/locales/ar-dz.global.min.js +1 -1
- package/locales/ar-kw.global.js +1 -1
- package/locales/ar-kw.global.min.js +1 -1
- package/locales/ar-ly.global.js +1 -1
- package/locales/ar-ly.global.min.js +1 -1
- package/locales/ar-ma.global.js +1 -1
- package/locales/ar-ma.global.min.js +1 -1
- package/locales/ar-sa.global.js +1 -1
- package/locales/ar-sa.global.min.js +1 -1
- package/locales/ar-tn.global.js +1 -1
- package/locales/ar-tn.global.min.js +1 -1
- package/locales/ar.global.js +1 -1
- package/locales/ar.global.min.js +1 -1
- package/locales/az.global.js +1 -1
- package/locales/az.global.min.js +1 -1
- package/locales/bg.global.js +1 -1
- package/locales/bg.global.min.js +1 -1
- package/locales/bn.global.js +1 -1
- package/locales/bn.global.min.js +1 -1
- package/locales/bs.global.js +1 -1
- package/locales/bs.global.min.js +1 -1
- package/locales/ca.global.js +1 -1
- package/locales/ca.global.min.js +1 -1
- package/locales/cs.global.js +1 -1
- package/locales/cs.global.min.js +1 -1
- package/locales/cy.global.js +1 -1
- package/locales/cy.global.min.js +1 -1
- package/locales/da.global.js +1 -1
- package/locales/da.global.min.js +1 -1
- package/locales/de-at.global.js +1 -1
- package/locales/de-at.global.min.js +1 -1
- package/locales/de.global.js +1 -1
- package/locales/de.global.min.js +1 -1
- package/locales/el.global.js +1 -1
- package/locales/el.global.min.js +1 -1
- package/locales/en-au.global.js +1 -1
- package/locales/en-au.global.min.js +1 -1
- package/locales/en-gb.global.js +1 -1
- package/locales/en-gb.global.min.js +1 -1
- package/locales/en-nz.global.js +1 -1
- package/locales/en-nz.global.min.js +1 -1
- package/locales/eo.global.js +1 -1
- package/locales/eo.global.min.js +1 -1
- package/locales/es-us.global.js +1 -1
- package/locales/es-us.global.min.js +1 -1
- package/locales/es.global.js +1 -1
- package/locales/es.global.min.js +1 -1
- package/locales/et.global.js +1 -1
- package/locales/et.global.min.js +1 -1
- package/locales/eu.global.js +1 -1
- package/locales/eu.global.min.js +1 -1
- package/locales/fa.global.js +1 -1
- package/locales/fa.global.min.js +1 -1
- package/locales/fi.global.js +1 -1
- package/locales/fi.global.min.js +1 -1
- package/locales/fr-ca.global.js +1 -1
- package/locales/fr-ca.global.min.js +1 -1
- package/locales/fr-ch.global.js +1 -1
- package/locales/fr-ch.global.min.js +1 -1
- package/locales/fr.global.js +1 -1
- package/locales/fr.global.min.js +1 -1
- package/locales/gl.global.js +1 -1
- package/locales/gl.global.min.js +1 -1
- package/locales/he.global.js +1 -1
- package/locales/he.global.min.js +1 -1
- package/locales/hi.global.js +1 -1
- package/locales/hi.global.min.js +1 -1
- package/locales/hr.global.js +1 -1
- package/locales/hr.global.min.js +1 -1
- package/locales/hu.global.js +1 -1
- package/locales/hu.global.min.js +1 -1
- package/locales/hy-am.global.js +1 -1
- package/locales/hy-am.global.min.js +1 -1
- package/locales/id.global.js +1 -1
- package/locales/id.global.min.js +1 -1
- package/locales/is.global.js +1 -1
- package/locales/is.global.min.js +1 -1
- package/locales/it.global.js +1 -1
- package/locales/it.global.min.js +1 -1
- package/locales/ja.global.js +1 -1
- package/locales/ja.global.min.js +1 -1
- package/locales/ka.global.js +1 -1
- package/locales/ka.global.min.js +1 -1
- package/locales/kk.global.js +1 -1
- package/locales/kk.global.min.js +1 -1
- package/locales/km.global.js +1 -1
- package/locales/km.global.min.js +1 -1
- package/locales/ko.global.js +1 -1
- package/locales/ko.global.min.js +1 -1
- package/locales/ku.global.js +1 -1
- package/locales/ku.global.min.js +1 -1
- package/locales/lb.global.js +1 -1
- package/locales/lb.global.min.js +1 -1
- package/locales/lt.global.js +1 -1
- package/locales/lt.global.min.js +1 -1
- package/locales/lv.global.js +1 -1
- package/locales/lv.global.min.js +1 -1
- package/locales/mk.global.js +1 -1
- package/locales/mk.global.min.js +1 -1
- package/locales/ms.global.js +1 -1
- package/locales/ms.global.min.js +1 -1
- package/locales/nb.global.js +1 -1
- package/locales/nb.global.min.js +1 -1
- package/locales/ne.global.js +1 -1
- package/locales/ne.global.min.js +1 -1
- package/locales/nl.global.js +1 -1
- package/locales/nl.global.min.js +1 -1
- package/locales/nn.global.js +1 -1
- package/locales/nn.global.min.js +1 -1
- package/locales/pl.global.js +1 -1
- package/locales/pl.global.min.js +1 -1
- package/locales/pt-br.global.js +1 -1
- package/locales/pt-br.global.min.js +1 -1
- package/locales/pt.global.js +1 -1
- package/locales/pt.global.min.js +1 -1
- package/locales/ro.global.js +1 -1
- package/locales/ro.global.min.js +1 -1
- package/locales/ru.global.js +1 -1
- package/locales/ru.global.min.js +1 -1
- package/locales/si-lk.global.js +1 -1
- package/locales/si-lk.global.min.js +1 -1
- package/locales/sk.global.js +1 -1
- package/locales/sk.global.min.js +1 -1
- package/locales/sl.global.js +1 -1
- package/locales/sl.global.min.js +1 -1
- package/locales/sm.global.js +1 -1
- package/locales/sm.global.min.js +1 -1
- package/locales/sq.global.js +1 -1
- package/locales/sq.global.min.js +1 -1
- package/locales/sr-cyrl.global.js +1 -1
- package/locales/sr-cyrl.global.min.js +1 -1
- package/locales/sr.global.js +1 -1
- package/locales/sr.global.min.js +1 -1
- package/locales/sv.global.js +1 -1
- package/locales/sv.global.min.js +1 -1
- package/locales/ta-in.global.js +1 -1
- package/locales/ta-in.global.min.js +1 -1
- package/locales/th.global.js +1 -1
- package/locales/th.global.min.js +1 -1
- package/locales/tr.global.js +1 -1
- package/locales/tr.global.min.js +1 -1
- package/locales/ug.global.js +1 -1
- package/locales/ug.global.min.js +1 -1
- package/locales/uk.global.js +1 -1
- package/locales/uk.global.min.js +1 -1
- package/locales/uz-cy.global.js +1 -1
- package/locales/uz-cy.global.min.js +1 -1
- package/locales/uz.global.js +1 -1
- package/locales/uz.global.min.js +1 -1
- package/locales/vi.global.js +1 -1
- package/locales/vi.global.min.js +1 -1
- package/locales/zh-cn.global.js +1 -1
- package/locales/zh-cn.global.min.js +1 -1
- package/locales/zh-tw.global.js +1 -1
- package/locales/zh-tw.global.min.js +1 -1
- package/locales-all.global.js +1 -1
- package/locales-all.global.min.js +1 -1
- package/package.json +1 -1
- package/preact.cjs +1 -0
- package/preact.d.ts +3 -2
- package/preact.js +1 -1
package/index.global.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
FullCalendar Core v7.0.0-beta.
|
|
2
|
+
FullCalendar Core v7.0.0-beta.3
|
|
3
3
|
Docs & License: https://fullcalendar.io
|
|
4
4
|
(c) 2024 Adam Shaw
|
|
5
5
|
*/
|
|
@@ -86,102 +86,9 @@ var FullCalendar = (function (exports) {
|
|
|
86
86
|
registerStylesRoot(document);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
var css_248z = ":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc{display:flex;flex-direction:column;gap:1.5em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-flex-row{display:flex;flex-direction:row}.fc-flex-column{display:flex;flex-direction:column}.fc-grow{flex-grow:1}.fc-basis0,.fc-liquid{flex-basis:0}.fc-liquid{flex-grow:1;min-height:0;min-width:0}.fc-row{display:flex;flex-direction:row}.fc-rowgroup{display:flex;flex-direction:column}.fc-row,.fc-rowdivider,.fc-rowgroup{border-color:var(--fc-border-color);border-style:solid;border-width:1px 0 0}.fc-row:first-child:not(.fc-not-first),.fc-rowdivider+.fc-row,.fc-rowdivider+.fc-rowgroup,.fc-rowdivider:first-child,.fc-rowgroup:first-child,.fc-sticky-header+.fc-row,.fc-sticky-header+.fc-rowgroup{border-top-width:0}.fc-cell,.fc-celldivider{border:0 solid var(--fc-border-color)}.fc-cell{margin:0!important;padding:0!important}.fc-cell-inner{overflow:hidden;white-space:nowrap}.fc-direction-ltr .fc-cell,.fc-direction-ltr .fc-celldivider{border-left-width:1px}.fc-direction-ltr .fc-cell:first-child:not(.fc-not-first),.fc-direction-ltr .fc-celldivider+.fc-cell{border-left-width:0}.fc-direction-ltr .fc-celldivider,.fc-direction-rtl .fc-cell,.fc-direction-rtl .fc-celldivider{border-right-width:1px}.fc-direction-rtl .fc-cell:first-child:not(.fc-not-first),.fc-direction-rtl .fc-celldivider+.fc-cell{border-right-width:0}.fc-direction-rtl .fc-celldivider{border-left-width:1px}.fc-cell:only-child{flex-basis:0;flex-grow:1;min-width:0}.fc-celldivider,.fc-rowdivider{background:var(--fc-neutral-bg-color)}.fc-celldivider{padding-left:2px}.fc-rowdivider{padding-bottom:2px}.fc-rowdivider,.fc-sticky-header{border-bottom-width:1px}.fc-rel{position:relative}.fc-abs{position:absolute}.fc-fill{bottom:0;top:0}.fc-fill,.fc-fill-x{left:0;position:absolute;right:0}.fc-fill-y{bottom:0;position:absolute;top:0}.fc-sticky-y{bottom:0;position:sticky;top:0}.fc-sticky-x{left:0;position:sticky;right:0}.fc-sticky-header{background:var(--fc-page-bg-color);position:sticky;top:0;z-index:9999}.fc-sticky-footer{bottom:0;position:sticky;z-index:9999}.fc-content-box{box-sizing:content-box}.fc-border{border:1px solid var(--fc-border-color)}.fc-offscreen{left:-10000px;position:absolute}.fc-shaded{background-color:var(--fc-neutral-bg-color)}.fc-padding-sm{padding:2px 4px}.fc-padding-md{padding:4px 5px}.fc-padding-lg{padding:8px}.fc-justify-center{justify-content:center}.fc-align-center{align-items:center}.fc-align-start{align-items:flex-start}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-view-harness{position:relative}.fc-view-harness-fixedheight,.fc-view-harness-liquid{display:flex;flex-direction:column}.fc-view-harness-fixedheight>.fc-view,.fc-view-harness-liquid,.fc-view-harness-liquid>.fc-view{flex-basis:0;flex-grow:1;min-height:0}.fc-view-harness-aspectratio>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\"\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-event-inner{position:relative;z-index:2}.fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\"\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-bg-event,.fc-highlight,.fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc-non-business{background:var(--fc-non-business-color)}.fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc-highlight{background:var(--fc-highlight-color)}.fc-day-disabled{background:var(--fc-neutral-bg-color)}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:flex;flex-direction:column;position:relative}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-h-event .fc-event-inner{color:var(--fc-event-text-color);display:flex;flex-direction:row;flex-grow:1;min-width:0}.fc-h-event .fc-event-time,.fc-h-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-h-event .fc-event-title-outer{display:flex;flex-basis:0;flex-direction:row;flex-grow:1;min-width:0}.fc-h-event .fc-event-title{left:0;position:sticky;right:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc-popover-title{margin:0 2px}.fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}.fc-scroller-nobars{-ms-overflow-style:none;scrollbar-width:none}.fc-scroller-nobars::-webkit-scrollbar{display:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\") format(\"truetype\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\"\\e900\"}.fc-icon-chevron-right:before{content:\"\\e901\"}.fc-icon-chevrons-left:before{content:\"\\e902\"}.fc-icon-chevrons-right:before{content:\"\\e903\"}.fc-icon-minus-square:before{content:\"\\e904\"}.fc-icon-plus-square:before{content:\"\\e905\"}.fc-icon-x:before{content:\"\\e906\"}.fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc-button{-webkit-appearance:button}.fc-button:not(:disabled){cursor:pointer}.fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-moz-user-select:none;user-select:none;vertical-align:middle}.fc-button:hover{text-decoration:none}.fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc-button:disabled{opacity:.65}.fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button-primary:not(:disabled).fc-button-active,.fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc-button-primary:not(:disabled).fc-button-active:focus,.fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc-button-group>.fc-button.fc-button-active,.fc-button-group>.fc-button:active,.fc-button-group>.fc-button:focus,.fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc-toolbar{align-items:center;display:flex;flex-direction:row;gap:.75em;justify-content:space-between}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc-toolbar-chunk{display:flex;flex-direction:row;flex-shrink:0;gap:.75em}.fc-toolbar-title{font-size:1.75em;margin:0;white-space:nowrap}";
|
|
89
|
+
var css_248z = ":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc{display:flex;flex-direction:column;gap:1.5em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-border,.fc-border-b,.fc-border-e,.fc-border-s,.fc-border-t{border:0 solid var(--fc-border-color)}.fc-border-transparent{border-color:transparent}.fc-border{border-width:1px}.fc-border-t{border-top-width:1px}.fc-border-b{border-bottom-width:1px}.fc-direction-ltr .fc-border-s,.fc-direction-rtl .fc-border-e{border-left-width:1px}.fc-direction-ltr .fc-border-e,.fc-direction-rtl .fc-border-s{border-right-width:1px}.fc-flex-row{display:flex;flex-direction:row}.fc-flex-col{display:flex;flex-direction:column}.fc-grow{flex-grow:1}.fc-basis0,.fc-liquid{flex-basis:0}.fc-liquid{flex-grow:1;min-height:0;min-width:0}.fc-media-screen .fc-print-header,.fc-media-screen .fc-print-root{display:flex;flex-direction:column}.fc-cell{margin:0!important;padding:0!important}.fc-cell-inner{flex-shrink:0;overflow:hidden;white-space:nowrap}.fc-celldivider,.fc-rowdivider{border:0 solid var(--fc-border-color)}.fc-rowdivider{border-width:1px 0}.fc-celldivider{border-width:0 1px}.fc-celldivider,.fc-rowdivider{background:var(--fc-neutral-bg-color)}.fc-celldivider{padding-left:2px}.fc-rowdivider{padding-bottom:2px}.fc-crop{overflow:hidden}.fc-rel{position:relative}.fc-abs{position:absolute}.fc-fill{bottom:0;top:0}.fc-fill,.fc-fill-x{left:0;position:absolute;right:0}.fc-fill-y{bottom:0;position:absolute;top:0}.fc-sticky-t{position:sticky;top:0}.fc-sticky-s{left:0;position:sticky;right:0}.fc-table-header-sticky{background:var(--fc-page-bg-color);position:sticky;top:0;z-index:5}.fc-sticky-footer-scrollbar{bottom:0;position:sticky;z-index:5}.fc-sticky-footer-scrollbar>.fc-scroller{margin-top:-1px}.fc-sticky-footer-scrollbar>.fc-scroller>*{height:1px}.fc-content-box{box-sizing:content-box}.fc-offscreen{left:-10000px;position:absolute}.fc-shaded{background-color:var(--fc-neutral-bg-color)}.fc-filler{opacity:.5}.fc-padding-sm{padding:2px 4px}.fc-padding-md{padding:4px 5px}.fc-padding-lg{padding:8px}.fc-justify-center{justify-content:center}.fc-align-center{align-items:center}.fc-align-start{align-items:flex-start}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-view-outer{position:relative}.fc-view-outer-liquid,.fc-view-outer-static{display:flex;flex-direction:column}.fc-view-outer-liquid,.fc-view-outer-liquid>.fc-view,.fc-view-outer-static>.fc-view{flex-basis:0;flex-grow:1;min-height:0;min-width:0}.fc-view-outer-aspect-ratio>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event-selected:before{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\"\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-event-inner{position:relative;z-index:2}.fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\"\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-bg-event,.fc-highlight,.fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc-non-business{background:var(--fc-non-business-color)}.fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc-highlight{background:var(--fc-highlight-color)}.fc-day-disabled{background:var(--fc-neutral-bg-color)}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:flex;flex-direction:column;position:relative}.fc-h-event.fc-event-mirror{z-index:3}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-h-event .fc-event-inner{color:var(--fc-event-text-color);display:flex;flex-direction:row}.fc-h-event .fc-event-time,.fc-h-event .fc-event-title{overflow:hidden;white-space:nowrap}.fc-h-event .fc-event-title-outer{display:flex;flex-basis:0;flex-direction:row;flex-grow:1;min-height:0;min-width:0}.fc-h-event .fc-event-title{left:0;position:sticky;right:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:6}.fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc-popover-title{margin:0 2px}.fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}.fc-scroller{padding:0!important}.fc-scroller-no-bars{-ms-overflow-style:none;scrollbar-width:none}.fc-scroller-no-bars::-webkit-scrollbar{display:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\") format(\"truetype\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\"\\e900\"}.fc-icon-chevron-right:before{content:\"\\e901\"}.fc-icon-chevrons-left:before{content:\"\\e902\"}.fc-icon-chevrons-right:before{content:\"\\e903\"}.fc-icon-minus-square:before{content:\"\\e904\"}.fc-icon-plus-square:before{content:\"\\e905\"}.fc-icon-x:before{content:\"\\e906\"}.fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc-button{-webkit-appearance:button}.fc-button:not(:disabled){cursor:pointer}.fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-moz-user-select:none;user-select:none;vertical-align:middle}.fc-button:hover{text-decoration:none}.fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc-button:disabled{opacity:.65}.fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button-primary:not(:disabled).fc-button-active,.fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc-button-primary:not(:disabled).fc-button-active:focus,.fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc-button-group>.fc-button.fc-button-active,.fc-button-group>.fc-button:active,.fc-button-group>.fc-button:focus,.fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc-toolbar{align-items:center;display:flex;flex-direction:row;gap:.75em;justify-content:space-between}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc-toolbar-section{display:flex;flex-direction:row;flex-shrink:0;gap:.75em}.fc-toolbar-title{font-size:1.75em;margin:0;white-space:nowrap}";
|
|
90
90
|
injectStyles(css_248z);
|
|
91
91
|
|
|
92
|
-
function removeElement(el) {
|
|
93
|
-
if (el.parentNode) {
|
|
94
|
-
el.parentNode.removeChild(el);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Querying
|
|
98
|
-
// ----------------------------------------------------------------------------------------------------------------
|
|
99
|
-
function elementClosest(el, selector) {
|
|
100
|
-
if (el.closest) {
|
|
101
|
-
return el.closest(selector);
|
|
102
|
-
// really bad fallback for IE
|
|
103
|
-
// from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
|
|
104
|
-
}
|
|
105
|
-
if (!document.documentElement.contains(el)) {
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
108
|
-
do {
|
|
109
|
-
if (elementMatches(el, selector)) {
|
|
110
|
-
return el;
|
|
111
|
-
}
|
|
112
|
-
el = (el.parentElement || el.parentNode);
|
|
113
|
-
} while (el !== null && el.nodeType === 1);
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
function elementMatches(el, selector) {
|
|
117
|
-
let method = el.matches || el.matchesSelector || el.msMatchesSelector;
|
|
118
|
-
return method.call(el, selector);
|
|
119
|
-
}
|
|
120
|
-
// accepts multiple subject els
|
|
121
|
-
// returns a real array. good for methods like forEach
|
|
122
|
-
// TODO: accept the document
|
|
123
|
-
function findElements(container, selector) {
|
|
124
|
-
let containers = container instanceof HTMLElement ? [container] : container;
|
|
125
|
-
let allMatches = [];
|
|
126
|
-
for (let i = 0; i < containers.length; i += 1) {
|
|
127
|
-
let matches = containers[i].querySelectorAll(selector);
|
|
128
|
-
for (let j = 0; j < matches.length; j += 1) {
|
|
129
|
-
allMatches.push(matches[j]);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return allMatches;
|
|
133
|
-
}
|
|
134
|
-
// accepts multiple subject els
|
|
135
|
-
// only queries direct child elements // TODO: rename to findDirectChildren!
|
|
136
|
-
function findDirectChildren(parent, selector) {
|
|
137
|
-
let parents = parent instanceof HTMLElement ? [parent] : parent;
|
|
138
|
-
let allMatches = [];
|
|
139
|
-
for (let i = 0; i < parents.length; i += 1) {
|
|
140
|
-
let childNodes = parents[i].children; // only ever elements
|
|
141
|
-
for (let j = 0; j < childNodes.length; j += 1) {
|
|
142
|
-
let childNode = childNodes[j];
|
|
143
|
-
if (!selector || elementMatches(childNode, selector)) {
|
|
144
|
-
allMatches.push(childNode);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return allMatches;
|
|
149
|
-
}
|
|
150
|
-
// Style
|
|
151
|
-
// ----------------------------------------------------------------------------------------------------------------
|
|
152
|
-
const PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;
|
|
153
|
-
function applyStyle(el, props) {
|
|
154
|
-
for (let propName in props) {
|
|
155
|
-
applyStyleProp(el, propName, props[propName]);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
function applyStyleProp(el, name, val) {
|
|
159
|
-
if (val == null) {
|
|
160
|
-
el.style[name] = '';
|
|
161
|
-
}
|
|
162
|
-
else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {
|
|
163
|
-
el.style[name] = `${val}px`;
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
el.style[name] = val;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
// Event Handling
|
|
170
|
-
// ----------------------------------------------------------------------------------------------------------------
|
|
171
|
-
// if intercepting bubbled events at the document/window/body level,
|
|
172
|
-
// and want to see originating element (the 'target'), use this util instead
|
|
173
|
-
// of `ev.target` because it goes within web-component boundaries.
|
|
174
|
-
function getEventTargetViaRoot(ev) {
|
|
175
|
-
var _a, _b;
|
|
176
|
-
return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;
|
|
177
|
-
}
|
|
178
|
-
// Unique ID for DOM attribute
|
|
179
|
-
let guid$1 = 0;
|
|
180
|
-
function getUniqueDomId() {
|
|
181
|
-
guid$1 += 1;
|
|
182
|
-
return 'fc-dom-' + guid$1;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
92
|
// Stops a mouse/touch event from doing it's native browser action
|
|
186
93
|
function preventDefault(ev) {
|
|
187
94
|
ev.preventDefault();
|
|
@@ -190,7 +97,7 @@ var FullCalendar = (function (exports) {
|
|
|
190
97
|
// ----------------------------------------------------------------------------------------------------------------
|
|
191
98
|
function buildDelegationHandler(selector, handler) {
|
|
192
99
|
return (ev) => {
|
|
193
|
-
let matchedChild =
|
|
100
|
+
let matchedChild = ev.target.closest(selector);
|
|
194
101
|
if (matchedChild) {
|
|
195
102
|
handler.call(matchedChild, ev, matchedChild);
|
|
196
103
|
}
|
|
@@ -258,7 +165,7 @@ var FullCalendar = (function (exports) {
|
|
|
258
165
|
}
|
|
259
166
|
|
|
260
167
|
let guidNumber = 0;
|
|
261
|
-
function guid() {
|
|
168
|
+
function guid$1() {
|
|
262
169
|
guidNumber += 1;
|
|
263
170
|
return String(guidNumber);
|
|
264
171
|
}
|
|
@@ -1449,6 +1356,7 @@ var FullCalendar = (function (exports) {
|
|
|
1449
1356
|
dropAccept: identity,
|
|
1450
1357
|
eventOrder: parseFieldSpecs,
|
|
1451
1358
|
eventOrderStrict: Boolean,
|
|
1359
|
+
eventSlicing: Boolean,
|
|
1452
1360
|
longPressDelay: Number,
|
|
1453
1361
|
eventDragMinDistance: Number,
|
|
1454
1362
|
expandRows: Boolean,
|
|
@@ -1705,7 +1613,7 @@ var FullCalendar = (function (exports) {
|
|
|
1705
1613
|
|
|
1706
1614
|
function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {
|
|
1707
1615
|
return {
|
|
1708
|
-
instanceId: guid(),
|
|
1616
|
+
instanceId: guid$1(),
|
|
1709
1617
|
defId,
|
|
1710
1618
|
range,
|
|
1711
1619
|
forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,
|
|
@@ -1868,6 +1776,9 @@ var FullCalendar = (function (exports) {
|
|
|
1868
1776
|
return null;
|
|
1869
1777
|
}
|
|
1870
1778
|
|
|
1779
|
+
function joinClassNames(...args) {
|
|
1780
|
+
return args.filter(Boolean).join(' ');
|
|
1781
|
+
}
|
|
1871
1782
|
function parseClassNames(raw) {
|
|
1872
1783
|
if (Array.isArray(raw)) {
|
|
1873
1784
|
return raw;
|
|
@@ -2000,7 +1911,7 @@ var FullCalendar = (function (exports) {
|
|
|
2000
1911
|
publicId: refined.id || '',
|
|
2001
1912
|
url: refined.url || '',
|
|
2002
1913
|
recurringDef: null,
|
|
2003
|
-
defId: ((defIdMap && refined.id) ? defIdMap[refined.id] : '') || guid(),
|
|
1914
|
+
defId: ((defIdMap && refined.id) ? defIdMap[refined.id] : '') || guid$1(),
|
|
2004
1915
|
sourceId,
|
|
2005
1916
|
allDay,
|
|
2006
1917
|
hasEnd,
|
|
@@ -2151,11 +2062,6 @@ var FullCalendar = (function (exports) {
|
|
|
2151
2062
|
}
|
|
2152
2063
|
return { start: startDay, end: endDay };
|
|
2153
2064
|
}
|
|
2154
|
-
// spans from one day into another?
|
|
2155
|
-
function isMultiDayRange(range) {
|
|
2156
|
-
let visibleRange = computeVisibleDayRange(range);
|
|
2157
|
-
return diffDays(visibleRange.start, visibleRange.end) > 1;
|
|
2158
|
-
}
|
|
2159
2065
|
function diffDates(date0, date1, dateEnv, largeUnit) {
|
|
2160
2066
|
if (largeUnit === 'year') {
|
|
2161
2067
|
return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');
|
|
@@ -2215,6 +2121,41 @@ var FullCalendar = (function (exports) {
|
|
|
2215
2121
|
};
|
|
2216
2122
|
}
|
|
2217
2123
|
|
|
2124
|
+
// Style
|
|
2125
|
+
// ----------------------------------------------------------------------------------------------------------------
|
|
2126
|
+
const PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;
|
|
2127
|
+
function applyStyle(el, props) {
|
|
2128
|
+
for (let propName in props) {
|
|
2129
|
+
applyStyleProp(el, propName, props[propName]);
|
|
2130
|
+
}
|
|
2131
|
+
}
|
|
2132
|
+
function applyStyleProp(el, name, val) {
|
|
2133
|
+
if (val == null) {
|
|
2134
|
+
el.style[name] = '';
|
|
2135
|
+
}
|
|
2136
|
+
else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {
|
|
2137
|
+
el.style[name] = `${val}px`;
|
|
2138
|
+
}
|
|
2139
|
+
else {
|
|
2140
|
+
el.style[name] = val;
|
|
2141
|
+
}
|
|
2142
|
+
}
|
|
2143
|
+
// Event Handling
|
|
2144
|
+
// ----------------------------------------------------------------------------------------------------------------
|
|
2145
|
+
// if intercepting bubbled events at the document/window/body level,
|
|
2146
|
+
// and want to see originating element (the 'target'), use this util instead
|
|
2147
|
+
// of `ev.target` because it goes within web-component boundaries.
|
|
2148
|
+
function getEventTargetViaRoot(ev) {
|
|
2149
|
+
var _a, _b;
|
|
2150
|
+
return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;
|
|
2151
|
+
}
|
|
2152
|
+
// Unique ID for DOM attribute
|
|
2153
|
+
let guid = 0;
|
|
2154
|
+
function getUniqueDomId() {
|
|
2155
|
+
guid += 1;
|
|
2156
|
+
return 'fc-dom-' + guid;
|
|
2157
|
+
}
|
|
2158
|
+
|
|
2218
2159
|
const EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere
|
|
2219
2160
|
class Splitter {
|
|
2220
2161
|
constructor() {
|
|
@@ -2450,145 +2391,388 @@ var FullCalendar = (function (exports) {
|
|
|
2450
2391
|
isFuture: Boolean(nowDate ? (date > nowDate) : todayRange ? (date >= todayRange.end) : false),
|
|
2451
2392
|
};
|
|
2452
2393
|
}
|
|
2453
|
-
function
|
|
2454
|
-
|
|
2455
|
-
'fc-day'
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2394
|
+
function getDayClassName(meta) {
|
|
2395
|
+
return joinClassNames('fc-day', `fc-day-${DAY_IDS[meta.dow]}`, meta.isDisabled
|
|
2396
|
+
? 'fc-day-disabled'
|
|
2397
|
+
: joinClassNames(meta.isToday && 'fc-day-today', meta.isPast && 'fc-day-past', meta.isFuture && 'fc-day-future', meta.isOther && 'fc-day-other'));
|
|
2398
|
+
}
|
|
2399
|
+
function getSlotClassName(meta) {
|
|
2400
|
+
return joinClassNames('fc-slot', `fc-slot-${DAY_IDS[meta.dow]}`, meta.isDisabled
|
|
2401
|
+
? 'fc-slot-disabled'
|
|
2402
|
+
: joinClassNames(meta.isToday && 'fc-slot-today', meta.isPast && 'fc-slot-past', meta.isFuture && 'fc-slot-future'));
|
|
2403
|
+
}
|
|
2404
|
+
|
|
2405
|
+
function isDimsEqual(v0, v1) {
|
|
2406
|
+
return v0 != null && (v0 === v1 || Math.abs(v0 - v1) < 0.01);
|
|
2407
|
+
}
|
|
2408
|
+
|
|
2409
|
+
var n,l$1,u$1,t,i$1,o,r$1,f$1,e$1,c$1,s$1,a$1,h={},p=[],v$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function w$1(n){var l=n.parentNode;l&&l.removeChild(n);}function _(l,u,t){var i,o,r,f={};for(r in u)"key"==r?i=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return g$1(l,f,i,o,null)}function g$1(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u$1:r,__i:-1,__u:0};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function m$1(){return {current:null}}function k$1(n){return n.children}function b(n,l){this.props=n,this.context=l;}function x(n,l){if(null==l)return n.__?x(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?x(n):null}function C$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C$1(n)}}function M$1(n){(!n.__d&&(n.__d=!0)&&i$1.push(n)&&!P$1.__r++||o!==l$1.debounceRendering)&&((o=l$1.debounceRendering)||r$1)(P$1);}function P$1(){var n,u,t,o,r,e,c,s;for(i$1.sort(f$1);n=i$1.shift();)n.__d&&(u=i$1.length,o=void 0,e=(r=(t=n).__v).__e,c=[],s=[],t.__P&&((o=d({},r)).__v=r.__v+1,l$1.vnode&&l$1.vnode(o),O$1(t.__P,o,r,t.__n,t.__P.namespaceURI,32&r.__u?[e]:null,c,null==e?x(r):e,!!(32&r.__u),s),o.__v=r.__v,o.__.__k[o.__i]=o,j$2(c,o,s),o.__e!=e&&C$1(o)),i$1.length>u&&i$1.sort(f$1));P$1.__r=0;}function S(n,l,u,t,i,o,r,f,e,c,s){var a,v,y,d,w,_=t&&t.__k||p,g=l.length;for(u.__d=e,$$1(u,l,_),e=u.__d,a=0;a<g;a++)null!=(y=u.__k[a])&&"boolean"!=typeof y&&"function"!=typeof y&&(v=-1===y.__i?h:_[y.__i]||h,y.__i=a,O$1(n,y,v,i,o,r,f,e,c,s),d=y.__e,y.ref&&v.ref!=y.ref&&(v.ref&&N(v.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),65536&y.__u||v.__k===y.__k?e=I(y,e,n):"function"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=w;}function $$1(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)r=t+a,null!=(i=n.__k[t]=null==(i=l[t])||"boolean"==typeof i||"function"==typeof i?null:"string"==typeof i||"number"==typeof i||"bigint"==typeof i||i.constructor==String?g$1(null,i,null,null,null):y(i)?g$1(k$1,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?g$1(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=L$1(i,u,r,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,"function"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f==r-1?a=f-r:f==r+1?a++:f>r?s>e-r?a+=f-r:a--:f<r&&a++,f!==t+a&&(i.__u|=65536))):(o=u[r])&&null==o.key&&o.__e&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o,!1),u[r]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o));}function I(n,l,u){var t,i;if("function"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=I(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!u.contains(l)&&(l=x(n)),u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling;}while(null!=l&&8===l.nodeType);return l}function H$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(y(n)?n.some(function(n){H$1(n,l);}):l.push(n)),l}function L$1(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type&&0==(131072&e.__u))return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--;}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++;}}return -1}function T$1(n,l,u){"-"===l[0]?n.setProperty(l,null==u?"":u):n[l]=null==u?"":"number"!=typeof u||v$1.test(l)?u:u+"px";}function A$1(n,l,u,t,i){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof t&&(n.style.cssText=t=""),t)for(l in t)u&&l in u||T$1(n.style,l,"");if(u)for(l in u)t&&u[l]===t[l]||T$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/i,"$1")),l=l.toLowerCase()in n||"onFocusOut"===l||"onFocusIn"===l?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=e$1,n.addEventListener(l,o?s$1:c$1,o)):n.removeEventListener(l,o?s$1:c$1,o);else {if("http://www.w3.org/2000/svg"==i)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=l&&"height"!=l&&"href"!=l&&"list"!=l&&"form"!=l&&"tabIndex"!=l&&"download"!=l&&"rowSpan"!=l&&"colSpan"!=l&&"role"!=l&&"popover"!=l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&"-"!==l[4]?n.removeAttribute(l):n.setAttribute(l,"popover"==l&&1==u?"":u));}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=e$1++;else if(u.t<t.u)return;return t(l$1.event?l$1.event(u):u)}}}function O$1(n,u,t,i,o,r,f,e,c,s){var a,h,p,v,w,_,g,m,x,C,M,P,$,I,H,L,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l$1.__b)&&a(u);n:if("function"==typeof T)try{if(m=u.props,x="prototype"in T&&T.prototype.render,C=(a=T.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?g=(h=u.__c=t.__c).__=h.__E:(x?u.__c=h=new T(m,M):(u.__c=h=new b(m,M),h.constructor=T,h.render=q),C&&C.sub(h),h.props=m,h.state||(h.state={}),h.context=M,h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),x&&null==h.__s&&(h.__s=h.state),x&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,T.getDerivedStateFromProps(m,h.__s))),v=h.props,w=h.state,h.__v=u,p)x&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),x&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else {if(x&&null==T.getDerivedStateFromProps&&m!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,M),!h.__e&&(null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,M)||u.__v===t.__v)){for(u.__v!==t.__v&&(h.props=m,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u);}),P=0;P<h._sb.length;P++)h.__h.push(h._sb[P]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,M),x&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,w,_);});}if(h.context=M,h.props=m,h.__P=n,h.__e=!1,$=l$1.__r,I=0,x){for(h.state=h.__s,h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[];}else do{h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),h.state=h.__s;}while(h.__d&&++I<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),x&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,w)),S(n,y(L=null!=a&&a.type===k$1&&null==a.key?a.props.children:a)?L:[L],u,t,i,o,r,f,e,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&f.push(h),g&&(h.__E=h.__=null);}catch(n){if(u.__v=null,c||null!=r){for(u.__u|=c?160:32;e&&8===e.nodeType&&e.nextSibling;)e=e.nextSibling;r[r.indexOf(e)]=null,u.__e=e;}else u.__e=t.__e,u.__k=t.__k;l$1.__e(n,u,t);}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=z$2(t.__e,u,t,i,o,r,f,c,s);(a=l$1.diffed)&&a(u);}function j$2(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)N(t[i],t[++i],t[++i]);l$1.__c&&l$1.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$1.__e(n,u.__v);}});}function z$2(l,u,t,i,o,r,f,e,c){var s,a,p,v,d,_,g,m=t.props,k=u.props,b=u.type;if("svg"===b?o="http://www.w3.org/2000/svg":"math"===b?o="http://www.w3.org/1998/Math/MathML":o||(o="http://www.w3.org/1999/xhtml"),null!=r)for(s=0;s<r.length;s++)if((d=r[s])&&"setAttribute"in d==!!b&&(b?d.localName===b:3===d.nodeType)){l=d,r[s]=null;break}if(null==l){if(null===b)return document.createTextNode(k);l=document.createElementNS(o,b,k.is&&k),r=null,e=!1;}if(null===b)m===k||e&&l.data===k||(l.data=k);else {if(r=r&&n.call(l.childNodes),m=t.props||h,!e&&null!=r)for(m={},s=0;s<l.attributes.length;s++)m[(d=l.attributes[s]).name]=d.value;for(s in m)if(d=m[s],"children"==s);else if("dangerouslySetInnerHTML"==s)p=d;else if("key"!==s&&!(s in k)){if("value"==s&&"defaultValue"in k||"checked"==s&&"defaultChecked"in k)continue;A$1(l,s,null,d,o);}for(s in k)d=k[s],"children"==s?v=d:"dangerouslySetInnerHTML"==s?a=d:"value"==s?_=d:"checked"==s?g=d:"key"===s||e&&"function"!=typeof d||m[s]===d||A$1(l,s,d,m[s],o);if(a)e||p&&(a.__html===p.__html||a.__html===l.innerHTML)||(l.innerHTML=a.__html),u.__k=[];else if(p&&(l.innerHTML=""),S(l,y(v)?v:[v],u,t,i,"foreignObject"===b?"http://www.w3.org/1999/xhtml":o,r,f,r?r[0]:t.__k&&x(t,0),e,c),null!=r)for(s=r.length;s--;)null!=r[s]&&w$1(r[s]);e||(s="value",void 0!==_&&(_!==l[s]||"progress"===b&&!_||"option"===b&&_!==m[s])&&A$1(l,s,_,m[s],o),s="checked",void 0!==g&&g!==l[s]&&A$1(l,s,g,m[s],o));}return l}function N(n,u,t){try{if("function"==typeof n){var i="function"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u));}else n.current=u;}catch(n){l$1.__e(n,t);}}function V$1(n,u,t){var i,o;if(l$1.unmount&&l$1.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||N(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount();}catch(n){l$1.__e(n,u);}i.base=i.__P=null;}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&V$1(i[o],u,t||"function"!=typeof n.type);t||null==n.__e||w$1(n.__e),n.__c=n.__=n.__e=n.__d=void 0;}function q(n,l,u){return this.constructor(n,u)}function B$2(u,t,i){var o,r,f,e;l$1.__&&l$1.__(u,t),r=(o="function"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],O$1(t,u=(!o&&i||t).__k=_(k$1,null,[u]),r||h,h,t.namespaceURI,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),j$2(f,u,e);}function D$1(n,l){B$2(n,l,D$1);}function E$1(l,u,t){var i,o,r,f,e=d({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)"key"==r?i=u[r]:"ref"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),g$1(l.type,e,i||l.key,o||l.ref,null)}function G(n,l){var u={__c:l="__cC"+a$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null;},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,M$1(n);});},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=p.slice,l$1={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l;}throw n}},u$1=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=d({},this.state),"function"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M$1(this));},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M$1(this));},b.prototype.render=k$1,i$1=[],r$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f$1=function(n,l){return n.__v.__b-l.__v.__b},P$1.__r=0,e$1=0,c$1=F(!1),s$1=F(!0),a$1=0;
|
|
2410
|
+
|
|
2411
|
+
var r,u,i,f=[],c=l$1,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function j$1(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z$1),n.__H.__h.forEach(B$1),n.__H.__h=[];}catch(t){n.__H.__h=[],c.__e(t,n.__v);}}c.__b=function(n){r=null,e&&e(n);},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t);},c.__r=function(n){a&&a(n);var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.i=n.__N=void 0;})):(i.__h.forEach(z$1),i.__h.forEach(B$1),i.__h=[],0)),u=r;},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j$1)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.i=void 0;})),u=r=null;},c.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z$1),n.__h=n.__h.filter(function(n){return !n.__||B$1(n)});}catch(r){t.some(function(n){n.__h&&(n.__h=[]);}),t=[],c.__e(r,n.__v);}}),l&&l(n,t);},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z$1(n);}catch(n){t=n;}}),r.__H=void 0,t&&c.__e(t,r.__v));};var k="function"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);k&&(t=requestAnimationFrame(r));}function z$1(n){var t=r,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r=t;}function B$1(n){var t=r;n.__c=n.__(),r=t;}
|
|
2412
|
+
|
|
2413
|
+
function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function C(n,t){this.props=n,this.context=t;}(C.prototype=new b).isPureReactComponent=!0,C.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var R=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),R&&R(n);};var M=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);M(n,t,e,r);};var T=l$1.unmount;function A(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return A(n,t,e)})),n}function D(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return D(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function L(){this.__u=0,this.t=null,this.__b=null;}function O(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function U(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),T&&T(n);},(L.prototype=new b).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=O(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(c):c());};e.__R=i;var c=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=D(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate();}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i);},L.prototype.componentWillUnmount=function(){this.t=[];},L.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=A(this.__b,r,o.__O=o.__P);}this.__b=null;}var i=e.__a&&_(k$1,null,n.fallback);return i&&(i.__u&=-33),[_(k$1,null,e.__a?null:n.children),i]};var V=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};function W(n){return this.getChildContext=function(){return n.context},n.children}function P(n){var e=this,r=n.i;e.componentWillUnmount=function(){B$2(null,e.l),e.l=null,e.i=null;},e.i&&e.i!==r&&e.componentWillUnmount(),e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],contains:function(){return !0},appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n);},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n);},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n);}}),B$2(_(W,{context:e.context},n.__v),e.l);}function j(n,e){var r=_(P,{__v:n,i:e});return r.containerInfo=e,r}(U.prototype=new b).__a=function(n){var t=this,e=O(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),V(t,n,r)):u();};e?e(o):o();}},U.prototype.render=function(n){this.u=null,this.o=new Map;var t=H$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},U.prototype.componentDidUpdate=U.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){V(n,e,t);});};var z="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Z=/[A-Z0-9]/g,Y="undefined"!=typeof document,$=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};b.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(b.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n});}});});var J=l$1.event;function K(){}function Q(){return this.cancelBubble}function X(){return this.defaultPrevented}l$1.event=function(n){return J&&(n=J(n)),n.persist=K,n.isPropagationStopped=Q,n.isDefaultPrevented=X,n.nativeEvent=n};var tn={enumerable:!1,configurable:!0,get:function(){return this.class}},en=l$1.vnode;l$1.vnode=function(n){"string"==typeof n.type&&function(n){var t=n.props,e=n.type,u={};for(var o in t){var i=t[o];if(!("value"===o&&"defaultValue"in t&&null==i||Y&&"children"===o&&"noscript"===e||"class"===o||"className"===o)){var c=o.toLowerCase();"defaultValue"===o&&"value"in t&&null==t.value?o="value":"download"===o&&!0===i?i="":"translate"===c&&"no"===i?i=!1:"ondoubleclick"===c?o="ondblclick":"onchange"!==c||"input"!==e&&"textarea"!==e||$(t.type)?"onfocus"===c?o="onfocusin":"onblur"===c?o="onfocusout":H.test(o)?o=c:-1===e.indexOf("-")&&B.test(o)?o=o.replace(Z,"-$&").toLowerCase():null===i&&(i=void 0):c=o="oninput","oninput"===c&&u[o=c]&&(o="oninputCapture"),u[o]=i;}}"select"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value);})),"select"==e&&null!=u.defaultValue&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value;})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,"className",tn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u;}(n),n.$$typeof=z,en&&en(n);};var rn=l$1.__r;l$1.__r=function(n){rn&&rn(n),n.__c;};var un=l$1.diffed;l$1.diffed=function(n){un&&un(n);var t=n.props,e=n.__e;null!=e&&"textarea"===n.type&&"value"in t&&t.value!==e.value&&(e.value=null==t.value?"":t.value);};
|
|
2414
|
+
|
|
2415
|
+
/*
|
|
2416
|
+
NOTE: this can be a public API, especially createElement for hooks.
|
|
2417
|
+
See examples/typescript-scheduler/src/index.ts
|
|
2418
|
+
*/
|
|
2419
|
+
/*
|
|
2420
|
+
HACK for flushSync being a noop:
|
|
2421
|
+
https://github.com/preactjs/preact/issues/3929
|
|
2422
|
+
*/
|
|
2423
|
+
function flushSync(renderActionToFlush) {
|
|
2424
|
+
renderActionToFlush();
|
|
2425
|
+
let oldDebounceRendering = l$1.debounceRendering; // orig
|
|
2426
|
+
let callbackQ = [];
|
|
2427
|
+
function execCallbackSync(callback) {
|
|
2428
|
+
callbackQ.push(callback);
|
|
2460
2429
|
}
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2430
|
+
l$1.debounceRendering = execCallbackSync;
|
|
2431
|
+
B$2(_(FakeComponent, {}), document.createElement('div'));
|
|
2432
|
+
while (callbackQ.length) {
|
|
2433
|
+
callbackQ.shift()();
|
|
2434
|
+
}
|
|
2435
|
+
l$1.debounceRendering = oldDebounceRendering;
|
|
2436
|
+
}
|
|
2437
|
+
/*
|
|
2438
|
+
Triggers a state-change which unclogs the render queue? Needed?
|
|
2439
|
+
*/
|
|
2440
|
+
class FakeComponent extends b {
|
|
2441
|
+
render() { return _('div', {}); }
|
|
2442
|
+
componentDidMount() { this.setState({}); }
|
|
2443
|
+
}
|
|
2444
|
+
/*
|
|
2445
|
+
HACK for Preact wrongly calling shouldComponentUpdate during context changes:
|
|
2446
|
+
https://github.com/preactjs/preact/issues/2510
|
|
2447
|
+
*/
|
|
2448
|
+
function createContext(defaultValue) {
|
|
2449
|
+
let ContextType = G(defaultValue);
|
|
2450
|
+
let origProvider = ContextType.Provider;
|
|
2451
|
+
ContextType.Provider = function () {
|
|
2452
|
+
let isNew = !this.getChildContext;
|
|
2453
|
+
let children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params
|
|
2454
|
+
if (isNew) {
|
|
2455
|
+
let subs = [];
|
|
2456
|
+
this.shouldComponentUpdate = (_props) => {
|
|
2457
|
+
if (this.props.value !== _props.value) {
|
|
2458
|
+
subs.forEach((c) => {
|
|
2459
|
+
c.context = _props.value;
|
|
2460
|
+
c.forceUpdate();
|
|
2461
|
+
});
|
|
2462
|
+
}
|
|
2463
|
+
};
|
|
2464
|
+
this.sub = (c) => {
|
|
2465
|
+
subs.push(c);
|
|
2466
|
+
let old = c.componentWillUnmount;
|
|
2467
|
+
c.componentWillUnmount = () => {
|
|
2468
|
+
subs.splice(subs.indexOf(c), 1);
|
|
2469
|
+
old && old.call(c);
|
|
2470
|
+
};
|
|
2471
|
+
};
|
|
2464
2472
|
}
|
|
2465
|
-
|
|
2466
|
-
|
|
2473
|
+
return children;
|
|
2474
|
+
};
|
|
2475
|
+
return ContextType;
|
|
2476
|
+
}
|
|
2477
|
+
const preactOptions = l$1;
|
|
2478
|
+
|
|
2479
|
+
var preact = {
|
|
2480
|
+
__proto__: null,
|
|
2481
|
+
flushSync: flushSync,
|
|
2482
|
+
createContext: createContext,
|
|
2483
|
+
preactOptions: preactOptions,
|
|
2484
|
+
createPortal: j,
|
|
2485
|
+
Component: b,
|
|
2486
|
+
Fragment: k$1,
|
|
2487
|
+
cloneElement: E$1,
|
|
2488
|
+
createElement: _,
|
|
2489
|
+
createRef: m$1,
|
|
2490
|
+
h: _,
|
|
2491
|
+
hydrate: D$1,
|
|
2492
|
+
get isValidElement () { return t; },
|
|
2493
|
+
get options () { return l$1; },
|
|
2494
|
+
render: B$2,
|
|
2495
|
+
toChildArray: H$1
|
|
2496
|
+
};
|
|
2497
|
+
|
|
2498
|
+
const nativeBorderBoxEnabled = true;
|
|
2499
|
+
const fallbackTimeout = 100;
|
|
2500
|
+
const configMap = new Map();
|
|
2501
|
+
const afterSizeCallbacks = new Set();
|
|
2502
|
+
let isHandling = false; // utilized by both techniques
|
|
2503
|
+
function afterSize(callback) {
|
|
2504
|
+
if (isHandling) {
|
|
2505
|
+
afterSizeCallbacks.add(callback);
|
|
2506
|
+
}
|
|
2507
|
+
else {
|
|
2508
|
+
callback(); // TODO: should we queue microtask?
|
|
2509
|
+
}
|
|
2510
|
+
}
|
|
2511
|
+
function flushAfterSize() {
|
|
2512
|
+
for (const flushedCallback of afterSizeCallbacks.values()) {
|
|
2513
|
+
flushedCallback();
|
|
2514
|
+
afterSizeCallbacks.delete(flushedCallback);
|
|
2515
|
+
}
|
|
2516
|
+
}
|
|
2517
|
+
/*
|
|
2518
|
+
A proper ResizeObserver polyfill would keep checking dimensions until all stabilized,
|
|
2519
|
+
to detect if a *handler* caused a new element's dimensions to change,
|
|
2520
|
+
while ignoring changes per-element after the first (to prevent infinite loops),
|
|
2521
|
+
but our Preact system does not commit to the DOM immediately, commits are batched for later,
|
|
2522
|
+
so we can skip this.
|
|
2523
|
+
*/
|
|
2524
|
+
function checkConfigMap() {
|
|
2525
|
+
if (!isHandling) {
|
|
2526
|
+
isHandling = true;
|
|
2527
|
+
const dirtyConfigs = [];
|
|
2528
|
+
for (const [el, config] of configMap.entries()) {
|
|
2529
|
+
let width;
|
|
2530
|
+
let height;
|
|
2531
|
+
if (config.client) {
|
|
2532
|
+
width = el.clientWidth;
|
|
2533
|
+
height = el.clientHeight;
|
|
2534
|
+
}
|
|
2535
|
+
else {
|
|
2536
|
+
({ width, height } = el.getBoundingClientRect());
|
|
2537
|
+
}
|
|
2538
|
+
if (storeConfigDims(config, width, height)) {
|
|
2539
|
+
dirtyConfigs.push(config);
|
|
2540
|
+
}
|
|
2467
2541
|
}
|
|
2468
|
-
|
|
2469
|
-
|
|
2542
|
+
for (const dirtyConfig of dirtyConfigs) {
|
|
2543
|
+
dirtyConfig.callback(dirtyConfig.width, dirtyConfig.height);
|
|
2470
2544
|
}
|
|
2471
|
-
|
|
2472
|
-
|
|
2545
|
+
flushAfterSize();
|
|
2546
|
+
isHandling = false;
|
|
2547
|
+
}
|
|
2548
|
+
}
|
|
2549
|
+
function storeConfigDims(config, width, height) {
|
|
2550
|
+
let shouldFire = false;
|
|
2551
|
+
// we use it because ResizeObserver's results could be slightly off from getBoundingClientRect
|
|
2552
|
+
if (!isDimsEqual(config.width, width)) {
|
|
2553
|
+
config.width = width;
|
|
2554
|
+
shouldFire = config.watchWidth;
|
|
2555
|
+
}
|
|
2556
|
+
if (!isDimsEqual(config.height, height)) {
|
|
2557
|
+
config.height = height;
|
|
2558
|
+
shouldFire || (shouldFire = config.watchHeight);
|
|
2559
|
+
}
|
|
2560
|
+
return shouldFire;
|
|
2561
|
+
}
|
|
2562
|
+
// Native Technique ONLY
|
|
2563
|
+
// -------------------------------------------------------------------------------------------------
|
|
2564
|
+
function initNative() {
|
|
2565
|
+
// Single global ResizeObserver does batching and uses less memory than individuals
|
|
2566
|
+
// Will always fire with delay after DOM mutation, but before repaint,
|
|
2567
|
+
// thus doesn't need !isHandling check like checkConfigMap
|
|
2568
|
+
const globalResizeObserver = new ResizeObserver((entries) => {
|
|
2569
|
+
isHandling = true;
|
|
2570
|
+
for (let entry of entries) {
|
|
2571
|
+
const el = entry.target;
|
|
2572
|
+
const config = configMap.get(el);
|
|
2573
|
+
let width;
|
|
2574
|
+
let height;
|
|
2575
|
+
if (config.client) {
|
|
2576
|
+
width = el.clientWidth;
|
|
2577
|
+
height = el.clientHeight;
|
|
2578
|
+
}
|
|
2579
|
+
else if (entry.borderBoxSize && nativeBorderBoxEnabled) {
|
|
2580
|
+
const borderBoxSize = entry.borderBoxSize[0] || entry.borderBoxSize; // HACK for Firefox
|
|
2581
|
+
width = borderBoxSize.inlineSize;
|
|
2582
|
+
height = borderBoxSize.blockSize;
|
|
2583
|
+
}
|
|
2584
|
+
else {
|
|
2585
|
+
({ width, height } = el.getBoundingClientRect());
|
|
2586
|
+
}
|
|
2587
|
+
if (storeConfigDims(config, width, height)) {
|
|
2588
|
+
config.callback(width, height);
|
|
2589
|
+
}
|
|
2473
2590
|
}
|
|
2591
|
+
flushAfterSize();
|
|
2592
|
+
isHandling = false;
|
|
2593
|
+
});
|
|
2594
|
+
function watchSize(el, callback, client, watchWidth = true, watchHeight = true) {
|
|
2595
|
+
configMap.set(el, { callback, client, watchWidth, watchHeight });
|
|
2596
|
+
globalResizeObserver.observe(el, {
|
|
2597
|
+
box: !client && nativeBorderBoxEnabled
|
|
2598
|
+
? 'border-box'
|
|
2599
|
+
: undefined // default is 'content-box'
|
|
2600
|
+
});
|
|
2601
|
+
return () => {
|
|
2602
|
+
configMap.delete(el);
|
|
2603
|
+
globalResizeObserver.unobserve(el);
|
|
2604
|
+
};
|
|
2474
2605
|
}
|
|
2475
|
-
return
|
|
2606
|
+
return [watchSize, checkConfigMap];
|
|
2476
2607
|
}
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2608
|
+
// Fallback Technique ONLY
|
|
2609
|
+
// -------------------------------------------------------------------------------------------------
|
|
2610
|
+
// from https://github.com/juggle/resize-observer/blob/master/src/utils/scheduler.ts
|
|
2611
|
+
const globalEventNames = [
|
|
2612
|
+
// Global Resize
|
|
2613
|
+
'resize',
|
|
2614
|
+
// Global Load
|
|
2615
|
+
'load',
|
|
2616
|
+
// Transitions & Animations
|
|
2617
|
+
'transitionend',
|
|
2618
|
+
'animationend',
|
|
2619
|
+
'animationstart',
|
|
2620
|
+
'animationiteration',
|
|
2621
|
+
// Interactions
|
|
2622
|
+
'keyup',
|
|
2623
|
+
'keydown',
|
|
2624
|
+
'mouseup',
|
|
2625
|
+
'mousedown',
|
|
2626
|
+
'mouseover',
|
|
2627
|
+
'mouseout',
|
|
2628
|
+
'blur',
|
|
2629
|
+
'focus'
|
|
2630
|
+
];
|
|
2631
|
+
const eventListenerConfig = {
|
|
2632
|
+
capture: true,
|
|
2633
|
+
passive: true, // we don't call preventDefault, so can optimize
|
|
2634
|
+
};
|
|
2635
|
+
function initFallback() {
|
|
2636
|
+
let globalMutationObserver; // lazily initialize for non-browser envs
|
|
2637
|
+
let globalMutationObserverPaused = false;
|
|
2638
|
+
const [requestCheckSizes, cancelCheckSizes] = debounce(checkConfigMap, fallbackTimeout);
|
|
2639
|
+
function requestCheckSizesSync() {
|
|
2640
|
+
cancelCheckSizes();
|
|
2641
|
+
checkConfigMap();
|
|
2642
|
+
}
|
|
2643
|
+
function watchSize(el, callback, client, watchWidth = true, watchHeight = true) {
|
|
2644
|
+
if (!configMap.size) {
|
|
2645
|
+
addGlobalHandlers();
|
|
2646
|
+
}
|
|
2647
|
+
configMap.set(el, { callback, client, watchWidth, watchHeight });
|
|
2648
|
+
requestCheckSizes();
|
|
2649
|
+
return () => {
|
|
2650
|
+
configMap.delete(el);
|
|
2651
|
+
if (!configMap.size) {
|
|
2652
|
+
removeGlobalHandlers();
|
|
2653
|
+
}
|
|
2654
|
+
};
|
|
2484
2655
|
}
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2656
|
+
function addGlobalHandlers() {
|
|
2657
|
+
globalMutationObserver = new MutationObserver(requestCheckSizes);
|
|
2658
|
+
if (!globalMutationObserverPaused) {
|
|
2659
|
+
startGlobalMutationObserver();
|
|
2488
2660
|
}
|
|
2489
|
-
|
|
2490
|
-
|
|
2661
|
+
for (const eventName of globalEventNames) {
|
|
2662
|
+
window.addEventListener(eventName, requestCheckSizes, eventListenerConfig);
|
|
2491
2663
|
}
|
|
2492
|
-
|
|
2493
|
-
|
|
2664
|
+
}
|
|
2665
|
+
function removeGlobalHandlers() {
|
|
2666
|
+
if (!globalMutationObserverPaused) {
|
|
2667
|
+
stopGlobalMutationObserver();
|
|
2668
|
+
}
|
|
2669
|
+
for (const eventName of globalEventNames) {
|
|
2670
|
+
window.removeEventListener(eventName, requestCheckSizes, eventListenerConfig);
|
|
2494
2671
|
}
|
|
2495
2672
|
}
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
if (!currentMap || !isDimMapsEqual(currentMap, newMap)) {
|
|
2504
|
-
component.setState({ [key]: newMap });
|
|
2673
|
+
function startGlobalMutationObserver() {
|
|
2674
|
+
globalMutationObserver.observe(document.documentElement, {
|
|
2675
|
+
attributes: true,
|
|
2676
|
+
childList: true,
|
|
2677
|
+
subtree: true,
|
|
2678
|
+
characterData: true,
|
|
2679
|
+
});
|
|
2505
2680
|
}
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
if (!
|
|
2511
|
-
|
|
2681
|
+
function stopGlobalMutationObserver() {
|
|
2682
|
+
globalMutationObserver.disconnect();
|
|
2683
|
+
}
|
|
2684
|
+
function pauseGlobalMutationObserver() {
|
|
2685
|
+
if (!globalMutationObserverPaused) {
|
|
2686
|
+
globalMutationObserverPaused = true;
|
|
2687
|
+
if (configMap.size) {
|
|
2688
|
+
stopGlobalMutationObserver();
|
|
2689
|
+
}
|
|
2512
2690
|
}
|
|
2513
2691
|
}
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2692
|
+
function resumeGlobalMutationObserver() {
|
|
2693
|
+
if (globalMutationObserverPaused) {
|
|
2694
|
+
globalMutationObserverPaused = false;
|
|
2695
|
+
if (configMap.size) {
|
|
2696
|
+
startGlobalMutationObserver();
|
|
2697
|
+
}
|
|
2698
|
+
}
|
|
2699
|
+
}
|
|
2700
|
+
// Preact Integration
|
|
2701
|
+
const __rOld = preactOptions.__r || noop;
|
|
2702
|
+
const __cOld = preactOptions.__c || noop;
|
|
2703
|
+
let requested = false;
|
|
2704
|
+
preactOptions.__r = function () {
|
|
2705
|
+
pauseGlobalMutationObserver();
|
|
2706
|
+
__rOld.apply(this, arguments);
|
|
2707
|
+
};
|
|
2708
|
+
preactOptions.__c = function () {
|
|
2709
|
+
if (!requested) {
|
|
2710
|
+
requested = true;
|
|
2711
|
+
requestAnimationFrame(() => {
|
|
2712
|
+
requestCheckSizesSync();
|
|
2713
|
+
resumeGlobalMutationObserver();
|
|
2714
|
+
requested = false;
|
|
2715
|
+
});
|
|
2716
|
+
}
|
|
2717
|
+
__cOld.apply(this, arguments);
|
|
2718
|
+
};
|
|
2719
|
+
return [watchSize, requestCheckSizesSync];
|
|
2519
2720
|
}
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
if (entry.contentBoxSize) {
|
|
2534
|
-
// The standard makes contentBoxSize an array...
|
|
2535
|
-
if (entry.contentBoxSize[0]) {
|
|
2536
|
-
callback(entry.contentBoxSize[0].inlineSize, entry.contentBoxSize[0].blockSize);
|
|
2721
|
+
// Util
|
|
2722
|
+
// -------------------------------------------------------------------------------------------------
|
|
2723
|
+
const noop = () => { }; // TODO: use elsewhere
|
|
2724
|
+
function debounce(fn, ms) {
|
|
2725
|
+
let timeoutStarted;
|
|
2726
|
+
let timeoutAdded;
|
|
2727
|
+
let timeoutId; // thruthiness indicates whether active timeout
|
|
2728
|
+
function runWithTimeout(timeout) {
|
|
2729
|
+
timeoutStarted = Date.now();
|
|
2730
|
+
timeoutAdded = 0;
|
|
2731
|
+
timeoutId = setTimeout(() => {
|
|
2732
|
+
if (timeoutAdded) {
|
|
2733
|
+
runWithTimeout(timeoutAdded);
|
|
2537
2734
|
}
|
|
2538
2735
|
else {
|
|
2539
|
-
|
|
2540
|
-
|
|
2736
|
+
timeoutId = undefined;
|
|
2737
|
+
fn();
|
|
2541
2738
|
}
|
|
2739
|
+
}, timeout);
|
|
2740
|
+
}
|
|
2741
|
+
function request() {
|
|
2742
|
+
if (timeoutId) {
|
|
2743
|
+
timeoutAdded = Date.now() - timeoutStarted;
|
|
2542
2744
|
}
|
|
2543
2745
|
else {
|
|
2544
|
-
|
|
2746
|
+
runWithTimeout(ms);
|
|
2545
2747
|
}
|
|
2546
2748
|
}
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2749
|
+
function cancel() {
|
|
2750
|
+
if (timeoutId) {
|
|
2751
|
+
clearTimeout(timeoutId);
|
|
2752
|
+
timeoutId = undefined;
|
|
2753
|
+
}
|
|
2550
2754
|
}
|
|
2551
|
-
|
|
2552
|
-
}
|
|
2755
|
+
return [request, cancel];
|
|
2756
|
+
}
|
|
2757
|
+
// Main
|
|
2758
|
+
// -------------------------------------------------------------------------------------------------
|
|
2553
2759
|
/*
|
|
2554
|
-
|
|
2555
|
-
- element can only have one listener attached ever
|
|
2556
|
-
- element cannot have border or padding
|
|
2760
|
+
PRECONDITION: element can only have one listener attached
|
|
2557
2761
|
|
|
2558
|
-
|
|
2559
|
-
-
|
|
2762
|
+
NOTE: If we ever kill the fallback technique and use ResizeObserver unconditionally with full
|
|
2763
|
+
border-box support, we no longer need wrappers around the <StickyFooterScrollbar>'s <Scroller>
|
|
2560
2764
|
*/
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
return () => {
|
|
2565
|
-
callbackMap.delete(el);
|
|
2566
|
-
resizeObserver.unobserve(el);
|
|
2567
|
-
};
|
|
2568
|
-
}
|
|
2765
|
+
const [watchSize, updateSizeSync] = typeof ResizeObserver !== 'undefined'
|
|
2766
|
+
? initNative()
|
|
2767
|
+
: initFallback();
|
|
2569
2768
|
function watchWidth(el, callback) {
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
if (currentWidth == null || currentWidth !== width) {
|
|
2573
|
-
callback(currentWidth = width);
|
|
2574
|
-
}
|
|
2575
|
-
});
|
|
2769
|
+
return watchSize(el, callback,
|
|
2770
|
+
/* watchWidth = */ true);
|
|
2576
2771
|
}
|
|
2577
2772
|
function watchHeight(el, callback) {
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
callback(currentHeight = height);
|
|
2582
|
-
}
|
|
2583
|
-
});
|
|
2584
|
-
}
|
|
2585
|
-
function afterSize(callback) {
|
|
2586
|
-
if (isHandling) {
|
|
2587
|
-
flushedCallbackSet.add(callback);
|
|
2588
|
-
}
|
|
2589
|
-
else {
|
|
2590
|
-
callback(); // TODO: should we queue microtask?
|
|
2591
|
-
}
|
|
2773
|
+
return watchSize(el, (_width, height) => callback(height),
|
|
2774
|
+
/* watchWidth = */ false,
|
|
2775
|
+
/* watchHeight = */ true);
|
|
2592
2776
|
}
|
|
2593
2777
|
|
|
2594
2778
|
const DAY_FORMAT = createFormatter({ year: 'numeric', month: 'long', day: 'numeric' });
|
|
@@ -2640,7 +2824,7 @@ var FullCalendar = (function (exports) {
|
|
|
2640
2824
|
document.body.appendChild(outerEl);
|
|
2641
2825
|
let innerEl = outerEl.firstChild;
|
|
2642
2826
|
let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;
|
|
2643
|
-
|
|
2827
|
+
outerEl.remove();
|
|
2644
2828
|
return res;
|
|
2645
2829
|
}
|
|
2646
2830
|
|
|
@@ -3041,7 +3225,7 @@ var FullCalendar = (function (exports) {
|
|
|
3041
3225
|
}
|
|
3042
3226
|
return className;
|
|
3043
3227
|
}
|
|
3044
|
-
|
|
3228
|
+
getClassName(key) {
|
|
3045
3229
|
return this.classes[key] || '';
|
|
3046
3230
|
}
|
|
3047
3231
|
getIconClass(buttonName, isRtl) {
|
|
@@ -3073,86 +3257,6 @@ var FullCalendar = (function (exports) {
|
|
|
3073
3257
|
Theme.prototype.baseIconClass = '';
|
|
3074
3258
|
Theme.prototype.iconOverridePrefix = '';
|
|
3075
3259
|
|
|
3076
|
-
var n,l$1,u$1,t,i$1,o,r$1,f$1,e$1,c$1,s$1,a$1,h={},p=[],v$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function w$1(n){var l=n.parentNode;l&&l.removeChild(n);}function _(l,u,t){var i,o,r,f={};for(r in u)"key"==r?i=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return g$1(l,f,i,o,null)}function g$1(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u$1:r,__i:-1,__u:0};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function m$1(){return {current:null}}function k$1(n){return n.children}function b(n,l){this.props=n,this.context=l;}function x(n,l){if(null==l)return n.__?x(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?x(n):null}function C$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C$1(n)}}function M$1(n){(!n.__d&&(n.__d=!0)&&i$1.push(n)&&!P$1.__r++||o!==l$1.debounceRendering)&&((o=l$1.debounceRendering)||r$1)(P$1);}function P$1(){var n,u,t,o,r,e,c,s;for(i$1.sort(f$1);n=i$1.shift();)n.__d&&(u=i$1.length,o=void 0,e=(r=(t=n).__v).__e,c=[],s=[],t.__P&&((o=d({},r)).__v=r.__v+1,l$1.vnode&&l$1.vnode(o),O$1(t.__P,o,r,t.__n,t.__P.namespaceURI,32&r.__u?[e]:null,c,null==e?x(r):e,!!(32&r.__u),s),o.__v=r.__v,o.__.__k[o.__i]=o,j$2(c,o,s),o.__e!=e&&C$1(o)),i$1.length>u&&i$1.sort(f$1));P$1.__r=0;}function S(n,l,u,t,i,o,r,f,e,c,s){var a,v,y,d,w,_=t&&t.__k||p,g=l.length;for(u.__d=e,$$1(u,l,_),e=u.__d,a=0;a<g;a++)null!=(y=u.__k[a])&&"boolean"!=typeof y&&"function"!=typeof y&&(v=-1===y.__i?h:_[y.__i]||h,y.__i=a,O$1(n,y,v,i,o,r,f,e,c,s),d=y.__e,y.ref&&v.ref!=y.ref&&(v.ref&&N(v.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),65536&y.__u||v.__k===y.__k?e=I(y,e,n):"function"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=w;}function $$1(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)r=t+a,null!=(i=n.__k[t]=null==(i=l[t])||"boolean"==typeof i||"function"==typeof i?null:"string"==typeof i||"number"==typeof i||"bigint"==typeof i||i.constructor==String?g$1(null,i,null,null,null):y(i)?g$1(k$1,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?g$1(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=L$1(i,u,r,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,"function"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f==r-1?a=f-r:f==r+1?a++:f>r?s>e-r?a+=f-r:a--:f<r&&a++,f!==t+a&&(i.__u|=65536))):(o=u[r])&&null==o.key&&o.__e&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o,!1),u[r]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),V$1(o,o));}function I(n,l,u){var t,i;if("function"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=I(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!u.contains(l)&&(l=x(n)),u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling;}while(null!=l&&8===l.nodeType);return l}function H$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(y(n)?n.some(function(n){H$1(n,l);}):l.push(n)),l}function L$1(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type&&0==(131072&e.__u))return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--;}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++;}}return -1}function T$1(n,l,u){"-"===l[0]?n.setProperty(l,null==u?"":u):n[l]=null==u?"":"number"!=typeof u||v$1.test(l)?u:u+"px";}function A$1(n,l,u,t,i){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof t&&(n.style.cssText=t=""),t)for(l in t)u&&l in u||T$1(n.style,l,"");if(u)for(l in u)t&&u[l]===t[l]||T$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/i,"$1")),l=l.toLowerCase()in n||"onFocusOut"===l||"onFocusIn"===l?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=e$1,n.addEventListener(l,o?s$1:c$1,o)):n.removeEventListener(l,o?s$1:c$1,o);else {if("http://www.w3.org/2000/svg"==i)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=l&&"height"!=l&&"href"!=l&&"list"!=l&&"form"!=l&&"tabIndex"!=l&&"download"!=l&&"rowSpan"!=l&&"colSpan"!=l&&"role"!=l&&"popover"!=l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&"-"!==l[4]?n.removeAttribute(l):n.setAttribute(l,"popover"==l&&1==u?"":u));}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=e$1++;else if(u.t<t.u)return;return t(l$1.event?l$1.event(u):u)}}}function O$1(n,u,t,i,o,r,f,e,c,s){var a,h,p,v,w,_,g,m,x,C,M,P,$,I,H,L,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l$1.__b)&&a(u);n:if("function"==typeof T)try{if(m=u.props,x="prototype"in T&&T.prototype.render,C=(a=T.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?g=(h=u.__c=t.__c).__=h.__E:(x?u.__c=h=new T(m,M):(u.__c=h=new b(m,M),h.constructor=T,h.render=q),C&&C.sub(h),h.props=m,h.state||(h.state={}),h.context=M,h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),x&&null==h.__s&&(h.__s=h.state),x&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,T.getDerivedStateFromProps(m,h.__s))),v=h.props,w=h.state,h.__v=u,p)x&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),x&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else {if(x&&null==T.getDerivedStateFromProps&&m!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,M),!h.__e&&(null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,M)||u.__v===t.__v)){for(u.__v!==t.__v&&(h.props=m,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u);}),P=0;P<h._sb.length;P++)h.__h.push(h._sb[P]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,M),x&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,w,_);});}if(h.context=M,h.props=m,h.__P=n,h.__e=!1,$=l$1.__r,I=0,x){for(h.state=h.__s,h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[];}else do{h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),h.state=h.__s;}while(h.__d&&++I<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),x&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,w)),S(n,y(L=null!=a&&a.type===k$1&&null==a.key?a.props.children:a)?L:[L],u,t,i,o,r,f,e,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&f.push(h),g&&(h.__E=h.__=null);}catch(n){if(u.__v=null,c||null!=r){for(u.__u|=c?160:32;e&&8===e.nodeType&&e.nextSibling;)e=e.nextSibling;r[r.indexOf(e)]=null,u.__e=e;}else u.__e=t.__e,u.__k=t.__k;l$1.__e(n,u,t);}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=z$2(t.__e,u,t,i,o,r,f,c,s);(a=l$1.diffed)&&a(u);}function j$2(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)N(t[i],t[++i],t[++i]);l$1.__c&&l$1.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$1.__e(n,u.__v);}});}function z$2(l,u,t,i,o,r,f,e,c){var s,a,p,v,d,_,g,m=t.props,k=u.props,b=u.type;if("svg"===b?o="http://www.w3.org/2000/svg":"math"===b?o="http://www.w3.org/1998/Math/MathML":o||(o="http://www.w3.org/1999/xhtml"),null!=r)for(s=0;s<r.length;s++)if((d=r[s])&&"setAttribute"in d==!!b&&(b?d.localName===b:3===d.nodeType)){l=d,r[s]=null;break}if(null==l){if(null===b)return document.createTextNode(k);l=document.createElementNS(o,b,k.is&&k),r=null,e=!1;}if(null===b)m===k||e&&l.data===k||(l.data=k);else {if(r=r&&n.call(l.childNodes),m=t.props||h,!e&&null!=r)for(m={},s=0;s<l.attributes.length;s++)m[(d=l.attributes[s]).name]=d.value;for(s in m)if(d=m[s],"children"==s);else if("dangerouslySetInnerHTML"==s)p=d;else if("key"!==s&&!(s in k)){if("value"==s&&"defaultValue"in k||"checked"==s&&"defaultChecked"in k)continue;A$1(l,s,null,d,o);}for(s in k)d=k[s],"children"==s?v=d:"dangerouslySetInnerHTML"==s?a=d:"value"==s?_=d:"checked"==s?g=d:"key"===s||e&&"function"!=typeof d||m[s]===d||A$1(l,s,d,m[s],o);if(a)e||p&&(a.__html===p.__html||a.__html===l.innerHTML)||(l.innerHTML=a.__html),u.__k=[];else if(p&&(l.innerHTML=""),S(l,y(v)?v:[v],u,t,i,"foreignObject"===b?"http://www.w3.org/1999/xhtml":o,r,f,r?r[0]:t.__k&&x(t,0),e,c),null!=r)for(s=r.length;s--;)null!=r[s]&&w$1(r[s]);e||(s="value",void 0!==_&&(_!==l[s]||"progress"===b&&!_||"option"===b&&_!==m[s])&&A$1(l,s,_,m[s],o),s="checked",void 0!==g&&g!==l[s]&&A$1(l,s,g,m[s],o));}return l}function N(n,u,t){try{if("function"==typeof n){var i="function"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u));}else n.current=u;}catch(n){l$1.__e(n,t);}}function V$1(n,u,t){var i,o;if(l$1.unmount&&l$1.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||N(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount();}catch(n){l$1.__e(n,u);}i.base=i.__P=null;}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&V$1(i[o],u,t||"function"!=typeof n.type);t||null==n.__e||w$1(n.__e),n.__c=n.__=n.__e=n.__d=void 0;}function q(n,l,u){return this.constructor(n,u)}function B$2(u,t,i){var o,r,f,e;l$1.__&&l$1.__(u,t),r=(o="function"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],O$1(t,u=(!o&&i||t).__k=_(k$1,null,[u]),r||h,h,t.namespaceURI,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),j$2(f,u,e);}function D$1(n,l){B$2(n,l,D$1);}function E$1(l,u,t){var i,o,r,f,e=d({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)"key"==r?i=u[r]:"ref"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),g$1(l.type,e,i||l.key,o||l.ref,null)}function G(n,l){var u={__c:l="__cC"+a$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null;},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,M$1(n);});},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=p.slice,l$1={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l;}throw n}},u$1=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=d({},this.state),"function"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M$1(this));},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M$1(this));},b.prototype.render=k$1,i$1=[],r$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f$1=function(n,l){return n.__v.__b-l.__v.__b},P$1.__r=0,e$1=0,c$1=F(!1),s$1=F(!0),a$1=0;
|
|
3077
|
-
|
|
3078
|
-
var r,u,i,f=[],c=l$1,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function j$1(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z$1),n.__H.__h.forEach(B$1),n.__H.__h=[];}catch(t){n.__H.__h=[],c.__e(t,n.__v);}}c.__b=function(n){r=null,e&&e(n);},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t);},c.__r=function(n){a&&a(n);var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.i=n.__N=void 0;})):(i.__h.forEach(z$1),i.__h.forEach(B$1),i.__h=[],0)),u=r;},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j$1)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.i=void 0;})),u=r=null;},c.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z$1),n.__h=n.__h.filter(function(n){return !n.__||B$1(n)});}catch(r){t.some(function(n){n.__h&&(n.__h=[]);}),t=[],c.__e(r,n.__v);}}),l&&l(n,t);},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z$1(n);}catch(n){t=n;}}),r.__H=void 0,t&&c.__e(t,r.__v));};var k="function"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);k&&(t=requestAnimationFrame(r));}function z$1(n){var t=r,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r=t;}function B$1(n){var t=r;n.__c=n.__(),r=t;}
|
|
3079
|
-
|
|
3080
|
-
function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function C(n,t){this.props=n,this.context=t;}(C.prototype=new b).isPureReactComponent=!0,C.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var R=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),R&&R(n);};var M=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);M(n,t,e,r);};var T=l$1.unmount;function A(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return A(n,t,e)})),n}function D(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return D(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function L(){this.__u=0,this.t=null,this.__b=null;}function O(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function U(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),T&&T(n);},(L.prototype=new b).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=O(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(c):c());};e.__R=i;var c=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=D(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate();}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i);},L.prototype.componentWillUnmount=function(){this.t=[];},L.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=A(this.__b,r,o.__O=o.__P);}this.__b=null;}var i=e.__a&&_(k$1,null,n.fallback);return i&&(i.__u&=-33),[_(k$1,null,e.__a?null:n.children),i]};var V=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};function W(n){return this.getChildContext=function(){return n.context},n.children}function P(n){var e=this,r=n.i;e.componentWillUnmount=function(){B$2(null,e.l),e.l=null,e.i=null;},e.i&&e.i!==r&&e.componentWillUnmount(),e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],contains:function(){return !0},appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n);},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n);},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n);}}),B$2(_(W,{context:e.context},n.__v),e.l);}function j(n,e){var r=_(P,{__v:n,i:e});return r.containerInfo=e,r}(U.prototype=new b).__a=function(n){var t=this,e=O(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),V(t,n,r)):u();};e?e(o):o();}},U.prototype.render=function(n){this.u=null,this.o=new Map;var t=H$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},U.prototype.componentDidUpdate=U.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){V(n,e,t);});};var z="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Z=/[A-Z0-9]/g,Y="undefined"!=typeof document,$=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};b.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(b.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n});}});});var J=l$1.event;function K(){}function Q(){return this.cancelBubble}function X(){return this.defaultPrevented}l$1.event=function(n){return J&&(n=J(n)),n.persist=K,n.isPropagationStopped=Q,n.isDefaultPrevented=X,n.nativeEvent=n};var tn={enumerable:!1,configurable:!0,get:function(){return this.class}},en=l$1.vnode;l$1.vnode=function(n){"string"==typeof n.type&&function(n){var t=n.props,e=n.type,u={};for(var o in t){var i=t[o];if(!("value"===o&&"defaultValue"in t&&null==i||Y&&"children"===o&&"noscript"===e||"class"===o||"className"===o)){var c=o.toLowerCase();"defaultValue"===o&&"value"in t&&null==t.value?o="value":"download"===o&&!0===i?i="":"translate"===c&&"no"===i?i=!1:"ondoubleclick"===c?o="ondblclick":"onchange"!==c||"input"!==e&&"textarea"!==e||$(t.type)?"onfocus"===c?o="onfocusin":"onblur"===c?o="onfocusout":H.test(o)?o=c:-1===e.indexOf("-")&&B.test(o)?o=o.replace(Z,"-$&").toLowerCase():null===i&&(i=void 0):c=o="oninput","oninput"===c&&u[o=c]&&(o="oninputCapture"),u[o]=i;}}"select"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value);})),"select"==e&&null!=u.defaultValue&&(u.value=H$1(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value;})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,"className",tn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u;}(n),n.$$typeof=z,en&&en(n);};var rn=l$1.__r;l$1.__r=function(n){rn&&rn(n),n.__c;};var un=l$1.diffed;l$1.diffed=function(n){un&&un(n);var t=n.props,e=n.__e;null!=e&&"textarea"===n.type&&"value"in t&&t.value!==e.value&&(e.value=null==t.value?"":t.value);};
|
|
3081
|
-
|
|
3082
|
-
/*
|
|
3083
|
-
NOTE: this can be a public API, especially createElement for hooks.
|
|
3084
|
-
See examples/typescript-scheduler/src/index.ts
|
|
3085
|
-
*/
|
|
3086
|
-
/*
|
|
3087
|
-
TODO: rethink this
|
|
3088
|
-
*/
|
|
3089
|
-
function flushSync(runBeforeFlush) {
|
|
3090
|
-
runBeforeFlush();
|
|
3091
|
-
let oldDebounceRendering = l$1.debounceRendering; // orig
|
|
3092
|
-
let callbackQ = [];
|
|
3093
|
-
function execCallbackSync(callback) {
|
|
3094
|
-
callbackQ.push(callback);
|
|
3095
|
-
}
|
|
3096
|
-
l$1.debounceRendering = execCallbackSync;
|
|
3097
|
-
B$2(_(FakeComponent, {}), document.createElement('div'));
|
|
3098
|
-
while (callbackQ.length) {
|
|
3099
|
-
callbackQ.shift()();
|
|
3100
|
-
}
|
|
3101
|
-
l$1.debounceRendering = oldDebounceRendering;
|
|
3102
|
-
}
|
|
3103
|
-
class FakeComponent extends b {
|
|
3104
|
-
render() { return _('div', {}); }
|
|
3105
|
-
componentDidMount() { this.setState({}); }
|
|
3106
|
-
}
|
|
3107
|
-
// TODO: use preact/compat instead?
|
|
3108
|
-
function createContext(defaultValue) {
|
|
3109
|
-
let ContextType = G(defaultValue);
|
|
3110
|
-
let origProvider = ContextType.Provider;
|
|
3111
|
-
ContextType.Provider = function () {
|
|
3112
|
-
let isNew = !this.getChildContext;
|
|
3113
|
-
let children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params
|
|
3114
|
-
if (isNew) {
|
|
3115
|
-
let subs = [];
|
|
3116
|
-
this.shouldComponentUpdate = (_props) => {
|
|
3117
|
-
if (this.props.value !== _props.value) {
|
|
3118
|
-
subs.forEach((c) => {
|
|
3119
|
-
c.context = _props.value;
|
|
3120
|
-
c.forceUpdate();
|
|
3121
|
-
});
|
|
3122
|
-
}
|
|
3123
|
-
};
|
|
3124
|
-
this.sub = (c) => {
|
|
3125
|
-
subs.push(c);
|
|
3126
|
-
let old = c.componentWillUnmount;
|
|
3127
|
-
c.componentWillUnmount = () => {
|
|
3128
|
-
subs.splice(subs.indexOf(c), 1);
|
|
3129
|
-
old && old.call(c);
|
|
3130
|
-
};
|
|
3131
|
-
};
|
|
3132
|
-
}
|
|
3133
|
-
return children;
|
|
3134
|
-
};
|
|
3135
|
-
return ContextType;
|
|
3136
|
-
}
|
|
3137
|
-
|
|
3138
|
-
var preact = {
|
|
3139
|
-
__proto__: null,
|
|
3140
|
-
flushSync: flushSync,
|
|
3141
|
-
createContext: createContext,
|
|
3142
|
-
createPortal: j,
|
|
3143
|
-
Component: b,
|
|
3144
|
-
Fragment: k$1,
|
|
3145
|
-
cloneElement: E$1,
|
|
3146
|
-
createElement: _,
|
|
3147
|
-
createRef: m$1,
|
|
3148
|
-
h: _,
|
|
3149
|
-
hydrate: D$1,
|
|
3150
|
-
get isValidElement () { return t; },
|
|
3151
|
-
get options () { return l$1; },
|
|
3152
|
-
render: B$2,
|
|
3153
|
-
toChildArray: H$1
|
|
3154
|
-
};
|
|
3155
|
-
|
|
3156
3260
|
const ViewContextType = createContext({}); // for Components
|
|
3157
3261
|
function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {
|
|
3158
3262
|
return {
|
|
@@ -3183,12 +3287,6 @@ var FullCalendar = (function (exports) {
|
|
|
3183
3287
|
return !compareObjs(this.props, nextProps, this.propEquality) ||
|
|
3184
3288
|
!compareObjs(this.state, nextState, this.stateEquality);
|
|
3185
3289
|
}
|
|
3186
|
-
// HACK for freakin' React StrictMode
|
|
3187
|
-
safeSetState(newState) {
|
|
3188
|
-
if (!compareObjs(this.state, Object.assign(Object.assign({}, this.state), newState), this.stateEquality)) {
|
|
3189
|
-
this.setState(newState);
|
|
3190
|
-
}
|
|
3191
|
-
}
|
|
3192
3290
|
}
|
|
3193
3291
|
PureComponent.addPropsEquality = addPropsEquality;
|
|
3194
3292
|
PureComponent.addStateEquality = addStateEquality;
|
|
@@ -3229,7 +3327,7 @@ var FullCalendar = (function (exports) {
|
|
|
3229
3327
|
class DateComponent extends BaseComponent {
|
|
3230
3328
|
constructor() {
|
|
3231
3329
|
super(...arguments);
|
|
3232
|
-
this.uid = guid();
|
|
3330
|
+
this.uid = guid$1();
|
|
3233
3331
|
}
|
|
3234
3332
|
// Hit System
|
|
3235
3333
|
// -----------------------------------------------------------------------------------------------------------------
|
|
@@ -3243,13 +3341,13 @@ var FullCalendar = (function (exports) {
|
|
|
3243
3341
|
isValidSegDownEl(el) {
|
|
3244
3342
|
return !this.props.eventDrag && // HACK
|
|
3245
3343
|
!this.props.eventResize && // HACK
|
|
3246
|
-
!
|
|
3344
|
+
!el.closest('.fc-event-mirror');
|
|
3247
3345
|
}
|
|
3248
3346
|
isValidDateDownEl(el) {
|
|
3249
|
-
return !
|
|
3250
|
-
!
|
|
3251
|
-
!
|
|
3252
|
-
!
|
|
3347
|
+
return !el.closest('.fc-event:not(.fc-bg-event)') &&
|
|
3348
|
+
!el.closest('.fc-more-link') && // a "more.." link
|
|
3349
|
+
!el.closest('a[data-navlink]') && // a clickable nav link
|
|
3350
|
+
!el.closest('.fc-popover'); // hack
|
|
3253
3351
|
}
|
|
3254
3352
|
}
|
|
3255
3353
|
|
|
@@ -4102,6 +4200,9 @@ var FullCalendar = (function (exports) {
|
|
|
4102
4200
|
return eventApis;
|
|
4103
4201
|
}
|
|
4104
4202
|
|
|
4203
|
+
function getEventKey(seg) {
|
|
4204
|
+
return seg.eventRange.instance.instanceId;
|
|
4205
|
+
}
|
|
4105
4206
|
/*
|
|
4106
4207
|
Specifying nextDayThreshold signals that all-day ranges should be sliced.
|
|
4107
4208
|
*/
|
|
@@ -4240,37 +4341,38 @@ var FullCalendar = (function (exports) {
|
|
|
4240
4341
|
}
|
|
4241
4342
|
return val;
|
|
4242
4343
|
}
|
|
4243
|
-
|
|
4244
|
-
|
|
4245
|
-
|
|
4246
|
-
|
|
4344
|
+
/*
|
|
4345
|
+
slicedStart/slicedEnd are optionally supplied to signal where breaks occur in view-specific segment
|
|
4346
|
+
a better approach is to always slice with dates and always supply this argument,
|
|
4347
|
+
however, daygrid only slices by row/col
|
|
4348
|
+
*/
|
|
4349
|
+
function buildEventRangeTimeText(timeFormat, eventRange, // timed/whole-day span
|
|
4350
|
+
slicedStart, // view-sliced timed/whole-day span
|
|
4351
|
+
slicedEnd, // view-sliced timed/whole-day span
|
|
4352
|
+
isStart, isEnd, context, defaultDisplayEventTime = true, defaultDisplayEventEnd = true) {
|
|
4353
|
+
const { dateEnv, options } = context;
|
|
4354
|
+
const { def, instance } = eventRange;
|
|
4247
4355
|
let { displayEventTime, displayEventEnd } = options;
|
|
4248
|
-
let eventDef = eventRange.def;
|
|
4249
|
-
let eventInstance = eventRange.instance;
|
|
4250
4356
|
if (displayEventTime == null) {
|
|
4251
4357
|
displayEventTime = defaultDisplayEventTime !== false;
|
|
4252
4358
|
}
|
|
4253
4359
|
if (displayEventEnd == null) {
|
|
4254
4360
|
displayEventEnd = defaultDisplayEventEnd !== false;
|
|
4255
4361
|
}
|
|
4256
|
-
|
|
4257
|
-
|
|
4258
|
-
|
|
4259
|
-
|
|
4260
|
-
|
|
4261
|
-
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
|
|
4265
|
-
if (
|
|
4266
|
-
return dateEnv.
|
|
4267
|
-
|
|
4268
|
-
forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo,
|
|
4362
|
+
const startDate = (!isStart && slicedStart) ? slicedStart : eventRange.instance.range.start;
|
|
4363
|
+
const endDate = (!isEnd && slicedEnd) ? slicedEnd : eventRange.instance.range.end;
|
|
4364
|
+
if (displayEventTime && !def.allDay) {
|
|
4365
|
+
if (displayEventEnd && (isStart || isEnd) && def.hasEnd) {
|
|
4366
|
+
return dateEnv.formatRange(startDate, endDate, timeFormat, {
|
|
4367
|
+
forcedStartTzo: isStart ? instance.forcedStartTzo : null,
|
|
4368
|
+
forcedEndTzo: isEnd ? instance.forcedEndTzo : null,
|
|
4369
|
+
});
|
|
4370
|
+
}
|
|
4371
|
+
if (isStart) {
|
|
4372
|
+
return dateEnv.format(startDate, timeFormat, {
|
|
4373
|
+
forcedTzo: instance.forcedStartTzo,
|
|
4269
4374
|
});
|
|
4270
4375
|
}
|
|
4271
|
-
return dateEnv.format(segStart, timeFormat, {
|
|
4272
|
-
forcedTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooo, same
|
|
4273
|
-
});
|
|
4274
4376
|
}
|
|
4275
4377
|
return '';
|
|
4276
4378
|
}
|
|
@@ -4351,7 +4453,6 @@ var FullCalendar = (function (exports) {
|
|
|
4351
4453
|
});
|
|
4352
4454
|
});
|
|
4353
4455
|
}
|
|
4354
|
-
return {};
|
|
4355
4456
|
}
|
|
4356
4457
|
|
|
4357
4458
|
const STANDARD_PROPS = {
|
|
@@ -4819,719 +4920,254 @@ var FullCalendar = (function (exports) {
|
|
|
4819
4920
|
}
|
|
4820
4921
|
}
|
|
4821
4922
|
|
|
4822
|
-
|
|
4823
|
-
|
|
4824
|
-
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
|
|
4828
|
-
|
|
4829
|
-
|
|
4830
|
-
|
|
4831
|
-
|
|
4832
|
-
|
|
4833
|
-
|
|
4834
|
-
};
|
|
4835
|
-
this.updateElRef = (el) => {
|
|
4836
|
-
if (this.props.elRef) {
|
|
4837
|
-
setRef(this.props.elRef, el);
|
|
4838
|
-
}
|
|
4923
|
+
function doCoordRangesIntersect(r0, r1) {
|
|
4924
|
+
return r0.end > r1.start && r0.start < r1.end;
|
|
4925
|
+
}
|
|
4926
|
+
function intersectCoordRanges(r0, r1) {
|
|
4927
|
+
const start = Math.max(r0.start, r1.start);
|
|
4928
|
+
const end = Math.min(r0.end, r1.end);
|
|
4929
|
+
if (start < end) {
|
|
4930
|
+
return {
|
|
4931
|
+
start,
|
|
4932
|
+
end,
|
|
4933
|
+
isStart: r0.isStart && start === r0.start,
|
|
4934
|
+
isEnd: r0.isEnd && end === r0.end,
|
|
4839
4935
|
};
|
|
4840
4936
|
}
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
|
|
4937
|
+
}
|
|
4938
|
+
function joinCoordRanges(r0, r1) {
|
|
4939
|
+
return {
|
|
4940
|
+
start: Math.min(r0.start, r1.start),
|
|
4941
|
+
end: Math.max(r0.end, r1.end),
|
|
4942
|
+
};
|
|
4943
|
+
}
|
|
4944
|
+
function getCoordRangeEnd(r) {
|
|
4945
|
+
return r.end;
|
|
4946
|
+
}
|
|
4947
|
+
// { eventRange }
|
|
4948
|
+
// -------------------------------------------------------------------------------------------------
|
|
4949
|
+
function computeEarliestStart(segs) {
|
|
4950
|
+
return segs.reduce(pickEarliestStart).eventRange.range.start;
|
|
4951
|
+
}
|
|
4952
|
+
function computeLatestEnd(segs) {
|
|
4953
|
+
return segs.reduce(pickLatestEnd).eventRange.range.end;
|
|
4954
|
+
}
|
|
4955
|
+
function pickEarliestStart(r0, r1) {
|
|
4956
|
+
return r0.eventRange.range.start < r1.eventRange.range.start ? r0 : r1;
|
|
4957
|
+
}
|
|
4958
|
+
function pickLatestEnd(r0, r1) {
|
|
4959
|
+
return r0.eventRange.range.end > r1.eventRange.range.end ? r0 : r1;
|
|
4960
|
+
}
|
|
4961
|
+
|
|
4962
|
+
class SegHierarchy {
|
|
4963
|
+
constructor(segs, getSegThickness = (seg) => {
|
|
4964
|
+
return 1;
|
|
4965
|
+
}, strictOrder = false, // HACK
|
|
4966
|
+
maxCoord, maxDepth, hiddenConsumes = false, // hidden segs also hide the touchingPlacement?
|
|
4967
|
+
allowSlicing = false) {
|
|
4968
|
+
this.getSegThickness = getSegThickness;
|
|
4969
|
+
this.strictOrder = strictOrder;
|
|
4970
|
+
this.maxCoord = maxCoord;
|
|
4971
|
+
this.maxDepth = maxDepth;
|
|
4972
|
+
this.hiddenConsumes = hiddenConsumes;
|
|
4973
|
+
this.allowSlicing = allowSlicing;
|
|
4974
|
+
this.placementsByLevel = [];
|
|
4975
|
+
this.levelCoords = []; // parallel with placementsByLevel
|
|
4976
|
+
this.hiddenSegs = [];
|
|
4977
|
+
for (const seg of segs) {
|
|
4978
|
+
this.insertSeg(seg, this.getSegThickness(seg));
|
|
4979
|
+
}
|
|
4980
|
+
}
|
|
4981
|
+
insertSeg(seg, segThickness, isSlice) {
|
|
4982
|
+
if (segThickness != null) {
|
|
4983
|
+
const insertion = this.findInsertion(seg, segThickness);
|
|
4984
|
+
if (this.isInsertionValid(insertion, segThickness)) {
|
|
4985
|
+
this.insertSegAt(seg, insertion, segThickness, isSlice);
|
|
4856
4986
|
}
|
|
4857
4987
|
else {
|
|
4858
|
-
const
|
|
4859
|
-
|
|
4860
|
-
|
|
4861
|
-
|
|
4862
|
-
|
|
4863
|
-
|
|
4864
|
-
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4988
|
+
const { touchingPlacement } = insertion;
|
|
4989
|
+
// is there a touching-seg?
|
|
4990
|
+
if (touchingPlacement) {
|
|
4991
|
+
// should we hide or reslice touchingPlacement?
|
|
4992
|
+
if (this.hiddenConsumes && !touchingPlacement.isZombie) {
|
|
4993
|
+
touchingPlacement.isZombie = true; // edit in-place
|
|
4994
|
+
this.hiddenSegs.push(touchingPlacement);
|
|
4995
|
+
if (this.allowSlicing) {
|
|
4996
|
+
const newSeg = Object.assign({}, touchingPlacement); // copy
|
|
4997
|
+
// slice touchingPlacement in-place
|
|
4998
|
+
Object.assign(touchingPlacement, intersectCoordRanges(touchingPlacement, seg));
|
|
4999
|
+
touchingPlacement.isSlice = true;
|
|
5000
|
+
// try to reinsert touchingPlacement's seg
|
|
5001
|
+
this.splitSeg(newSeg, touchingPlacement.thickness, touchingPlacement);
|
|
5002
|
+
}
|
|
5003
|
+
}
|
|
5004
|
+
// record seg as hidden, potentially split by touchingPlacement
|
|
5005
|
+
if (this.allowSlicing) {
|
|
5006
|
+
this.hiddenSegs.push(Object.assign(Object.assign({}, seg), intersectCoordRanges(seg, touchingPlacement)));
|
|
5007
|
+
this.splitSeg(seg, segThickness, touchingPlacement);
|
|
5008
|
+
}
|
|
5009
|
+
else {
|
|
5010
|
+
this.hiddenSegs.push(seg);
|
|
5011
|
+
}
|
|
5012
|
+
// not touching anything
|
|
4871
5013
|
}
|
|
4872
5014
|
else {
|
|
4873
|
-
|
|
4874
|
-
currentGeneratorMeta = customGeneratorRes;
|
|
5015
|
+
this.hiddenSegs.push(seg);
|
|
4875
5016
|
}
|
|
4876
5017
|
}
|
|
4877
5018
|
}
|
|
4878
|
-
else {
|
|
4879
|
-
useDefault = !hasCustomRenderingHandler(props.generatorName, options);
|
|
4880
|
-
}
|
|
4881
|
-
if (useDefault && defaultGenerator) {
|
|
4882
|
-
innerContent = defaultGenerator(renderProps);
|
|
4883
|
-
}
|
|
4884
|
-
this.queuedDomNodes = queuedDomNodes;
|
|
4885
|
-
this.currentGeneratorMeta = currentGeneratorMeta;
|
|
4886
|
-
return _(props.elTag, attrs, innerContent);
|
|
4887
5019
|
}
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
5020
|
+
/*
|
|
5021
|
+
TODO: inline?
|
|
5022
|
+
*/
|
|
5023
|
+
isInsertionValid(insertion, thickness) {
|
|
5024
|
+
return (this.maxCoord == null || insertion.levelCoord + thickness <= this.maxCoord) &&
|
|
5025
|
+
(this.maxDepth == null || insertion.depth < this.maxDepth);
|
|
4891
5026
|
}
|
|
4892
|
-
|
|
4893
|
-
|
|
4894
|
-
|
|
5027
|
+
/*
|
|
5028
|
+
Does not add the portion that intersects with barrier to hiddenSegs
|
|
5029
|
+
*/
|
|
5030
|
+
splitSeg(seg, segThickness, barrier) {
|
|
5031
|
+
// any leftover seg on the start-side of the barrier?
|
|
5032
|
+
if (seg.start < barrier.start) {
|
|
5033
|
+
this.insertSeg(Object.assign(Object.assign({}, seg), { end: barrier.start, isEnd: false }), segThickness,
|
|
5034
|
+
/* isSlice = */ true);
|
|
5035
|
+
}
|
|
5036
|
+
// any leftover seg on the end-side of the barrier?
|
|
5037
|
+
if (seg.end > barrier.end) {
|
|
5038
|
+
this.insertSeg(Object.assign(Object.assign({}, seg), { start: barrier.end, isStart: false }), segThickness,
|
|
5039
|
+
/* isSlice = */ true);
|
|
5040
|
+
}
|
|
4895
5041
|
}
|
|
4896
|
-
|
|
4897
|
-
|
|
5042
|
+
/*
|
|
5043
|
+
TODO: inline?
|
|
5044
|
+
*/
|
|
5045
|
+
insertSegAt(seg, insertion, segThickness, isSlice) {
|
|
5046
|
+
const placement = Object.assign(Object.assign({}, seg), { thickness: segThickness, depth: insertion.depth, isSlice: isSlice || seg.isSlice || false, isZombie: false });
|
|
5047
|
+
if (insertion.lateralIndex === -1) {
|
|
5048
|
+
// create a new level
|
|
5049
|
+
insertAt(this.placementsByLevel, insertion.levelIndex, [placement]);
|
|
5050
|
+
insertAt(this.levelCoords, insertion.levelIndex, insertion.levelCoord);
|
|
5051
|
+
}
|
|
5052
|
+
else {
|
|
5053
|
+
// insert into existing level
|
|
5054
|
+
insertAt(this.placementsByLevel[insertion.levelIndex], insertion.lateralIndex, placement);
|
|
5055
|
+
}
|
|
4898
5056
|
}
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
|
|
4903
|
-
|
|
4904
|
-
|
|
4905
|
-
|
|
4906
|
-
|
|
4907
|
-
|
|
5057
|
+
/*
|
|
5058
|
+
Ignores limits
|
|
5059
|
+
*/
|
|
5060
|
+
findInsertion(seg, segThickness) {
|
|
5061
|
+
let { placementsByLevel, levelCoords } = this;
|
|
5062
|
+
let levelCnt = placementsByLevel.length;
|
|
5063
|
+
let candidateCoord = 0; // a tentative levelCoord for seg's placement
|
|
5064
|
+
let touchingPlacement;
|
|
5065
|
+
let touchingLevelIndex;
|
|
5066
|
+
let depth = 0;
|
|
5067
|
+
// iterate through existing levels
|
|
5068
|
+
for (let currentLevelIndex = 0; currentLevelIndex < levelCnt; currentLevelIndex += 1) {
|
|
5069
|
+
const currentLevelCoord = levelCoords[currentLevelIndex];
|
|
5070
|
+
// if the current level has cleared seg's bottom coord, we have found a good empty space and can stop.
|
|
5071
|
+
// if strictOrder, keep finding more lateral intersections.
|
|
5072
|
+
if (!this.strictOrder && currentLevelCoord >= candidateCoord + segThickness) {
|
|
5073
|
+
break;
|
|
5074
|
+
}
|
|
5075
|
+
let currentLevelSegs = placementsByLevel[currentLevelIndex];
|
|
5076
|
+
let currentSeg;
|
|
5077
|
+
// finds the first possible entry that seg could intersect with
|
|
5078
|
+
let [searchIndex, isExact] = binarySearch(currentLevelSegs, seg.start, getCoordRangeEnd); // find first entry after seg's end
|
|
5079
|
+
let lateralIndex = searchIndex + isExact; // if exact match (which doesn't collide), go to next one
|
|
5080
|
+
// loop through entries that horizontally intersect
|
|
5081
|
+
while ((currentSeg = currentLevelSegs[lateralIndex]) && // but not past the whole entry list
|
|
5082
|
+
currentSeg.start < seg.end // and not entirely past seg
|
|
5083
|
+
) {
|
|
5084
|
+
let currentEntryBottom = currentLevelCoord + currentSeg.thickness;
|
|
5085
|
+
// intersects into the top of the candidate?
|
|
5086
|
+
if (currentEntryBottom > candidateCoord) {
|
|
5087
|
+
// push it downward so doesn't 'vertically' intersect anymore
|
|
5088
|
+
candidateCoord = currentEntryBottom;
|
|
5089
|
+
// tentatively record as touching
|
|
5090
|
+
touchingPlacement = currentSeg;
|
|
5091
|
+
touchingLevelIndex = currentLevelIndex;
|
|
5092
|
+
}
|
|
5093
|
+
// does current entry butt up against top of candidate?
|
|
5094
|
+
// will obviously happen if just intersected, but can also happen if pushed down previously
|
|
5095
|
+
// because intersected with a sibling
|
|
5096
|
+
// TODO: after automated tests hooked up, see if these gate is unnecessary,
|
|
5097
|
+
// we might just be able to do this for ALL intersecting currentEntries (this whole loop)
|
|
5098
|
+
if (currentEntryBottom === candidateCoord) {
|
|
5099
|
+
// accumulate the highest possible depth of the currentLevelSegs that butt up
|
|
5100
|
+
depth = Math.max(depth, currentSeg.depth + 1);
|
|
5101
|
+
}
|
|
5102
|
+
lateralIndex += 1;
|
|
5103
|
+
}
|
|
5104
|
+
}
|
|
5105
|
+
// the destination level will be after touchingPlacement's level. find it
|
|
5106
|
+
// TODO: can reuse work from above?
|
|
5107
|
+
let destLevelIndex = 0;
|
|
5108
|
+
if (touchingPlacement) {
|
|
5109
|
+
destLevelIndex = touchingLevelIndex + 1;
|
|
5110
|
+
while (destLevelIndex < levelCnt && levelCoords[destLevelIndex] < candidateCoord) {
|
|
5111
|
+
destLevelIndex += 1;
|
|
4908
5112
|
}
|
|
4909
5113
|
}
|
|
5114
|
+
// if adding to an existing level, find where to insert
|
|
5115
|
+
// TODO: can reuse work from above?
|
|
5116
|
+
let destLateralIndex = -1;
|
|
5117
|
+
if (destLevelIndex < levelCnt && levelCoords[destLevelIndex] === candidateCoord) {
|
|
5118
|
+
[destLateralIndex] = binarySearch(placementsByLevel[destLevelIndex], seg.end, getCoordRangeEnd);
|
|
5119
|
+
}
|
|
5120
|
+
return {
|
|
5121
|
+
touchingPlacement,
|
|
5122
|
+
levelCoord: candidateCoord,
|
|
5123
|
+
levelIndex: destLevelIndex,
|
|
5124
|
+
lateralIndex: destLateralIndex,
|
|
5125
|
+
depth,
|
|
5126
|
+
};
|
|
4910
5127
|
}
|
|
4911
|
-
|
|
4912
|
-
const {
|
|
4913
|
-
|
|
4914
|
-
|
|
4915
|
-
|
|
4916
|
-
for (
|
|
4917
|
-
|
|
5128
|
+
traverseSegs(handler) {
|
|
5129
|
+
const { placementsByLevel, levelCoords } = this;
|
|
5130
|
+
for (let i = 0; i < placementsByLevel.length; i++) {
|
|
5131
|
+
const placements = placementsByLevel[i];
|
|
5132
|
+
const levelCoord = levelCoords[i];
|
|
5133
|
+
for (const placement of placements) {
|
|
5134
|
+
if (!placement.isZombie) {
|
|
5135
|
+
handler(placement, levelCoord);
|
|
5136
|
+
}
|
|
4918
5137
|
}
|
|
4919
|
-
this.currentDomNodes = queuedDomNodes;
|
|
4920
5138
|
}
|
|
4921
5139
|
}
|
|
4922
5140
|
}
|
|
4923
|
-
ContentInjector.addPropsEquality({
|
|
4924
|
-
elClasses: isArraysEqual,
|
|
4925
|
-
elStyle: isPropsEqual,
|
|
4926
|
-
elAttrs: isNonHandlerPropsEqual,
|
|
4927
|
-
renderProps: isPropsEqual,
|
|
4928
|
-
});
|
|
4929
|
-
// Util
|
|
4930
5141
|
/*
|
|
4931
|
-
|
|
4932
|
-
AND does the calendar's options define custom rendering?
|
|
4933
|
-
AKA. Should we NOT render the default content?
|
|
5142
|
+
Returns groups with entries sorted by input order
|
|
4934
5143
|
*/
|
|
4935
|
-
function
|
|
4936
|
-
|
|
4937
|
-
|
|
4938
|
-
|
|
4939
|
-
|
|
4940
|
-
|
|
4941
|
-
|
|
4942
|
-
|
|
4943
|
-
if (props.elClasses || extraClassNames) {
|
|
4944
|
-
attrs.className = (props.elClasses || [])
|
|
4945
|
-
.concat(extraClassNames || [])
|
|
4946
|
-
.concat(attrs.className || [])
|
|
4947
|
-
.filter(Boolean)
|
|
4948
|
-
.join(' ');
|
|
4949
|
-
}
|
|
4950
|
-
if (props.elStyle) {
|
|
4951
|
-
attrs.style = props.elStyle;
|
|
4952
|
-
}
|
|
4953
|
-
return attrs;
|
|
4954
|
-
}
|
|
4955
|
-
function isTruthy(val) {
|
|
4956
|
-
return Boolean(val);
|
|
4957
|
-
}
|
|
4958
|
-
|
|
4959
|
-
const RenderId = createContext(0);
|
|
4960
|
-
|
|
4961
|
-
class ContentContainer extends b {
|
|
4962
|
-
constructor() {
|
|
4963
|
-
super(...arguments);
|
|
4964
|
-
this.InnerContent = InnerContentInjector.bind(undefined, this);
|
|
4965
|
-
this.handleEl = (el) => {
|
|
4966
|
-
this.el = el;
|
|
4967
|
-
if (this.props.elRef) {
|
|
4968
|
-
setRef(this.props.elRef, el);
|
|
4969
|
-
if (el && this.didMountMisfire) {
|
|
4970
|
-
this.componentDidMount();
|
|
4971
|
-
}
|
|
4972
|
-
}
|
|
5144
|
+
function groupIntersectingSegs(segs) {
|
|
5145
|
+
let mergedGroups = [];
|
|
5146
|
+
for (let seg of segs) {
|
|
5147
|
+
let filteredGroups = [];
|
|
5148
|
+
let hungryGroup = {
|
|
5149
|
+
segs: [seg],
|
|
5150
|
+
start: seg.start,
|
|
5151
|
+
end: seg.end,
|
|
4973
5152
|
};
|
|
4974
|
-
|
|
4975
|
-
|
|
4976
|
-
|
|
4977
|
-
|
|
4978
|
-
if (props.children) {
|
|
4979
|
-
const elAttrs = buildElAttrs(props, generatedClassNames, this.handleEl);
|
|
4980
|
-
const children = props.children(this.InnerContent, props.renderProps, elAttrs);
|
|
4981
|
-
if (props.elTag) {
|
|
4982
|
-
return _(props.elTag, elAttrs, children);
|
|
5153
|
+
for (let mergedGroup of mergedGroups) {
|
|
5154
|
+
if (doCoordRangesIntersect(mergedGroup, hungryGroup)) {
|
|
5155
|
+
hungryGroup = Object.assign(Object.assign({}, joinCoordRanges(mergedGroup, hungryGroup)), { segs: mergedGroup.segs.concat(hungryGroup.segs) // keep preexisting mergedGroup's items first. maintains order
|
|
5156
|
+
});
|
|
4983
5157
|
}
|
|
4984
5158
|
else {
|
|
4985
|
-
|
|
5159
|
+
filteredGroups.push(mergedGroup);
|
|
4986
5160
|
}
|
|
4987
5161
|
}
|
|
4988
|
-
|
|
4989
|
-
|
|
4990
|
-
}
|
|
5162
|
+
filteredGroups.push(hungryGroup);
|
|
5163
|
+
mergedGroups = filteredGroups;
|
|
4991
5164
|
}
|
|
4992
|
-
|
|
4993
|
-
|
|
4994
|
-
if (this.el) {
|
|
4995
|
-
(_b = (_a = this.props).didMount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));
|
|
4996
|
-
}
|
|
4997
|
-
else {
|
|
4998
|
-
this.didMountMisfire = true;
|
|
4999
|
-
}
|
|
5000
|
-
}
|
|
5001
|
-
componentWillUnmount() {
|
|
5002
|
-
var _a, _b;
|
|
5003
|
-
(_b = (_a = this.props).willUnmount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));
|
|
5004
|
-
}
|
|
5005
|
-
}
|
|
5006
|
-
ContentContainer.contextType = RenderId;
|
|
5007
|
-
function InnerContentInjector(containerComponent, props) {
|
|
5008
|
-
const parentProps = containerComponent.props;
|
|
5009
|
-
return _((ContentInjector), Object.assign({ renderProps: parentProps.renderProps, generatorName: parentProps.generatorName, customGenerator: parentProps.customGenerator, defaultGenerator: parentProps.defaultGenerator, renderId: containerComponent.context }, props));
|
|
5010
|
-
}
|
|
5011
|
-
// Utils
|
|
5012
|
-
function generateClassNames(classNameGenerator, renderProps) {
|
|
5013
|
-
const classNames = typeof classNameGenerator === 'function' ?
|
|
5014
|
-
classNameGenerator(renderProps) :
|
|
5015
|
-
classNameGenerator || [];
|
|
5016
|
-
return typeof classNames === 'string' ? [classNames] : classNames;
|
|
5017
|
-
}
|
|
5018
|
-
|
|
5019
|
-
const DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });
|
|
5020
|
-
class DayCellContainer extends BaseComponent {
|
|
5021
|
-
constructor() {
|
|
5022
|
-
super(...arguments);
|
|
5023
|
-
this.refineRenderProps = memoizeObjArg(refineRenderProps);
|
|
5024
|
-
}
|
|
5025
|
-
render() {
|
|
5026
|
-
let { props, context } = this;
|
|
5027
|
-
let { options } = context;
|
|
5028
|
-
let renderProps = this.refineRenderProps({
|
|
5029
|
-
date: props.date,
|
|
5030
|
-
dateProfile: props.dateProfile,
|
|
5031
|
-
todayRange: props.todayRange,
|
|
5032
|
-
isMonthStart: props.isMonthStart || false,
|
|
5033
|
-
showDayNumber: props.showDayNumber,
|
|
5034
|
-
extraRenderProps: props.extraRenderProps,
|
|
5035
|
-
viewApi: context.viewApi,
|
|
5036
|
-
dateEnv: context.dateEnv,
|
|
5037
|
-
monthStartFormat: options.monthStartFormat,
|
|
5038
|
-
});
|
|
5039
|
-
return (_(ContentContainer, Object.assign({}, props /* includes children */, { elClasses: [
|
|
5040
|
-
...getDayClassNames(renderProps, context.theme),
|
|
5041
|
-
...(props.elClasses || []),
|
|
5042
|
-
], elAttrs: Object.assign(Object.assign({}, props.elAttrs), (renderProps.isDisabled ? {} : { 'data-date': formatDayString(props.date) })), renderProps: renderProps, generatorName: "dayCellContent", customGenerator: options.dayCellContent, defaultGenerator: props.defaultGenerator, classNameGenerator:
|
|
5043
|
-
// don't use custom classNames if disabled
|
|
5044
|
-
renderProps.isDisabled ? undefined : options.dayCellClassNames, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount })));
|
|
5045
|
-
}
|
|
5046
|
-
}
|
|
5047
|
-
function hasCustomDayCellContent(options) {
|
|
5048
|
-
return Boolean(options.dayCellContent || hasCustomRenderingHandler('dayCellContent', options));
|
|
5049
|
-
}
|
|
5050
|
-
function refineRenderProps(raw) {
|
|
5051
|
-
let { date, dateEnv, dateProfile, isMonthStart } = raw;
|
|
5052
|
-
let dayMeta = getDateMeta(date, raw.todayRange, null, dateProfile);
|
|
5053
|
-
let dayNumberText = raw.showDayNumber ? (dateEnv.format(date, isMonthStart ? raw.monthStartFormat : DAY_NUM_FORMAT)) : '';
|
|
5054
|
-
return Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: raw.viewApi }, dayMeta), { isMonthStart,
|
|
5055
|
-
dayNumberText }), raw.extraRenderProps);
|
|
5056
|
-
}
|
|
5057
|
-
|
|
5058
|
-
const PADDING_FROM_VIEWPORT = 10;
|
|
5059
|
-
class Popover extends BaseComponent {
|
|
5060
|
-
constructor() {
|
|
5061
|
-
super(...arguments);
|
|
5062
|
-
this.state = {
|
|
5063
|
-
titleId: getUniqueDomId(),
|
|
5064
|
-
};
|
|
5065
|
-
this.handleRootEl = (el) => {
|
|
5066
|
-
this.rootEl = el;
|
|
5067
|
-
if (this.props.elRef) {
|
|
5068
|
-
setRef(this.props.elRef, el);
|
|
5069
|
-
}
|
|
5070
|
-
};
|
|
5071
|
-
// Triggered when the user clicks *anywhere* in the document, for the autoHide feature
|
|
5072
|
-
this.handleDocumentMouseDown = (ev) => {
|
|
5073
|
-
// only hide the popover if the click happened outside the popover
|
|
5074
|
-
const target = getEventTargetViaRoot(ev);
|
|
5075
|
-
if (!this.rootEl.contains(target)) {
|
|
5076
|
-
this.handleCloseClick();
|
|
5077
|
-
}
|
|
5078
|
-
};
|
|
5079
|
-
this.handleDocumentKeyDown = (ev) => {
|
|
5080
|
-
if (ev.key === 'Escape') {
|
|
5081
|
-
this.handleCloseClick();
|
|
5082
|
-
}
|
|
5083
|
-
};
|
|
5084
|
-
this.handleCloseClick = () => {
|
|
5085
|
-
let { onClose } = this.props;
|
|
5086
|
-
if (onClose) {
|
|
5087
|
-
onClose();
|
|
5088
|
-
}
|
|
5089
|
-
};
|
|
5090
|
-
}
|
|
5091
|
-
render() {
|
|
5092
|
-
let { theme, options } = this.context;
|
|
5093
|
-
let { props, state } = this;
|
|
5094
|
-
let classNames = [
|
|
5095
|
-
'fc-popover',
|
|
5096
|
-
theme.getClass('popover'),
|
|
5097
|
-
].concat(props.extraClassNames || []);
|
|
5098
|
-
return j(_("div", Object.assign({}, props.extraAttrs, { id: props.id, className: classNames.join(' '), "aria-labelledby": state.titleId, ref: this.handleRootEl }),
|
|
5099
|
-
_("div", { className: 'fc-popover-header ' + theme.getClass('popoverHeader') },
|
|
5100
|
-
_("span", { className: "fc-popover-title", id: state.titleId }, props.title),
|
|
5101
|
-
_("span", { className: 'fc-popover-close ' + theme.getIconClass('close'), title: options.closeHint, onClick: this.handleCloseClick })),
|
|
5102
|
-
_("div", { className: 'fc-popover-body ' + theme.getClass('popoverContent') }, props.children)), props.parentEl);
|
|
5103
|
-
}
|
|
5104
|
-
componentDidMount() {
|
|
5105
|
-
document.addEventListener('mousedown', this.handleDocumentMouseDown);
|
|
5106
|
-
document.addEventListener('keydown', this.handleDocumentKeyDown);
|
|
5107
|
-
this.updateSize();
|
|
5108
|
-
}
|
|
5109
|
-
componentWillUnmount() {
|
|
5110
|
-
document.removeEventListener('mousedown', this.handleDocumentMouseDown);
|
|
5111
|
-
document.removeEventListener('keydown', this.handleDocumentKeyDown);
|
|
5112
|
-
}
|
|
5113
|
-
updateSize() {
|
|
5114
|
-
let { isRtl } = this.context;
|
|
5115
|
-
let { alignmentEl, alignGridTop } = this.props;
|
|
5116
|
-
let { rootEl } = this;
|
|
5117
|
-
let alignmentRect = computeClippedClientRect(alignmentEl);
|
|
5118
|
-
if (alignmentRect) {
|
|
5119
|
-
let popoverDims = rootEl.getBoundingClientRect();
|
|
5120
|
-
if (alignGridTop) {
|
|
5121
|
-
throw new Error('alignGridTop not supported yet');
|
|
5122
|
-
}
|
|
5123
|
-
// position relative to viewport
|
|
5124
|
-
let popoverTop = alignGridTop
|
|
5125
|
-
? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top // BAD!!!
|
|
5126
|
-
: alignmentRect.top;
|
|
5127
|
-
let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
|
|
5128
|
-
// constrain
|
|
5129
|
-
popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);
|
|
5130
|
-
popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);
|
|
5131
|
-
popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);
|
|
5132
|
-
let origin = rootEl.offsetParent.getBoundingClientRect();
|
|
5133
|
-
applyStyle(rootEl, {
|
|
5134
|
-
top: popoverTop - origin.top,
|
|
5135
|
-
left: popoverLeft - origin.left,
|
|
5136
|
-
});
|
|
5137
|
-
}
|
|
5138
|
-
}
|
|
5139
|
-
}
|
|
5140
|
-
|
|
5141
|
-
class MorePopover extends DateComponent {
|
|
5142
|
-
constructor() {
|
|
5143
|
-
super(...arguments);
|
|
5144
|
-
this.handleRootEl = (rootEl) => {
|
|
5145
|
-
this.rootEl = rootEl;
|
|
5146
|
-
if (rootEl) {
|
|
5147
|
-
this.context.registerInteractiveComponent(this, {
|
|
5148
|
-
el: rootEl,
|
|
5149
|
-
useEventCenter: false,
|
|
5150
|
-
});
|
|
5151
|
-
}
|
|
5152
|
-
else {
|
|
5153
|
-
this.context.unregisterInteractiveComponent(this);
|
|
5154
|
-
}
|
|
5155
|
-
};
|
|
5156
|
-
}
|
|
5157
|
-
render() {
|
|
5158
|
-
let { options, dateEnv } = this.context;
|
|
5159
|
-
let { props } = this;
|
|
5160
|
-
let { startDate, todayRange, dateProfile } = props;
|
|
5161
|
-
let title = dateEnv.format(startDate, options.dayPopoverFormat);
|
|
5162
|
-
return (_(DayCellContainer, { elRef: this.handleRootEl, date: startDate, dateProfile: dateProfile, todayRange: todayRange }, (InnerContent, renderProps, elAttrs) => (_(Popover, { elRef: elAttrs.ref, id: props.id, title: title, extraClassNames: ['fc-more-popover'].concat(elAttrs.className || []), extraAttrs: elAttrs /* TODO: make these time-based when not whole-day? */, parentEl: props.parentEl, alignmentEl: props.alignmentEl, alignGridTop: props.alignGridTop, onClose: props.onClose },
|
|
5163
|
-
hasCustomDayCellContent(options) && (_(InnerContent, { elTag: "div", elClasses: ['fc-more-popover-misc'] })),
|
|
5164
|
-
props.children))));
|
|
5165
|
-
}
|
|
5166
|
-
queryHit(positionLeft, positionTop, elWidth, elHeight) {
|
|
5167
|
-
let { rootEl, props } = this;
|
|
5168
|
-
if (positionLeft >= 0 && positionLeft < elWidth &&
|
|
5169
|
-
positionTop >= 0 && positionTop < elHeight) {
|
|
5170
|
-
return {
|
|
5171
|
-
dateProfile: props.dateProfile,
|
|
5172
|
-
dateSpan: Object.assign({ allDay: !props.forceTimed, range: {
|
|
5173
|
-
start: props.startDate,
|
|
5174
|
-
end: props.endDate,
|
|
5175
|
-
} }, props.extraDateSpan),
|
|
5176
|
-
dayEl: rootEl,
|
|
5177
|
-
rect: {
|
|
5178
|
-
left: 0,
|
|
5179
|
-
top: 0,
|
|
5180
|
-
right: elWidth,
|
|
5181
|
-
bottom: elHeight,
|
|
5182
|
-
},
|
|
5183
|
-
layer: 1, // important when comparing with hits from other components
|
|
5184
|
-
};
|
|
5185
|
-
}
|
|
5186
|
-
return null;
|
|
5187
|
-
}
|
|
5188
|
-
}
|
|
5189
|
-
|
|
5190
|
-
class MoreLinkContainer extends BaseComponent {
|
|
5191
|
-
constructor() {
|
|
5192
|
-
super(...arguments);
|
|
5193
|
-
this.state = {
|
|
5194
|
-
isPopoverOpen: false,
|
|
5195
|
-
popoverId: getUniqueDomId(),
|
|
5196
|
-
};
|
|
5197
|
-
this.handleLinkEl = (linkEl) => {
|
|
5198
|
-
this.linkEl = linkEl;
|
|
5199
|
-
if (this.props.elRef) {
|
|
5200
|
-
setRef(this.props.elRef, linkEl);
|
|
5201
|
-
}
|
|
5202
|
-
};
|
|
5203
|
-
this.handleClick = (ev) => {
|
|
5204
|
-
let { props, context } = this;
|
|
5205
|
-
let { moreLinkClick } = context.options;
|
|
5206
|
-
let date = computeRange(props).start;
|
|
5207
|
-
function buildPublicSeg(seg) {
|
|
5208
|
-
let { def, instance, range } = seg.eventRange;
|
|
5209
|
-
return {
|
|
5210
|
-
event: new EventImpl(context, def, instance),
|
|
5211
|
-
start: context.dateEnv.toDate(range.start),
|
|
5212
|
-
end: context.dateEnv.toDate(range.end),
|
|
5213
|
-
isStart: seg.isStart,
|
|
5214
|
-
isEnd: seg.isEnd,
|
|
5215
|
-
};
|
|
5216
|
-
}
|
|
5217
|
-
if (typeof moreLinkClick === 'function') {
|
|
5218
|
-
moreLinkClick = moreLinkClick({
|
|
5219
|
-
date,
|
|
5220
|
-
allDay: Boolean(props.allDayDate),
|
|
5221
|
-
allSegs: props.segs.map(buildPublicSeg),
|
|
5222
|
-
hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
|
|
5223
|
-
jsEvent: ev,
|
|
5224
|
-
view: context.viewApi,
|
|
5225
|
-
});
|
|
5226
|
-
}
|
|
5227
|
-
if (!moreLinkClick || moreLinkClick === 'popover') {
|
|
5228
|
-
this.setState({ isPopoverOpen: true });
|
|
5229
|
-
}
|
|
5230
|
-
else if (typeof moreLinkClick === 'string') { // a view name
|
|
5231
|
-
context.calendarApi.zoomTo(date, moreLinkClick);
|
|
5232
|
-
}
|
|
5233
|
-
};
|
|
5234
|
-
this.handlePopoverClose = () => {
|
|
5235
|
-
this.setState({ isPopoverOpen: false });
|
|
5236
|
-
};
|
|
5237
|
-
}
|
|
5238
|
-
render() {
|
|
5239
|
-
let { props, state } = this;
|
|
5240
|
-
return (_(ViewContextType.Consumer, null, (context) => {
|
|
5241
|
-
let { viewApi, options, calendarApi } = context;
|
|
5242
|
-
let { moreLinkText } = options;
|
|
5243
|
-
let moreCnt = props.hiddenSegs.length;
|
|
5244
|
-
let range = computeRange(props);
|
|
5245
|
-
let text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals
|
|
5246
|
-
? moreLinkText.call(calendarApi, moreCnt)
|
|
5247
|
-
: `+${moreCnt} ${moreLinkText}`;
|
|
5248
|
-
let hint = formatWithOrdinals(options.moreLinkHint, [moreCnt], text);
|
|
5249
|
-
let renderProps = {
|
|
5250
|
-
num: moreCnt,
|
|
5251
|
-
shortText: `+${moreCnt}`,
|
|
5252
|
-
text,
|
|
5253
|
-
view: viewApi,
|
|
5254
|
-
};
|
|
5255
|
-
return (_(k$1, null,
|
|
5256
|
-
Boolean(moreCnt) && (_(ContentContainer, { elTag: props.elTag || 'a', elRef: this.handleLinkEl, elClasses: [
|
|
5257
|
-
...(props.elClasses || []),
|
|
5258
|
-
'fc-more-link',
|
|
5259
|
-
], elStyle: props.elStyle, elAttrs: Object.assign(Object.assign(Object.assign({}, props.elAttrs), createAriaClickAttrs(this.handleClick)), { title: hint, 'aria-expanded': state.isPopoverOpen, 'aria-controls': state.isPopoverOpen ? state.popoverId : '' }), renderProps: renderProps, generatorName: "moreLinkContent", customGenerator: options.moreLinkContent, defaultGenerator: props.defaultGenerator || renderMoreLinkInner, classNameGenerator: options.moreLinkClassNames, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, props.children)),
|
|
5260
|
-
state.isPopoverOpen && (_(MorePopover, { id: state.popoverId, startDate: range.start, endDate: range.end, dateProfile: props.dateProfile, todayRange: props.todayRange, extraDateSpan: props.extraDateSpan, parentEl: this.parentEl, alignmentEl: props.alignmentElRef ?
|
|
5261
|
-
props.alignmentElRef.current :
|
|
5262
|
-
this.linkEl, alignGridTop: props.alignGridTop, forceTimed: props.forceTimed, onClose: this.handlePopoverClose }, props.popoverContent()))));
|
|
5263
|
-
}));
|
|
5264
|
-
}
|
|
5265
|
-
componentDidMount() {
|
|
5266
|
-
this.updateParentEl();
|
|
5267
|
-
}
|
|
5268
|
-
componentDidUpdate() {
|
|
5269
|
-
this.updateParentEl();
|
|
5270
|
-
}
|
|
5271
|
-
updateParentEl() {
|
|
5272
|
-
if (this.linkEl) {
|
|
5273
|
-
this.parentEl = elementClosest(this.linkEl, '.fc-view-harness'); // HACK. reconsider
|
|
5274
|
-
}
|
|
5275
|
-
}
|
|
5276
|
-
}
|
|
5277
|
-
function renderMoreLinkInner(props) {
|
|
5278
|
-
return props.text;
|
|
5279
|
-
}
|
|
5280
|
-
function computeRange(props) {
|
|
5281
|
-
if (props.allDayDate) {
|
|
5282
|
-
return {
|
|
5283
|
-
start: props.allDayDate,
|
|
5284
|
-
end: addDays(props.allDayDate, 1),
|
|
5285
|
-
};
|
|
5286
|
-
}
|
|
5287
|
-
return {
|
|
5288
|
-
start: computeEarliestSegStart(props.hiddenSegs),
|
|
5289
|
-
end: computeLatestSegEnd(props.hiddenSegs),
|
|
5290
|
-
};
|
|
5291
|
-
}
|
|
5292
|
-
function computeEarliestSegStart(segs) {
|
|
5293
|
-
return segs.reduce(pickEarliestStart).eventRange.range.start;
|
|
5294
|
-
}
|
|
5295
|
-
function pickEarliestStart(seg0, seg1) {
|
|
5296
|
-
return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1;
|
|
5297
|
-
}
|
|
5298
|
-
function computeLatestSegEnd(segs) {
|
|
5299
|
-
return segs.reduce(pickLatestEnd).eventRange.range.end;
|
|
5300
|
-
}
|
|
5301
|
-
function pickLatestEnd(seg0, seg1) {
|
|
5302
|
-
return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1;
|
|
5303
|
-
}
|
|
5304
|
-
|
|
5305
|
-
class SegHierarchy {
|
|
5306
|
-
constructor(getEntryThickness = (entry) => {
|
|
5307
|
-
// if no thickness known, assume 1 (if 0, so small it always fits)
|
|
5308
|
-
return entry.thickness;
|
|
5309
|
-
}) {
|
|
5310
|
-
this.getEntryThickness = getEntryThickness;
|
|
5311
|
-
// settings
|
|
5312
|
-
this.strictOrder = false;
|
|
5313
|
-
this.allowReslicing = false;
|
|
5314
|
-
this.maxCoord = -1; // -1 means no max
|
|
5315
|
-
this.maxStackCnt = -1; // -1 means no max
|
|
5316
|
-
this.levelCoords = []; // ordered
|
|
5317
|
-
this.entriesByLevel = []; // parallel with levelCoords
|
|
5318
|
-
this.stackCnts = {}; // TODO: use better technique!?
|
|
5319
|
-
}
|
|
5320
|
-
addSegs(inputs) {
|
|
5321
|
-
let hiddenEntries = [];
|
|
5322
|
-
for (let input of inputs) {
|
|
5323
|
-
this.insertEntry(input, hiddenEntries);
|
|
5324
|
-
}
|
|
5325
|
-
return hiddenEntries;
|
|
5326
|
-
}
|
|
5327
|
-
insertEntry(entry, hiddenEntries) {
|
|
5328
|
-
let entryThickness = this.getEntryThickness(entry);
|
|
5329
|
-
if (entryThickness == null) {
|
|
5330
|
-
hiddenEntries.push(entry);
|
|
5331
|
-
}
|
|
5332
|
-
else {
|
|
5333
|
-
let insertion = this.findInsertion(entry, entryThickness);
|
|
5334
|
-
if (this.isInsertionValid(insertion, entry, entryThickness)) {
|
|
5335
|
-
this.insertEntryAt(entry, insertion);
|
|
5336
|
-
}
|
|
5337
|
-
else {
|
|
5338
|
-
this.handleInvalidInsertion(insertion, entry, hiddenEntries);
|
|
5339
|
-
}
|
|
5340
|
-
}
|
|
5341
|
-
}
|
|
5342
|
-
isInsertionValid(insertion, entry, entryThickness) {
|
|
5343
|
-
return (this.maxCoord === -1 || insertion.levelCoord + entryThickness <= this.maxCoord) &&
|
|
5344
|
-
(this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt);
|
|
5345
|
-
}
|
|
5346
|
-
handleInvalidInsertion(insertion, entry, hiddenEntries) {
|
|
5347
|
-
if (this.allowReslicing && insertion.touchingEntry) {
|
|
5348
|
-
const hiddenEntry = Object.assign(Object.assign({}, entry), { span: intersectSpans(entry.span, insertion.touchingEntry.span) });
|
|
5349
|
-
hiddenEntries.push(hiddenEntry);
|
|
5350
|
-
this.splitEntry(entry, insertion.touchingEntry, hiddenEntries);
|
|
5351
|
-
}
|
|
5352
|
-
else {
|
|
5353
|
-
hiddenEntries.push(entry);
|
|
5354
|
-
}
|
|
5355
|
-
}
|
|
5356
|
-
/*
|
|
5357
|
-
Does NOT add what hit the `barrier` into hiddenEntries. Should already be done.
|
|
5358
|
-
*/
|
|
5359
|
-
splitEntry(entry, barrier, hiddenEntries) {
|
|
5360
|
-
let entrySpan = entry.span;
|
|
5361
|
-
let barrierSpan = barrier.span;
|
|
5362
|
-
if (entrySpan.start < barrierSpan.start) {
|
|
5363
|
-
this.insertEntry({
|
|
5364
|
-
index: entry.index,
|
|
5365
|
-
seg: entry.seg,
|
|
5366
|
-
thickness: entry.thickness,
|
|
5367
|
-
span: { start: entrySpan.start, end: barrierSpan.start },
|
|
5368
|
-
}, hiddenEntries);
|
|
5369
|
-
}
|
|
5370
|
-
if (entrySpan.end > barrierSpan.end) {
|
|
5371
|
-
this.insertEntry({
|
|
5372
|
-
index: entry.index,
|
|
5373
|
-
seg: entry.seg,
|
|
5374
|
-
thickness: entry.thickness,
|
|
5375
|
-
span: { start: barrierSpan.end, end: entrySpan.end },
|
|
5376
|
-
}, hiddenEntries);
|
|
5377
|
-
}
|
|
5378
|
-
}
|
|
5379
|
-
insertEntryAt(entry, insertion) {
|
|
5380
|
-
let { entriesByLevel, levelCoords } = this;
|
|
5381
|
-
if (insertion.lateral === -1) {
|
|
5382
|
-
// create a new level
|
|
5383
|
-
insertAt(levelCoords, insertion.level, insertion.levelCoord);
|
|
5384
|
-
insertAt(entriesByLevel, insertion.level, [entry]);
|
|
5385
|
-
}
|
|
5386
|
-
else {
|
|
5387
|
-
// insert into existing level
|
|
5388
|
-
insertAt(entriesByLevel[insertion.level], insertion.lateral, entry);
|
|
5389
|
-
}
|
|
5390
|
-
this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt;
|
|
5391
|
-
}
|
|
5392
|
-
/*
|
|
5393
|
-
does not care about limits
|
|
5394
|
-
*/
|
|
5395
|
-
findInsertion(newEntry, newEntryThickness) {
|
|
5396
|
-
let { levelCoords, entriesByLevel, strictOrder, stackCnts } = this;
|
|
5397
|
-
let levelCnt = levelCoords.length;
|
|
5398
|
-
let candidateCoord = 0;
|
|
5399
|
-
let touchingLevel = -1;
|
|
5400
|
-
let touchingLateral = -1;
|
|
5401
|
-
let touchingEntry = null;
|
|
5402
|
-
let stackCnt = 0;
|
|
5403
|
-
for (let trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {
|
|
5404
|
-
const trackingCoord = levelCoords[trackingLevel];
|
|
5405
|
-
// if the current level is past the placed entry, we have found a good empty space and can stop.
|
|
5406
|
-
// if strictOrder, keep finding more lateral intersections.
|
|
5407
|
-
if (!strictOrder && trackingCoord >= candidateCoord + newEntryThickness) {
|
|
5408
|
-
break;
|
|
5409
|
-
}
|
|
5410
|
-
let trackingEntries = entriesByLevel[trackingLevel];
|
|
5411
|
-
let trackingEntry;
|
|
5412
|
-
let searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd); // find first entry after newEntry's end
|
|
5413
|
-
let lateralIndex = searchRes[0] + searchRes[1]; // if exact match (which doesn't collide), go to next one
|
|
5414
|
-
while ( // loop through entries that horizontally intersect
|
|
5415
|
-
(trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list
|
|
5416
|
-
trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry
|
|
5417
|
-
) {
|
|
5418
|
-
let trackingEntryBottom = trackingCoord + this.getEntryThickness(trackingEntry);
|
|
5419
|
-
// intersects into the top of the candidate?
|
|
5420
|
-
if (trackingEntryBottom > candidateCoord) {
|
|
5421
|
-
candidateCoord = trackingEntryBottom;
|
|
5422
|
-
touchingEntry = trackingEntry;
|
|
5423
|
-
touchingLevel = trackingLevel;
|
|
5424
|
-
touchingLateral = lateralIndex;
|
|
5425
|
-
}
|
|
5426
|
-
// butts up against top of candidate? (will happen if just intersected as well)
|
|
5427
|
-
if (trackingEntryBottom === candidateCoord) {
|
|
5428
|
-
// accumulate the highest possible stackCnt of the trackingEntries that butt up
|
|
5429
|
-
stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1);
|
|
5430
|
-
}
|
|
5431
|
-
lateralIndex += 1;
|
|
5432
|
-
}
|
|
5433
|
-
}
|
|
5434
|
-
// the destination level will be after touchingEntry's level. find it
|
|
5435
|
-
let destLevel = 0;
|
|
5436
|
-
if (touchingEntry) {
|
|
5437
|
-
destLevel = touchingLevel + 1;
|
|
5438
|
-
while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {
|
|
5439
|
-
destLevel += 1;
|
|
5440
|
-
}
|
|
5441
|
-
}
|
|
5442
|
-
// if adding to an existing level, find where to insert
|
|
5443
|
-
let destLateral = -1;
|
|
5444
|
-
if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {
|
|
5445
|
-
destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0];
|
|
5446
|
-
}
|
|
5447
|
-
return {
|
|
5448
|
-
touchingLevel,
|
|
5449
|
-
touchingLateral,
|
|
5450
|
-
touchingEntry,
|
|
5451
|
-
stackCnt,
|
|
5452
|
-
levelCoord: candidateCoord,
|
|
5453
|
-
level: destLevel,
|
|
5454
|
-
lateral: destLateral,
|
|
5455
|
-
};
|
|
5456
|
-
}
|
|
5457
|
-
// sorted by levelCoord (lowest to highest)
|
|
5458
|
-
toRects() {
|
|
5459
|
-
let { entriesByLevel, levelCoords } = this;
|
|
5460
|
-
let levelCnt = entriesByLevel.length;
|
|
5461
|
-
let rects = [];
|
|
5462
|
-
for (let level = 0; level < levelCnt; level += 1) {
|
|
5463
|
-
let entries = entriesByLevel[level];
|
|
5464
|
-
let levelCoord = levelCoords[level];
|
|
5465
|
-
for (let entry of entries) {
|
|
5466
|
-
rects.push(Object.assign(Object.assign({}, entry), { thickness: this.getEntryThickness(entry), levelCoord }));
|
|
5467
|
-
}
|
|
5468
|
-
}
|
|
5469
|
-
return rects;
|
|
5470
|
-
}
|
|
5471
|
-
}
|
|
5472
|
-
function getEntrySpanEnd(entry) {
|
|
5473
|
-
return entry.span.end;
|
|
5474
|
-
}
|
|
5475
|
-
/*
|
|
5476
|
-
Generates a unique ID whose lifespan is a single run of SegHierarchy, so can be really specific
|
|
5477
|
-
without fear of accidentally busting the cache on subsequent rerenders
|
|
5478
|
-
*/
|
|
5479
|
-
function buildEntryKey(entry) {
|
|
5480
|
-
return entry.index + ':' + entry.span.start;
|
|
5481
|
-
}
|
|
5482
|
-
/*
|
|
5483
|
-
returns groups with entries sorted by input order
|
|
5484
|
-
*/
|
|
5485
|
-
function groupIntersectingEntries(entries) {
|
|
5486
|
-
let merges = [];
|
|
5487
|
-
for (let entry of entries) {
|
|
5488
|
-
let filteredMerges = [];
|
|
5489
|
-
let hungryMerge = {
|
|
5490
|
-
span: entry.span,
|
|
5491
|
-
entries: [entry],
|
|
5492
|
-
};
|
|
5493
|
-
for (let merge of merges) {
|
|
5494
|
-
if (intersectSpans(merge.span, hungryMerge.span)) {
|
|
5495
|
-
hungryMerge = {
|
|
5496
|
-
span: joinSpans(merge.span, hungryMerge.span),
|
|
5497
|
-
entries: merge.entries.concat(hungryMerge.entries), // keep preexisting merge's items first. maintains order
|
|
5498
|
-
};
|
|
5499
|
-
}
|
|
5500
|
-
else {
|
|
5501
|
-
filteredMerges.push(merge);
|
|
5502
|
-
}
|
|
5503
|
-
}
|
|
5504
|
-
filteredMerges.push(hungryMerge);
|
|
5505
|
-
merges = filteredMerges;
|
|
5506
|
-
}
|
|
5507
|
-
return merges.map((merge) => {
|
|
5508
|
-
const segs = merge.entries.map(extractEntrySeg);
|
|
5509
|
-
return {
|
|
5510
|
-
key: buildIsoString(computeEarliestSegStart(segs)),
|
|
5511
|
-
span: merge.span,
|
|
5512
|
-
segs,
|
|
5513
|
-
};
|
|
5165
|
+
return mergedGroups.map((mergedGroup) => {
|
|
5166
|
+
return Object.assign({ key: buildIsoString(computeEarliestStart(segs)) }, mergedGroup);
|
|
5514
5167
|
});
|
|
5515
5168
|
}
|
|
5516
|
-
|
|
5517
|
-
|
|
5518
|
-
}
|
|
5519
|
-
function joinSpans(span0, span1) {
|
|
5520
|
-
return {
|
|
5521
|
-
start: Math.min(span0.start, span1.start),
|
|
5522
|
-
end: Math.max(span0.end, span1.end),
|
|
5523
|
-
};
|
|
5524
|
-
}
|
|
5525
|
-
function intersectSpans(span0, span1) {
|
|
5526
|
-
let start = Math.max(span0.start, span1.start);
|
|
5527
|
-
let end = Math.min(span0.end, span1.end);
|
|
5528
|
-
if (start < end) {
|
|
5529
|
-
return { start, end };
|
|
5530
|
-
}
|
|
5531
|
-
return null;
|
|
5532
|
-
}
|
|
5533
|
-
// general util
|
|
5534
|
-
// ---------------------------------------------------------------------------------------------------------------------
|
|
5169
|
+
// General Utils
|
|
5170
|
+
// -------------------------------------------------------------------------------------------------
|
|
5535
5171
|
function insertAt(arr, index, item) {
|
|
5536
5172
|
arr.splice(index, 0, item);
|
|
5537
5173
|
}
|
|
@@ -5646,14 +5282,14 @@ var FullCalendar = (function (exports) {
|
|
|
5646
5282
|
forPrint: false,
|
|
5647
5283
|
};
|
|
5648
5284
|
this.handleBeforePrint = () => {
|
|
5649
|
-
|
|
5650
|
-
|
|
5651
|
-
|
|
5285
|
+
this.setState({ forPrint: true });
|
|
5286
|
+
flushSync(() => { }); // TODO: use noop
|
|
5287
|
+
updateSizeSync();
|
|
5288
|
+
flushSync(() => { }); // TODO: use noop
|
|
5652
5289
|
};
|
|
5653
5290
|
this.handleAfterPrint = () => {
|
|
5654
|
-
|
|
5655
|
-
|
|
5656
|
-
});
|
|
5291
|
+
this.setState({ forPrint: false });
|
|
5292
|
+
flushSync(() => { }); // TODO: use noop
|
|
5657
5293
|
};
|
|
5658
5294
|
}
|
|
5659
5295
|
render() {
|
|
@@ -5664,7 +5300,7 @@ var FullCalendar = (function (exports) {
|
|
|
5664
5300
|
'fc',
|
|
5665
5301
|
forPrint ? 'fc-media-print' : 'fc-media-screen',
|
|
5666
5302
|
`fc-direction-${options.direction}`,
|
|
5667
|
-
props.theme.
|
|
5303
|
+
props.theme.getClassName('root'),
|
|
5668
5304
|
];
|
|
5669
5305
|
return props.children(classNames, options.height, forPrint);
|
|
5670
5306
|
}
|
|
@@ -5712,8 +5348,8 @@ var FullCalendar = (function (exports) {
|
|
|
5712
5348
|
clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell
|
|
5713
5349
|
if (clippedFirstIndex <= clippedLastIndex) {
|
|
5714
5350
|
return {
|
|
5715
|
-
|
|
5716
|
-
|
|
5351
|
+
start: clippedFirstIndex,
|
|
5352
|
+
end: clippedLastIndex + 1,
|
|
5717
5353
|
isStart: firstIndex === clippedFirstIndex,
|
|
5718
5354
|
isEnd: lastIndex === clippedLastIndex,
|
|
5719
5355
|
};
|
|
@@ -5794,17 +5430,17 @@ var FullCalendar = (function (exports) {
|
|
|
5794
5430
|
let seriesSeg = this.daySeries.sliceRange(range);
|
|
5795
5431
|
let segs = [];
|
|
5796
5432
|
if (seriesSeg) {
|
|
5797
|
-
|
|
5798
|
-
let index =
|
|
5799
|
-
while (index
|
|
5433
|
+
const { start, end } = seriesSeg;
|
|
5434
|
+
let index = start;
|
|
5435
|
+
while (index < end) {
|
|
5800
5436
|
let row = Math.floor(index / colCnt);
|
|
5801
|
-
let nextIndex = Math.min((row + 1) * colCnt,
|
|
5437
|
+
let nextIndex = Math.min((row + 1) * colCnt, end);
|
|
5802
5438
|
segs.push({
|
|
5803
5439
|
row,
|
|
5804
|
-
|
|
5805
|
-
|
|
5806
|
-
isStart: seriesSeg.isStart && index ===
|
|
5807
|
-
isEnd: seriesSeg.isEnd &&
|
|
5440
|
+
start: index % colCnt,
|
|
5441
|
+
end: (nextIndex - 1) % colCnt + 1,
|
|
5442
|
+
isStart: seriesSeg.isStart && index === start,
|
|
5443
|
+
isEnd: seriesSeg.isEnd && nextIndex === end,
|
|
5808
5444
|
});
|
|
5809
5445
|
index = nextIndex;
|
|
5810
5446
|
}
|
|
@@ -5982,61 +5618,47 @@ var FullCalendar = (function (exports) {
|
|
|
5982
5618
|
class Scroller extends DateComponent {
|
|
5983
5619
|
constructor() {
|
|
5984
5620
|
super(...arguments);
|
|
5985
|
-
|
|
5986
|
-
|
|
5621
|
+
this.handleEl = (el) => {
|
|
5622
|
+
const { props } = this;
|
|
5623
|
+
if (this.el) {
|
|
5624
|
+
this.el = null;
|
|
5625
|
+
this.listener.destroy();
|
|
5626
|
+
this.disconnectSize();
|
|
5627
|
+
setRef(props.clientWidthRef, null);
|
|
5628
|
+
setRef(props.clientHeightRef, null);
|
|
5629
|
+
setRef(props.endScrollbarWidthRef, null);
|
|
5630
|
+
setRef(props.bottomScrollbarWidthRef, null);
|
|
5631
|
+
}
|
|
5632
|
+
if (el) {
|
|
5633
|
+
this.el = el;
|
|
5634
|
+
this.listener = new ScrollListener(el);
|
|
5635
|
+
this.disconnectSize = watchSize(el, (clientWidth, clientHeight) => {
|
|
5636
|
+
const { props } = this;
|
|
5637
|
+
const endScrollbarWidth = el.offsetWidth - clientWidth;
|
|
5638
|
+
const bottomScrollbarWidth = el.offsetHeight - clientHeight;
|
|
5639
|
+
if (this.currentClientWidth !== clientWidth) {
|
|
5640
|
+
setRef(props.clientWidthRef, this.currentClientWidth = clientWidth);
|
|
5641
|
+
}
|
|
5642
|
+
if (this.currentClientHeight !== clientHeight) {
|
|
5643
|
+
setRef(props.clientHeightRef, this.currentClientHeight = clientHeight);
|
|
5644
|
+
}
|
|
5645
|
+
// are these isDimsEqual calls necessary?
|
|
5646
|
+
if (!isDimsEqual(this.currentBottomScrollbarWidth, bottomScrollbarWidth)) {
|
|
5647
|
+
setRef(props.bottomScrollbarWidthRef, this.currentBottomScrollbarWidth = bottomScrollbarWidth);
|
|
5648
|
+
}
|
|
5649
|
+
if (!isDimsEqual(this.currentEndScrollbarWidth, endScrollbarWidth)) {
|
|
5650
|
+
setRef(props.endScrollbarWidthRef, this.currentEndScrollbarWidth = endScrollbarWidth);
|
|
5651
|
+
}
|
|
5652
|
+
}, /* client(width+height) = */ true);
|
|
5653
|
+
}
|
|
5654
|
+
};
|
|
5987
5655
|
}
|
|
5988
5656
|
render() {
|
|
5989
5657
|
const { props } = this;
|
|
5990
5658
|
// if there's only one axis that needs scrolling, the other axis will unintentionally have
|
|
5991
|
-
// scrollbars too
|
|
5659
|
+
// scrollbars too if we don't force to 'hidden'
|
|
5992
5660
|
const fallbackOverflow = (props.horizontal || props.vertical) ? 'hidden' : '';
|
|
5993
|
-
return (_("div", { ref: this.
|
|
5994
|
-
'fc-scroller',
|
|
5995
|
-
props.hideScrollbars ? 'fc-scroller-nobars' : '',
|
|
5996
|
-
...(props.elClassNames || []),
|
|
5997
|
-
].join(' '), style: Object.assign(Object.assign({}, props.elStyle), { overflowX: props.horizontal ? 'auto' : fallbackOverflow, overflowY: props.vertical ? 'auto' : fallbackOverflow }) }, props.children));
|
|
5998
|
-
}
|
|
5999
|
-
componentDidMount() {
|
|
6000
|
-
const el = this.elRef.current; // TODO: make dynamic with useEffect
|
|
6001
|
-
this.listener = new ScrollListener(el);
|
|
6002
|
-
this.disconnectSize = watchSize(el, (contentWidth, contentHeight) => {
|
|
6003
|
-
const { props, context } = this;
|
|
6004
|
-
const bottomScrollbarWidth = el.offsetHeight - el.clientHeight;
|
|
6005
|
-
const horizontalScrollbarWidth = el.offsetWidth - el.clientWidth;
|
|
6006
|
-
let rightScrollbarWidth = 0;
|
|
6007
|
-
let leftScrollbarWidth = 0;
|
|
6008
|
-
if (context.isRtl && getRtlScrollerConfig().leftScrollbars) {
|
|
6009
|
-
leftScrollbarWidth = horizontalScrollbarWidth;
|
|
6010
|
-
}
|
|
6011
|
-
else {
|
|
6012
|
-
rightScrollbarWidth = horizontalScrollbarWidth;
|
|
6013
|
-
}
|
|
6014
|
-
if (!isDimsEqual(this.currentWidth, contentWidth)) {
|
|
6015
|
-
setRef(props.widthRef, this.currentWidth = contentWidth);
|
|
6016
|
-
}
|
|
6017
|
-
if (!isDimsEqual(this.currentHeight, contentHeight)) {
|
|
6018
|
-
setRef(props.heightRef, this.currentHeight = contentHeight);
|
|
6019
|
-
}
|
|
6020
|
-
if (!isDimsEqual(this.currentBottomScrollbarWidth, bottomScrollbarWidth)) {
|
|
6021
|
-
setRef(props.bottomScrollbarWidthRef, this.currentBottomScrollbarWidth = bottomScrollbarWidth);
|
|
6022
|
-
}
|
|
6023
|
-
if (!isDimsEqual(this.currentRightScrollbarWidth, rightScrollbarWidth)) {
|
|
6024
|
-
setRef(props.rightScrollbarWidthRef, this.currentRightScrollbarWidth = rightScrollbarWidth);
|
|
6025
|
-
}
|
|
6026
|
-
if (!isDimsEqual(this.currentLeftScrollbarWidth, leftScrollbarWidth)) {
|
|
6027
|
-
setRef(props.leftScrollbarWidthRef, this.currentLeftScrollbarWidth = leftScrollbarWidth);
|
|
6028
|
-
}
|
|
6029
|
-
});
|
|
6030
|
-
}
|
|
6031
|
-
componentWillUnmount() {
|
|
6032
|
-
const { props } = this;
|
|
6033
|
-
this.disconnectSize();
|
|
6034
|
-
this.listener.destroy();
|
|
6035
|
-
setRef(props.widthRef, null);
|
|
6036
|
-
setRef(props.heightRef, null);
|
|
6037
|
-
setRef(props.bottomScrollbarWidthRef, null);
|
|
6038
|
-
setRef(props.rightScrollbarWidthRef, null);
|
|
6039
|
-
setRef(props.leftScrollbarWidthRef, null);
|
|
5661
|
+
return (_("div", { ref: this.handleEl, className: joinClassNames(props.className, 'fc-scroller', props.hideScrollbars && 'fc-scroller-no-bars'), style: Object.assign(Object.assign({}, props.style), { overflowX: props.horizontal ? 'auto' : fallbackOverflow, overflowY: props.vertical ? 'auto' : fallbackOverflow }) }, props.children));
|
|
6040
5662
|
}
|
|
6041
5663
|
endScroll() {
|
|
6042
5664
|
this.listener.endScroll();
|
|
@@ -6045,21 +5667,23 @@ var FullCalendar = (function (exports) {
|
|
|
6045
5667
|
// -----------------------------------------------------------------------------------------------
|
|
6046
5668
|
get x() {
|
|
6047
5669
|
const { isRtl } = this.context;
|
|
6048
|
-
const el = this
|
|
6049
|
-
return getNormalizedScrollX(el, isRtl);
|
|
5670
|
+
const { el } = this;
|
|
5671
|
+
return el ? getNormalizedScrollX(el, isRtl) : 0;
|
|
6050
5672
|
}
|
|
6051
5673
|
get y() {
|
|
6052
|
-
const el = this
|
|
6053
|
-
return el.scrollTop;
|
|
5674
|
+
const { el } = this;
|
|
5675
|
+
return el ? el.scrollTop : 0;
|
|
6054
5676
|
}
|
|
6055
5677
|
scrollTo({ x, y }) {
|
|
6056
5678
|
const { isRtl } = this.context;
|
|
6057
|
-
const el = this
|
|
6058
|
-
if (
|
|
6059
|
-
|
|
6060
|
-
|
|
6061
|
-
|
|
6062
|
-
|
|
5679
|
+
const { el } = this;
|
|
5680
|
+
if (el) {
|
|
5681
|
+
if (y != null) {
|
|
5682
|
+
el.scrollTop = y;
|
|
5683
|
+
}
|
|
5684
|
+
if (x != null) {
|
|
5685
|
+
setNormalizedScrollX(el, isRtl, x);
|
|
5686
|
+
}
|
|
6063
5687
|
}
|
|
6064
5688
|
}
|
|
6065
5689
|
addScrollEndListener(handler) {
|
|
@@ -6071,7 +5695,7 @@ var FullCalendar = (function (exports) {
|
|
|
6071
5695
|
}
|
|
6072
5696
|
// Public API
|
|
6073
5697
|
// -------------------------------------------------------------------------------------------------
|
|
6074
|
-
//
|
|
5698
|
+
// We can drop normalization when support for Chromium-based <86 is dropped (see Notion)
|
|
6075
5699
|
function getNormalizedScrollX(el, isRtl) {
|
|
6076
5700
|
const { scrollLeft } = el;
|
|
6077
5701
|
return isRtl ? getNormalizedRtlScrollX(scrollLeft, el) : scrollLeft;
|
|
@@ -6083,7 +5707,7 @@ var FullCalendar = (function (exports) {
|
|
|
6083
5707
|
Returns a value in the 'reverse' system
|
|
6084
5708
|
*/
|
|
6085
5709
|
function getNormalizedRtlScrollX(scrollLeft, el) {
|
|
6086
|
-
switch (
|
|
5710
|
+
switch (getRtlScrollerSystem()) {
|
|
6087
5711
|
case 'positive':
|
|
6088
5712
|
return el.scrollWidth - el.clientWidth - scrollLeft;
|
|
6089
5713
|
case 'negative':
|
|
@@ -6097,7 +5721,7 @@ var FullCalendar = (function (exports) {
|
|
|
6097
5721
|
If so, consolidate. With isRtl check too
|
|
6098
5722
|
*/
|
|
6099
5723
|
function getNormalizedRtlScrollLeft(x, el) {
|
|
6100
|
-
switch (
|
|
5724
|
+
switch (getRtlScrollerSystem()) {
|
|
6101
5725
|
case 'positive':
|
|
6102
5726
|
return el.scrollWidth - el.clientWidth - x;
|
|
6103
5727
|
case 'negative':
|
|
@@ -6105,11 +5729,14 @@ var FullCalendar = (function (exports) {
|
|
|
6105
5729
|
}
|
|
6106
5730
|
return x;
|
|
6107
5731
|
}
|
|
6108
|
-
let
|
|
6109
|
-
function
|
|
6110
|
-
return
|
|
5732
|
+
let _rtlScrollerSystem;
|
|
5733
|
+
function getRtlScrollerSystem() {
|
|
5734
|
+
return _rtlScrollerSystem || (_rtlScrollerSystem = detectRtlScrollerSystem());
|
|
6111
5735
|
}
|
|
6112
|
-
|
|
5736
|
+
/*
|
|
5737
|
+
TODO: make this more minimal now that scrollbar-side detection isn't needed?
|
|
5738
|
+
*/
|
|
5739
|
+
function detectRtlScrollerSystem() {
|
|
6113
5740
|
let el = document.createElement('div');
|
|
6114
5741
|
el.style.position = 'absolute';
|
|
6115
5742
|
el.style.top = '-1000px';
|
|
@@ -6135,9 +5762,8 @@ var FullCalendar = (function (exports) {
|
|
|
6135
5762
|
system = 'negative'; // scroll is a negative number from the right edge
|
|
6136
5763
|
}
|
|
6137
5764
|
}
|
|
6138
|
-
|
|
6139
|
-
|
|
6140
|
-
return { system, leftScrollbars: !rightScrollbars };
|
|
5765
|
+
el.remove();
|
|
5766
|
+
return system;
|
|
6141
5767
|
}
|
|
6142
5768
|
|
|
6143
5769
|
class Slicer {
|
|
@@ -6233,7 +5859,7 @@ var FullCalendar = (function (exports) {
|
|
|
6233
5859
|
end: addDays(dateRange.start, 1),
|
|
6234
5860
|
};
|
|
6235
5861
|
}
|
|
6236
|
-
let segs = this.sliceRange(dateRange, ...extraArgs);
|
|
5862
|
+
let segs = this.sliceRange(dateRange, ...extraArgs); // !!!
|
|
6237
5863
|
for (let seg of segs) {
|
|
6238
5864
|
seg.eventRange = eventRange;
|
|
6239
5865
|
seg.isStart = eventRange.isStart && seg.isStart;
|
|
@@ -6653,7 +6279,7 @@ var FullCalendar = (function (exports) {
|
|
|
6653
6279
|
else {
|
|
6654
6280
|
current.set(key, val);
|
|
6655
6281
|
}
|
|
6656
|
-
this.rev = guid();
|
|
6282
|
+
this.rev = guid$1();
|
|
6657
6283
|
if (this.masterCallback) {
|
|
6658
6284
|
this.masterCallback(val, key);
|
|
6659
6285
|
}
|
|
@@ -6730,6 +6356,200 @@ var FullCalendar = (function (exports) {
|
|
|
6730
6356
|
return { start, end };
|
|
6731
6357
|
}
|
|
6732
6358
|
|
|
6359
|
+
class ContentInjector extends BaseComponent {
|
|
6360
|
+
constructor() {
|
|
6361
|
+
super(...arguments);
|
|
6362
|
+
this.id = guid$1();
|
|
6363
|
+
this.queuedDomNodes = [];
|
|
6364
|
+
this.currentDomNodes = [];
|
|
6365
|
+
this.handleEl = (el) => {
|
|
6366
|
+
const { options } = this.context;
|
|
6367
|
+
const { generatorName } = this.props;
|
|
6368
|
+
if (!options.customRenderingReplaces || !hasCustomRenderingHandler(generatorName, options)) {
|
|
6369
|
+
this.updateElRef(el);
|
|
6370
|
+
}
|
|
6371
|
+
};
|
|
6372
|
+
this.updateElRef = (el) => {
|
|
6373
|
+
if (this.props.elRef) {
|
|
6374
|
+
setRef(this.props.elRef, el);
|
|
6375
|
+
}
|
|
6376
|
+
};
|
|
6377
|
+
}
|
|
6378
|
+
render() {
|
|
6379
|
+
const { props, context } = this;
|
|
6380
|
+
const { options } = context;
|
|
6381
|
+
const { customGenerator, defaultGenerator, renderProps } = props;
|
|
6382
|
+
const attrs = buildElAttrs(props, '', this.handleEl);
|
|
6383
|
+
let useDefault = false;
|
|
6384
|
+
let innerContent;
|
|
6385
|
+
let queuedDomNodes = [];
|
|
6386
|
+
let currentGeneratorMeta;
|
|
6387
|
+
if (customGenerator != null) {
|
|
6388
|
+
const customGeneratorRes = typeof customGenerator === 'function' ?
|
|
6389
|
+
customGenerator(renderProps, _) :
|
|
6390
|
+
customGenerator;
|
|
6391
|
+
if (customGeneratorRes === true) {
|
|
6392
|
+
useDefault = true;
|
|
6393
|
+
}
|
|
6394
|
+
else {
|
|
6395
|
+
const isObject = customGeneratorRes && typeof customGeneratorRes === 'object'; // non-null
|
|
6396
|
+
if (isObject && ('html' in customGeneratorRes)) {
|
|
6397
|
+
attrs.dangerouslySetInnerHTML = { __html: customGeneratorRes.html };
|
|
6398
|
+
}
|
|
6399
|
+
else if (isObject && ('domNodes' in customGeneratorRes)) {
|
|
6400
|
+
queuedDomNodes = Array.prototype.slice.call(customGeneratorRes.domNodes);
|
|
6401
|
+
}
|
|
6402
|
+
else if (isObject
|
|
6403
|
+
? t(customGeneratorRes) // vdom node
|
|
6404
|
+
: typeof customGeneratorRes !== 'function' // primitive value (like string or number)
|
|
6405
|
+
) {
|
|
6406
|
+
// use in vdom
|
|
6407
|
+
innerContent = customGeneratorRes;
|
|
6408
|
+
}
|
|
6409
|
+
else {
|
|
6410
|
+
// an exotic object for handleCustomRendering
|
|
6411
|
+
currentGeneratorMeta = customGeneratorRes;
|
|
6412
|
+
}
|
|
6413
|
+
}
|
|
6414
|
+
}
|
|
6415
|
+
else {
|
|
6416
|
+
useDefault = !hasCustomRenderingHandler(props.generatorName, options);
|
|
6417
|
+
}
|
|
6418
|
+
if (useDefault && defaultGenerator) {
|
|
6419
|
+
innerContent = defaultGenerator(renderProps);
|
|
6420
|
+
}
|
|
6421
|
+
this.queuedDomNodes = queuedDomNodes;
|
|
6422
|
+
this.currentGeneratorMeta = currentGeneratorMeta;
|
|
6423
|
+
return _(props.tag, attrs, innerContent);
|
|
6424
|
+
}
|
|
6425
|
+
componentDidMount() {
|
|
6426
|
+
this.applyQueueudDomNodes();
|
|
6427
|
+
this.triggerCustomRendering(true);
|
|
6428
|
+
}
|
|
6429
|
+
componentDidUpdate() {
|
|
6430
|
+
this.applyQueueudDomNodes();
|
|
6431
|
+
this.triggerCustomRendering(true);
|
|
6432
|
+
}
|
|
6433
|
+
componentWillUnmount() {
|
|
6434
|
+
this.triggerCustomRendering(false); // TODO: different API for removal?
|
|
6435
|
+
}
|
|
6436
|
+
triggerCustomRendering(isActive) {
|
|
6437
|
+
var _a;
|
|
6438
|
+
const { props, context } = this;
|
|
6439
|
+
const { handleCustomRendering, customRenderingMetaMap } = context.options;
|
|
6440
|
+
if (handleCustomRendering) {
|
|
6441
|
+
const generatorMeta = (_a = this.currentGeneratorMeta) !== null && _a !== void 0 ? _a : customRenderingMetaMap === null || customRenderingMetaMap === void 0 ? void 0 : customRenderingMetaMap[props.generatorName];
|
|
6442
|
+
if (generatorMeta) {
|
|
6443
|
+
handleCustomRendering(Object.assign({ id: this.id, isActive, containerEl: this.base, reportNewContainerEl: this.updateElRef, // front-end framework tells us about new container els
|
|
6444
|
+
generatorMeta }, props));
|
|
6445
|
+
}
|
|
6446
|
+
}
|
|
6447
|
+
}
|
|
6448
|
+
applyQueueudDomNodes() {
|
|
6449
|
+
const { queuedDomNodes, currentDomNodes } = this;
|
|
6450
|
+
const el = this.base;
|
|
6451
|
+
if (!isArraysEqual(queuedDomNodes, currentDomNodes)) {
|
|
6452
|
+
for (const domNode of currentDomNodes) {
|
|
6453
|
+
domNode.remove();
|
|
6454
|
+
}
|
|
6455
|
+
for (let newNode of queuedDomNodes) {
|
|
6456
|
+
el.appendChild(newNode);
|
|
6457
|
+
}
|
|
6458
|
+
this.currentDomNodes = queuedDomNodes;
|
|
6459
|
+
}
|
|
6460
|
+
}
|
|
6461
|
+
}
|
|
6462
|
+
ContentInjector.addPropsEquality({
|
|
6463
|
+
renderProps: isPropsEqual,
|
|
6464
|
+
attrs: isNonHandlerPropsEqual,
|
|
6465
|
+
style: isPropsEqual,
|
|
6466
|
+
});
|
|
6467
|
+
// Util
|
|
6468
|
+
/*
|
|
6469
|
+
Does UI-framework provide custom way of rendering that does not use Preact VDOM
|
|
6470
|
+
AND does the calendar's options define custom rendering?
|
|
6471
|
+
AKA. Should we NOT render the default content?
|
|
6472
|
+
*/
|
|
6473
|
+
function hasCustomRenderingHandler(generatorName, options) {
|
|
6474
|
+
var _a;
|
|
6475
|
+
return Boolean(options.handleCustomRendering &&
|
|
6476
|
+
generatorName &&
|
|
6477
|
+
((_a = options.customRenderingMetaMap) === null || _a === void 0 ? void 0 : _a[generatorName]));
|
|
6478
|
+
}
|
|
6479
|
+
function buildElAttrs(props, className, elRef) {
|
|
6480
|
+
const attrs = Object.assign(Object.assign({}, props.attrs), { ref: elRef });
|
|
6481
|
+
if (props.className || className) {
|
|
6482
|
+
attrs.className = joinClassNames(className, props.className, attrs.className);
|
|
6483
|
+
}
|
|
6484
|
+
if (props.style) {
|
|
6485
|
+
attrs.style = props.style;
|
|
6486
|
+
}
|
|
6487
|
+
return attrs;
|
|
6488
|
+
}
|
|
6489
|
+
|
|
6490
|
+
const RenderId = createContext(0);
|
|
6491
|
+
|
|
6492
|
+
class ContentContainer extends b {
|
|
6493
|
+
constructor() {
|
|
6494
|
+
super(...arguments);
|
|
6495
|
+
this.InnerContent = InnerContentInjector.bind(undefined, this);
|
|
6496
|
+
this.handleEl = (el) => {
|
|
6497
|
+
this.el = el;
|
|
6498
|
+
if (this.props.elRef) {
|
|
6499
|
+
setRef(this.props.elRef, el);
|
|
6500
|
+
if (el && this.didMountMisfire) {
|
|
6501
|
+
this.componentDidMount();
|
|
6502
|
+
}
|
|
6503
|
+
}
|
|
6504
|
+
};
|
|
6505
|
+
}
|
|
6506
|
+
render() {
|
|
6507
|
+
const { props } = this;
|
|
6508
|
+
const generatedClassName = generateClassName(props.classNameGenerator, props.renderProps);
|
|
6509
|
+
if (props.children) {
|
|
6510
|
+
const attrs = buildElAttrs(props, generatedClassName, this.handleEl);
|
|
6511
|
+
const children = props.children(this.InnerContent, props.renderProps, attrs);
|
|
6512
|
+
if (props.tag) {
|
|
6513
|
+
return _(props.tag, attrs, children);
|
|
6514
|
+
}
|
|
6515
|
+
else {
|
|
6516
|
+
return children;
|
|
6517
|
+
}
|
|
6518
|
+
}
|
|
6519
|
+
else {
|
|
6520
|
+
return _((ContentInjector), Object.assign(Object.assign({}, props), { elRef: this.handleEl, tag: props.tag || 'div', className: joinClassNames(props.className, generatedClassName), renderId: this.context }));
|
|
6521
|
+
}
|
|
6522
|
+
}
|
|
6523
|
+
componentDidMount() {
|
|
6524
|
+
var _a, _b;
|
|
6525
|
+
if (this.el) {
|
|
6526
|
+
(_b = (_a = this.props).didMount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));
|
|
6527
|
+
}
|
|
6528
|
+
else {
|
|
6529
|
+
this.didMountMisfire = true;
|
|
6530
|
+
}
|
|
6531
|
+
}
|
|
6532
|
+
componentWillUnmount() {
|
|
6533
|
+
var _a, _b;
|
|
6534
|
+
(_b = (_a = this.props).willUnmount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));
|
|
6535
|
+
}
|
|
6536
|
+
}
|
|
6537
|
+
ContentContainer.contextType = RenderId;
|
|
6538
|
+
function InnerContentInjector(containerComponent, props) {
|
|
6539
|
+
const parentProps = containerComponent.props;
|
|
6540
|
+
return _((ContentInjector), Object.assign({ renderProps: parentProps.renderProps, generatorName: parentProps.generatorName, customGenerator: parentProps.customGenerator, defaultGenerator: parentProps.defaultGenerator, renderId: containerComponent.context }, props));
|
|
6541
|
+
}
|
|
6542
|
+
// Utils
|
|
6543
|
+
function generateClassName(classNameGenerator, renderProps) {
|
|
6544
|
+
const classNames = typeof classNameGenerator === 'function' ?
|
|
6545
|
+
classNameGenerator(renderProps) :
|
|
6546
|
+
classNameGenerator || [];
|
|
6547
|
+
return typeof classNames === 'string' ? classNames : classNames.join(' ');
|
|
6548
|
+
}
|
|
6549
|
+
function renderText(renderProps) {
|
|
6550
|
+
return renderProps.text;
|
|
6551
|
+
}
|
|
6552
|
+
|
|
6733
6553
|
class EventContainer extends BaseComponent {
|
|
6734
6554
|
constructor() {
|
|
6735
6555
|
super(...arguments);
|
|
@@ -6765,11 +6585,7 @@ var FullCalendar = (function (exports) {
|
|
|
6765
6585
|
isDragging: Boolean(props.isDragging),
|
|
6766
6586
|
isResizing: Boolean(props.isResizing),
|
|
6767
6587
|
};
|
|
6768
|
-
return (_(ContentContainer, Object.assign({}, props /* contains children */, { elRef: this.handleEl,
|
|
6769
|
-
...getEventClassNames(renderProps),
|
|
6770
|
-
...eventRange.ui.classNames,
|
|
6771
|
-
...(props.elClasses || []),
|
|
6772
|
-
], renderProps: renderProps, generatorName: "eventContent", customGenerator: options.eventContent, defaultGenerator: props.defaultGenerator, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount })));
|
|
6588
|
+
return (_(ContentContainer, Object.assign({}, props /* contains children */, { elRef: this.handleEl, className: joinClassNames(props.className, ...getEventClassNames(renderProps), ...eventRange.ui.classNames), renderProps: renderProps, generatorName: "eventContent", customGenerator: options.eventContent, defaultGenerator: props.defaultGenerator, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount })));
|
|
6773
6589
|
}
|
|
6774
6590
|
componentDidUpdate(prevProps) {
|
|
6775
6591
|
if (this.el && this.props.eventRange !== prevProps.eventRange) {
|
|
@@ -6781,43 +6597,81 @@ var FullCalendar = (function (exports) {
|
|
|
6781
6597
|
// should not be a purecomponent
|
|
6782
6598
|
class StandardEvent extends BaseComponent {
|
|
6783
6599
|
render() {
|
|
6784
|
-
|
|
6785
|
-
|
|
6786
|
-
|
|
6787
|
-
|
|
6788
|
-
|
|
6789
|
-
|
|
6790
|
-
|
|
6791
|
-
|
|
6792
|
-
|
|
6793
|
-
|
|
6794
|
-
|
|
6600
|
+
const { props, context } = this;
|
|
6601
|
+
const { eventRange } = props;
|
|
6602
|
+
const { options } = context;
|
|
6603
|
+
const timeFormat = options.eventTimeFormat || props.defaultTimeFormat;
|
|
6604
|
+
const timeText = buildEventRangeTimeText(timeFormat, eventRange, // just for def/instance
|
|
6605
|
+
props.slicedStart, props.slicedEnd, props.isStart, props.isEnd, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);
|
|
6606
|
+
const anchorAttrs = getEventRangeAnchorAttrs(eventRange, context);
|
|
6607
|
+
return (_(EventContainer, Object.assign({}, props /* includes elRef */, { tag: anchorAttrs ? 'a' : 'div', style: {
|
|
6608
|
+
borderColor: eventRange.ui.borderColor,
|
|
6609
|
+
backgroundColor: eventRange.ui.backgroundColor,
|
|
6610
|
+
}, attrs: anchorAttrs, defaultGenerator: renderInnerContent$1, timeText: timeText }), (InnerContent, eventContentArg) => (_(k$1, null,
|
|
6611
|
+
_(InnerContent, { tag: "div", className: 'fc-event-inner', style: { color: eventContentArg.textColor } }),
|
|
6795
6612
|
Boolean(eventContentArg.isStartResizable) && (_("div", { className: "fc-event-resizer fc-event-resizer-start" })),
|
|
6796
6613
|
Boolean(eventContentArg.isEndResizable) && (_("div", { className: "fc-event-resizer fc-event-resizer-end" }))))));
|
|
6797
6614
|
}
|
|
6798
6615
|
}
|
|
6799
|
-
function renderInnerContent$1(innerProps) {
|
|
6800
|
-
return (_(k$1, null,
|
|
6801
|
-
innerProps.timeText && (_("div", { className: "fc-event-time" }, innerProps.timeText)),
|
|
6802
|
-
_("div", { className: "fc-event-title-outer" },
|
|
6803
|
-
_("div", { className: "fc-event-title" }, innerProps.event.title || _(k$1, null, "\u00A0")))));
|
|
6616
|
+
function renderInnerContent$1(innerProps) {
|
|
6617
|
+
return (_(k$1, null,
|
|
6618
|
+
innerProps.timeText && (_("div", { className: "fc-event-time" }, innerProps.timeText)),
|
|
6619
|
+
_("div", { className: "fc-event-title-outer" },
|
|
6620
|
+
_("div", { className: "fc-event-title" }, innerProps.event.title || _(k$1, null, "\u00A0")))));
|
|
6621
|
+
}
|
|
6622
|
+
|
|
6623
|
+
const NowIndicatorContainer = (props) => (_(ViewContextType.Consumer, null, (context) => {
|
|
6624
|
+
let { options } = context;
|
|
6625
|
+
let renderProps = {
|
|
6626
|
+
isAxis: props.isAxis,
|
|
6627
|
+
date: context.dateEnv.toDate(props.date),
|
|
6628
|
+
view: context.viewApi,
|
|
6629
|
+
};
|
|
6630
|
+
return (_(ContentContainer, Object.assign({}, props /* includes children */, { tag: props.tag || 'div', renderProps: renderProps, generatorName: "nowIndicatorContent", customGenerator: options.nowIndicatorContent, classNameGenerator: options.nowIndicatorClassNames, didMount: options.nowIndicatorDidMount, willUnmount: options.nowIndicatorWillUnmount })));
|
|
6631
|
+
}));
|
|
6632
|
+
|
|
6633
|
+
const DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });
|
|
6634
|
+
class DayCellContainer extends BaseComponent {
|
|
6635
|
+
constructor() {
|
|
6636
|
+
super(...arguments);
|
|
6637
|
+
this.refineRenderProps = memoizeObjArg(refineRenderProps);
|
|
6638
|
+
}
|
|
6639
|
+
render() {
|
|
6640
|
+
let { props, context } = this;
|
|
6641
|
+
let { options } = context;
|
|
6642
|
+
let renderProps = this.refineRenderProps({
|
|
6643
|
+
date: props.date,
|
|
6644
|
+
dateProfile: props.dateProfile,
|
|
6645
|
+
todayRange: props.todayRange,
|
|
6646
|
+
isMonthStart: props.isMonthStart || false,
|
|
6647
|
+
showDayNumber: props.showDayNumber,
|
|
6648
|
+
renderProps: props.renderProps,
|
|
6649
|
+
viewApi: context.viewApi,
|
|
6650
|
+
dateEnv: context.dateEnv,
|
|
6651
|
+
monthStartFormat: options.monthStartFormat,
|
|
6652
|
+
});
|
|
6653
|
+
return (_(ContentContainer, Object.assign({}, props /* includes children */, { className: joinClassNames(props.className, getDayClassName(renderProps)), attrs: Object.assign(Object.assign({}, props.attrs), (renderProps.isDisabled ? {} : { 'data-date': formatDayString(props.date) })), renderProps: renderProps, generatorName: "dayCellContent", customGenerator: options.dayCellContent, defaultGenerator: props.defaultGenerator, classNameGenerator:
|
|
6654
|
+
// don't use custom classNames if disabled
|
|
6655
|
+
// TODO: make DRY with DayGridHeaderCell
|
|
6656
|
+
renderProps.isDisabled ? undefined : options.dayCellClassNames, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount })));
|
|
6657
|
+
}
|
|
6658
|
+
}
|
|
6659
|
+
function hasCustomDayCellContent(options) {
|
|
6660
|
+
return Boolean(options.dayCellContent || hasCustomRenderingHandler('dayCellContent', options));
|
|
6661
|
+
}
|
|
6662
|
+
function refineRenderProps(raw) {
|
|
6663
|
+
let { date, dateEnv, dateProfile, isMonthStart } = raw;
|
|
6664
|
+
let dayMeta = getDateMeta(date, raw.todayRange, null, dateProfile);
|
|
6665
|
+
let dayNumberText = raw.showDayNumber ? (dateEnv.format(date, isMonthStart ? raw.monthStartFormat : DAY_NUM_FORMAT)) : '';
|
|
6666
|
+
return Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: raw.viewApi }, dayMeta), { isMonthStart,
|
|
6667
|
+
dayNumberText }), raw.renderProps);
|
|
6804
6668
|
}
|
|
6805
|
-
|
|
6806
|
-
const NowIndicatorContainer = (props) => (_(ViewContextType.Consumer, null, (context) => {
|
|
6807
|
-
let { options } = context;
|
|
6808
|
-
let renderProps = {
|
|
6809
|
-
isAxis: props.isAxis,
|
|
6810
|
-
date: context.dateEnv.toDate(props.date),
|
|
6811
|
-
view: context.viewApi,
|
|
6812
|
-
};
|
|
6813
|
-
return (_(ContentContainer, Object.assign({}, props /* includes children */, { elTag: props.elTag || 'div', renderProps: renderProps, generatorName: "nowIndicatorContent", customGenerator: options.nowIndicatorContent, classNameGenerator: options.nowIndicatorClassNames, didMount: options.nowIndicatorDidMount, willUnmount: options.nowIndicatorWillUnmount })));
|
|
6814
|
-
}));
|
|
6815
6669
|
|
|
6816
6670
|
class BgEvent extends BaseComponent {
|
|
6817
6671
|
render() {
|
|
6818
6672
|
let { props } = this;
|
|
6819
6673
|
let { eventRange } = props;
|
|
6820
|
-
return (_(EventContainer, {
|
|
6674
|
+
return (_(EventContainer, { tag: "div", className: 'fc-bg-event', style: { backgroundColor: eventRange.ui.backgroundColor }, defaultGenerator: renderInnerContent, eventRange: eventRange, isStart: props.isStart, isEnd: props.isEnd, timeText: "", isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday, disableDragging: true, disableResizing: true }));
|
|
6821
6675
|
}
|
|
6822
6676
|
}
|
|
6823
6677
|
function renderInnerContent(props) {
|
|
@@ -6836,10 +6690,233 @@ var FullCalendar = (function (exports) {
|
|
|
6836
6690
|
let text = dateEnv.format(date, format);
|
|
6837
6691
|
let renderProps = { num, text, date };
|
|
6838
6692
|
return (_(ContentContainer // why isn't WeekNumberContentArg being auto-detected?
|
|
6839
|
-
, Object.assign({}, props /* includes children */, { renderProps: renderProps, generatorName: "weekNumberContent", customGenerator: options.weekNumberContent, defaultGenerator:
|
|
6693
|
+
, Object.assign({}, props /* includes children */, { renderProps: renderProps, generatorName: "weekNumberContent", customGenerator: options.weekNumberContent, defaultGenerator: renderText, classNameGenerator: options.weekNumberClassNames, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount })));
|
|
6840
6694
|
}));
|
|
6841
|
-
|
|
6842
|
-
|
|
6695
|
+
|
|
6696
|
+
const PADDING_FROM_VIEWPORT = 10;
|
|
6697
|
+
class Popover extends BaseComponent {
|
|
6698
|
+
constructor() {
|
|
6699
|
+
super(...arguments);
|
|
6700
|
+
this.state = {
|
|
6701
|
+
titleId: getUniqueDomId(),
|
|
6702
|
+
};
|
|
6703
|
+
this.handleRootEl = (el) => {
|
|
6704
|
+
this.rootEl = el;
|
|
6705
|
+
if (this.props.elRef) {
|
|
6706
|
+
setRef(this.props.elRef, el);
|
|
6707
|
+
}
|
|
6708
|
+
};
|
|
6709
|
+
// Triggered when the user clicks *anywhere* in the document, for the autoHide feature
|
|
6710
|
+
this.handleDocumentMouseDown = (ev) => {
|
|
6711
|
+
// only hide the popover if the click happened outside the popover
|
|
6712
|
+
const target = getEventTargetViaRoot(ev);
|
|
6713
|
+
if (!this.rootEl.contains(target)) {
|
|
6714
|
+
this.handleCloseClick();
|
|
6715
|
+
}
|
|
6716
|
+
};
|
|
6717
|
+
this.handleDocumentKeyDown = (ev) => {
|
|
6718
|
+
if (ev.key === 'Escape') {
|
|
6719
|
+
this.handleCloseClick();
|
|
6720
|
+
}
|
|
6721
|
+
};
|
|
6722
|
+
this.handleCloseClick = () => {
|
|
6723
|
+
let { onClose } = this.props;
|
|
6724
|
+
if (onClose) {
|
|
6725
|
+
onClose();
|
|
6726
|
+
}
|
|
6727
|
+
};
|
|
6728
|
+
}
|
|
6729
|
+
render() {
|
|
6730
|
+
let { theme, options } = this.context;
|
|
6731
|
+
let { props, state } = this;
|
|
6732
|
+
return j(_("div", Object.assign({}, props.attrs, { id: props.id, className: joinClassNames(props.className, 'fc-popover', theme.getClassName('popover')), "aria-labelledby": state.titleId, ref: this.handleRootEl }),
|
|
6733
|
+
_("div", { className: 'fc-popover-header ' + theme.getClassName('popoverHeader') },
|
|
6734
|
+
_("span", { className: "fc-popover-title", id: state.titleId }, props.title),
|
|
6735
|
+
_("span", { className: 'fc-popover-close ' + theme.getIconClass('close'), title: options.closeHint, onClick: this.handleCloseClick })),
|
|
6736
|
+
_("div", { className: 'fc-popover-body ' + theme.getClassName('popoverContent') }, props.children)), props.parentEl);
|
|
6737
|
+
}
|
|
6738
|
+
componentDidMount() {
|
|
6739
|
+
document.addEventListener('mousedown', this.handleDocumentMouseDown);
|
|
6740
|
+
document.addEventListener('keydown', this.handleDocumentKeyDown);
|
|
6741
|
+
this.updateSize();
|
|
6742
|
+
}
|
|
6743
|
+
componentWillUnmount() {
|
|
6744
|
+
document.removeEventListener('mousedown', this.handleDocumentMouseDown);
|
|
6745
|
+
document.removeEventListener('keydown', this.handleDocumentKeyDown);
|
|
6746
|
+
}
|
|
6747
|
+
updateSize() {
|
|
6748
|
+
let { isRtl } = this.context;
|
|
6749
|
+
let { alignEl, alignParentTop } = this.props;
|
|
6750
|
+
let { rootEl } = this;
|
|
6751
|
+
let alignmentRect = computeClippedClientRect(alignEl);
|
|
6752
|
+
if (alignmentRect) {
|
|
6753
|
+
let popoverDims = rootEl.getBoundingClientRect();
|
|
6754
|
+
// position relative to viewport
|
|
6755
|
+
let popoverTop = alignParentTop
|
|
6756
|
+
? alignEl.closest(alignParentTop).getBoundingClientRect().top
|
|
6757
|
+
: alignmentRect.top;
|
|
6758
|
+
let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
|
|
6759
|
+
// constrain
|
|
6760
|
+
popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);
|
|
6761
|
+
popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);
|
|
6762
|
+
popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);
|
|
6763
|
+
let origin = rootEl.offsetParent.getBoundingClientRect();
|
|
6764
|
+
applyStyle(rootEl, {
|
|
6765
|
+
top: popoverTop - origin.top,
|
|
6766
|
+
left: popoverLeft - origin.left,
|
|
6767
|
+
});
|
|
6768
|
+
}
|
|
6769
|
+
}
|
|
6770
|
+
}
|
|
6771
|
+
|
|
6772
|
+
class MorePopover extends DateComponent {
|
|
6773
|
+
constructor() {
|
|
6774
|
+
super(...arguments);
|
|
6775
|
+
this.handleRootEl = (rootEl) => {
|
|
6776
|
+
this.rootEl = rootEl;
|
|
6777
|
+
if (rootEl) {
|
|
6778
|
+
this.context.registerInteractiveComponent(this, {
|
|
6779
|
+
el: rootEl,
|
|
6780
|
+
useEventCenter: false,
|
|
6781
|
+
});
|
|
6782
|
+
}
|
|
6783
|
+
else {
|
|
6784
|
+
this.context.unregisterInteractiveComponent(this);
|
|
6785
|
+
}
|
|
6786
|
+
};
|
|
6787
|
+
}
|
|
6788
|
+
render() {
|
|
6789
|
+
let { options, dateEnv } = this.context;
|
|
6790
|
+
let { props } = this;
|
|
6791
|
+
let { startDate, todayRange, dateProfile } = props;
|
|
6792
|
+
let title = dateEnv.format(startDate, options.dayPopoverFormat);
|
|
6793
|
+
return (_(DayCellContainer, { elRef: this.handleRootEl, date: startDate, dateProfile: dateProfile, todayRange: todayRange }, (InnerContent, renderProps, attrs) => (_(Popover, { elRef: attrs.ref, id: props.id, title: title, attrs: attrs /* TODO: make these time-based when not whole-day? */, className: joinClassNames(attrs.className, // TODO: solve SignalLike type problem
|
|
6794
|
+
'fc-more-popover'), parentEl: props.parentEl, alignEl: props.alignEl, alignParentTop: props.alignParentTop, onClose: props.onClose },
|
|
6795
|
+
hasCustomDayCellContent(options) && (_(InnerContent, { tag: "div", className: 'fc-more-popover-misc' })),
|
|
6796
|
+
props.children))));
|
|
6797
|
+
}
|
|
6798
|
+
queryHit(positionLeft, positionTop, elWidth, elHeight) {
|
|
6799
|
+
let { rootEl, props } = this;
|
|
6800
|
+
if (positionLeft >= 0 && positionLeft < elWidth &&
|
|
6801
|
+
positionTop >= 0 && positionTop < elHeight) {
|
|
6802
|
+
return {
|
|
6803
|
+
dateProfile: props.dateProfile,
|
|
6804
|
+
dateSpan: Object.assign({ allDay: !props.forceTimed, range: {
|
|
6805
|
+
start: props.startDate,
|
|
6806
|
+
end: props.endDate,
|
|
6807
|
+
} }, props.dateSpanProps),
|
|
6808
|
+
dayEl: rootEl,
|
|
6809
|
+
rect: {
|
|
6810
|
+
left: 0,
|
|
6811
|
+
top: 0,
|
|
6812
|
+
right: elWidth,
|
|
6813
|
+
bottom: elHeight,
|
|
6814
|
+
},
|
|
6815
|
+
layer: 1, // important when comparing with hits from other components
|
|
6816
|
+
};
|
|
6817
|
+
}
|
|
6818
|
+
return null;
|
|
6819
|
+
}
|
|
6820
|
+
}
|
|
6821
|
+
|
|
6822
|
+
class MoreLinkContainer extends BaseComponent {
|
|
6823
|
+
constructor() {
|
|
6824
|
+
super(...arguments);
|
|
6825
|
+
this.state = {
|
|
6826
|
+
isPopoverOpen: false,
|
|
6827
|
+
popoverId: getUniqueDomId(),
|
|
6828
|
+
};
|
|
6829
|
+
this.handleLinkEl = (linkEl) => {
|
|
6830
|
+
this.linkEl = linkEl;
|
|
6831
|
+
if (this.props.elRef) {
|
|
6832
|
+
setRef(this.props.elRef, linkEl);
|
|
6833
|
+
}
|
|
6834
|
+
};
|
|
6835
|
+
this.handleClick = (ev) => {
|
|
6836
|
+
let { props, context } = this;
|
|
6837
|
+
let { moreLinkClick } = context.options;
|
|
6838
|
+
let date = computeRange(props).start;
|
|
6839
|
+
function buildPublicSeg(seg) {
|
|
6840
|
+
let { def, instance, range } = seg.eventRange;
|
|
6841
|
+
return {
|
|
6842
|
+
event: new EventImpl(context, def, instance),
|
|
6843
|
+
start: context.dateEnv.toDate(range.start),
|
|
6844
|
+
end: context.dateEnv.toDate(range.end),
|
|
6845
|
+
isStart: seg.isStart,
|
|
6846
|
+
isEnd: seg.isEnd,
|
|
6847
|
+
};
|
|
6848
|
+
}
|
|
6849
|
+
if (typeof moreLinkClick === 'function') {
|
|
6850
|
+
moreLinkClick = moreLinkClick({
|
|
6851
|
+
date,
|
|
6852
|
+
allDay: Boolean(props.allDayDate),
|
|
6853
|
+
allSegs: props.segs.map(buildPublicSeg),
|
|
6854
|
+
hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
|
|
6855
|
+
jsEvent: ev,
|
|
6856
|
+
view: context.viewApi,
|
|
6857
|
+
});
|
|
6858
|
+
}
|
|
6859
|
+
if (!moreLinkClick || moreLinkClick === 'popover') {
|
|
6860
|
+
this.setState({ isPopoverOpen: true });
|
|
6861
|
+
}
|
|
6862
|
+
else if (typeof moreLinkClick === 'string') { // a view name
|
|
6863
|
+
context.calendarApi.zoomTo(date, moreLinkClick);
|
|
6864
|
+
}
|
|
6865
|
+
};
|
|
6866
|
+
this.handlePopoverClose = () => {
|
|
6867
|
+
this.setState({ isPopoverOpen: false });
|
|
6868
|
+
};
|
|
6869
|
+
}
|
|
6870
|
+
render() {
|
|
6871
|
+
let { props, state } = this;
|
|
6872
|
+
return (_(ViewContextType.Consumer, null, (context) => {
|
|
6873
|
+
let { viewApi, options, calendarApi } = context;
|
|
6874
|
+
let { moreLinkText } = options;
|
|
6875
|
+
let moreCnt = props.hiddenSegs.length;
|
|
6876
|
+
let range = computeRange(props);
|
|
6877
|
+
let text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals
|
|
6878
|
+
? moreLinkText.call(calendarApi, moreCnt)
|
|
6879
|
+
: `+${moreCnt} ${moreLinkText}`;
|
|
6880
|
+
let hint = formatWithOrdinals(options.moreLinkHint, [moreCnt], text);
|
|
6881
|
+
let renderProps = {
|
|
6882
|
+
num: moreCnt,
|
|
6883
|
+
shortText: `+${moreCnt}`,
|
|
6884
|
+
text,
|
|
6885
|
+
view: viewApi,
|
|
6886
|
+
};
|
|
6887
|
+
return (_(k$1, null,
|
|
6888
|
+
Boolean(moreCnt) && (_(ContentContainer, { tag: props.tag || 'a', elRef: this.handleLinkEl, className: joinClassNames(props.className, 'fc-more-link'), style: props.style, attrs: Object.assign(Object.assign(Object.assign({}, props.attrs), createAriaClickAttrs(this.handleClick)), { title: hint, 'aria-expanded': state.isPopoverOpen, 'aria-controls': state.isPopoverOpen ? state.popoverId : '' }), renderProps: renderProps, generatorName: "moreLinkContent", customGenerator: options.moreLinkContent, defaultGenerator: props.defaultGenerator || renderMoreLinkInner, classNameGenerator: options.moreLinkClassNames, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, props.children)),
|
|
6889
|
+
state.isPopoverOpen && (_(MorePopover, { id: state.popoverId, startDate: range.start, endDate: range.end, dateProfile: props.dateProfile, todayRange: props.todayRange, dateSpanProps: props.dateSpanProps, parentEl: this.parentEl, alignEl: props.alignElRef ?
|
|
6890
|
+
props.alignElRef.current :
|
|
6891
|
+
this.linkEl, alignParentTop: props.alignParentTop, forceTimed: props.forceTimed, onClose: this.handlePopoverClose }, props.popoverContent()))));
|
|
6892
|
+
}));
|
|
6893
|
+
}
|
|
6894
|
+
componentDidMount() {
|
|
6895
|
+
this.updateParentEl();
|
|
6896
|
+
}
|
|
6897
|
+
componentDidUpdate() {
|
|
6898
|
+
this.updateParentEl();
|
|
6899
|
+
}
|
|
6900
|
+
updateParentEl() {
|
|
6901
|
+
if (this.linkEl) {
|
|
6902
|
+
this.parentEl = this.linkEl.closest('.fc-view-outer'); // HACK. reconsider
|
|
6903
|
+
}
|
|
6904
|
+
}
|
|
6905
|
+
}
|
|
6906
|
+
function renderMoreLinkInner(props) {
|
|
6907
|
+
return props.text;
|
|
6908
|
+
}
|
|
6909
|
+
function computeRange(props) {
|
|
6910
|
+
if (props.allDayDate) {
|
|
6911
|
+
return {
|
|
6912
|
+
start: props.allDayDate,
|
|
6913
|
+
end: addDays(props.allDayDate, 1),
|
|
6914
|
+
};
|
|
6915
|
+
}
|
|
6916
|
+
return {
|
|
6917
|
+
start: computeEarliestStart(props.hiddenSegs),
|
|
6918
|
+
end: computeLatestEnd(props.hiddenSegs),
|
|
6919
|
+
};
|
|
6843
6920
|
}
|
|
6844
6921
|
|
|
6845
6922
|
class ViewContainer extends BaseComponent {
|
|
@@ -6847,17 +6924,11 @@ var FullCalendar = (function (exports) {
|
|
|
6847
6924
|
let { props, context } = this;
|
|
6848
6925
|
let { options } = context;
|
|
6849
6926
|
let renderProps = { view: context.viewApi };
|
|
6850
|
-
return (_(ContentContainer, Object.assign({}, props, {
|
|
6851
|
-
...buildViewClassNames(props.viewSpec),
|
|
6852
|
-
...(props.elClasses || []),
|
|
6853
|
-
], renderProps: renderProps, classNameGenerator: options.viewClassNames, generatorName: undefined, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount }), () => props.children));
|
|
6927
|
+
return (_(ContentContainer, Object.assign({}, props, { tag: props.tag || 'div', className: joinClassNames(props.className, buildViewClassName(props.viewSpec)), renderProps: renderProps, classNameGenerator: options.viewClassNames, generatorName: undefined, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount }), () => props.children));
|
|
6854
6928
|
}
|
|
6855
6929
|
}
|
|
6856
|
-
function
|
|
6857
|
-
return
|
|
6858
|
-
`fc-${viewSpec.type}-view`,
|
|
6859
|
-
'fc-view',
|
|
6860
|
-
];
|
|
6930
|
+
function buildViewClassName(viewSpec) {
|
|
6931
|
+
return `fc-${viewSpec.type}-view fc-view`;
|
|
6861
6932
|
}
|
|
6862
6933
|
|
|
6863
6934
|
const EVENT_SOURCE_REFINERS = {
|
|
@@ -6896,7 +6967,7 @@ var FullCalendar = (function (exports) {
|
|
|
6896
6967
|
success: refined.success,
|
|
6897
6968
|
failure: refined.failure,
|
|
6898
6969
|
publicId: refined.id || '',
|
|
6899
|
-
sourceId: guid(),
|
|
6970
|
+
sourceId: guid$1(),
|
|
6900
6971
|
sourceDefId: metaRes.sourceDefId,
|
|
6901
6972
|
meta: metaRes.meta,
|
|
6902
6973
|
ui: createEventUi(refined, context),
|
|
@@ -6936,7 +7007,7 @@ var FullCalendar = (function (exports) {
|
|
|
6936
7007
|
callback();
|
|
6937
7008
|
}
|
|
6938
7009
|
updateSize() {
|
|
6939
|
-
|
|
7010
|
+
requestAnimationFrame(updateSizeSync);
|
|
6940
7011
|
}
|
|
6941
7012
|
// Options
|
|
6942
7013
|
// -----------------------------------------------------------------------------------------------------------------
|
|
@@ -7344,6 +7415,32 @@ var FullCalendar = (function (exports) {
|
|
|
7344
7415
|
}
|
|
7345
7416
|
}
|
|
7346
7417
|
|
|
7418
|
+
class StickyFooterScrollbar extends BaseComponent {
|
|
7419
|
+
constructor() {
|
|
7420
|
+
super(...arguments);
|
|
7421
|
+
this.rootElRef = m$1();
|
|
7422
|
+
}
|
|
7423
|
+
render() {
|
|
7424
|
+
const { props } = this;
|
|
7425
|
+
// NOTE: we need a wrapper around the Scroller because if scrollbars appear/hide,
|
|
7426
|
+
// the outer dimensions change, but the inner dimensions do not. The Scroller's
|
|
7427
|
+
// dimension-watching, when used in ponyfill-mode, can't fire on border-box change, so we
|
|
7428
|
+
// workaround it by monitoring dimensions of a wrapper instead
|
|
7429
|
+
return (_("div", { ref: this.rootElRef, className: 'fc-sticky-footer-scrollbar' },
|
|
7430
|
+
_(Scroller, { horizontal: true, ref: props.scrollerRef },
|
|
7431
|
+
_("div", { style: { minWidth: props.canvasWidth } }))));
|
|
7432
|
+
}
|
|
7433
|
+
componentDidMount() {
|
|
7434
|
+
this.disconnectHeight = watchHeight(this.rootElRef.current, (height) => {
|
|
7435
|
+
setRef(this.props.scrollbarWidthRef, height);
|
|
7436
|
+
});
|
|
7437
|
+
}
|
|
7438
|
+
componentWillUnmount() {
|
|
7439
|
+
this.disconnectHeight();
|
|
7440
|
+
setRef(this.props.scrollbarWidthRef, null);
|
|
7441
|
+
}
|
|
7442
|
+
}
|
|
7443
|
+
|
|
7347
7444
|
var internal = {
|
|
7348
7445
|
__proto__: null,
|
|
7349
7446
|
BASE_OPTION_DEFAULTS: BASE_OPTION_DEFAULTS,
|
|
@@ -7365,9 +7462,8 @@ var FullCalendar = (function (exports) {
|
|
|
7365
7462
|
compareNumbers: compareNumbers,
|
|
7366
7463
|
enableCursor: enableCursor,
|
|
7367
7464
|
disableCursor: disableCursor,
|
|
7368
|
-
guid: guid,
|
|
7465
|
+
guid: guid$1,
|
|
7369
7466
|
computeVisibleDayRange: computeVisibleDayRange,
|
|
7370
|
-
isMultiDayRange: isMultiDayRange,
|
|
7371
7467
|
diffDates: diffDates,
|
|
7372
7468
|
removeExact: removeExact,
|
|
7373
7469
|
isArraysEqual: isArraysEqual,
|
|
@@ -7386,14 +7482,10 @@ var FullCalendar = (function (exports) {
|
|
|
7386
7482
|
isPropsEqual: isPropsEqual,
|
|
7387
7483
|
compareObjs: compareObjs,
|
|
7388
7484
|
collectFromHash: collectFromHash,
|
|
7389
|
-
findElements: findElements,
|
|
7390
|
-
findDirectChildren: findDirectChildren,
|
|
7391
|
-
removeElement: removeElement,
|
|
7392
7485
|
applyStyle: applyStyle,
|
|
7393
|
-
elementMatches: elementMatches,
|
|
7394
|
-
elementClosest: elementClosest,
|
|
7395
7486
|
getEventTargetViaRoot: getEventTargetViaRoot,
|
|
7396
7487
|
getUniqueDomId: getUniqueDomId,
|
|
7488
|
+
joinClassNames: joinClassNames,
|
|
7397
7489
|
parseClassNames: parseClassNames,
|
|
7398
7490
|
fracToCssDim: fracToCssDim,
|
|
7399
7491
|
createEmptyEventStore: createEmptyEventStore,
|
|
@@ -7403,11 +7495,9 @@ var FullCalendar = (function (exports) {
|
|
|
7403
7495
|
combineEventUis: combineEventUis,
|
|
7404
7496
|
createEventUi: createEventUi,
|
|
7405
7497
|
Splitter: Splitter,
|
|
7406
|
-
|
|
7498
|
+
getDayClassName: getDayClassName,
|
|
7407
7499
|
getDateMeta: getDateMeta,
|
|
7408
|
-
|
|
7409
|
-
setStateDimMap: setStateDimMap,
|
|
7410
|
-
isDimMapsEqual: isDimMapsEqual,
|
|
7500
|
+
getSlotClassName: getSlotClassName,
|
|
7411
7501
|
isDimsEqual: isDimsEqual,
|
|
7412
7502
|
watchSize: watchSize,
|
|
7413
7503
|
watchWidth: watchWidth,
|
|
@@ -7464,11 +7554,8 @@ var FullCalendar = (function (exports) {
|
|
|
7464
7554
|
NamedTimeZoneImpl: NamedTimeZoneImpl,
|
|
7465
7555
|
parseMarker: parse,
|
|
7466
7556
|
SegHierarchy: SegHierarchy,
|
|
7467
|
-
|
|
7468
|
-
getEntrySpanEnd: getEntrySpanEnd,
|
|
7557
|
+
groupIntersectingSegs: groupIntersectingSegs,
|
|
7469
7558
|
binarySearch: binarySearch,
|
|
7470
|
-
groupIntersectingEntries: groupIntersectingEntries,
|
|
7471
|
-
intersectSpans: intersectSpans,
|
|
7472
7559
|
Interaction: Interaction,
|
|
7473
7560
|
interactionSettingsToStore: interactionSettingsToStore,
|
|
7474
7561
|
interactionSettingsStore: interactionSettingsStore,
|
|
@@ -7485,6 +7572,7 @@ var FullCalendar = (function (exports) {
|
|
|
7485
7572
|
getEventRangeMeta: getEventRangeMeta,
|
|
7486
7573
|
buildEventRangeKey: buildEventRangeKey,
|
|
7487
7574
|
getEventRangeAnchorAttrs: getEventRangeAnchorAttrs,
|
|
7575
|
+
getEventKey: getEventKey,
|
|
7488
7576
|
DayTableModel: DayTableModel,
|
|
7489
7577
|
Scroller: Scroller,
|
|
7490
7578
|
getNormalizedScrollX: getNormalizedScrollX,
|
|
@@ -7515,7 +7603,6 @@ var FullCalendar = (function (exports) {
|
|
|
7515
7603
|
BgEvent: BgEvent,
|
|
7516
7604
|
WeekNumberContainer: WeekNumberContainer,
|
|
7517
7605
|
MoreLinkContainer: MoreLinkContainer,
|
|
7518
|
-
computeEarliestSegStart: computeEarliestSegStart,
|
|
7519
7606
|
ViewContainer: ViewContainer,
|
|
7520
7607
|
triggerDateSelect: triggerDateSelect,
|
|
7521
7608
|
getDefaultEventEnd: getDefaultEventEnd,
|
|
@@ -7525,7 +7612,12 @@ var FullCalendar = (function (exports) {
|
|
|
7525
7612
|
buildEventApis: buildEventApis,
|
|
7526
7613
|
buildElAttrs: buildElAttrs,
|
|
7527
7614
|
ContentContainer: ContentContainer,
|
|
7528
|
-
|
|
7615
|
+
renderText: renderText,
|
|
7616
|
+
CustomRenderingStore: CustomRenderingStore,
|
|
7617
|
+
computeEarliestStart: computeEarliestStart,
|
|
7618
|
+
computeLatestEnd: computeLatestEnd,
|
|
7619
|
+
getCoordRangeEnd: getCoordRangeEnd,
|
|
7620
|
+
StickyFooterScrollbar: StickyFooterScrollbar
|
|
7529
7621
|
};
|
|
7530
7622
|
|
|
7531
7623
|
const globalLocales = [];
|
|
@@ -7626,7 +7718,7 @@ var FullCalendar = (function (exports) {
|
|
|
7626
7718
|
// TODO: easier way to add new hooks? need to update a million things
|
|
7627
7719
|
function createPlugin(input) {
|
|
7628
7720
|
return {
|
|
7629
|
-
id: guid(),
|
|
7721
|
+
id: guid$1(),
|
|
7630
7722
|
name: input.name,
|
|
7631
7723
|
premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : undefined,
|
|
7632
7724
|
deps: input.deps || [],
|
|
@@ -7881,7 +7973,7 @@ var FullCalendar = (function (exports) {
|
|
|
7881
7973
|
};
|
|
7882
7974
|
}
|
|
7883
7975
|
function createViewHookComponent(options) {
|
|
7884
|
-
return (viewProps) => (_(ViewContextType.Consumer, null, (context) => (_(ContentContainer, {
|
|
7976
|
+
return (viewProps) => (_(ViewContextType.Consumer, null, (context) => (_(ContentContainer, { tag: "div", className: buildViewClassName(context.viewSpec), renderProps: Object.assign(Object.assign({}, viewProps), { nextDayThreshold: context.options.nextDayThreshold }), generatorName: undefined, customGenerator: options.content, classNameGenerator: options.classNames, didMount: options.didMount, willUnmount: options.willUnmount }))));
|
|
7885
7977
|
}
|
|
7886
7978
|
|
|
7887
7979
|
function buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
|
|
@@ -8101,7 +8193,7 @@ var FullCalendar = (function (exports) {
|
|
|
8101
8193
|
function fetchSource(eventSource, fetchRange, isRefetch, context) {
|
|
8102
8194
|
let { options, calendarApi } = context;
|
|
8103
8195
|
let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
|
|
8104
|
-
let fetchId = guid();
|
|
8196
|
+
let fetchId = guid$1();
|
|
8105
8197
|
sourceDef.fetch({
|
|
8106
8198
|
eventSource,
|
|
8107
8199
|
range: fetchRange,
|
|
@@ -9149,7 +9241,7 @@ var FullCalendar = (function (exports) {
|
|
|
9149
9241
|
render() {
|
|
9150
9242
|
let children = this.props.widgetGroups.map((widgetGroup) => this.renderWidgetGroup(widgetGroup));
|
|
9151
9243
|
return _('div', {
|
|
9152
|
-
className: 'fc-toolbar-
|
|
9244
|
+
className: 'fc-toolbar-section fc-toolbar-' + this.props.name
|
|
9153
9245
|
}, ...children);
|
|
9154
9246
|
}
|
|
9155
9247
|
renderWidgetGroup(widgetGroup) {
|
|
@@ -9168,15 +9260,11 @@ var FullCalendar = (function (exports) {
|
|
|
9168
9260
|
let isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||
|
|
9169
9261
|
(!props.isPrevEnabled && buttonName === 'prev') ||
|
|
9170
9262
|
(!props.isNextEnabled && buttonName === 'next');
|
|
9171
|
-
|
|
9172
|
-
if (isPressed) {
|
|
9173
|
-
buttonClasses.push(theme.getClass('buttonActive'));
|
|
9174
|
-
}
|
|
9175
|
-
children.push(_("button", { type: "button", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, "aria-pressed": isPressed, className: buttonClasses.join(' '), onClick: buttonClick }, buttonText || (buttonIcon ? _("span", { className: buttonIcon, role: "img" }) : '')));
|
|
9263
|
+
children.push(_("button", { type: "button", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, "aria-pressed": isPressed, className: joinClassNames(`fc-${buttonName}-button`, theme.getClassName('button'), isPressed && theme.getClassName('buttonActive')), onClick: buttonClick }, buttonText || (buttonIcon ? _("span", { className: buttonIcon, role: "img" }) : '')));
|
|
9176
9264
|
}
|
|
9177
9265
|
}
|
|
9178
9266
|
if (children.length > 1) {
|
|
9179
|
-
let groupClassName = (isOnlyButtons && theme.
|
|
9267
|
+
let groupClassName = (isOnlyButtons && theme.getClassName('buttonGroup')) || '';
|
|
9180
9268
|
return _('div', { className: groupClassName }, ...children);
|
|
9181
9269
|
}
|
|
9182
9270
|
return children[0];
|
|
@@ -9185,7 +9273,7 @@ var FullCalendar = (function (exports) {
|
|
|
9185
9273
|
|
|
9186
9274
|
class Toolbar extends BaseComponent {
|
|
9187
9275
|
render() {
|
|
9188
|
-
let { model,
|
|
9276
|
+
let { model, className } = this.props;
|
|
9189
9277
|
let forceLtr = false;
|
|
9190
9278
|
let startContent;
|
|
9191
9279
|
let endContent;
|
|
@@ -9205,12 +9293,7 @@ var FullCalendar = (function (exports) {
|
|
|
9205
9293
|
else {
|
|
9206
9294
|
endContent = sectionWidgets.end;
|
|
9207
9295
|
}
|
|
9208
|
-
|
|
9209
|
-
extraClassName || '',
|
|
9210
|
-
'fc-toolbar',
|
|
9211
|
-
forceLtr ? 'fc-toolbar-ltr' : '',
|
|
9212
|
-
];
|
|
9213
|
-
return (_("div", { className: classNames.join(' ') },
|
|
9296
|
+
return (_("div", { className: joinClassNames(className, 'fc-toolbar', forceLtr && 'fc-toolbar-ltr') },
|
|
9214
9297
|
this.renderSection('start', startContent || []),
|
|
9215
9298
|
this.renderSection('center', centerContent || []),
|
|
9216
9299
|
this.renderSection('end', endContent || [])));
|
|
@@ -9233,19 +9316,12 @@ var FullCalendar = (function (exports) {
|
|
|
9233
9316
|
let eventRange = getElEventRange(segEl);
|
|
9234
9317
|
if (eventRange && // might be the <div> surrounding the more link
|
|
9235
9318
|
component.isValidSegDownEl(ev.target)) {
|
|
9236
|
-
// our way to simulate a link click for elements that can't be <a> tags
|
|
9237
|
-
// grab before trigger fired in case trigger trashes DOM thru rerendering
|
|
9238
|
-
let hasUrlContainer = elementClosest(ev.target, '.fc-event-forced-url');
|
|
9239
|
-
let url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';
|
|
9240
9319
|
context.emitter.trigger('eventClick', {
|
|
9241
9320
|
el: segEl,
|
|
9242
9321
|
event: new EventImpl(component.context, eventRange.def, eventRange.instance),
|
|
9243
9322
|
jsEvent: ev,
|
|
9244
9323
|
view: context.viewApi,
|
|
9245
9324
|
});
|
|
9246
|
-
if (url && !ev.defaultPrevented) {
|
|
9247
|
-
window.location.href = url;
|
|
9248
|
-
}
|
|
9249
9325
|
}
|
|
9250
9326
|
};
|
|
9251
9327
|
this.destroy = listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events
|
|
@@ -9302,16 +9378,12 @@ var FullCalendar = (function (exports) {
|
|
|
9302
9378
|
class ViewHarness extends b {
|
|
9303
9379
|
render() {
|
|
9304
9380
|
const { props } = this;
|
|
9305
|
-
return (_("div", { className:
|
|
9306
|
-
'fc-view-
|
|
9307
|
-
props.
|
|
9308
|
-
? 'fc-view-
|
|
9309
|
-
: props.
|
|
9310
|
-
|
|
9311
|
-
: props.aspectRatio != null
|
|
9312
|
-
? 'fc-view-harness-aspectratio'
|
|
9313
|
-
: ''
|
|
9314
|
-
].join(' '), style: {
|
|
9381
|
+
return (_("div", { className: joinClassNames('fc-view-outer', props.height != null
|
|
9382
|
+
? 'fc-view-outer-static'
|
|
9383
|
+
: props.heightLiquid
|
|
9384
|
+
? 'fc-view-outer-liquid'
|
|
9385
|
+
: props.aspectRatio != null
|
|
9386
|
+
&& 'fc-view-outer-aspect-ratio'), style: {
|
|
9315
9387
|
height: props.height,
|
|
9316
9388
|
paddingBottom: props.aspectRatio != null
|
|
9317
9389
|
? `${(1 / props.aspectRatio) * 100}%`
|
|
@@ -9335,7 +9407,10 @@ var FullCalendar = (function (exports) {
|
|
|
9335
9407
|
EventClicking,
|
|
9336
9408
|
EventHovering,
|
|
9337
9409
|
];
|
|
9338
|
-
let interactionClasses = DEFAULT_INTERACTIONS
|
|
9410
|
+
let interactionClasses = DEFAULT_INTERACTIONS;
|
|
9411
|
+
if (!settingsInput.disableHits) {
|
|
9412
|
+
interactionClasses = interactionClasses.concat(this.props.pluginHooks.componentInteractions);
|
|
9413
|
+
}
|
|
9339
9414
|
let interactions = interactionClasses.map((TheInteractionClass) => new TheInteractionClass(settings));
|
|
9340
9415
|
this.interactionsStore[component.uid] = interactions;
|
|
9341
9416
|
interactionSettingsStore[component.uid] = settings;
|
|
@@ -9374,11 +9449,11 @@ var FullCalendar = (function (exports) {
|
|
|
9374
9449
|
}
|
|
9375
9450
|
let viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);
|
|
9376
9451
|
return (_(ViewContextType.Provider, { value: viewContext },
|
|
9377
|
-
toolbarConfig.header && (_(Toolbar, Object.assign({
|
|
9452
|
+
toolbarConfig.header && (_(Toolbar, Object.assign({ className: "fc-header-toolbar", model: toolbarConfig.header }, toolbarProps))),
|
|
9378
9453
|
_(ViewHarness, { height: viewHeight, heightLiquid: viewHeightLiquid, aspectRatio: viewAspectRatio },
|
|
9379
9454
|
this.renderView(props),
|
|
9380
9455
|
this.buildAppendContent()),
|
|
9381
|
-
toolbarConfig.footer && (_(Toolbar, Object.assign({
|
|
9456
|
+
toolbarConfig.footer && (_(Toolbar, Object.assign({ className: "fc-footer-toolbar", model: toolbarConfig.footer }, toolbarProps)))));
|
|
9382
9457
|
}
|
|
9383
9458
|
componentDidMount() {
|
|
9384
9459
|
let { props } = this;
|
|
@@ -9599,7 +9674,7 @@ var FullCalendar = (function (exports) {
|
|
|
9599
9674
|
return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
|
|
9600
9675
|
}
|
|
9601
9676
|
|
|
9602
|
-
const version = '7.0.0-beta.
|
|
9677
|
+
const version = '7.0.0-beta.3';
|
|
9603
9678
|
|
|
9604
9679
|
exports.Calendar = Calendar;
|
|
9605
9680
|
exports.Internal = internal;
|